summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/RewriteStatepointsForGC
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2015-10-20 01:06:24 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2015-10-20 01:06:24 +0000
commit7ad67640e9ce1b14a1b66eca8d63351d40f3c23c (patch)
tree7fdedcda69a91fefcf72b48b34f0c02252f48eda /llvm/test/Transforms/RewriteStatepointsForGC
parentff3dba736a0cb93a9c623ed2dbcf4df046fae7e2 (diff)
downloadbcm5719-llvm-7ad67640e9ce1b14a1b66eca8d63351d40f3c23c.tar.gz
bcm5719-llvm-7ad67640e9ce1b14a1b66eca8d63351d40f3c23c.zip
[RS4GC] Re-purpose `normalizeForInvokeSafepoint`; NFC.
`normalizeForInvokeSafepoint` in RewriteStatepointsForGC.cpp, as it is written today, deals with `gc.relocate` and `gc.result` uses of a statepoint equally well. This change documents this fact and adds a test case. There is no functional change here -- only documentation of existing functionality. llvm-svn: 250784
Diffstat (limited to 'llvm/test/Transforms/RewriteStatepointsForGC')
-rw-r--r--llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/rewrite-invoke.ll32
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/rewrite-invoke.ll b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/rewrite-invoke.ll
new file mode 100644
index 00000000000..6c70c01c011
--- /dev/null
+++ b/llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/rewrite-invoke.ll
@@ -0,0 +1,32 @@
+; RUN: opt -rewrite-statepoints-for-gc -rs4gc-use-deopt-bundles -verify -S < %s | FileCheck %s
+
+declare i8 addrspace(1)* @gc_call()
+
+declare i32* @fake_personality_function()
+
+define i8 addrspace(1)* @test(i1 %c) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+; CHECK-LABEL: @test(
+entry:
+ br i1 %c, label %gc_invoke, label %normal_dest
+
+gc_invoke:
+; CHECK: [[TOKEN:%[^ ]+]] = invoke i32 {{[^@]+}}@llvm.experimental.gc.statepoint{{[^@]+}}@gc_call
+ %obj = invoke i8 addrspace(1)* @gc_call() [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ]
+ to label %normal_dest unwind label %unwind_dest
+
+unwind_dest:
+; CHECK: unwind_dest:
+ %lpad = landingpad { i8*, i32 }
+ cleanup
+ resume { i8*, i32 } undef
+
+; CHECK: [[NORMAL_DEST_SPLIT:[^:]+:]]
+; CHECK-NEXT: [[RET_VAL:%[^ ]+]] = call i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(i32 [[TOKEN]])
+; CHECK-NEXT: br label %normal_dest
+
+normal_dest:
+; CHECK: normal_dest:
+; CHECK-NEXT: %merge = phi i8 addrspace(1)* [ null, %entry ], [ %obj.2, %normal_dest1 ]
+ %merge = phi i8 addrspace(1)* [ null, %entry ], [ %obj, %gc_invoke ]
+ ret i8 addrspace(1)* %merge
+}
OpenPOWER on IntegriCloud