1; RUN: opt < %s -slp-vectorizer -o - -S -slp-threshold=-1000 2 3target datalayout = "e-p:32:32-i64:64-v16:16-v32:32-n16:32:64" 4target triple = "nvptx--nvidiacl" 5 6; CTLZ cannot be vectorized currently because the second argument is a scalar 7; for both the scalar and vector forms of the intrinsic. In the future it 8; should be possible to vectorize such functions. 9; Test causes an assert if LLVM tries to vectorize CTLZ. 10 11define <2 x i8> @cltz_test(<2 x i8> %x) #0 { 12entry: 13 %0 = extractelement <2 x i8> %x, i32 0 14 %call.i = call i8 @llvm.ctlz.i8(i8 %0, i1 false) 15 %vecinit = insertelement <2 x i8> undef, i8 %call.i, i32 0 16 %1 = extractelement <2 x i8> %x, i32 1 17 %call.i4 = call i8 @llvm.ctlz.i8(i8 %1, i1 false) 18 %vecinit2 = insertelement <2 x i8> %vecinit, i8 %call.i4, i32 1 19 ret <2 x i8> %vecinit2 20} 21 22define <2 x i8> @cltz_test2(<2 x i8> %x) #1 { 23entry: 24 %0 = extractelement <2 x i8> %x, i32 0 25 %1 = extractelement <2 x i8> %x, i32 1 26 %call.i = call i8 @llvm.ctlz.i8(i8 %0, i1 false) 27 %call.i4 = call i8 @llvm.ctlz.i8(i8 %1, i1 false) 28 %vecinit = insertelement <2 x i8> undef, i8 %call.i, i32 0 29 %vecinit2 = insertelement <2 x i8> %vecinit, i8 %call.i4, i32 1 30 ret <2 x i8> %vecinit2 31} 32 33declare i8 @llvm.ctlz.i8(i8, i1) #3 34 35attributes #0 = { alwaysinline nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 36attributes #1 = { nounwind readnone } 37