Skip to content

Commit 8b558c5

Browse files
author
Maxime Chevalier-Boisvert
committed
Don't check if value is immediate if context has type info
1 parent a79ed42 commit 8b558c5

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

yjit_codegen.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -774,13 +774,20 @@ gen_set_ivar(jitstate_t *jit, ctx_t *ctx, const int max_chain_depth, VALUE compt
774774
if (iv_index_tbl && rb_iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
775775
uint32_t ivar_index = ent->index;
776776

777-
x86opnd_t val_to_write = ctx_stack_pop(ctx, 1);
777+
val_type_t val_type = ctx_get_opnd_type(ctx, OPND_STACK(0));
778+
x86opnd_t val_to_write = ctx_stack_opnd(ctx, 0);
778779
mov(cb, REG1, val_to_write);
779780

780781
// Bail if the value to write is a heap object, because this needs a write barrier
781-
ADD_COMMENT(cb, "guard value is immediate");
782-
test(cb, REG1, imm_opnd(RUBY_IMMEDIATE_MASK));
783-
jz_ptr(cb, COUNTED_EXIT(side_exit, setivar_val_heapobject));
782+
if (!val_type.is_imm) {
783+
ADD_COMMENT(cb, "guard value is immediate");
784+
test(cb, REG1, imm_opnd(RUBY_IMMEDIATE_MASK));
785+
jz_ptr(cb, COUNTED_EXIT(side_exit, setivar_val_heapobject));
786+
ctx_set_opnd_type(ctx, OPND_STACK(0), TYPE_IMM);
787+
}
788+
789+
// Pop the value to write
790+
ctx_stack_pop(ctx, 1);
784791

785792
// Bail if this object is frozen
786793
ADD_COMMENT(cb, "guard self is not frozen");

0 commit comments

Comments
 (0)