From 6b2abe570f0ecb1ec0e401be0eb4172f35b78307 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 4 Jul 2023 13:02:39 -0700 Subject: [PATCH] YJIT: Avoid reloading InsnOut operands (#8021) --- yjit/src/codegen.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs index fcf12be8ef..db40f6912d 100644 --- a/yjit/src/codegen.rs +++ b/yjit/src/codegen.rs @@ -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(