aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2021-09-21 13:15:06 +0200
committerMike Pall <mike>2021-09-21 13:15:06 +0200
commit1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36 (patch)
tree414da1fb38708d75555d7040f45e2c3eb95aec75
parent421c4c798791d27b7f967df39891c4e4fa1d107c (diff)
downloadluajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.tar.gz
luajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.tar.bz2
luajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.zip
Ensure ITERN forward progress on interpreter bailout.
Reported by Yichun Zhang and ExtReMLapin. #744
-rw-r--r--src/lj_record.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index 7f7a0b63..4fe1a056 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -2767,9 +2767,12 @@ void lj_record_setup(jit_State *J)
2767 sidecheck: 2767 sidecheck:
2768 if ((traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || 2768 if ((traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] ||
2769 T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + 2769 T->snap[J->exitno].count >= J->param[JIT_P_hotexit] +
2770 J->param[JIT_P_tryside]) && 2770 J->param[JIT_P_tryside])) {
2771 !(bc_op(*J->pc) == BC_JLOOP && 2771 if (bc_op(*J->pc) == BC_JLOOP) {
2772 bc_op(traceref(J, bc_d(*J->pc))->startins) == BC_ITERN)) { 2772 BCIns startins = traceref(J, bc_d(*J->pc))->startins;
2773 if (bc_op(startins) == BC_ITERN)
2774 rec_itern(J, bc_a(startins), bc_b(startins));
2775 }
2773 lj_record_stop(J, LJ_TRLINK_INTERP, 0); 2776 lj_record_stop(J, LJ_TRLINK_INTERP, 0);
2774 } 2777 }
2775 } else { /* Root trace. */ 2778 } else { /* Root trace. */