Test Failure: Transforms/InstCombine/max-of-nots.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define <2 x i32> @umin_of_nots(<2 x i32> %x, <2 x i32> %y) {
%0:
  %notx = xor <2 x i32> %x, { 4294967295, 4294967295 }
  %noty = xor <2 x i32> %y, { 4294967295, 4294967295 }
  %cmp = icmp ult <2 x i32> %notx, %noty
  %min = select <2 x i1> %cmp, <2 x i32> %notx, <2 x i32> %noty
  ret <2 x i32> %min
}
=>
define <2 x i32> @umin_of_nots(<2 x i32> %x, <2 x i32> %y) {
%0:
  %1 = icmp ugt <2 x i32> %x, %y
  %2 = select <2 x i1> %1, <2 x i32> %x, <2 x i32> %y
  %min = xor <2 x i32> %2, { 4294967295, 4294967295 }
  ret <2 x i32> %min
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i32> @smin_of_nots(<2 x i32> %x, <2 x i32> %y) {
%0:
  %notx = xor <2 x i32> %x, { 4294967295, 4294967295 }
  %noty = xor <2 x i32> %y, { 4294967295, 4294967295 }
  %cmp = icmp sle <2 x i32> %notx, %noty
  %min = select <2 x i1> %cmp, <2 x i32> %notx, <2 x i32> %noty
  ret <2 x i32> %min
}
=>
define <2 x i32> @smin_of_nots(<2 x i32> %x, <2 x i32> %y) {
%0:
  %1 = icmp sgt <2 x i32> %x, %y
  %2 = select <2 x i1> %1, <2 x i32> %x, <2 x i32> %y
  %min = xor <2 x i32> %2, { 4294967295, 4294967295 }
  ret <2 x i32> %min
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @compute_min_2(i32 %x, i32 %y) {
%0:
  %not_x = sub i32 4294967295, %x
  %not_y = sub i32 4294967295, %y
  %cmp = icmp sgt i32 %not_x, %not_y
  %not_min = select i1 %cmp, i32 %not_x, i32 %not_y
  %min = sub i32 4294967295, %not_min
  ret i32 %min
}
=>
define i32 @compute_min_2(i32 %x, i32 %y) {
%0:
  %1 = icmp slt i32 %x, %y
  %2 = select i1 %1, i32 %x, i32 %y
  ret i32 %2
}
Transformation seems to be correct!


----------------------------------------
define i8 @umin_not_1_extra_use(i8 %x, i8 %y) {
%0:
  %nx = xor i8 %x, 255
  %ny = xor i8 %y, 255
  %cmpxy = icmp ult i8 %nx, %ny
  %minxy = select i1 %cmpxy, i8 %nx, i8 %ny
  call void @extra_use(i8 %nx)
  ret i8 %minxy
}
=>
define i8 @umin_not_1_extra_use(i8 %x, i8 %y) {
%0:
  %nx = xor i8 %x, 255
  %1 = icmp ugt i8 %y, %x
  %2 = select i1 %1, i8 %y, i8 %x
  %minxy = xor i8 %2, 255
  call void @extra_use(i8 %nx)
  ret i8 %minxy
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i8 @umin_not_2_extra_use(i8 %x, i8 %y) {
%0:
  %nx = xor i8 %x, 255
  %ny = xor i8 %y, 255
  %cmpxy = icmp ult i8 %nx, %ny
  %minxy = select i1 %cmpxy, i8 %nx, i8 %ny
  call void @extra_use(i8 %nx)
  call void @extra_use(i8 %ny)
  ret i8 %minxy
}
=>
define i8 @umin_not_2_extra_use(i8 %x, i8 %y) {
%0:
  %nx = xor i8 %x, 255
  %ny = xor i8 %y, 255
  %cmpxy = icmp ult i8 %nx, %ny
  %minxy = select i1 %cmpxy, i8 %nx, i8 %ny
  call void @extra_use(i8 %nx)
  call void @extra_use(i8 %ny)
  ret i8 %minxy
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define i8 @umin3_not(i8 %x, i8 %y, i8 %z) {
%0:
  %nx = xor i8 %x, 255
  %ny = xor i8 %y, 255
  %nz = xor i8 %z, 255
  %cmpyx = icmp ult i8 %y, %x
  %cmpxz = icmp ult i8 %nx, %nz
  %minxz = select i1 %cmpxz, i8 %nx, i8 %nz
  %cmpyz = icmp ult i8 %ny, %nz
  %minyz = select i1 %cmpyz, i8 %ny, i8 %nz
  %r = select i1 %cmpyx, i8 %minxz, i8 %minyz
  ret i8 %r
}
=>
define i8 @umin3_not(i8 %x, i8 %y, i8 %z) {
%0:
  %1 = icmp ugt i8 %x, %z
  %2 = select i1 %1, i8 %x, i8 %z
  %3 = icmp ugt i8 %2, %y
  %r.v = select i1 %3, i8 %2, i8 %y
  %r = xor i8 %r.v, 255
  ret i8 %r
}
Transformation doesn't verify!
ERROR: Target's return value is more undefined

Example:
i8 %x = #x00 (0)
i8 %y = undef
i8 %z = #xff (255, -1)

Source:
i8 %nx = #xff (255, -1)
i8 %ny = any
i8 %nz = #x00 (0)
i1 %cmpyx = #x0 (0)
i1 %cmpxz = #x0 (0)
i8 %minxz = #x00 (0)
i1 %cmpyz = #x0 (0)
i8 %minyz = #x00 (0)
i8 %r = #x00 (0)

Target:
i1 %1 = #x0 (0)
i8 %2 = #xff (255, -1)
i1 %3 = #x0 (0)
i8 %r.v = #x00 (0)
i8 %r = #xff (255, -1)
Source value: #x00 (0)
Target value: #xff (255, -1)


------------------- SMT STATS -------------------
Num queries: 16
Num invalid: 0
Num skips:   0
Num trivial: 28 (63.6%)
Num timeout: 3 (18.8%)
Num errors:  0 (0.0%)
Num SAT:     6 (37.5%)
Num UNSAT:   7 (43.8%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -S -instcombine
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/max-of-nots.ll

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

 

NOTE: This test would pass if undef didn't exist!

 

<-- Back