blob: 74fd5b9a517a668aa0731d8e1b8ea745ff941356 [file] [log] [blame]
Eric Christophercee313d2019-04-17 04:52:47 +00001; RUN: opt -rewrite-statepoints-for-gc -S < %s | FileCheck %s
2; RUN: opt -passes=rewrite-statepoints-for-gc -S < %s | FileCheck %s
3
4; A null test of a single value
5
6define i1 @test(i8 addrspace(1)* %p, i1 %rare) gc "statepoint-example" {
7; CHECK-LABEL: @test
8entry:
9 %cond = icmp eq i8 addrspace(1)* %p, null
10 br i1 %rare, label %safepoint, label %continue, !prof !0
11
12safepoint: ; preds = %entry
13 call void @safepoint() [ "deopt"() ]
14 br label %continue
15
16continue: ; preds = %safepoint, %entry
17; CHECK-LABEL: continue:
18; CHECK: phi
19; CHECK-DAG: [ %p.relocated, %safepoint ]
20; CHECK-DAG: [ %p, %entry ]
21; CHECK: %cond = icmp
22; CHECK: br i1 %cond
23; Comparing two pointers
24 br i1 %cond, label %taken, label %untaken
25
26taken: ; preds = %continue
27 ret i1 true
28
29untaken: ; preds = %continue
30 ret i1 false
31}
32
33define i1 @test2(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) gc "statepoint-example" {
34; CHECK-LABEL: @test2
35entry:
36 %cond = icmp eq i8 addrspace(1)* %p, %q
37 br i1 %rare, label %safepoint, label %continue, !prof !0
38
39safepoint: ; preds = %entry
40 call void @safepoint() [ "deopt"() ]
41 br label %continue
42
43continue: ; preds = %safepoint, %entry
44; CHECK-LABEL: continue:
45; CHECK: phi
46; CHECK-DAG: [ %q.relocated, %safepoint ]
47; CHECK-DAG: [ %q, %entry ]
48; CHECK: phi
49; CHECK-DAG: [ %p.relocated, %safepoint ]
50; CHECK-DAG: [ %p, %entry ]
51; CHECK: %cond = icmp
52; CHECK: br i1 %cond
53; Sanity check that nothing bad happens if already last instruction
54; before terminator
55 br i1 %cond, label %taken, label %untaken
56
57taken: ; preds = %continue
58 ret i1 true
59
60untaken: ; preds = %continue
61 ret i1 false
62}
63
64define i1 @test3(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) gc "statepoint-example" {
65; CHECK-LABEL: @test3
66; CHECK: gc.statepoint
67; CHECK: %cond = icmp
68; CHECK: br i1 %cond
69entry:
70 call void @safepoint() [ "deopt"() ]
71 %cond = icmp eq i8 addrspace(1)* %p, %q
72 br i1 %cond, label %taken, label %untaken
73
74taken: ; preds = %entry
75 ret i1 true
76
77untaken: ; preds = %entry
78 ret i1 false
79}
80
81declare void @safepoint()
82!0 = !{!"branch_weights", i32 1, i32 10000}