IRRef refp = snap_ref(sn);
IRIns *ir = &T->ir[refp];
if (regsp_reg(ir->r) == RID_SUNK) {
+ uint8_t m;
if (J->slot[snap_slot(sn)] != snap_slot(sn)) continue;
pass23 = 1;
- lua_assert(ir->o == IR_TNEW || ir->o == IR_TDUP ||
- ir->o == IR_CNEW || ir->o == IR_CNEWI);
+ lj_assertJ(ir->o == IR_TNEW || ir->o == IR_TDUP ||
+ ir->o == IR_CNEW || ir->o == IR_CNEWI,
+ "sunk parent IR %04d has bad op %d", refp - REF_BIAS, ir->o);
- if (ir->op1 >= T->nk) snap_pref(J, T, map, nent, seen, ir->op1);
- if (ir->op2 >= T->nk) snap_pref(J, T, map, nent, seen, ir->op2);
+ m = lj_ir_mode[ir->o];
+ if (irm_op1(m) == IRMref) snap_pref(J, T, map, nent, seen, ir->op1);
+ if (irm_op2(m) == IRMref) snap_pref(J, T, map, nent, seen, ir->op2);
if (LJ_HASFFI && ir->o == IR_CNEWI) {
if (LJ_32 && refp+1 < T->nins && (ir+1)->o == IR_HIOP)
snap_pref(J, T, map, nent, seen, (ir+1)->op2);