82 lines · plain
1; RUN: opt -passes=rewrite-statepoints-for-gc -S < %s | FileCheck %s2 3; A null test of a single value4 5define i1 @test(ptr addrspace(1) %p, i1 %rare) gc "statepoint-example" {6; CHECK-LABEL: @test7entry:8 %cond = icmp eq ptr addrspace(1) %p, null9 br i1 %rare, label %safepoint, label %continue, !prof !010 11safepoint: ; preds = %entry12 call void @safepoint() [ "deopt"() ]13 br label %continue14 15continue: ; preds = %safepoint, %entry16; CHECK-LABEL: continue:17; CHECK: phi18; CHECK-DAG: [ %p.relocated, %safepoint ]19; CHECK-DAG: [ %p, %entry ]20; CHECK: %cond = icmp21; CHECK: br i1 %cond22; Comparing two pointers23 br i1 %cond, label %taken, label %untaken24 25taken: ; preds = %continue26 ret i1 true27 28untaken: ; preds = %continue29 ret i1 false30}31 32define i1 @test2(ptr addrspace(1) %p, ptr addrspace(1) %q, i1 %rare) gc "statepoint-example" {33; CHECK-LABEL: @test234entry:35 %cond = icmp eq ptr addrspace(1) %p, %q36 br i1 %rare, label %safepoint, label %continue, !prof !037 38safepoint: ; preds = %entry39 call void @safepoint() [ "deopt"() ]40 br label %continue41 42continue: ; preds = %safepoint, %entry43; CHECK-LABEL: continue:44; CHECK: phi45; CHECK-DAG: [ %q.relocated, %safepoint ]46; CHECK-DAG: [ %q, %entry ]47; CHECK: phi48; CHECK-DAG: [ %p.relocated, %safepoint ]49; CHECK-DAG: [ %p, %entry ]50; CHECK: %cond = icmp51; CHECK: br i1 %cond52; Check that nothing bad happens if already last instruction53; before terminator54 br i1 %cond, label %taken, label %untaken55 56taken: ; preds = %continue57 ret i1 true58 59untaken: ; preds = %continue60 ret i1 false61}62 63define i1 @test3(ptr addrspace(1) %p, ptr addrspace(1) %q, i1 %rare) gc "statepoint-example" {64; CHECK-LABEL: @test365; CHECK: gc.statepoint66; CHECK: %cond = icmp67; CHECK: br i1 %cond68entry:69 call void @safepoint() [ "deopt"() ]70 %cond = icmp eq ptr addrspace(1) %p, %q71 br i1 %cond, label %taken, label %untaken72 73taken: ; preds = %entry74 ret i1 true75 76untaken: ; preds = %entry77 ret i1 false78}79 80declare void @safepoint()81!0 = !{!"branch_weights", i32 1, i32 10000}82