YJIT: Avoid reloading InsnOut operands (#8021)

This commit is contained in:
Takashi Kokubun 2023-07-04 13:02:39 -07:00 committed by GitHub
parent a1d4dada6b
commit 6b2abe570f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
Notes: git 2023-07-04 20:02:58 +00:00
Merged-By: maximecb <maximecb@ruby-lang.org>

View File

@ -1375,7 +1375,7 @@ fn guard_object_is_array(
}
let object_reg = match object {
Opnd::Reg(_) => object,
Opnd::InsnOut { .. } => object,
_ => asm.load(object),
};
guard_object_is_heap(asm, object_reg, object_opnd, counter);
@ -1407,7 +1407,7 @@ fn guard_object_is_string(
}
let object_reg = match object {
Opnd::Reg(_) => object,
Opnd::InsnOut { .. } => object,
_ => asm.load(object),
};
guard_object_is_heap(asm, object_reg, object_opnd, counter);
@ -1954,7 +1954,7 @@ fn gen_get_ivar(
// If recv isn't already a register, load it.
let recv = match recv {
Opnd::Reg(_) => recv,
Opnd::InsnOut { .. } => recv,
_ => asm.load(recv),
};
@ -3910,7 +3910,7 @@ fn jit_guard_known_klass(
// If obj_opnd isn't already a register, load it.
let obj_opnd = match obj_opnd {
Opnd::Reg(_) => obj_opnd,
Opnd::InsnOut { .. } => obj_opnd,
_ => asm.load(obj_opnd),
};
let klass_opnd = Opnd::mem(64, obj_opnd, RUBY_OFFSET_RBASIC_KLASS);
@ -5209,7 +5209,7 @@ fn get_array_len(asm: &mut Assembler, array_opnd: Opnd) -> Opnd {
// Pull out the embed flag to check if it's an embedded array.
let array_reg = match array_opnd {
Opnd::Reg(_) => array_opnd,
Opnd::InsnOut { .. } => array_opnd,
_ => asm.load(array_opnd),
};
let flags_opnd = Opnd::mem(VALUE_BITS, array_reg, RUBY_OFFSET_RBASIC_FLAGS);
@ -5223,7 +5223,7 @@ fn get_array_len(asm: &mut Assembler, array_opnd: Opnd) -> Opnd {
asm.test(flags_opnd, (RARRAY_EMBED_FLAG as u64).into());
let array_reg = match array_opnd {
Opnd::Reg(_) => array_opnd,
Opnd::InsnOut { .. } => array_opnd,
_ => asm.load(array_opnd),
};
let array_len_opnd = Opnd::mem(