Test Failure: Transforms/InstCombine/onehot_merge.ll

Test source: git

Log:

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!

stderr:

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

 

<-- Back