From 8437d0c48d52267f826361cd7f38711bdc02e489 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 14 Nov 2011 23:57:05 +0100 Subject: [PATCH] Eliminate some rare occurrences of redundant PHIs. --- src/lj_opt_loop.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lj_opt_loop.c b/src/lj_opt_loop.c index 0e03205f..d1512468 100644 --- a/src/lj_opt_loop.c +++ b/src/lj_opt_loop.c @@ -159,11 +159,15 @@ static void loop_emit_phi(jit_State *J, IRRef1 *subst, IRRef1 *phi, IRRef nphi, for (i = 0; i < nphi; i++) { IRRef lref = phi[i]; IRIns *ir = IR(lref); - if (!irt_ismarked(ir->t)) { /* Emit PHI if not marked. */ + if (!irt_ismarked(ir->t)) { /* Emit PHI if not marked and not redundant. */ IRRef rref = subst[lref]; - if (rref > invar) - irt_setphi(IR(rref)->t); - emitir_raw(IRT(IR_PHI, irt_type(ir->t)), lref, rref); + if (lref == rref) { + irt_clearphi(ir->t); + } else { + if (rref > invar) + irt_setphi(IR(rref)->t); + emitir_raw(IRT(IR_PHI, irt_type(ir->t)), lref, rref); + } } else { /* Otherwise eliminate PHI. */ irt_clearmark(ir->t); irt_clearphi(ir->t);