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