xref: /llvm-project/llvm/test/Transforms/PlaceSafepoints/split-backedge.ll (revision 1ceb79e2e075745f0c02aa8206227f60362e3743)
1fe755af3SPhilip Reames;; A very basic test to make sure that splitting the backedge keeps working
2*1ceb79e2SJan Dupej;; RUN: opt < %s -passes=place-safepoints -spp-split-backedge=1 -S | FileCheck %s
3fe755af3SPhilip Reames
4fe755af3SPhilip Reamesdefine void @test(i32, i1 %cond) gc "statepoint-example" {
5fe755af3SPhilip Reames; CHECK-LABEL: @test
6fe755af3SPhilip Reames; CHECK-LABEL: loop.loop_crit_edge
7fe755af3SPhilip Reames; CHECK: call void @do_safepoint
8fe755af3SPhilip Reames; CHECK-NEXT: br label %loop
9fe755af3SPhilip Reamesentry:
10fe755af3SPhilip Reames  br label %loop
11fe755af3SPhilip Reames
12fe755af3SPhilip Reamesloop:
13fe755af3SPhilip Reames  br i1 %cond, label %loop, label %exit
14fe755af3SPhilip Reames
15fe755af3SPhilip Reamesexit:
16fe755af3SPhilip Reames  ret void
17fe755af3SPhilip Reames}
18fe755af3SPhilip Reames
19fe755af3SPhilip Reames; Test for the case where a single conditional branch jumps to two
20fe755af3SPhilip Reames; different loop header blocks.  Since we're currently using LoopSimplfy
21fe755af3SPhilip Reames; this doesn't hit the interesting case, but once we remove that, we need
22fe755af3SPhilip Reames; to be sure this keeps working.
23fe755af3SPhilip Reamesdefine void @test2(i32, i1 %cond) gc "statepoint-example" {
24fe755af3SPhilip Reames; CHECK-LABEL: @test2
25fe755af3SPhilip Reames; CHECK-LABEL: loop2.loop2_crit_edge:
26fe755af3SPhilip Reames; CHECK: call void @do_safepoint
27fe755af3SPhilip Reames; CHECK-NEXT: br label %loop2
28fe755af3SPhilip Reames; CHECK-LABEL: loop2.loop_crit_edge:
29fe755af3SPhilip Reames; CHECK: call void @do_safepoint
30fe755af3SPhilip Reames; CHECK-NEXT: br label %loop
31fe755af3SPhilip Reamesentry:
32fe755af3SPhilip Reames  br label %loop
33fe755af3SPhilip Reames
34fe755af3SPhilip Reamesloop:
35fe755af3SPhilip Reames  br label %loop2
36fe755af3SPhilip Reames
37fe755af3SPhilip Reamesloop2:
38fe755af3SPhilip Reames  br i1 %cond, label %loop, label %loop2
39fe755af3SPhilip Reames}
40fe755af3SPhilip Reames
41fe755af3SPhilip Reamesdeclare void @do_safepoint()
42fe755af3SPhilip Reamesdefine void @gc.safepoint_poll() {
43fe755af3SPhilip Reamesentry:
44fe755af3SPhilip Reames  call void @do_safepoint()
45fe755af3SPhilip Reames  ret void
46fe755af3SPhilip Reames}
47