]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Fix DSE of USTORE. Have to remove OBAR, too.
authorMike Pall <mike>
Wed, 11 Apr 2012 14:22:05 +0000 (16:22 +0200)
committerMike Pall <mike>
Wed, 11 Apr 2012 14:22:05 +0000 (16:22 +0200)
src/lj_opt_mem.c

index d64d2e6ea767ea70135c4f581d42ebeb1990c487..17e29569f73c324b3a059eb4d53d9e46976b5199 100644 (file)
@@ -422,6 +422,19 @@ TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J)
        store->t.irt = IRT_NIL;
        store->op1 = store->op2 = 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. */
       }
       goto doemit;