Home | History | Annotate | Download | only in deopt-bundles
      1 ; RUN: opt -rewrite-statepoints-for-gc -rs4gc-use-deopt-bundles -S < %s | FileCheck %s
      2 
      3 ; A null test of a single value
      4 
      5 define i1 @test(i8 addrspace(1)* %p, i1 %rare) gc "statepoint-example" {
      6 ; CHECK-LABEL: @test
      7 entry:
      8   %cond = icmp eq i8 addrspace(1)* %p, null
      9   br i1 %rare, label %safepoint, label %continue, !prof !0
     10 
     11 safepoint:                                        ; preds = %entry
     12   call void @safepoint() [ "deopt"() ]
     13   br label %continue
     14 
     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
     24 
     25 taken:                                            ; preds = %continue
     26   ret i1 true
     27 
     28 untaken:                                          ; preds = %continue
     29   ret i1 false
     30 }
     31 
     32 define i1 @test2(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) gc "statepoint-example" {
     33 ; CHECK-LABEL: @test2
     34 entry:
     35   %cond = icmp eq i8 addrspace(1)* %p, %q
     36   br i1 %rare, label %safepoint, label %continue, !prof !0
     37 
     38 safepoint:                                        ; preds = %entry
     39   call void @safepoint() [ "deopt"() ]
     40   br label %continue
     41 
     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 ; Sanity check that nothing bad happens if already last instruction
     53 ; before terminator
     54   br i1 %cond, label %taken, label %untaken
     55 
     56 taken:                                            ; preds = %continue
     57   ret i1 true
     58 
     59 untaken:                                          ; preds = %continue
     60   ret i1 false
     61 }
     62 
     63 define i1 @test3(i8 addrspace(1)* %p, i8 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 i8 addrspace(1)* %p, %q
     71   br i1 %cond, label %taken, label %untaken
     72 
     73 taken:                                            ; preds = %entry
     74   ret i1 true
     75 
     76 untaken:                                          ; preds = %entry
     77   ret i1 false
     78 }
     79 
     80 declare void @safepoint()
     81 !0 = !{!"branch_weights", i32 1, i32 10000}
     82