Browse Source

Correct fix for reuse of SCEV results in FORL.

Mike Pall 11 years ago
parent
commit
b293063eb8
1 changed files with 1 additions and 1 deletions
  1. 1 1
      src/lj_record.c

+ 1 - 1
src/lj_record.c

@@ -437,7 +437,7 @@ static LoopEvent rec_for(jit_State *J, const BCIns *fori, int isforl)
   IRType t;
   IRType t;
   if (isforl) {  /* Handle FORL/JFORL opcodes. */
   if (isforl) {  /* Handle FORL/JFORL opcodes. */
     TRef idx = tr[FORL_IDX];
     TRef idx = tr[FORL_IDX];
-    if (mref(J->scev.pc, const BCIns) == fori) {
+    if (mref(J->scev.pc, const BCIns) == fori && tref_ref(idx) == J->scev.idx) {
       t = J->scev.t.irt;
       t = J->scev.t.irt;
       stop = J->scev.stop;
       stop = J->scev.stop;
       idx = emitir(IRT(IR_ADD, t), idx, J->scev.step);
       idx = emitir(IRT(IR_ADD, t), idx, J->scev.step);