Don't bother to chain NOPs.

This commit is contained in:
Mike Pall 2011-08-11 22:04:38 +02:00
parent e8fa76feac
commit 05ef03e2d0
3 changed files with 6 additions and 8 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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);
}
}
}