diff --git a/cranelift/filetests/filetests/safepoint/basic-bb.clif b/cranelift/filetests/filetests/safepoint/basic-bb.clif new file mode 100644 index 0000000000..b2ccedf559 --- /dev/null +++ b/cranelift/filetests/filetests/safepoint/basic-bb.clif @@ -0,0 +1,72 @@ +test safepoint +set enable_safepoints=true +target x86_64 +feature "basic-blocks" + +function %test(i32, r64, r64) -> r64 { + ebb0(v0: i32, v1:r64, v2:r64): + jump ebb1(v0) + ebb1(v3: i32): + v4 = irsub_imm v3, 1 + jump ebb2(v4) + ebb2(v5: i32): + resumable_trap interrupt + brz v5, ebb1(v5) + jump ebb3 + ebb3: + v6 = null.r64 + v7 = is_null v6 + brnz v7, ebb2(v0) + jump ebb4 + ebb4: + brnz v0, ebb5 + jump ebb6 + ebb5: + return v1 + ebb6: + return v2 +} + +; sameln: function %test(i32 [%rdi], r64 [%rsi], r64 [%rdx]) -> r64 [%rax] fast { +; nextln: ebb0(v0: i32 [%rdi], v1: r64 [%rsi], v2: r64 [%rdx]): +; nextln: v10 = copy v0 +; nextln: jump ebb1(v10) +; nextln: +; nextln: ebb1(v3: i32 [%rax]): +; nextln: v8 = iconst.i32 1 +; nextln: v4 = isub v8, v3 +; nextln: jump ebb2(v4) +; nextln: +; nextln: ebb2(v5: i32 [%rcx]): +; nextln: safepoint v1, v2 +; nextln: resumable_trap interrupt +; nextln: brz v5, ebb7 +; nextln: jump ebb3 +; nextln: +; nextln: ebb3: +; nextln: v6 = null.r64 +; nextln: v7 = is_null v6 +; nextln: brnz v7, ebb8 +; nextln: jump ebb4 +; nextln: +; nextln: ebb4: +; nextln: brnz.i32 v0, ebb5 +; nextln: jump ebb6 +; nextln: +; nextln: ebb5: +; nextln: regmove.r64 v1, %rsi -> %rax +; nextln: return v1 +; nextln: +; nextln: ebb6: +; nextln: regmove.r64 v2, %rdx -> %rax +; nextln: return v2 +; nextln: +; nextln: ebb7: +; nextln: regmove.i32 v5, %rcx -> %rax +; nextln: jump ebb1(v5) +; nextln: +; nextln: ebb8: +; nextln: v9 = copy.i32 v0 +; nextln: regmove v9, %rax -> %rcx +; nextln: jump ebb2(v9) +; nextln: } diff --git a/cranelift/filetests/filetests/safepoint/call.clif b/cranelift/filetests/filetests/safepoint/call.clif index a322445319..9e9583093b 100644 --- a/cranelift/filetests/filetests/safepoint/call.clif +++ b/cranelift/filetests/filetests/safepoint/call.clif @@ -1,7 +1,6 @@ test safepoint set enable_safepoints=true target x86_64 -feature !"basic-blocks" function %direct() -> r64 { fn0 = %none() @@ -12,9 +11,11 @@ ebb0: call fn0() v1 = call fn1() v2, v3 = call fn2() - brz v2, ebb1 - return v1 + brz v2, ebb2 + jump ebb1 ebb1: + return v1 +ebb2: v4 = call fn1() return v3 } @@ -39,12 +40,15 @@ ebb1: ; nextln: safepoint v1 ; nextln: v2, v10 = call_indirect sig2, v7() ; nextln: v3 = spill v10 -; nextln: brz v2, ebb1 -; nextln: v11 = fill v1 +; nextln: brz v2, ebb2 +; nextln: jump ebb1 +; nextln: +; nextln: ebb1: +; nextln: v11 = fill.r64 v1 ; nextln: regmove v11, %r15 -> %rax ; nextln: return v11 ; nextln: -; nextln: ebb1: +; nextln: ebb2: ; nextln: v8 = func_addr.i64 fn1 ; nextln: safepoint v3 ; nextln: v4 = call_indirect sig1, v8()