Test Failure: Transforms/SLPVectorizer/X86/phi-undef-input.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define i32 @phi3UndefInput(i1 %cond, i8 %arg0, i8 %arg1, i8 %arg2, i8 %arg3) {
%entry:
  br i1 %cond, label %bb2, label %bb3

%bb2:
  br label %bb3

%bb3:
  %phi0 = phi i8 [ %arg0, %bb2 ], [ 0, %entry ]
  %phi1 = phi i8 [ %arg1, %bb2 ], [ undef, %entry ]
  %phi2 = phi i8 [ %arg2, %bb2 ], [ undef, %entry ]
  %phi3 = phi i8 [ %arg3, %bb2 ], [ undef, %entry ]
  %zext0 = zext i8 %phi0 to i32
  %zext1 = zext i8 %phi1 to i32
  %zext2 = zext i8 %phi2 to i32
  %zext3 = zext i8 %phi3 to i32
  %or1 = or i32 %zext0, %zext1
  %or2 = or i32 %or1, %zext2
  %or3 = or i32 %or2, %zext3
  ret i32 %or3
}
=>
define i32 @phi3UndefInput(i1 %cond, i8 %arg0, i8 %arg1, i8 %arg2, i8 %arg3) {
%entry:
  br i1 %cond, label %bb2, label %entry_%bb3

%entry_%bb3:
  br label %bb3

%bb2:
  %0 = insertelement <4 x i8> poison, i8 %arg0, i32 0
  %1 = insertelement <4 x i8> %0, i8 %arg1, i32 1
  %2 = insertelement <4 x i8> %1, i8 %arg2, i32 2
  %3 = insertelement <4 x i8> %2, i8 %arg3, i32 3
  br label %bb3

%bb3:
  %4 = phi <4 x i8> [ %3, %bb2 ], [ { 0, poison, poison, poison }, %entry_%bb3 ]
  %5 = zext <4 x i8> %4 to <4 x i32>
  %6 = reduce_or <4 x i32> %5
  ret i32 %6
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source

Example:
i1 %cond = #x0 (0)
i8 %arg0 = poison
i8 %arg1 = poison
i8 %arg2 = poison
i8 %arg3 = poison

Source:
  >> Jump to %bb3
i8 %phi0 = #x00 (0)
i8 %phi1 = #x00 (0)	[based on undef value]
i8 %phi2 = #x00 (0)	[based on undef value]
i8 %phi3 = #x00 (0)	[based on undef value]
i32 %zext0 = #x00000000 (0)
i32 %zext1 = #x00000000 (0)
i32 %zext2 = #x00000000 (0)
i32 %zext3 = #x00000000 (0)
i32 %or1 = #x00000000 (0)
i32 %or2 = #x00000000 (0)
i32 %or3 = #x00000000 (0)

Target:
  >> Jump to %entry_%bb3
  >> Jump to %bb3
<4 x i8> %4 = < #x00 (0), poison, poison, poison >
<4 x i32> %5 = < #x00000000 (0), poison, poison, poison >
i32 %6 = poison
Source value: #x00000000 (0)
Target value: poison


------------------- SMT STATS -------------------
Num queries: 4
Num invalid: 0
Num skips:   0
Num trivial: 17 (81.0%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     4 (100.0%)
Num UNSAT:   0 (0.0%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -slp-vectorizer -slp-threshold=-1000 -mtriple=x86_64 -S
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/phi-undef-input.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/phi-undef-input.ll

 

<-- Back