From fdf6eb467858288578fbd664c5bd5d9ea9533787 Mon Sep 17 00:00:00 2001 From: Peter Cawley Date: Wed, 18 May 2016 02:55:35 +0100 Subject: [PATCH] sink: Sweep constants in increasing order. --- src/lj_opt_sink.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lj_opt_sink.c b/src/lj_opt_sink.c index 975ee831..c5e9a95a 100644 --- a/src/lj_opt_sink.c +++ b/src/lj_opt_sink.c @@ -166,8 +166,8 @@ static void sink_remark_phi(jit_State *J) /* Sweep instructions and tag sunken allocations and stores. */ static void sink_sweep_ins(jit_State *J) { - IRIns *ir, *irfirst = IR(J->cur.nk); - for (ir = IR(J->cur.nins-1) ; ir >= irfirst; ir--) { + IRIns *ir, *irbase = IR(REF_BASE); + for (ir = IR(J->cur.nins-1) ; ir >= irbase; ir--) { switch (ir->o) { case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: { IRIns *ira = sink_checkalloc(J, ir); @@ -217,6 +217,10 @@ static void sink_sweep_ins(jit_State *J) break; } } + for (ir = IR(J->cur.nk); ir < irbase; ++ir) { + irt_clearmark(ir->t); + ir->prev = REGSP_INIT; + } } /* Allocation sinking and store sinking.