summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2012-04-11 16:22:05 +0200
committerMike Pall <mike>2012-04-11 16:22:05 +0200
commit3ed5172fe49ab9cd08e803c3bec1fc29492e24fe (patch)
treed2ece70de48960d7f9b6c2f1e9be02959211b7bc
parent39112fd6fb219ba3164bb26ae7b823d6cff5ac20 (diff)
downloadluajit2-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.tar.gz
Fix DSE of USTORE. Have to remove OBAR, too.
-rw-r--r--src/lj_opt_mem.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c
index d64d2e6e..17e29569 100644
--- a/src/lj_opt_mem.c
+++ b/src/lj_opt_mem.c
@@ -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;