From a4067978b6d1c2a25d91d82b1b0d384d98abdbe5 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 22 May 2016 23:45:40 +0200 Subject: [PATCH] Always walk IR constants in ascending order. Prerequisite for embedding 64 bit constants directly in the IR. Contributed by Peter Cawley. --- src/lj_opt_sink.c | 8 ++++++-- src/lj_record.c | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lj_opt_sink.c b/src/lj_opt_sink.c index 975ee831..49e13784 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. diff --git a/src/lj_record.c b/src/lj_record.c index f7c53567..b5fb6649 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -51,7 +51,7 @@ static void rec_check_ir(jit_State *J) { IRRef i, nins = J->cur.nins, nk = J->cur.nk; lua_assert(nk <= REF_BIAS && nins >= REF_BIAS && nins < 65536); - for (i = nins-1; i >= nk; i--) { + for (i = nk; i < nins; i++) { IRIns *ir = IR(i); uint32_t mode = lj_ir_mode[ir->o]; IRRef op1 = ir->op1;