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

This commit is contained in:
Takashi Kokubun 2024-04-26 13:02:22 -07:00 коммит произвёл GitHub
Родитель 46480e3042
Коммит ab228bd084
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
1 изменённых файлов: 12 добавлений и 0 удалений

Просмотреть файл

@ -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