Test Failure: Transforms/EarlyCSE/commute.ll

Test source: git

Log:

Source: <stdin>
ERROR: Unsupported instruction:   %x = load volatile i32, i32* %px, align 4
ERROR: Unsupported instruction:   %x = call i16 @llvm.smul.fix.i16(i16 %a, i16 %b, i32 3)
ERROR: Unsupported instruction:   %x = call i16 @llvm.umul.fix.i16(i16 %a, i16 %b, i32 1)
ERROR: Unsupported instruction:   %x = call <3 x i16> @llvm.smul.fix.sat.v3i16(<3 x i16> %a, <3 x i16> %b, i32 2)
ERROR: Unsupported instruction:   %x = call <3 x i16> @llvm.umul.fix.sat.v3i16(<3 x i16> %a, <3 x i16> %b, i32 3)
ERROR: Unsupported instruction:   %x = call i16 @llvm.umul.fix.i16(i16 %a, i16 %b, i32 1)
ERROR: Unsupported instruction:   %x = call i16 @llvm.umul.fix.i16(i16 %a, i16 %b, i32 1)
ERROR: Unsupported instruction:   %x = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c)

----------------------------------------
define void @test1(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fadd float %A, %B
  store float %C, * %PA, align 4
  %D = fadd float %B, %A
  store float %D, * %PB, align 4
  ret void
}
=>
define void @test1(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fadd float %A, %B
  store float %C, * %PA, align 4
  store float %C, * %PB, align 4
  ret void
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define void @test2(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fcmp oeq float %A, %B
  store i1 %C, * %PA, align 1
  %D = fcmp oeq float %B, %A
  store i1 %D, * %PB, align 1
  ret void
}
=>
define void @test2(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fcmp oeq float %A, %B
  store i1 %C, * %PA, align 1
  store i1 %C, * %PB, align 1
  ret void
}
Transformation seems to be correct!


----------------------------------------
define void @test3(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fcmp uge float %A, %B
  store i1 %C, * %PA, align 1
  %D = fcmp ule float %B, %A
  store i1 %D, * %PB, align 1
  ret void
}
=>
define void @test3(float %A, float %B, * %PA, * %PB) {
%0:
  %C = fcmp uge float %A, %B
  store i1 %C, * %PA, align 1
  store i1 %C, * %PB, align 1
  ret void
}
Transformation seems to be correct!


----------------------------------------
define void @test4(i32 %A, i32 %B, * %PA, * %PB) {
%0:
  %C = icmp eq i32 %A, %B
  store i1 %C, * %PA, align 1
  %D = icmp eq i32 %B, %A
  store i1 %D, * %PB, align 1
  ret void
}
=>
define void @test4(i32 %A, i32 %B, * %PA, * %PB) {
%0:
  %C = icmp eq i32 %A, %B
  store i1 %C, * %PA, align 1
  store i1 %C, * %PB, align 1
  ret void
}
Transformation seems to be correct!


----------------------------------------
define void @test5(i32 %A, i32 %B, * %PA, * %PB) {
%0:
  %C = icmp sgt i32 %A, %B
  store i1 %C, * %PA, align 1
  %D = icmp slt i32 %B, %A
  store i1 %D, * %PB, align 1
  ret void
}
=>
define void @test5(i32 %A, i32 %B, * %PA, * %PB) {
%0:
  %C = icmp sgt i32 %A, %B
  store i1 %C, * %PA, align 1
  store i1 %C, * %PB, align 1
  ret void
}
Transformation seems to be correct!


----------------------------------------
define void @test6(float %f, * %p1, * %p2) {
%0:
  %c1 = fcmp ult float %f, %f
  %c2 = fcmp ugt float %f, %f
  store i1 %c1, * %p1, align 1
  store i1 %c2, * %p2, align 1
  ret void
}
=>
define void @test6(float %f, * %p1, * %p2) {
%0:
  %c1 = fcmp ult float %f, %f
  store i1 %c1, * %p1, align 1
  store i1 %c1, * %p2, align 1
  ret void
}
Transformation seems to be correct!


----------------------------------------
define i8 @smin_commute(i8 %a, i8 %b) {
%0:
  %cmp1 = icmp slt i8 %a, %b
  %cmp2 = icmp slt i8 %b, %a
  %m1 = select i1 %cmp1, i8 %a, i8 %b
  %m2 = select i1 %cmp2, i8 %b, i8 %a
  %r = mul i8 %m1, %m2
  ret i8 %r
}
=>
define i8 @smin_commute(i8 %a, i8 %b) {
%0:
  %cmp1 = icmp slt i8 %a, %b
  %cmp2 = icmp slt i8 %b, %a
  %m1 = select i1 %cmp1, i8 %a, i8 %b
  %r = mul i8 %m1, %m1
  ret i8 %r
}
Transformation doesn't verify!
ERROR: Value mismatch

Example:
i8 %a = #x80 (128, -128)
i8 %b = undef

Source:
i1 %cmp1 = any
i1 %cmp2 = #x0 (0)
i8 %m1 = any
i8 %m2 = #x80 (128, -128)
i8 %r = #x00 (0)	[based on undef value]

Target:
i1 %cmp1 = #x0 (0)
i1 %cmp2 = #x0 (0)
i8 %m1 = #x10 (16)
i8 %r = #x40 (64)
Source value: #x00 (0)
Target value: #x40 (64)


------------------- SMT STATS -------------------
Num queries: 20
Num invalid: 0
Num skips:   0
Num trivial: 31 (60.8%)
Num timeout: 1 (5.0%)
Num errors:  0 (0.0%)
Num SAT:     9 (45.0%)
Num UNSAT:   10 (50.0%)

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -S -early-cse -earlycse-debug-hash
+ /home/nlopes/llvm/build/bin/FileCheck --allow-unused-prefixes=false /home/nlopes/llvm/llvm/test/Transforms/EarlyCSE/commute.ll

Alive2: Transform doesn't verify; aborting!
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck --allow-unused-prefixes=false /home/nlopes/llvm/llvm/test/Transforms/EarlyCSE/commute.ll

 

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

 

<-- Back