diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-10-20 01:06:24 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-10-20 01:06:24 +0000 |
commit | 7ad67640e9ce1b14a1b66eca8d63351d40f3c23c (patch) | |
tree | 7fdedcda69a91fefcf72b48b34f0c02252f48eda /llvm/test | |
parent | ff3dba736a0cb93a9c623ed2dbcf4df046fae7e2 (diff) | |
download | bcm5719-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')
-rw-r--r-- | llvm/test/Transforms/RewriteStatepointsForGC/deopt-bundles/rewrite-invoke.ll | 32 |
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 +} |