ZJIT: Support invalidating constant patch points (#13998)

This commit is contained in:
Stan Lo 2025-07-28 22:48:41 +01:00 committed by GitHub
parent 23000e7123
commit a0d0b84bad
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 108 additions and 3 deletions

View file

@ -4,7 +4,7 @@ use std::ffi::{c_int};
use crate::asm::Label;
use crate::backend::current::{Reg, ALLOC_REGS};
use crate::invariants::{track_bop_assumption, track_cme_assumption};
use crate::invariants::{track_bop_assumption, track_cme_assumption, track_stable_constant_names_assumption};
use crate::gc::{get_or_create_iseq_payload, append_gc_offsets};
use crate::state::ZJITState;
use crate::{asm::CodeBlock, cruby::*, options::debug, virtualmem::CodePtr};
@ -505,6 +505,10 @@ fn gen_patch_point(jit: &mut JITState, asm: &mut Assembler, invariant: &Invarian
let side_exit_ptr = cb.resolve_label(label);
track_cme_assumption(cme, code_ptr, side_exit_ptr);
}
Invariant::StableConstantNames { idlist } => {
let side_exit_ptr = cb.resolve_label(label);
track_stable_constant_names_assumption(idlist, code_ptr, side_exit_ptr);
}
_ => {
debug!("ZJIT: gen_patch_point: unimplemented invariant {invariant:?}");
return;