diff options
author | Stephen Hines <srhines@google.com> | 2015-04-01 18:49:24 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-01 18:49:26 +0000 |
commit | 3fa16bd6062e23bcdb82ed4dd965674792e6b761 (patch) | |
tree | 9348fc507292f7e8715d22d64ce5a32131b4f875 /test/Transforms/PlaceSafepoints/invokes.ll | |
parent | beed47390a60f6f0c77532b3d3f76bb47ef49423 (diff) | |
parent | ebe69fe11e48d322045d5949c83283927a0d790b (diff) | |
download | external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.zip external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.tar.gz external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.tar.bz2 |
Merge "Update aosp/master LLVM for rebase to r230699."
Diffstat (limited to 'test/Transforms/PlaceSafepoints/invokes.ll')
-rw-r--r-- | test/Transforms/PlaceSafepoints/invokes.ll | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/test/Transforms/PlaceSafepoints/invokes.ll b/test/Transforms/PlaceSafepoints/invokes.ll new file mode 100644 index 0000000..5fd5bea --- /dev/null +++ b/test/Transforms/PlaceSafepoints/invokes.ll @@ -0,0 +1,110 @@ +; RUN: opt %s -S -place-safepoints | FileCheck %s + +declare i64 addrspace(1)* @"some_call"(i64 addrspace(1)*) +declare i32 @"personality_function"() + +define i64 addrspace(1)* @test_basic(i64 addrspace(1)* %obj, i64 addrspace(1)* %obj1) gc "statepoint-example" { +; CHECK-LABEL: entry: +entry: + ; CHECK: invoke + ; CHECK: statepoint + ; CHECK: some_call + %ret_val = invoke i64 addrspace(1)* @"some_call"(i64 addrspace(1)* %obj) + to label %normal_return unwind label %exceptional_return + +; CHECK-LABEL: normal_return: +; CHECK: gc.result +; CHECK: ret i64 + +normal_return: + ret i64 addrspace(1)* %ret_val + +; CHECK-LABEL: exceptional_return: +; CHECK: landingpad +; CHECK: ret i64 + +exceptional_return: + %landing_pad4 = landingpad {i8*, i32} personality i32 ()* @"personality_function" + cleanup + ret i64 addrspace(1)* %obj1 +} + +define i64 addrspace(1)* @test_two_invokes(i64 addrspace(1)* %obj, i64 addrspace(1)* %obj1) gc "statepoint-example" { +; CHECK-LABEL: entry: +entry: + ; CHECK: invoke + ; CHECK: statepoint + ; CHECK: some_call + %ret_val1 = invoke i64 addrspace(1)* @"some_call"(i64 addrspace(1)* %obj) + to label %second_invoke unwind label %exceptional_return + +; CHECK-LABEL: second_invoke: +second_invoke: + ; CHECK: invoke + ; CHECK: statepoint + ; CHECK: some_call + %ret_val2 = invoke i64 addrspace(1)* @"some_call"(i64 addrspace(1)* %ret_val1) + to label %normal_return unwind label %exceptional_return + +; CHECK-LABEL: normal_return: +normal_return: + ; CHECK: gc.result + ; CHECK: ret i64 + ret i64 addrspace(1)* %ret_val2 + +; CHECK: exceptional_return: +; CHECK: ret i64 + +exceptional_return: + %landing_pad4 = landingpad {i8*, i32} personality i32 ()* @"personality_function" + cleanup + ret i64 addrspace(1)* %obj1 +} + +define i64 addrspace(1)* @test_phi_node(i1 %cond, i64 addrspace(1)* %obj) gc "statepoint-example" { +; CHECK-LABEL: entry: +entry: + br i1 %cond, label %left, label %right + +left: + %ret_val_left = invoke i64 addrspace(1)* @"some_call"(i64 addrspace(1)* %obj) + to label %merge unwind label %exceptional_return + +right: + %ret_val_right = invoke i64 addrspace(1)* @"some_call"(i64 addrspace(1)* %obj) + to label %merge unwind label %exceptional_return + +; CHECK-LABEL: merge1: +; CHECK: gc.result +; CHECK: br label %merge + +; CHECK-LABEL: merge3: +; CHECK: gc.result +; CHECK: br label %merge + +; CHECK-LABEL: merge: +; CHECK: phi +; CHECK: ret i64 addrspace(1)* %ret_val +merge: + %ret_val = phi i64 addrspace(1)* [%ret_val_left, %left], [%ret_val_right, %right] + ret i64 addrspace(1)* %ret_val + +; CHECK-LABEL: exceptional_return: +; CHECK: ret i64 addrspace(1)* + +exceptional_return: + %landing_pad4 = landingpad {i8*, i32} personality i32 ()* @"personality_function" + cleanup + ret i64 addrspace(1)* %obj +} + +declare void @do_safepoint() +define void @gc.safepoint_poll() { +; CHECK-LABEL: gc.safepoint_poll +; CHECK-LABEL: entry +; CHECK-NEXT: do_safepoint +; CHECK-NEXT: ret void +entry: + call void @do_safepoint() + ret void +} |