Skip to content

Commit 4e95d01

Browse files
committed
Object shapes work in progress
1 parent a85cdb5 commit 4e95d01

File tree

25 files changed

+1145
-456
lines changed

25 files changed

+1145
-456
lines changed

compile.c

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2058,20 +2058,7 @@ cdhash_set_label_i(VALUE key, VALUE val, VALUE ptr)
20582058
static inline VALUE
20592059
get_ivar_ic_value(rb_iseq_t *iseq,ID id)
20602060
{
2061-
VALUE val;
2062-
struct rb_id_table *tbl = ISEQ_COMPILE_DATA(iseq)->ivar_cache_table;
2063-
if (tbl) {
2064-
if (rb_id_table_lookup(tbl,id,&val)) {
2065-
return val;
2066-
}
2067-
}
2068-
else {
2069-
tbl = rb_id_table_create(1);
2070-
ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = tbl;
2071-
}
2072-
val = INT2FIX(ISEQ_BODY(iseq)->is_size++);
2073-
rb_id_table_insert(tbl,id,val);
2074-
return val;
2061+
return INT2FIX(iseq->body->is_size++);
20752062
}
20762063

20772064
#define BADINSN_DUMP(anchor, list, dest) \
@@ -2396,10 +2383,14 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
23962383
}
23972384
break;
23982385
}
2386+
case TS_IVC: /* inline ivar cache */
2387+
{
2388+
unsigned int ic_index = FIX2UINT(operands[j]);
2389+
vm_ic_attr_index_initialize(((IVC)&body->is_entries[ic_index]), INVALID_SHAPE_ID);
2390+
}
23992391
case TS_IC: /* inline cache */
24002392
case TS_ISE: /* inline storage entry */
24012393
case TS_ICVARC: /* inline cvar cache */
2402-
case TS_IVC: /* inline ivar cache */
24032394
{
24042395
unsigned int ic_index = FIX2UINT(operands[j]);
24052396
IC ic = (IC)&body->is_entries[ic_index];
@@ -11222,6 +11213,9 @@ ibf_load_code(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t bytecod
1122211213
VALUE op = ibf_load_small_value(load, &reading_pos);
1122311214
code[code_index] = (VALUE)&is_entries[op];
1122411215

11216+
if (operand_type == TS_IVC)
11217+
vm_ic_attr_index_initialize(((IVC)code[code_index]), INVALID_SHAPE_ID);
11218+
1122511219
if (insn == BIN(opt_getinlinecache) && operand_type == TS_IC) {
1122611220
// Store the instruction index for opt_getinlinecache on the IC for
1122711221
// YJIT to invalidate code when opt_setinlinecache runs.

debug_counter.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,16 +141,19 @@ RB_DEBUG_COUNTER(frame_C2R)
141141
RB_DEBUG_COUNTER(ivar_get_ic_hit)
142142
RB_DEBUG_COUNTER(ivar_get_ic_miss)
143143
RB_DEBUG_COUNTER(ivar_get_ic_miss_serial)
144-
RB_DEBUG_COUNTER(ivar_get_ic_miss_unset)
145144
RB_DEBUG_COUNTER(ivar_get_ic_miss_noobject)
146145
RB_DEBUG_COUNTER(ivar_set_ic_hit)
147-
RB_DEBUG_COUNTER(ivar_set_ic_miss)
146+
RB_DEBUG_COUNTER(ivar_set_ic_hit_not_attr)
148147
RB_DEBUG_COUNTER(ivar_set_ic_miss_serial)
149-
RB_DEBUG_COUNTER(ivar_set_ic_miss_unset)
148+
RB_DEBUG_COUNTER(ivar_set_cc_miss_set)
150149
RB_DEBUG_COUNTER(ivar_set_ic_miss_iv_hit)
151150
RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject)
152151
RB_DEBUG_COUNTER(ivar_get_base)
153152
RB_DEBUG_COUNTER(ivar_set_base)
153+
RB_DEBUG_COUNTER(ivar_get_ic_miss_set)
154+
RB_DEBUG_COUNTER(ivar_get_cc_miss_set)
155+
RB_DEBUG_COUNTER(ivar_get_ic_miss_unset)
156+
RB_DEBUG_COUNTER(ivar_get_cc_miss_unset)
154157

155158
/* local variable counts
156159
*

ext/objspace/objspace.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@ count_imemo_objects(int argc, VALUE *argv, VALUE self)
644644
INIT_IMEMO_TYPE_ID(imemo_callinfo);
645645
INIT_IMEMO_TYPE_ID(imemo_callcache);
646646
INIT_IMEMO_TYPE_ID(imemo_constcache);
647+
INIT_IMEMO_TYPE_ID(imemo_shape);
647648
#undef INIT_IMEMO_TYPE_ID
648649
}
649650

0 commit comments

Comments
 (0)