Test source: git
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!
+ : '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