Test source: git
Source: <stdin> ---------------------------------------- define i1 @and_consts(i32 %k, i32 %c1, i32 %c2) { %0: %t1 = and i32 4, %k %t2 = icmp eq i32 %t1, 0 %t5 = and i32 8, %k %t6 = icmp eq i32 %t5, 0 %or = or i1 %t2, %t6 ret i1 %or } => define i1 @and_consts(i32 %k, i32 %c1, i32 %c2) { %0: %1 = and i32 %k, 12 %2 = icmp ne i32 %1, 12 ret i1 %2 } Transformation seems to be correct! ---------------------------------------- define i1 @and_consts_logical(i32 %k, i32 %c1, i32 %c2) { %0: %t1 = and i32 4, %k %t2 = icmp eq i32 %t1, 0 %t5 = and i32 8, %k %t6 = icmp eq i32 %t5, 0 %or = select i1 %t2, i1 1, i1 %t6 ret i1 %or } => define i1 @and_consts_logical(i32 %k, i32 %c1, i32 %c2) { %0: %1 = and i32 %k, 12 %2 = icmp ne i32 %1, 12 ret i1 %2 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_consts_vector(<2 x i32> %k, <2 x i32> %c1, <2 x i32> %c2) { %0: %t1 = and <2 x i32> { 4, 4 }, %k %t2 = icmp eq <2 x i32> %t1, { 0, 0 } %t5 = and <2 x i32> { 8, 8 }, %k %t6 = icmp eq <2 x i32> %t5, { 0, 0 } %or = or <2 x i1> %t2, %t6 ret <2 x i1> %or } => define <2 x i1> @and_consts_vector(<2 x i32> %k, <2 x i32> %c1, <2 x i32> %c2) { %0: %1 = and <2 x i32> %k, { 12, 12 } %2 = icmp ne <2 x i32> %1, { 12, 12 } ret <2 x i1> %2 } Transformation seems to be correct! ---------------------------------------- define i1 @foo1_and(i32 %k, i32 %c1, i32 %c2) { %0: %t = shl i32 1, %c1 %t4 = shl i32 1, %c2 %t1 = and i32 %t, %k %t2 = icmp eq i32 %t1, 0 %t5 = and i32 %t4, %k %t6 = icmp eq i32 %t5, 0 %or = or i1 %t2, %t6 ret i1 %or } => define i1 @foo1_and(i32 %k, i32 %c1, i32 %c2) { %0: %t = shl i32 1, %c1 %t4 = shl i32 1, %c2 %1 = or i32 %t, %t4 %2 = and i32 %1, %k %3 = icmp ne i32 %2, %1 ret i1 %3 } Transformation seems to be correct! ---------------------------------------- define i1 @foo1_and_logical(i32 %k, i32 %c1, i32 %c2) { %0: %t = shl i32 1, %c1 %t4 = shl i32 1, %c2 %t1 = and i32 %t, %k %t2 = icmp eq i32 %t1, 0 %t5 = and i32 %t4, %k %t6 = icmp eq i32 %t5, 0 %or = select i1 %t2, i1 1, i1 %t6 ret i1 %or } => define i1 @foo1_and_logical(i32 %k, i32 %c1, i32 %c2) { %0: %t = shl i32 1, %c1 %t4 = shl i32 1, %c2 %1 = or i32 %t, %t4 %2 = and i32 %1, %k %3 = icmp ne i32 %2, %1 ret i1 %3 } Transformation doesn't verify! ERROR: Target is more poisonous than source Example: i32 %k = #xfffffffa (4294967290, -6) i32 %c1 = #x00000000 (0) i32 %c2 = poison Source: i32 %t = #x00000001 (1) i32 %t4 = poison i32 %t1 = #x00000000 (0) i1 %t2 = #x1 (1) i32 %t5 = poison i1 %t6 = poison i1 %or = #x1 (1) Target: i32 %t = #x00000001 (1) i32 %t4 = poison i32 %1 = poison i32 %2 = poison i1 %3 = poison Source value: #x1 (1) Target value: poison ------------------- SMT STATS ------------------- Num queries: 16 Num invalid: 0 Num skips: 0 Num trivial: 24 (60.0%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 6 (37.5%) Num UNSAT: 10 (62.5%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -instcombine -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/onehot_merge.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/onehot_merge.ll