ARM: Fix rematerialization scheduler.

This commit is contained in:
Mike Pall 2011-05-26 18:05:19 +02:00
parent 8d4400331d
commit 840a067d4e

View File

@ -488,7 +488,7 @@ static Reg ra_allock(ASMState *as, int32_t k, RegSet allow)
} }
work = as->freeset & allow; work = as->freeset & allow;
if (work) if (work)
r = rset_pickbot(work); r = rset_picktop(work);
else else
r = ra_evict(as, allow); r = ra_evict(as, allow);
RA_DBGX((as, "allock $x $r", k, r)); RA_DBGX((as, "allock $x $r", k, r));
@ -506,7 +506,7 @@ static void ra_allockreg(ASMState *as, int32_t k, Reg r)
IRIns irdummy; IRIns irdummy;
irdummy.t.irt = IRT_INT; irdummy.t.irt = IRT_INT;
ra_scratch(as, RID2RSET(r)); ra_scratch(as, RID2RSET(r));
emit_movrr(as, &irdummy, kr, r); emit_movrr(as, &irdummy, r, kr);
} }
} }
#else #else
@ -958,7 +958,8 @@ static void asm_phi_shuffle(ASMState *as)
if (r != left) { /* Mismatch? */ if (r != left) { /* Mismatch? */
if (!rset_test(as->freeset, r)) { /* PHI register blocked? */ if (!rset_test(as->freeset, r)) { /* PHI register blocked? */
IRRef ref = regcost_ref(as->cost[r]); IRRef ref = regcost_ref(as->cost[r]);
if (irt_ismarked(IR(ref)->t)) { /* Blocked by other PHI (w/reg)? */ /* Blocked by other PHI (w/reg)? */
if (!ra_iskref(ref) && irt_ismarked(IR(ref)->t)) {
rset_set(blocked, r); rset_set(blocked, r);
if (ra_hasreg(left)) if (ra_hasreg(left))
rset_set(blockedby, left); rset_set(blockedby, left);