diff options
Diffstat (limited to 'test/Transforms/PlaceSafepoints/call-in-loop.ll')
-rw-r--r-- | test/Transforms/PlaceSafepoints/call-in-loop.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Transforms/PlaceSafepoints/call-in-loop.ll b/test/Transforms/PlaceSafepoints/call-in-loop.ll new file mode 100644 index 0000000..a220fc9 --- /dev/null +++ b/test/Transforms/PlaceSafepoints/call-in-loop.ll @@ -0,0 +1,31 @@ +; If there's a call in the loop which dominates the backedge, we +; don't need a safepoint poll (since the callee must contain a +; poll test). +;; RUN: opt %s -place-safepoints -S | FileCheck %s + +declare void @foo() + +define void @test1() gc "statepoint-example" { +; CHECK-LABEL: test1 + +entry: +; CHECK-LABEL: entry +; CHECK: statepoint + br label %loop + +loop: +; CHECK-LABEL: loop +; CHECK: @llvm.experimental.gc.statepoint.p0f_isVoidf(void ()* @foo +; CHECK-NOT: statepoint + call void @foo() + br label %loop +} + +; This function is inlined when inserting a poll. +declare void @do_safepoint() +define void @gc.safepoint_poll() { +; CHECK-LABEL: gc.safepoint_poll +entry: + call void @do_safepoint() + ret void +} |