mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Fix ITERN loop detection when hook checks are enabled.
Reported by Myria.
This commit is contained in:
parent
1b8d8cabdc
commit
d4b6bb80ea
@ -664,12 +664,17 @@ static LoopEvent rec_itern(jit_State *J, BCReg ra, BCReg rb)
|
|||||||
RecordIndex ix;
|
RecordIndex ix;
|
||||||
/* Since ITERN is recorded at the start, we need our own loop detection. */
|
/* Since ITERN is recorded at the start, we need our own loop detection. */
|
||||||
if (J->pc == J->startpc &&
|
if (J->pc == J->startpc &&
|
||||||
(J->cur.nins > REF_FIRST+1 ||
|
|
||||||
(J->cur.nins == REF_FIRST+1 && J->cur.ir[REF_FIRST].o != IR_PROF)) &&
|
|
||||||
J->framedepth + J->retdepth == 0 && J->parent == 0 && J->exitno == 0) {
|
J->framedepth + J->retdepth == 0 && J->parent == 0 && J->exitno == 0) {
|
||||||
J->instunroll = 0; /* Cannot continue unrolling across an ITERN. */
|
IRRef ref = REF_FIRST + LJ_HASPROFILE;
|
||||||
lj_record_stop(J, LJ_TRLINK_LOOP, J->cur.traceno); /* Looping trace. */
|
#ifdef LUAJIT_ENABLE_CHECKHOOK
|
||||||
return LOOPEV_ENTER;
|
ref += 3;
|
||||||
|
#endif
|
||||||
|
if (J->cur.nins > ref ||
|
||||||
|
(LJ_HASPROFILE && J->cur.nins == ref && J->cur.ir[ref-1].o != IR_PROF)) {
|
||||||
|
J->instunroll = 0; /* Cannot continue unrolling across an ITERN. */
|
||||||
|
lj_record_stop(J, LJ_TRLINK_LOOP, J->cur.traceno); /* Looping trace. */
|
||||||
|
return LOOPEV_ENTER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
J->maxslot = ra;
|
J->maxslot = ra;
|
||||||
lj_snap_add(J); /* Required to make JLOOP the first ins in a side-trace. */
|
lj_snap_add(J); /* Required to make JLOOP the first ins in a side-trace. */
|
||||||
|
Loading…
Reference in New Issue
Block a user