aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;