[clang] Document the return value of __builtin_COLUMN (#118360)
[llvm-project.git] / llvm / test / Transforms / RewriteStatepointsForGC / codegen-cond.ll
blobbe3b01d68827c334873d8f6bfa186a1cbcfc0a03
1 ; RUN: opt -passes=rewrite-statepoints-for-gc -S < %s | FileCheck %s
3 ; A null test of a single value
5 define i1 @test(ptr addrspace(1) %p, i1 %rare) gc "statepoint-example" {
6 ; CHECK-LABEL: @test
7 entry:
8   %cond = icmp eq ptr addrspace(1) %p, null
9   br i1 %rare, label %safepoint, label %continue, !prof !0
11 safepoint:                                        ; preds = %entry
12   call void @safepoint() [ "deopt"() ]
13   br label %continue
15 continue:                                         ; preds = %safepoint, %entry
16 ; CHECK-LABEL: continue:
17 ; CHECK: phi
18 ; CHECK-DAG: [ %p.relocated, %safepoint ]
19 ; CHECK-DAG: [ %p, %entry ]
20 ; CHECK: %cond = icmp
21 ; CHECK: br i1 %cond
22 ; Comparing two pointers
23   br i1 %cond, label %taken, label %untaken
25 taken:                                            ; preds = %continue
26   ret i1 true
28 untaken:                                          ; preds = %continue
29   ret i1 false
32 define i1 @test2(ptr addrspace(1) %p, ptr addrspace(1) %q, i1 %rare) gc "statepoint-example" {
33 ; CHECK-LABEL: @test2
34 entry:
35   %cond = icmp eq ptr addrspace(1) %p, %q
36   br i1 %rare, label %safepoint, label %continue, !prof !0
38 safepoint:                                        ; preds = %entry
39   call void @safepoint() [ "deopt"() ]
40   br label %continue
42 continue:                                         ; preds = %safepoint, %entry
43 ; CHECK-LABEL: continue:
44 ; CHECK: phi
45 ; CHECK-DAG: [ %q.relocated, %safepoint ]
46 ; CHECK-DAG: [ %q, %entry ]
47 ; CHECK: phi
48 ; CHECK-DAG: [ %p.relocated, %safepoint ]
49 ; CHECK-DAG: [ %p, %entry ]
50 ; CHECK: %cond = icmp
51 ; CHECK: br i1 %cond
52 ; Check that nothing bad happens if already last instruction
53 ; before terminator
54   br i1 %cond, label %taken, label %untaken
56 taken:                                            ; preds = %continue
57   ret i1 true
59 untaken:                                          ; preds = %continue
60   ret i1 false
63 define i1 @test3(ptr addrspace(1) %p, ptr addrspace(1) %q, i1 %rare) gc "statepoint-example" {
64 ; CHECK-LABEL: @test3
65 ; CHECK: gc.statepoint
66 ; CHECK: %cond = icmp
67 ; CHECK: br i1 %cond
68 entry:
69   call void @safepoint() [ "deopt"() ]
70   %cond = icmp eq ptr addrspace(1) %p, %q
71   br i1 %cond, label %taken, label %untaken
73 taken:                                            ; preds = %entry
74   ret i1 true
76 untaken:                                          ; preds = %entry
77   ret i1 false
80 declare void @safepoint()
81 !0 = !{!"branch_weights", i32 1, i32 10000}