Loading llvm/test/Transforms/GVN/captured-before.ll 0 → 100644 +80 −0 Original line number Diff line number Diff line ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 ; RUN: opt -S -passes=gvn < %s | FileCheck %s declare void @capture(ptr) declare void @some_call() define i32 @test_call_before_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_call_before_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @some_call() ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: ret i32 123 ; %a = alloca i32 store i32 123, ptr %a call void @some_call() %v = load i32, ptr %a call void @capture(ptr %a) ret i32 %v } define i32 @test_call_after_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_call_after_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: call void @some_call() ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a call void @capture(ptr %a) call void @some_call() %v = load i32, ptr %a ret i32 %v } define i32 @test_store_before_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_store_before_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P]], align 8 ; CHECK-NEXT: store i32 42, ptr [[P2]], align 4 ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a %p2 = load ptr, ptr %p store i32 42, ptr %p2 %v = load i32, ptr %a call void @capture(ptr %a) ret i32 %v } define i32 @test_store_after_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_store_after_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P]], align 8 ; CHECK-NEXT: store i32 42, ptr [[P2]], align 4 ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a call void @capture(ptr %a) %p2 = load ptr, ptr %p store i32 42, ptr %p2 %v = load i32, ptr %a ret i32 %v } Loading
llvm/test/Transforms/GVN/captured-before.ll 0 → 100644 +80 −0 Original line number Diff line number Diff line ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 ; RUN: opt -S -passes=gvn < %s | FileCheck %s declare void @capture(ptr) declare void @some_call() define i32 @test_call_before_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_call_before_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @some_call() ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: ret i32 123 ; %a = alloca i32 store i32 123, ptr %a call void @some_call() %v = load i32, ptr %a call void @capture(ptr %a) ret i32 %v } define i32 @test_call_after_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_call_after_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: call void @some_call() ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a call void @capture(ptr %a) call void @some_call() %v = load i32, ptr %a ret i32 %v } define i32 @test_store_before_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_store_before_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P]], align 8 ; CHECK-NEXT: store i32 42, ptr [[P2]], align 4 ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a %p2 = load ptr, ptr %p store i32 42, ptr %p2 %v = load i32, ptr %a call void @capture(ptr %a) ret i32 %v } define i32 @test_store_after_capture(ptr %p) { ; CHECK-LABEL: define i32 @test_store_after_capture( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 123, ptr [[A]], align 4 ; CHECK-NEXT: call void @capture(ptr [[A]]) ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P]], align 8 ; CHECK-NEXT: store i32 42, ptr [[P2]], align 4 ; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: ret i32 [[V]] ; %a = alloca i32 store i32 123, ptr %a call void @capture(ptr %a) %p2 = load ptr, ptr %p store i32 42, ptr %p2 %v = load i32, ptr %a ret i32 %v }