From 05ef03e2d04ccde3c881166268575308315a6ea0 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 11 Aug 2011 22:04:38 +0200 Subject: [PATCH] Don't bother to chain NOPs. --- src/lj_opt_dce.c | 4 +--- src/lj_opt_mem.c | 8 ++++---- src/lj_record.c | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/lj_opt_dce.c b/src/lj_opt_dce.c index 253fe3d2..0587262d 100644 --- a/src/lj_opt_dce.c +++ b/src/lj_opt_dce.c @@ -47,17 +47,15 @@ static void dce_propagate(jit_State *J) pchain[ir->o] = &ir->prev; } else if (!ir_sideeff(ir)) { *pchain[ir->o] = ir->prev; /* Reroute original instruction chain. */ - *pchain[IR_NOP] = (IRRef1)ins; ir->t.irt = IRT_NIL; ir->o = IR_NOP; /* Replace instruction with NOP. */ ir->op1 = ir->op2 = 0; - pchain[IR_NOP] = &ir->prev; + ir->prev = 0; continue; } if (ir->op1 >= REF_FIRST) irt_setmark(IR(ir->op1)->t); if (ir->op2 >= REF_FIRST) irt_setmark(IR(ir->op2)->t); } - *pchain[IR_NOP] = 0; /* Terminate NOP chain. */ } /* Dead Code Elimination. diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c index 40064639..a90d0979 100644 --- a/src/lj_opt_mem.c +++ b/src/lj_opt_mem.c @@ -323,7 +323,7 @@ TRef LJ_FASTCALL lj_opt_dse_ahstore(jit_State *J) goto doemit; /* No elimination possible. */ /* Remove redundant store from chain and replace with NOP. */ *refp = store->prev; - store->o = IR_NOP; /* Unchained NOP -- does anybody care? */ + store->o = IR_NOP; store->t.irt = IRT_NIL; store->op1 = store->op2 = 0; store->prev = 0; @@ -418,7 +418,7 @@ TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J) goto doemit; /* No elimination possible. */ /* Remove redundant store from chain and replace with NOP. */ *refp = store->prev; - store->o = IR_NOP; /* Unchained NOP -- does anybody care? */ + store->o = IR_NOP; store->t.irt = IRT_NIL; store->op1 = store->op2 = 0; store->prev = 0; @@ -511,7 +511,7 @@ TRef LJ_FASTCALL lj_opt_dse_fstore(jit_State *J) goto doemit; /* No elimination possible. */ /* Remove redundant store from chain and replace with NOP. */ *refp = store->prev; - store->o = IR_NOP; /* Unchained NOP -- does anybody care? */ + store->o = IR_NOP; store->t.irt = IRT_NIL; store->op1 = store->op2 = 0; store->prev = 0; @@ -761,7 +761,7 @@ TRef LJ_FASTCALL lj_opt_dse_xstore(jit_State *J) goto doemit; /* No elimination possible. */ /* Remove redundant store from chain and replace with NOP. */ *refp = store->prev; - store->o = IR_NOP; /* Unchained NOP -- does anybody care? */ + store->o = IR_NOP; store->t.irt = IRT_NIL; store->op1 = store->op2 = 0; store->prev = 0; diff --git a/src/lj_record.c b/src/lj_record.c index e4c59bf4..0deaade1 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -67,7 +67,7 @@ static void rec_check_ir(jit_State *J) if (ir->prev) { lua_assert(ir->prev >= nk); lua_assert(i >= REF_BIAS ? ir->prev < i : ir->prev > i); - lua_assert(IR(ir->prev)->o == ir->o); + lua_assert(ir->o == IR_NOP || IR(ir->prev)->o == ir->o); } } }