Test source: git
Source: <stdin> -- 1. ModuleToFunctionPassAdaptor -- 1. PassManager<Function> : Skipping NOP -- 2. SLPVectorizerPass ---------------------------------------- define <4 x float> @simple_select(<4 x float> %a, <4 x float> %b, <4 x i32> %c) { %0: %c0 = extractelement <4 x i32> %c, i32 0 %c1 = extractelement <4 x i32> %c, i32 1 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %ra = insertelement <4 x float> { poison, poison, undef, undef }, float %s0, i32 0 %rb = insertelement <4 x float> %ra, float %s1, i32 1 ret <4 x float> %rb } Transformation seems to be correct! (syntactically equal) -- 3. SLPVectorizerPass ---------------------------------------- define <4 x float> @simple_select(<4 x float> %a, <4 x float> %b, <4 x i32> %c) { %0: %c0 = extractelement <4 x i32> %c, i32 0 %c1 = extractelement <4 x i32> %c, i32 1 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %ra = insertelement <4 x float> { poison, poison, undef, undef }, float %s0, i32 0 %rb = insertelement <4 x float> %ra, float %s1, i32 1 ret <4 x float> %rb } => define <4 x float> @simple_select(<4 x float> %a, <4 x float> %b, <4 x i32> %c) { %0: %c0 = extractelement <4 x i32> %c, i32 0 %c1 = extractelement <4 x i32> %c, i32 1 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %1 = insertelement <2 x i32> poison, i32 %c0, i32 0 %2 = insertelement <2 x i32> %1, i32 %c1, i32 1 %3 = icmp ne <2 x i32> %2, { 0, 0 } %4 = insertelement <2 x float> poison, float %a0, i32 0 %5 = insertelement <2 x float> %4, float %a1, i32 1 %6 = insertelement <2 x float> poison, float %b0, i32 0 %7 = insertelement <2 x float> %6, float %b1, i32 1 %8 = select <2 x i1> %3, <2 x float> %5, <2 x float> %7 %9 = shufflevector <2 x float> %8, <2 x float> poison, 0, 1, 4294967295, 4294967295 ret <4 x float> %9 } Transformation doesn't verify! (unsound) ERROR: Target is more poisonous than source Example: <4 x float> %a = < poison, poison, poison, poison > <4 x float> %b = < poison, poison, poison, poison > <4 x i32> %c = < poison, poison, poison, poison > Source: i32 %c0 = poison i32 %c1 = poison float %a0 = poison float %a1 = poison float %b0 = poison float %b1 = poison i1 %cmp0 = poison i1 %cmp1 = poison float %s0 = poison float %s1 = poison <4 x float> %ra = < poison, poison, #x00000000 (+0.0) [based on undef value], #x00000000 (+0.0) > <4 x float> %rb = < poison, poison, #x00000000 (+0.0), #x00000000 (+0.0) > Target: i32 %c0 = poison i32 %c1 = poison float %a0 = poison float %a1 = poison float %b0 = poison float %b1 = poison <2 x i32> %1 = < poison, poison > <2 x i32> %2 = < poison, poison > <2 x i1> %3 = < poison, poison > <2 x float> %4 = < poison, poison > <2 x float> %5 = < poison, poison > <2 x float> %6 = < poison, poison > <2 x float> %7 = < poison, poison > <2 x float> %8 = < poison, poison > <4 x float> %9 = < poison, poison, poison, poison > Source value: < poison, poison, #x00000000 (+0.0), #x00000000 (+0.0) > Target value: < poison, poison, poison, poison > Pass: SLPVectorizerPass Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-S' '-passes=slp-vectorizer' '-slp-threshold=0' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' ------------------- SMT STATS ------------------- Num queries: 54 Num invalid: 0 Num skips: 0 Num trivial: 8 (12.9%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 54 (100.0%) Num UNSAT: 0 (0.0%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -S -passes=slp-vectorizer -slp-threshold=0 + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector-const-undef.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector-const-undef.ll