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 %c2 = extractelement <4 x i32> %c, i32 2 %c3 = extractelement <4 x i32> %c, i32 3 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %cmp2 = icmp ne i32 %c2, 0 %cmp3 = icmp ne i32 %c3, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %s2 = select i1 %cmp2, float %a2, float %b2 %s3 = select i1 %cmp3, float %a3, float %b3 %ra = insertelement <4 x float> undef, float %s0, i32 0 %rb = insertelement <4 x float> %ra, float %s1, i32 1 %rc = insertelement <4 x float> %rb, float %s2, i32 2 %rd = insertelement <4 x float> %rc, float %s3, i32 3 ret <4 x float> %rd } 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 %c2 = extractelement <4 x i32> %c, i32 2 %c3 = extractelement <4 x i32> %c, i32 3 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %cmp2 = icmp ne i32 %c2, 0 %cmp3 = icmp ne i32 %c3, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %s2 = select i1 %cmp2, float %a2, float %b2 %s3 = select i1 %cmp3, float %a3, float %b3 %ra = insertelement <4 x float> undef, float %s0, i32 0 %rb = insertelement <4 x float> %ra, float %s1, i32 1 %rc = insertelement <4 x float> %rb, float %s2, i32 2 %rd = insertelement <4 x float> %rc, float %s3, i32 3 ret <4 x float> %rd } => define <4 x float> @simple_select(<4 x float> %a, <4 x float> %b, <4 x i32> %c) { %0: %1 = icmp ne <4 x i32> %c, { 0, 0, 0, 0 } %2 = select <4 x i1> %1, <4 x float> %a, <4 x float> %b ret <4 x float> %2 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 4. PassManager<Function> : Skipping NOP -- 5. PassManager<Function> : Skipping NOP -- 6. SLPVectorizerPass ---------------------------------------- define <8 x float> @simple_select2(<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 %c2 = extractelement <4 x i32> %c, i32 2 %c3 = extractelement <4 x i32> %c, i32 3 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %cmp2 = icmp ne i32 %c2, 0 %cmp3 = icmp ne i32 %c3, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %s2 = select i1 %cmp2, float %a2, float %b2 %s3 = select i1 %cmp3, float %a3, float %b3 %ra = insertelement <8 x float> undef, float %s0, i32 0 %rb = insertelement <8 x float> %ra, float %s1, i32 2 %rc = insertelement <8 x float> %rb, float %s2, i32 4 %rd = insertelement <8 x float> %rc, float %s3, i32 7 ret <8 x float> %rd } Transformation seems to be correct! (syntactically equal) -- 7. SLPVectorizerPass ---------------------------------------- define <8 x float> @simple_select2(<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 %c2 = extractelement <4 x i32> %c, i32 2 %c3 = extractelement <4 x i32> %c, i32 3 %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %cmp0 = icmp ne i32 %c0, 0 %cmp1 = icmp ne i32 %c1, 0 %cmp2 = icmp ne i32 %c2, 0 %cmp3 = icmp ne i32 %c3, 0 %s0 = select i1 %cmp0, float %a0, float %b0 %s1 = select i1 %cmp1, float %a1, float %b1 %s2 = select i1 %cmp2, float %a2, float %b2 %s3 = select i1 %cmp3, float %a3, float %b3 %ra = insertelement <8 x float> undef, float %s0, i32 0 %rb = insertelement <8 x float> %ra, float %s1, i32 2 %rc = insertelement <8 x float> %rb, float %s2, i32 4 %rd = insertelement <8 x float> %rc, float %s3, i32 7 ret <8 x float> %rd } => define <8 x float> @simple_select2(<4 x float> %a, <4 x float> %b, <4 x i32> %c) { %0: %1 = icmp ne <4 x i32> %c, { 0, 0, 0, 0 } %2 = select <4 x i1> %1, <4 x float> %a, <4 x float> %b %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 1, 4294967295, 2, 4294967295, 4294967295, 3 ret <8 x float> %3 } 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 i32 %c2 = poison i32 %c3 = poison float %a0 = poison float %a1 = poison float %a2 = poison float %a3 = poison float %b0 = poison float %b1 = poison float %b2 = poison float %b3 = poison i1 %cmp0 = poison i1 %cmp1 = poison i1 %cmp2 = poison i1 %cmp3 = poison float %s0 = poison float %s1 = poison float %s2 = poison float %s3 = poison <8 x float> %ra = < poison, #x00000000 (+0.0) [based on undef value], #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0) > <8 x float> %rb = < poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0) > <8 x float> %rc = < poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0) > <8 x float> %rd = < poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), #x00000000 (+0.0), poison > Target: <4 x i1> %1 = < poison, poison, poison, poison > <4 x float> %2 = < poison, poison, poison, poison > <8 x float> %3 = < poison, poison, poison, poison, poison, poison, poison, poison > Source value: < poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), poison, #x00000000 (+0.0), #x00000000 (+0.0), poison > Target value: < poison, poison, poison, poison, 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=-10000' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' ------------------- SMT STATS ------------------- Num queries: 72 Num invalid: 0 Num skips: 0 Num trivial: 30 (29.4%) Num timeout: 1 (1.4%) Num errors: 0 (0.0%) Num SAT: 69 (95.8%) Num UNSAT: 2 (2.8%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll --check-prefixes=CHECK,THRESHOLD + /home/nlopes/alive2/build/opt-alive.sh -S -passes=slp-vectorizer -slp-threshold=-10000 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.ll --check-prefixes=CHECK,THRESHOLD