diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-01-29 00:13:26 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-01-29 00:13:26 +0000 |
commit | 877a1015974496beacfc3f9ec5809cec5b1368f5 (patch) | |
tree | 2c1393a3e5bf700f1716af6dbaece219a0a0fb71 /llvm/test/Transforms/RewriteStatepointsForGC | |
parent | 7c6b5e15da14a2634ad631ac42409f7999390995 (diff) | |
download | bcm5719-llvm-877a1015974496beacfc3f9ec5809cec5b1368f5.tar.gz bcm5719-llvm-877a1015974496beacfc3f9ec5809cec5b1368f5.zip |
[RS4GC] Port three tests to the deopt bundles directory
two-invokes-one-landingpad.ll was only moved (and not "ported"), but
having everything in the `deopt-bundles` directory will make later
changes more obvious.
llvm-svn: 259125
Diffstat (limited to 'llvm/test/Transforms/RewriteStatepointsForGC')
3 files changed, 72 insertions, 0 deletions
diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-12.ll b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-12.ll new file mode 100644 index 00000000000..ce477aff566 --- /dev/null +++ b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-12.ll @@ -0,0 +1,20 @@ +; RUN: opt < %s -rs4gc-use-deopt-bundles -rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s + +; CHECK: derived %select base @global + +@global = external addrspace(1) global i8 + +define i8 @test(i1 %cond) gc "statepoint-example" { + %derived1 = getelementptr i8, i8 addrspace(1)* @global, i64 1 + %derived2 = getelementptr i8, i8 addrspace(1)* @global, i64 2 + %select = select i1 %cond, i8 addrspace(1)* %derived1, i8 addrspace(1)* %derived2 + call void @extern() +; CHECK-NOT: relocate +; CHECK: %load = load i8, i8 addrspace(1)* %select + %load = load i8, i8 addrspace(1)* %select + ret i8 %load +} + +declare void @extern() gc "statepoint-example" + +declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...) diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-13.ll b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-13.ll new file mode 100644 index 00000000000..aab260aa171 --- /dev/null +++ b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/base-pointers-13.ll @@ -0,0 +1,19 @@ +; RUN: opt < %s -rs4gc-use-deopt-bundles -rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s + +; CHECK: derived %derived base @global + +@global = external addrspace(1) global i8 + +define i8 @test(i64 %offset) gc "statepoint-example" { + %derived = getelementptr i8, i8 addrspace(1)* @global, i64 %offset + call void @extern() +; CHECK-NOT: relocate +; CHECK-NOT: remat +; CHECK: %load = load i8, i8 addrspace(1)* %derived + %load = load i8, i8 addrspace(1)* %derived + ret i8 %load +} + +declare void @extern() gc "statepoint-example" + +declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...) diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/two-invokes-one-landingpad.ll b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/two-invokes-one-landingpad.ll new file mode 100644 index 00000000000..3d49b92448d --- /dev/null +++ b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/two-invokes-one-landingpad.ll @@ -0,0 +1,33 @@ +; RUN: opt < %s -rewrite-statepoints-for-gc -rs4gc-use-deopt-bundles -S | FileCheck %s + +declare void @some_call(i64 addrspace(1)*) + +declare i32 @dummy_personality_function() + +define i64 addrspace(1)* @test(i64 addrspace(1)* %obj, i64 addrspace(1)* %obj1) + gc "statepoint-example" + personality i32 ()* @dummy_personality_function { +entry: + invoke void @some_call(i64 addrspace(1)* %obj) [ "deopt"() ] + to label %second_invoke unwind label %exceptional_return + +second_invoke: ; preds = %entry + invoke void @some_call(i64 addrspace(1)* %obj) [ "deopt"() ] + to label %normal_return unwind label %exceptional_return + +normal_return: ; preds = %second_invoke + ret i64 addrspace(1)* %obj + +; CHECK: exceptional_return1: +; CHECK-NEXT: %lpad2 = landingpad token + +; CHECK: exceptional_return.split-lp: +; CHECK-NEXT: %lpad.split-lp = landingpad token + +; CHECK: exceptional_return: +; CHECK-NOT: phi token + +exceptional_return: ; preds = %second_invoke, %entry + %lpad = landingpad token cleanup + ret i64 addrspace(1)* %obj1 +} |