Explorar o código

Fix PHI remarking in SINK pass.

Thanks to Vyacheslav Egorov.
Mike Pall %!s(int64=9) %!d(string=hai) anos
pai
achega
a7bec69a75
Modificáronse 1 ficheiros con 2 adicións e 3 borrados
  1. 2 3
      src/lj_opt_sink.c

+ 2 - 3
src/lj_opt_sink.c

@@ -153,10 +153,9 @@ static void sink_remark_phi(jit_State *J)
     remark = 0;
     for (ir = IR(J->cur.nins-1); ir->o == IR_PHI; ir--) {
       IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
-      if (((irl->t.irt ^ irr->t.irt) & IRT_MARK))
-	remark = 1;
-      else if (irl->prev == irr->prev)
+      if (!((irl->t.irt ^ irr->t.irt) & IRT_MARK) && irl->prev == irr->prev)
 	continue;
+      remark |= (~(irl->t.irt & irr->t.irt) & IRT_MARK);
       irt_setmark(IR(ir->op1)->t);
       irt_setmark(IR(ir->op2)->t);
     }