Test source: git
Source: <stdin> ERROR: Unsupported instruction: store volatile i32 %C, i32* %P, align 4 ERROR: Unsupported instruction: store volatile i32 %C, i32* %P, align 4 ---------------------------------------- define i32 @test2(* %P) { %0: %V1 = load i32, * %P, align 4 %V2 = load i32, * %P, align 4 %Diff = sub i32 %V1, %V2 ret i32 %Diff } => define i32 @test2(* %P) { %0: %V1 = load i32, * %P, align 4 ret i32 0 } Transformation seems to be correct! ---------------------------------------- define i32 @test2a(* %P, i1 %b) { %0: %V1 = load i32, * %P, align 4 assume i1 %b %V2 = load i32, * %P, align 4 %Diff = sub i32 %V1, %V2 ret i32 %Diff } => define i32 @test2a(* %P, i1 %b) { %0: %V1 = load i32, * %P, align 4 assume i1 %b ret i32 0 } Transformation seems to be correct! ---------------------------------------- define i32 @test3(* %P, i1 %Cond) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: %V2 = load i32, * %P, align 4 %Diff = sub i32 %V1, %V2 ret i32 %Diff %T: store i32 4, * %P, align 4 ret i32 42 } => define i32 @test3(* %P, i1 %Cond) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: ret i32 0 %T: store i32 4, * %P, align 4 ret i32 42 } Transformation seems to be correct! ---------------------------------------- define i32 @test3a(* %P, i1 %Cond, i1 %b) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: assume i1 %b %V2 = load i32, * %P, align 4 %Diff = sub i32 %V1, %V2 ret i32 %Diff %T: store i32 4, * %P, align 4 ret i32 42 } => define i32 @test3a(* %P, i1 %Cond, i1 %b) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: assume i1 %b ret i32 0 %T: store i32 4, * %P, align 4 ret i32 42 } Transformation seems to be correct! ---------------------------------------- define i32 @test4(* %P, i1 %Cond) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: store i32 42, * %P, align 4 %V2 = load i32, * %P, align 4 %Diff = sub i32 %V1, %V2 ret i32 %Diff %T: ret i32 42 } => define i32 @test4(* %P, i1 %Cond) { %0: %V1 = load i32, * %P, align 4 br i1 %Cond, label %T, label %F %F: store i32 42, * %P, align 4 %Diff = sub i32 %V1, 42 ret i32 %Diff %T: ret i32 42 } Transformation seems to be correct! ---------------------------------------- define i32 @test5(* %P) { %0: %V1 = call i32 @func(* %P) nowrite nofree %V2 = call i32 @func(* %P) nowrite nofree %Diff = sub i32 %V1, %V2 ret i32 %Diff } => define i32 @test5(* %P) { %0: %V1 = call i32 @func(* %P) nowrite nofree ret i32 0 } Transformation doesn't verify! ERROR: Value mismatch Example: * %P = poison Source: i32 %V1 = #xffffffff (4294967295, -1) i32 %V2 = #x00000000 (0) i32 %Diff = #xffffffff (4294967295, -1) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 Block 1 > size: 0 align: 256 alloc type: 0 Block 2 > size: 0 align: 2 alloc type: 0 Target: i32 %V1 = #x00000000 (0) Source value: #xffffffff (4294967295, -1) Target value: #x00000000 (0) ------------------- SMT STATS ------------------- Num queries: 14 Num invalid: 0 Num skips: 0 Num trivial: 28 (66.7%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 8 (57.1%) Num UNSAT: 6 (42.9%)
+ : 'RUN: at line 1' + /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/basic.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/basic.ll