Fix DSE of USTORE. Have to remove OBAR, too.

This commit is contained in:
Mike Pall 2012-04-11 16:22:05 +02:00
parent 39112fd6fb
commit 3ed5172fe4

View File

@ -422,6 +422,19 @@ TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J)
store->t.irt = IRT_NIL; store->t.irt = IRT_NIL;
store->op1 = store->op2 = 0; store->op1 = store->op2 = 0;
store->prev = 0; store->prev = 0;
if (ref+1 < J->cur.nins &&
store[1].o == IR_OBAR && store[1].op1 == xref) {
IRRef1 *bp = &J->chain[IR_OBAR];
IRIns *obar;
for (obar = IR(*bp); *bp > ref+1; obar = IR(*bp))
bp = &obar->prev;
/* Remove OBAR, too. */
*bp = obar->prev;
obar->o = IR_NOP;
obar->t.irt = IRT_NIL;
obar->op1 = obar->op2 = 0;
obar->prev = 0;
}
/* Now emit the new store instead. */ /* Now emit the new store instead. */
} }
goto doemit; goto doemit;