xref: /llvm-project/llvm/test/Transforms/PlaceSafepoints/statepoint-frameescape.ll (revision 1ceb79e2e075745f0c02aa8206227f60362e3743)
1*1ceb79e2SJan Dupej; RUN: opt < %s -S -passes=place-safepoints | FileCheck %s
2fe755af3SPhilip Reames
3fe755af3SPhilip Reamesdeclare void @llvm.localescape(...)
4fe755af3SPhilip Reames
5fe755af3SPhilip Reames; Do we insert the entry safepoint after the localescape intrinsic?
6fe755af3SPhilip Reamesdefine void @parent() gc "statepoint-example" {
7fe755af3SPhilip Reames; CHECK-LABEL: @parent
8fe755af3SPhilip Reamesentry:
9fe755af3SPhilip Reames; CHECK-LABEL: entry
10fe755af3SPhilip Reames; CHECK-NEXT: alloca
11fe755af3SPhilip Reames; CHECK-NEXT: localescape
12fe755af3SPhilip Reames; CHECK-NEXT: call void @do_safepoint
13fe755af3SPhilip Reames  %ptr = alloca i32
145c6453ebSMatt Arsenault  call void (...) @llvm.localescape(ptr %ptr)
15fe755af3SPhilip Reames  ret void
16fe755af3SPhilip Reames}
17fe755af3SPhilip Reames
18fe755af3SPhilip Reames; This function is inlined when inserting a poll.  To avoid recursive
19fe755af3SPhilip Reames; issues, make sure we don't place safepoints in it.
20fe755af3SPhilip Reamesdeclare void @do_safepoint()
21fe755af3SPhilip Reamesdefine void @gc.safepoint_poll() {
22fe755af3SPhilip Reames; CHECK-LABEL: gc.safepoint_poll
23fe755af3SPhilip Reames; CHECK-LABEL: entry
24fe755af3SPhilip Reames; CHECK-NEXT: do_safepoint
25fe755af3SPhilip Reames; CHECK-NEXT: ret void
26fe755af3SPhilip Reamesentry:
27fe755af3SPhilip Reames  call void @do_safepoint()
28fe755af3SPhilip Reames  ret void
29fe755af3SPhilip Reames}
30