aboutsummaryrefslogtreecommitdiff
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)
downloadluajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.tar.gz
luajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.tar.bz2
luajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.zip
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)
422 store->t.irt = IRT_NIL; 422 store->t.irt = IRT_NIL;
423 store->op1 = store->op2 = 0; 423 store->op1 = store->op2 = 0;
424 store->prev = 0; 424 store->prev = 0;
425 if (ref+1 < J->cur.nins &&
426 store[1].o == IR_OBAR && store[1].op1 == xref) {
427 IRRef1 *bp = &J->chain[IR_OBAR];
428 IRIns *obar;
429 for (obar = IR(*bp); *bp > ref+1; obar = IR(*bp))
430 bp = &obar->prev;
431 /* Remove OBAR, too. */
432 *bp = obar->prev;
433 obar->o = IR_NOP;
434 obar->t.irt = IRT_NIL;
435 obar->op1 = obar->op2 = 0;
436 obar->prev = 0;
437 }
425 /* Now emit the new store instead. */ 438 /* Now emit the new store instead. */
426 } 439 }
427 goto doemit; 440 goto doemit;