diff options
author | Mike Pall <mike> | 2016-05-22 23:45:40 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-05-22 23:45:40 +0200 |
commit | a4067978b6d1c2a25d91d82b1b0d384d98abdbe5 (patch) | |
tree | 426d8278c1925e734c87dbda823f0cd7262b4ba8 | |
parent | 3152ed98ea3d99579940eb5e72da687ce66792de (diff) | |
download | luajit-a4067978b6d1c2a25d91d82b1b0d384d98abdbe5.tar.gz luajit-a4067978b6d1c2a25d91d82b1b0d384d98abdbe5.tar.bz2 luajit-a4067978b6d1c2a25d91d82b1b0d384d98abdbe5.zip |
Always walk IR constants in ascending order.
Prerequisite for embedding 64 bit constants directly in the IR.
Contributed by Peter Cawley.
-rw-r--r-- | src/lj_opt_sink.c | 8 | ||||
-rw-r--r-- | 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) | |||
166 | /* Sweep instructions and tag sunken allocations and stores. */ | 166 | /* Sweep instructions and tag sunken allocations and stores. */ |
167 | static void sink_sweep_ins(jit_State *J) | 167 | static void sink_sweep_ins(jit_State *J) |
168 | { | 168 | { |
169 | IRIns *ir, *irfirst = IR(J->cur.nk); | 169 | IRIns *ir, *irbase = IR(REF_BASE); |
170 | for (ir = IR(J->cur.nins-1) ; ir >= irfirst; ir--) { | 170 | for (ir = IR(J->cur.nins-1) ; ir >= irbase; ir--) { |
171 | switch (ir->o) { | 171 | switch (ir->o) { |
172 | case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: { | 172 | case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: { |
173 | IRIns *ira = sink_checkalloc(J, ir); | 173 | IRIns *ira = sink_checkalloc(J, ir); |
@@ -217,6 +217,10 @@ static void sink_sweep_ins(jit_State *J) | |||
217 | break; | 217 | break; |
218 | } | 218 | } |
219 | } | 219 | } |
220 | for (ir = IR(J->cur.nk); ir < irbase; ir++) { | ||
221 | irt_clearmark(ir->t); | ||
222 | ir->prev = REGSP_INIT; | ||
223 | } | ||
220 | } | 224 | } |
221 | 225 | ||
222 | /* Allocation sinking and store sinking. | 226 | /* 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) | |||
51 | { | 51 | { |
52 | IRRef i, nins = J->cur.nins, nk = J->cur.nk; | 52 | IRRef i, nins = J->cur.nins, nk = J->cur.nk; |
53 | lua_assert(nk <= REF_BIAS && nins >= REF_BIAS && nins < 65536); | 53 | lua_assert(nk <= REF_BIAS && nins >= REF_BIAS && nins < 65536); |
54 | for (i = nins-1; i >= nk; i--) { | 54 | for (i = nk; i < nins; i++) { |
55 | IRIns *ir = IR(i); | 55 | IRIns *ir = IR(i); |
56 | uint32_t mode = lj_ir_mode[ir->o]; | 56 | uint32_t mode = lj_ir_mode[ir->o]; |
57 | IRRef op1 = ir->op1; | 57 | IRRef op1 = ir->op1; |