From bb7ae46ecd9bb0ad9bd1991f210a86ed1ca6de58 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 7 Feb 2022 10:01:23 -0800 Subject: [PATCH] ISLE: emit traps as safepoints on x64 --- cranelift/codegen/src/isa/x64/lower.isle | 4 ++-- cranelift/codegen/src/isa/x64/lower/isle.rs | 8 ++++++-- .../src/isa/x64/lower/isle/generated_code.manifest | 2 +- .../codegen/src/isa/x64/lower/isle/generated_code.rs | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cranelift/codegen/src/isa/x64/lower.isle b/cranelift/codegen/src/isa/x64/lower.isle index 8abdc50dd3..7f30ccda79 100644 --- a/cranelift/codegen/src/isa/x64/lower.isle +++ b/cranelift/codegen/src/isa/x64/lower.isle @@ -1461,9 +1461,9 @@ ;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (rule (lower (trap code)) - (value_regs_none (ud2 code))) + (safepoint (ud2 code))) ;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (rule (lower (resumable_trap code)) - (value_regs_none (ud2 code))) + (safepoint (ud2 code))) diff --git a/cranelift/codegen/src/isa/x64/lower/isle.rs b/cranelift/codegen/src/isa/x64/lower/isle.rs index f5aa609457..8de77cead3 100644 --- a/cranelift/codegen/src/isa/x64/lower/isle.rs +++ b/cranelift/codegen/src/isa/x64/lower/isle.rs @@ -233,8 +233,12 @@ where } } - fn emit_safepoint(&mut self, _inst: &MInst) -> Unit { - unimplemented!(); + fn emit_safepoint(&mut self, inst: &MInst) -> Unit { + use crate::machinst::MachInst; + for inst in inst.clone().mov_mitosis() { + let is_safepoint = !inst.is_move().is_some(); + self.emitted_insts.push((inst, is_safepoint)); + } } #[inline] diff --git a/cranelift/codegen/src/isa/x64/lower/isle/generated_code.manifest b/cranelift/codegen/src/isa/x64/lower/isle/generated_code.manifest index b8ba09a9eb..0a2ab3211b 100644 --- a/cranelift/codegen/src/isa/x64/lower/isle/generated_code.manifest +++ b/cranelift/codegen/src/isa/x64/lower/isle/generated_code.manifest @@ -1,4 +1,4 @@ src/clif.isle 9ea75a6f790b5c03 src/prelude.isle 6aaf8ce0f5a5c2ec src/isa/x64/inst.isle 7513533d16948249 -src/isa/x64/lower.isle ccda13e9fe83c89a +src/isa/x64/lower.isle 976ac116c5fcfa16 diff --git a/cranelift/codegen/src/isa/x64/lower/isle/generated_code.rs b/cranelift/codegen/src/isa/x64/lower/isle/generated_code.rs index 5529576b32..3e6ae01d3d 100644 --- a/cranelift/codegen/src/isa/x64/lower/isle/generated_code.rs +++ b/cranelift/codegen/src/isa/x64/lower/isle/generated_code.rs @@ -2993,13 +2993,13 @@ pub fn constructor_lower(ctx: &mut C, arg0: Inst) -> Option { // Rule at src/isa/x64/lower.isle line 1463. let expr0_0 = constructor_ud2(ctx, &pattern2_1)?; - let expr1_0 = constructor_value_regs_none(ctx, &expr0_0)?; + let expr1_0 = constructor_safepoint(ctx, &expr0_0)?; return Some(expr1_0); } &Opcode::ResumableTrap => { // Rule at src/isa/x64/lower.isle line 1468. let expr0_0 = constructor_ud2(ctx, &pattern2_1)?; - let expr1_0 = constructor_value_regs_none(ctx, &expr0_0)?; + let expr1_0 = constructor_safepoint(ctx, &expr0_0)?; return Some(expr1_0); } _ => {}