Test Failure: Transforms/SLPVectorizer/X86/insert-element-build-vector.ll

Test source: git

Log:

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!

stderr:

+ : '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

 

<-- Back