Test source: git
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 @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 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 <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 %tmp.1) { %0: %tmp.1.mask1 = add i32 %tmp.1, 2 %tmp.3 = and i32 %tmp.1.mask1, 4294967294 %tmp.5 = and i32 %tmp.1, 1 %tmp.6 = or i32 %tmp.5, %tmp.3 ret i32 %tmp.6 } => define i32 @test21(i32 %tmp.1) { %0: %tmp.1.mask1 = add i32 %tmp.1, 2 ret i32 %tmp.1.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 @test26(i32 %A, i32 %B) { %0: %C1 = icmp eq i32 %A, 0 %C2 = icmp eq i32 %B, 0 %D = and i1 %C1, %C2 ret i1 %D } => define i1 @test26(i32 %A, i32 %B) { %0: %1 = or i32 %A, %B %2 = icmp eq i32 %1, 0 ret i1 %2 } Transformation seems to be correct! ---------------------------------------- define i1 @test27(* %A, * %B) { %0: %C1 = ptrtoint * %A to i32 %C2 = ptrtoint * %B to i32 %D = or i32 %C1, %C2 %E = icmp eq i32 %D, 0 ret i1 %E } => define i1 @test27(* %A, * %B) { %0: %1 = icmp eq * %A, null %2 = icmp eq * %B, null %E = and i1 %1, %2 ret i1 %E } Transformation doesn't verify! ERROR: Value mismatch Example: * %A = pointer(non-local, block_id=2, offset=-1073741824) * %B = pointer(non-local, block_id=1, offset=-268435456) Source: i32 %C1 = #x00000000 (0) i32 %C2 = #x00000000 (0) i32 %D = #x00000000 (0) i1 %E = #x1 (1) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 32 alloc type: 0 address: 0 Block 1 > size: 210771849 align: 2 alloc type: 0 address: 268435456 Block 2 > size: 1073741823 align: 2 alloc type: 0 address: 1073741824 Target: i1 %1 = #x0 (0) i1 %2 = #x0 (0) i1 %E = #x0 (0) Source value: #x1 (1) Target value: #x0 (0) ------------------- SMT STATS ------------------- Num queries: 31 Num invalid: 0 Num skips: 0 Num trivial: 47 (60.3%) Num timeout: 1 (3.2%) Num errors: 0 (0.0%) Num SAT: 17 (54.8%) Num UNSAT: 13 (41.9%)
+ : 'RUN: at line 2' + /home/nlopes/alive2/scripts/opt-alive.sh -instcombine -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/or.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/InstCombine/or.ll