1 ; RUN: opt -rewrite-statepoints-for-gc -S < %s | FileCheck %s
3 ; A null test of a single value
4 define i1 @test(i8 addrspace(1)* %p, i1 %rare) gc "statepoint-example" {
7 %cond = icmp eq i8 addrspace(1)* %p, null
8 br i1 %rare, label %safepoint, label %continue, !prof !0
10 call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @safepoint, i32 0, i32 0, i32 0, i32 0)
13 ; CHECK-LABEL: continue:
15 ; CHECK-DAG: [ %p.relocated, %safepoint ]
16 ; CHECK-DAG: [ %p, %entry ]
19 br i1 %cond, label %taken, label %untaken
26 ; Comparing two pointers
27 define i1 @test2(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare)
28 gc "statepoint-example" {
31 %cond = icmp eq i8 addrspace(1)* %p, %q
32 br i1 %rare, label %safepoint, label %continue, !prof !0
34 call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @safepoint, i32 0, i32 0, i32 0, i32 0)
37 ; CHECK-LABEL: continue:
39 ; CHECK-DAG: [ %q.relocated, %safepoint ]
40 ; CHECK-DAG: [ %q, %entry ]
42 ; CHECK-DAG: [ %p.relocated, %safepoint ]
43 ; CHECK-DAG: [ %p, %entry ]
46 br i1 %cond, label %taken, label %untaken
53 ; Sanity check that nothing bad happens if already last instruction
55 define i1 @test3(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare)
56 gc "statepoint-example" {
59 call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @safepoint, i32 0, i32 0, i32 0, i32 0)
60 ; CHECK: gc.statepoint
63 %cond = icmp eq i8 addrspace(1)* %p, %q
64 br i1 %cond, label %taken, label %untaken
71 declare void @safepoint()
72 declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
74 !0 = !{!"branch_weights", i32 1, i32 10000}