From a4067978b6d1c2a25d91d82b1b0d384d98abdbe5 Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
Date: Sun, 22 May 2016 23:45:40 +0200
Subject: 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;
-- 
cgit v1.2.3-55-g6feb