Test Failure: Transforms/InstCombine/or.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define i32 @test12(i32 %A) {
%0:
  %B = or i32 %A, 4
  %C = and i32 %B, 8
  ret i32 %C
}
=>
define i32 @test12(i32 %A) {
%0:
  %C = and i32 %A, 8
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @test13(i32 %A) {
%0:
  %B = or i32 %A, 12
  %C = and i32 %B, 8
  ret i32 %C
}
=>
define i32 @test13(i32 %A) {
%0:
  ret i32 8
}
Transformation seems to be correct!


----------------------------------------
define i1 @test14(i32 %A, i32 %B) {
%0:
  %C1 = icmp ult i32 %A, %B
  %C2 = icmp ugt i32 %A, %B
  %D = or i1 %C1, %C2
  ret i1 %D
}
=>
define i1 @test14(i32 %A, i32 %B) {
%0:
  %1 = icmp ne i32 %A, %B
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define i1 @test14_logical(i32 %A, i32 %B) {
%0:
  %C1 = icmp ult i32 %A, %B
  %C2 = icmp ugt i32 %A, %B
  %D = select i1 %C1, i1 1, i1 %C2
  ret i1 %D
}
=>
define i1 @test14_logical(i32 %A, i32 %B) {
%0:
  %1 = icmp ne i32 %A, %B
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define i1 @test15(i32 %A, i32 %B) {
%0:
  %C1 = icmp ult i32 %A, %B
  %C2 = icmp eq i32 %A, %B
  %D = or i1 %C1, %C2
  ret i1 %D
}
=>
define i1 @test15(i32 %A, i32 %B) {
%0:
  %1 = icmp ule i32 %A, %B
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define i1 @test15_logical(i32 %A, i32 %B) {
%0:
  %C1 = icmp ult i32 %A, %B
  %C2 = icmp eq i32 %A, %B
  %D = select i1 %C1, i1 1, i1 %C2
  ret i1 %D
}
=>
define i1 @test15_logical(i32 %A, i32 %B) {
%0:
  %1 = icmp ule i32 %A, %B
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define i32 @test16(i32 %A) {
%0:
  %B = and i32 %A, 1
  %C = and i32 %A, 4294967294
  %D = or i32 %B, %C
  ret i32 %D
}
=>
define i32 @test16(i32 %A) {
%0:
  ret i32 %A
}
Transformation seems to be correct!


----------------------------------------
define i32 @test17(i32 %A) {
%0:
  %B = and i32 %A, 1
  %C = and i32 %A, 4
  %D = or i32 %B, %C
  ret i32 %D
}
=>
define i32 @test17(i32 %A) {
%0:
  %D = and i32 %A, 5
  ret i32 %D
}
Transformation seems to be correct!


----------------------------------------
define i1 @test18(i32 %A) {
%0:
  %B = icmp sge i32 %A, 100
  %C = icmp slt i32 %A, 50
  %D = or i1 %B, %C
  ret i1 %D
}
=>
define i1 @test18(i32 %A) {
%0:
  %A.off = add i32 %A, 4294967246
  %1 = icmp ugt i32 %A.off, 49
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define i1 @test18_logical(i32 %A) {
%0:
  %B = icmp sge i32 %A, 100
  %C = icmp slt i32 %A, 50
  %D = select i1 %B, i1 1, i1 %C
  ret i1 %D
}
=>
define i1 @test18_logical(i32 %A) {
%0:
  %A.off = add i32 %A, 4294967246
  %1 = icmp ugt i32 %A.off, 49
  ret i1 %1
}
Transformation seems to be correct!


----------------------------------------
define <2 x i1> @test18vec(<2 x i32> %A) {
%0:
  %B = icmp sge <2 x i32> %A, { 100, 100 }
  %C = icmp slt <2 x i32> %A, { 50, 50 }
  %D = or <2 x i1> %B, %C
  ret <2 x i1> %D
}
=>
define <2 x i1> @test18vec(<2 x i32> %A) {
%0:
  %B = icmp sgt <2 x i32> %A, { 99, 99 }
  %C = icmp slt <2 x i32> %A, { 50, 50 }
  %D = or <2 x i1> %B, %C
  ret <2 x i1> %D
}
Transformation seems to be correct!


----------------------------------------
define i32 @test20(i32 %x) {
%0:
  %y = and i32 %x, 123
  %z = or i32 %y, %x
  ret i32 %z
}
=>
define i32 @test20(i32 %x) {
%0:
  ret i32 %x
}
Transformation seems to be correct!


----------------------------------------
define i32 @test21(i32 %t1) {
%0:
  %t1.mask1 = add i32 %t1, 2
  %t3 = and i32 %t1.mask1, 4294967294
  %t5 = and i32 %t1, 1
  %t6 = or i32 %t5, %t3
  ret i32 %t6
}
=>
define i32 @test21(i32 %t1) {
%0:
  %t1.mask1 = add i32 %t1, 2
  ret i32 %t1.mask1
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @test22(i32 %B) {
%0:
  %ELIM41 = and i32 %B, 1
  %ELIM7 = and i32 %B, 4294967294
  %ELIM5 = or i32 %ELIM41, %ELIM7
  ret i32 %ELIM5
}
=>
define i32 @test22(i32 %B) {
%0:
  ret i32 %B
}
Transformation seems to be correct!


----------------------------------------
define i16 @test23(i16 %A) {
%0:
  %B = lshr i16 %A, 1
  %C = or i16 %B, 32768
  %D = xor i16 %C, 8193
  ret i16 %D
}
=>
define i16 @test23(i16 %A) {
%0:
  %B = lshr i16 %A, 1
  %D = xor i16 %B, 40961
  ret i16 %D
}
Transformation seems to be correct!


----------------------------------------
define <2 x i16> @test23vec(<2 x i16> %A) {
%0:
  %B = lshr <2 x i16> %A, { 1, 1 }
  %C = or <2 x i16> %B, { 32768, 32768 }
  %D = xor <2 x i16> %C, { 8193, 8193 }
  ret <2 x i16> %D
}
=>
define <2 x i16> @test23vec(<2 x i16> %A) {
%0:
  %B = lshr <2 x i16> %A, { 1, 1 }
  %D = xor <2 x i16> %B, { 40961, 40961 }
  ret <2 x i16> %D
}
Transformation seems to be correct!


----------------------------------------
define i1 @test25(i32 %A, i32 %B) {
%0:
  %C = icmp eq i32 %A, 0
  %D = icmp eq i32 %B, 57
  %E = or i1 %C, %D
  %F = xor i1 %E, 1
  ret i1 %F
}
=>
define i1 @test25(i32 %A, i32 %B) {
%0:
  %C = icmp ne i32 %A, 0
  %D = icmp ne i32 %B, 57
  %F = and i1 %C, %D
  ret i1 %F
}
Transformation seems to be correct!


----------------------------------------
define i1 @test25_logical(i32 %A, i32 %B) {
%0:
  %C = icmp eq i32 %A, 0
  %D = icmp eq i32 %B, 57
  %E = select i1 %C, i1 1, i1 %D
  %F = xor i1 %E, 1
  ret i1 %F
}
=>
define i1 @test25_logical(i32 %A, i32 %B) {
%0:
  %C = icmp ne i32 %A, 0
  %D = icmp ne i32 %B, 57
  %F = and i1 %C, %D
  ret i1 %F
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source

Example:
i32 %A = #x00000000 (0)
i32 %B = poison

Source:
i1 %C = #x1 (1)
i1 %D = poison
i1 %E = #x1 (1)
i1 %F = #x0 (0)

Target:
i1 %C = #x0 (0)
i1 %D = poison
i1 %F = poison
Source value: #x0 (0)
Target value: poison


------------------- SMT STATS -------------------
Num queries: 54
Num invalid: 0
Num skips:   0
Num trivial: 74 (57.8%)
Num timeout: 1 (1.9%)
Num errors:  0 (0.0%)
Num SAT:     19 (35.2%)
Num UNSAT:   34 (63.0%)
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/or.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/or.ll

 

<-- Back