Test source: git
Source: <stdin> ---------------------------------------- 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 = undef i1 %cmp2 = #x0 (0) i8 %m1 = undef i8 %m2 = #x80 (128, -128) i8 %r = #x00 (0) [based on undef value] Target: i1 %cmp1 = #x0 (0) i1 %cmp2 = #x0 (0) i8 %m1 = #x23 (35) i8 %r = #x01 (1) Source value: #x00 (0) Target value: #x01 (1) ------------------- SMT STATS ------------------- Num queries: 19 Num invalid: 0 Num skips: 0 Num trivial: 25 (56.8%) Num timeout: 1 (5.3%) Num errors: 0 (0.0%) Num SAT: 9 (47.4%) Num UNSAT: 9 (47.4%)
+ : 'RUN: at line 2' + /home/nlopes/alive2/scripts/opt-alive.sh -S -early-cse -earlycse-debug-hash + /home/nlopes/llvm/build/bin/FileCheck /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 /home/nlopes/llvm/llvm/test/Transforms/EarlyCSE/commute.ll
NOTE: This test would pass if undef didn't exist!