Test source: git
Source: <stdin> -- 1. ModuleToFunctionPassAdaptor ERROR: Unsupported instruction: tail call void @llvm.memcpy.p0.p1.i64(ptr %A, ptr addrspace(1) @GCst_as1, i64 ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ERROR: Unsupported instruction: %tmp6.1 = load atomic i8, ptr @global acquire, align 4 -- 1. PassManager<Function> : Skipping NOP -- 2. GVNPass ---------------------------------------- define i32 @test0(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load i32, ptr %P, align 4 ret i32 %A } Transformation seems to be correct! (syntactically equal) -- 3. GVNPass ---------------------------------------- define i32 @test0(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load i32, ptr %P, align 4 ret i32 %A } => define i32 @test0(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 ret i32 %V } Transformation seems to be correct! -- 4. DCEPass ---------------------------------------- define i32 @test0(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 ret i32 %V } Transformation seems to be correct! (syntactically equal) -- 5. DCEPass ---------------------------------------- define i32 @test0(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 ret i32 %V } Transformation seems to be correct! (syntactically equal) -- 6. PassManager<Function> : Skipping NOP -- 7. PassManager<Function> : Skipping NOP -- 8. GVNPass ---------------------------------------- define i8 @crash0({i32, i32} %A, ptr %P) { #0: store {i32, i32} %A, ptr %P, align 4 %Y = load i8, ptr %P, align 1 ret i8 %Y } Transformation seems to be correct! (syntactically equal) -- 9. GVNPass ---------------------------------------- define i8 @crash0({i32, i32} %A, ptr %P) { #0: store {i32, i32} %A, ptr %P, align 4 %Y = load i8, ptr %P, align 1 ret i8 %Y } Transformation seems to be correct! (syntactically equal) -- 10. DCEPass ---------------------------------------- define i8 @crash0({i32, i32} %A, ptr %P) { #0: store {i32, i32} %A, ptr %P, align 4 %Y = load i8, ptr %P, align 1 ret i8 %Y } Transformation seems to be correct! (syntactically equal) -- 11. DCEPass ---------------------------------------- define i8 @crash0({i32, i32} %A, ptr %P) { #0: store {i32, i32} %A, ptr %P, align 4 %Y = load i8, ptr %P, align 1 ret i8 %Y } Transformation seems to be correct! (syntactically equal) -- 12. PassManager<Function> : Skipping NOP -- 13. PassManager<Function> : Skipping NOP -- 14. GVNPass ---------------------------------------- declare void @helper() @helper = constant ? bytes, align 8 define void @crash1() { #0: memcpy ptr undef align 1, ptr undef align 1, i64 undef %ttmp = load i8, ptr @helper, align 1 %x = icmp eq i8 %ttmp, 15 ret void } Transformation seems to be correct! (syntactically equal) -- 15. GVNPass ---------------------------------------- declare void @helper() @helper = constant ? bytes, align 8 define void @crash1() { #0: memcpy ptr undef align 1, ptr undef align 1, i64 undef %ttmp = load i8, ptr @helper, align 1 %x = icmp eq i8 %ttmp, 15 ret void } Transformation seems to be correct! (syntactically equal) -- 16. DCEPass ---------------------------------------- declare void @helper() @helper = constant ? bytes, align 8 define void @crash1() { #0: memcpy ptr undef align 1, ptr undef align 1, i64 undef %ttmp = load i8, ptr @helper, align 1 %x = icmp eq i8 %ttmp, 15 ret void } Transformation seems to be correct! (syntactically equal) -- 17. DCEPass ---------------------------------------- declare void @helper() @helper = constant ? bytes, align 8 define void @crash1() { #0: memcpy ptr undef align 1, ptr undef align 1, i64 undef %ttmp = load i8, ptr @helper, align 8 ret void } => @helper = constant ? bytes, align 8 define void @crash1() { #0: memcpy ptr undef align 1, ptr undef align 1, i64 undef ret void } **************************************** WARNING: Source function is always UB. It can be refined by any target function. Please make sure this is what you wanted. **************************************** Transformation seems to be correct! -- 18. PassManager<Function> : Skipping NOP -- 19. PassManager<Function> : Skipping NOP -- 20. GVNPass ---------------------------------------- define float @coerce_mustalias1(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } Transformation seems to be correct! (syntactically equal) -- 21. GVNPass ---------------------------------------- define float @coerce_mustalias1(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } => define float @coerce_mustalias1(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = bitcast i32 %V to float ret float %#1 } Transformation seems to be correct! -- 22. DCEPass ---------------------------------------- define float @coerce_mustalias1(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = bitcast i32 %V to float ret float %#1 } Transformation seems to be correct! (syntactically equal) -- 23. DCEPass ---------------------------------------- define float @coerce_mustalias1(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = bitcast i32 %V to float ret float %#1 } Transformation seems to be correct! (syntactically equal) -- 24. PassManager<Function> : Skipping NOP -- 25. PassManager<Function> : Skipping NOP -- 26. GVNPass ---------------------------------------- define float @coerce_mustalias2(ptr %V, ptr %P) { #0: store ptr %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } Transformation seems to be correct! (syntactically equal) -- 27. GVNPass ---------------------------------------- define float @coerce_mustalias2(ptr %V, ptr %P) { #0: store ptr %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } => define float @coerce_mustalias2(ptr %V, ptr %P) { #0: store ptr %V, ptr %P, align 4 %#1 = ptrtoint ptr %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 28. DCEPass ---------------------------------------- define float @coerce_mustalias2(ptr %V, ptr %P) { #0: store ptr %V, ptr %P, align 4 %#1 = ptrtoint ptr %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation seems to be correct! (syntactically equal) -- 29. DCEPass ---------------------------------------- define float @coerce_mustalias2(ptr %V, ptr %P) { #0: store ptr %V, ptr %P, align 4 %#1 = ptrtoint ptr %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation seems to be correct! (syntactically equal) -- 30. PassManager<Function> : Skipping NOP -- 31. PassManager<Function> : Skipping NOP -- 32. GVNPass ---------------------------------------- define ptr @coerce_mustalias3(float %V, ptr %P) { #0: store float %V, ptr %P, align 4 %A = load ptr, ptr %P, align 4 ret ptr %A } Transformation seems to be correct! (syntactically equal) -- 33. GVNPass ---------------------------------------- define ptr @coerce_mustalias3(float %V, ptr %P) { #0: store float %V, ptr %P, align 4 %A = load ptr, ptr %P, align 4 ret ptr %A } => define ptr @coerce_mustalias3(float %V, ptr %P) { #0: store float %V, ptr %P, align 4 %#1 = bitcast float %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! -- 34. DCEPass ---------------------------------------- define ptr @coerce_mustalias3(float %V, ptr %P) { #0: store float %V, ptr %P, align 4 %#1 = bitcast float %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! (syntactically equal) -- 35. DCEPass ---------------------------------------- define ptr @coerce_mustalias3(float %V, ptr %P) { #0: store float %V, ptr %P, align 4 %#1 = bitcast float %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! (syntactically equal) -- 36. PassManager<Function> : Skipping NOP -- 37. PassManager<Function> : Skipping NOP -- 38. GVNPass ---------------------------------------- define float @coerce_mustalias4(ptr %P, i1 %cond) { #0: %A = load i32, ptr %P, align 4 %B = load float, ptr %P, align 4 br i1 %cond, label %T, label %F F: %X = bitcast i32 %A to float ret float %X T: ret float %B } Transformation seems to be correct! (syntactically equal) -- 39. GVNPass ---------------------------------------- define float @coerce_mustalias4(ptr %P, i1 %cond) { #0: %A = load i32, ptr %P, align 4 %B = load float, ptr %P, align 4 br i1 %cond, label %T, label %F F: %X = bitcast i32 %A to float ret float %X T: ret float %B } => define float @coerce_mustalias4(ptr %P, i1 %cond) { #0: %A = load i32, ptr %P, align 4 %#1 = bitcast i32 %A to float br i1 %cond, label %T, label %F F: ret float %#1 T: ret float %#1 } Transformation seems to be correct! -- 40. DCEPass ---------------------------------------- define float @coerce_mustalias4(ptr %P, i1 %cond) { #0: %A = load i32, ptr %P, align 4 %#1 = bitcast i32 %A to float br i1 %cond, label %T, label %F F: ret float %#1 T: ret float %#1 } Transformation seems to be correct! (syntactically equal) -- 41. DCEPass ---------------------------------------- define float @coerce_mustalias4(ptr %P, i1 %cond) { #0: %A = load i32, ptr %P, align 4 %#1 = bitcast i32 %A to float br i1 %cond, label %T, label %F F: ret float %#1 T: ret float %#1 } Transformation seems to be correct! (syntactically equal) -- 42. PassManager<Function> : Skipping NOP -- 43. PassManager<Function> : Skipping NOP -- 44. GVNPass ---------------------------------------- define i8 @coerce_mustalias5(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load i8, ptr %P, align 1 ret i8 %A } Transformation seems to be correct! (syntactically equal) -- 45. GVNPass ---------------------------------------- define i8 @coerce_mustalias5(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %A = load i8, ptr %P, align 1 ret i8 %A } => define i8 @coerce_mustalias5(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = trunc i32 %V to i8 ret i8 %#1 } Transformation seems to be correct! -- 46. DCEPass ---------------------------------------- define i8 @coerce_mustalias5(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = trunc i32 %V to i8 ret i8 %#1 } Transformation seems to be correct! (syntactically equal) -- 47. DCEPass ---------------------------------------- define i8 @coerce_mustalias5(i32 %V, ptr %P) { #0: store i32 %V, ptr %P, align 4 %#1 = trunc i32 %V to i8 ret i8 %#1 } Transformation seems to be correct! (syntactically equal) -- 48. PassManager<Function> : Skipping NOP -- 49. PassManager<Function> : Skipping NOP -- 50. GVNPass ---------------------------------------- define float @coerce_mustalias6(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } Transformation seems to be correct! (syntactically equal) -- 51. GVNPass ---------------------------------------- define float @coerce_mustalias6(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %A = load float, ptr %P, align 4 ret float %A } => define float @coerce_mustalias6(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 52. DCEPass ---------------------------------------- define float @coerce_mustalias6(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation seems to be correct! (syntactically equal) -- 53. DCEPass ---------------------------------------- define float @coerce_mustalias6(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = bitcast i32 %#1 to float ret float %#2 } Transformation seems to be correct! (syntactically equal) -- 54. PassManager<Function> : Skipping NOP -- 55. PassManager<Function> : Skipping NOP -- 56. GVNPass ---------------------------------------- define ptr @coerce_mustalias7(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %A = load ptr, ptr %P, align 4 ret ptr %A } Transformation seems to be correct! (syntactically equal) -- 57. GVNPass ---------------------------------------- define ptr @coerce_mustalias7(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %A = load ptr, ptr %P, align 4 ret ptr %A } => define ptr @coerce_mustalias7(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! -- 58. DCEPass ---------------------------------------- define ptr @coerce_mustalias7(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! (syntactically equal) -- 59. DCEPass ---------------------------------------- define ptr @coerce_mustalias7(i64 %V, ptr %P) { #0: store i64 %V, ptr %P, align 4 %#1 = trunc i64 %V to i32 %#2 = int2ptr i32 %#1 to ptr ret ptr %#2 } Transformation seems to be correct! (syntactically equal) -- 60. PassManager<Function> : Skipping NOP -- 61. PassManager<Function> : Skipping NOP -- 62. GVNPass ---------------------------------------- define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 %arrayidx = gep inbounds ptr %A, 2 x i64 42 %ttmp2 = load i16, ptr %arrayidx, align 2 ret i16 %ttmp2 } Transformation seems to be correct! (syntactically equal) -- 63. GVNPass ---------------------------------------- define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 %arrayidx = gep inbounds ptr %A, 2 x i64 42 %ttmp2 = load i16, ptr %arrayidx, align 2 ret i16 %ttmp2 } => define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 ret i16 257 } Transformation seems to be correct! -- 64. DCEPass ---------------------------------------- define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 %arrayidx = gep inbounds ptr %A, 2 x i64 42 ret i16 257 } Transformation seems to be correct! (syntactically equal) -- 65. DCEPass ---------------------------------------- define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 ret i16 257 } => define i16 @memset_to_i16_local(ptr %A) signext { entry: memset ptr %A align 1, i8 1, i64 200 ret i16 257 } Transformation seems to be correct! -- 66. PassManager<Function> : Skipping NOP -- 67. PassManager<Function> : Skipping NOP -- 68. GVNPass ---------------------------------------- define float @memset_to_float_local(ptr %A, i8 %Val) { entry: memset ptr %A align 1, i8 %Val, i64 400 %arrayidx = gep inbounds ptr %A, 4 x i64 42 %ttmp2 = load float, ptr %arrayidx, align 4 ret float %ttmp2 } Transformation seems to be correct! (syntactically equal) -- 69. GVNPass ---------------------------------------- define float @memset_to_float_local(ptr %A, i8 %Val) { entry: memset ptr %A align 1, i8 %Val, i64 400 %arrayidx = gep inbounds ptr %A, 4 x i64 42 %ttmp2 = load float, ptr %arrayidx, align 4 ret float %ttmp2 } => define float @memset_to_float_local(ptr %A, i8 %Val) { entry: memset ptr %A align 1, i8 %Val, i64 400 %#0 = zext i8 %Val to i32 %#1 = shl i32 %#0, 8 %#2 = or i32 %#0, %#1 %#3 = shl i32 %#2, 16 %#4 = or i32 %#2, %#3 %#5 = bitcast i32 %#4 to float ret float %#5 } Transformation doesn't verify! (unsound) ERROR: Value mismatch Example: ptr %A = pointer(non-local, block_id=1, offset=0) / Address=#x008 i8 %Val = undef Source: ptr %arrayidx = pointer(non-local, block_id=1, offset=168) / Address=#x0b0 float %ttmp2 = #x00000000 (+0.0) [based on undef value] SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 alive: false address: 0 Block 1 > size: 2050 align: 8 alloc type: 0 alive: true address: 8 Target: i32 %#0 = #x00000000 (0) i32 %#1 = #x00000000 (0) i32 %#2 = #x00000000 (0) i32 %#3 = #x00000000 (0) i32 %#4 = #x00000800 (2048) float %#5 = #x00000800 (0.000000000000?) Source value: #x00000000 (+0.0) Target value: #x00000800 (0.000000000000?) Pass: GVNPass Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-data-layout=e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32' '-passes=gvn,dce' '-enable-split-backedge-in-load-pre' '-S' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' Wrote bitcode to: "/home/nlopes/alive2/build/logs/in_jZqvUTqO_Pc9d.bc" ------------------- SMT STATS ------------------- Num queries: 80 Num invalid: 0 Num skips: 0 Num trivial: 50 (38.5%) Num timeout: 2 (2.5%) Num errors: 0 (0.0%) Num SAT: 38 (47.5%) Num UNSAT: 40 (50.0%) Alive2: Transform doesn't verify; aborting!
RUN: at line 2: /home/nlopes/alive2/build/opt-alive.sh < /bitbucket/nlopes/llvm/llvm/test/Transforms/GVN/PRE/rle.ll -data-layout="e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32" -passes=gvn,dce -enable-split-backedge-in-load-pre -S | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/GVN/PRE/rle.ll --check-prefixes=CHECK,LE + /home/nlopes/alive2/build/opt-alive.sh -data-layout=e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32 -passes=gvn,dce -enable-split-backedge-in-load-pre -S + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/GVN/PRE/rle.ll --check-prefixes=CHECK,LE FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/GVN/PRE/rle.ll --check-prefixes=CHECK,LE
NOTE: This test would pass if undef didn't exist!