YJIT: Try splitting getlocal/setlocal blocks (#10648)

This commit is contained in:
Takashi Kokubun 2024-04-26 13:02:22 -07:00 committed by GitHub
parent 46480e3042
commit ab228bd084
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2265,6 +2265,12 @@ fn gen_getlocal_generic(
ep_offset: u32,
level: u32,
) -> Option<CodegenStatus> {
// Start the block with this instruction for EP-escape invalidation
if level == 0 && !jit.at_current_insn() {
defer_compilation(jit, asm, ocb);
return Some(EndBlock);
}
let local_opnd = if level == 0 && jit.assume_no_ep_escape(asm, ocb) {
// Load the local using SP register
asm.ctx.ep_opnd(-(ep_offset as i32))
@ -2326,6 +2332,12 @@ fn gen_setlocal_generic(
ep_offset: u32,
level: u32,
) -> Option<CodegenStatus> {
// Start the block with this instruction for EP-escape invalidation
if level == 0 && !jit.at_current_insn() {
defer_compilation(jit, asm, ocb);
return Some(EndBlock);
}
let value_type = asm.ctx.get_opnd_type(StackOpnd(0));
// Fallback because of write barrier