Merge pull request #3773 from fitzgen/x64-traps-safepoints

ISLE: emit traps as safepoints on x64
This commit is contained in:
Nick Fitzgerald
2022-02-07 10:57:27 -08:00
committed by GitHub
4 changed files with 11 additions and 7 deletions

View File

@@ -1461,9 +1461,9 @@
;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(rule (lower (trap code)) (rule (lower (trap code))
(value_regs_none (ud2 code))) (safepoint (ud2 code)))
;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(rule (lower (resumable_trap code)) (rule (lower (resumable_trap code))
(value_regs_none (ud2 code))) (safepoint (ud2 code)))

View File

@@ -233,8 +233,12 @@ where
} }
} }
fn emit_safepoint(&mut self, _inst: &MInst) -> Unit { fn emit_safepoint(&mut self, inst: &MInst) -> Unit {
unimplemented!(); 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] #[inline]

View File

@@ -1,4 +1,4 @@
src/clif.isle 9ea75a6f790b5c03 src/clif.isle 9ea75a6f790b5c03
src/prelude.isle 6aaf8ce0f5a5c2ec src/prelude.isle 6aaf8ce0f5a5c2ec
src/isa/x64/inst.isle 7513533d16948249 src/isa/x64/inst.isle 7513533d16948249
src/isa/x64/lower.isle ccda13e9fe83c89a src/isa/x64/lower.isle 976ac116c5fcfa16

View File

@@ -2993,13 +2993,13 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
&Opcode::Trap => { &Opcode::Trap => {
// Rule at src/isa/x64/lower.isle line 1463. // Rule at src/isa/x64/lower.isle line 1463.
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?; 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); return Some(expr1_0);
} }
&Opcode::ResumableTrap => { &Opcode::ResumableTrap => {
// Rule at src/isa/x64/lower.isle line 1468. // Rule at src/isa/x64/lower.isle line 1468.
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?; 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); return Some(expr1_0);
} }
_ => {} _ => {}