diff options
Diffstat (limited to 'test/Transforms/RewriteStatepointsForGC/codegen-cond.ll')
-rw-r--r-- | test/Transforms/RewriteStatepointsForGC/codegen-cond.ll | 87 |
1 files changed, 47 insertions, 40 deletions
diff --git a/test/Transforms/RewriteStatepointsForGC/codegen-cond.ll b/test/Transforms/RewriteStatepointsForGC/codegen-cond.ll index 8221cd0e0f826..9e8cbaf0260de 100644 --- a/test/Transforms/RewriteStatepointsForGC/codegen-cond.ll +++ b/test/Transforms/RewriteStatepointsForGC/codegen-cond.ll @@ -1,39 +1,45 @@ ; RUN: opt -rewrite-statepoints-for-gc -S < %s | FileCheck %s ; A null test of a single value + define i1 @test(i8 addrspace(1)* %p, i1 %rare) gc "statepoint-example" { ; CHECK-LABEL: @test entry: - %cond = icmp eq i8 addrspace(1)* %p, null - br i1 %rare, label %safepoint, label %continue, !prof !0 -safepoint: - 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) - br label %continue -continue: + %cond = icmp eq i8 addrspace(1)* %p, null + br i1 %rare, label %safepoint, label %continue, !prof !0 + +safepoint: ; preds = %entry + call void @safepoint() [ "deopt"() ] + br label %continue + +continue: ; preds = %safepoint, %entry ; CHECK-LABEL: continue: ; CHECK: phi ; CHECK-DAG: [ %p.relocated, %safepoint ] ; CHECK-DAG: [ %p, %entry ] ; CHECK: %cond = icmp ; CHECK: br i1 %cond - br i1 %cond, label %taken, label %untaken -taken: - ret i1 true -untaken: - ret i1 false +; Comparing two pointers + br i1 %cond, label %taken, label %untaken + +taken: ; preds = %continue + ret i1 true + +untaken: ; preds = %continue + ret i1 false } -; Comparing two pointers -define i1 @test2(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) - gc "statepoint-example" { +define i1 @test2(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) gc "statepoint-example" { ; CHECK-LABEL: @test2 -entry: - %cond = icmp eq i8 addrspace(1)* %p, %q - br i1 %rare, label %safepoint, label %continue, !prof !0 -safepoint: - 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) - br label %continue -continue: +entry: + %cond = icmp eq i8 addrspace(1)* %p, %q + br i1 %rare, label %safepoint, label %continue, !prof !0 + +safepoint: ; preds = %entry + call void @safepoint() [ "deopt"() ] + br label %continue + +continue: ; preds = %safepoint, %entry ; CHECK-LABEL: continue: ; CHECK: phi ; CHECK-DAG: [ %q.relocated, %safepoint ] @@ -43,32 +49,33 @@ continue: ; CHECK-DAG: [ %p, %entry ] ; CHECK: %cond = icmp ; CHECK: br i1 %cond - br i1 %cond, label %taken, label %untaken -taken: - ret i1 true -untaken: - ret i1 false -} - ; Sanity check that nothing bad happens if already last instruction ; before terminator -define i1 @test3(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) - gc "statepoint-example" { + br i1 %cond, label %taken, label %untaken + +taken: ; preds = %continue + ret i1 true + +untaken: ; preds = %continue + ret i1 false +} + +define i1 @test3(i8 addrspace(1)* %p, i8 addrspace(1)* %q, i1 %rare) gc "statepoint-example" { ; CHECK-LABEL: @test3 -entry: - 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) ; CHECK: gc.statepoint ; CHECK: %cond = icmp ; CHECK: br i1 %cond - %cond = icmp eq i8 addrspace(1)* %p, %q - br i1 %cond, label %taken, label %untaken -taken: - ret i1 true -untaken: - ret i1 false +entry: + call void @safepoint() [ "deopt"() ] + %cond = icmp eq i8 addrspace(1)* %p, %q + br i1 %cond, label %taken, label %untaken + +taken: ; preds = %entry + ret i1 true + +untaken: ; preds = %entry + ret i1 false } declare void @safepoint() -declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...) - !0 = !{!"branch_weights", i32 1, i32 10000} |