diff options
| author | Mike Pall <mike> | 2011-05-26 18:05:19 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-05-26 18:05:19 +0200 |
| commit | 840a067d4e3538ab7887d128a817be44333684d6 (patch) | |
| tree | e9aa7f73aa0a46ff58165b8f58bc6a7af6fecd48 | |
| parent | 8d4400331d4df7d53a80de6f466e6c7ee3ca9380 (diff) | |
| download | luajit-840a067d4e3538ab7887d128a817be44333684d6.tar.gz luajit-840a067d4e3538ab7887d128a817be44333684d6.tar.bz2 luajit-840a067d4e3538ab7887d128a817be44333684d6.zip | |
ARM: Fix rematerialization scheduler.
| -rw-r--r-- | src/lj_asm.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c index 640b6e15..05c43fed 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
| @@ -488,7 +488,7 @@ static Reg ra_allock(ASMState *as, int32_t k, RegSet allow) | |||
| 488 | } | 488 | } |
| 489 | work = as->freeset & allow; | 489 | work = as->freeset & allow; |
| 490 | if (work) | 490 | if (work) |
| 491 | r = rset_pickbot(work); | 491 | r = rset_picktop(work); |
| 492 | else | 492 | else |
| 493 | r = ra_evict(as, allow); | 493 | r = ra_evict(as, allow); |
| 494 | RA_DBGX((as, "allock $x $r", k, r)); | 494 | RA_DBGX((as, "allock $x $r", k, r)); |
| @@ -506,7 +506,7 @@ static void ra_allockreg(ASMState *as, int32_t k, Reg r) | |||
| 506 | IRIns irdummy; | 506 | IRIns irdummy; |
| 507 | irdummy.t.irt = IRT_INT; | 507 | irdummy.t.irt = IRT_INT; |
| 508 | ra_scratch(as, RID2RSET(r)); | 508 | ra_scratch(as, RID2RSET(r)); |
| 509 | emit_movrr(as, &irdummy, kr, r); | 509 | emit_movrr(as, &irdummy, r, kr); |
| 510 | } | 510 | } |
| 511 | } | 511 | } |
| 512 | #else | 512 | #else |
| @@ -958,7 +958,8 @@ static void asm_phi_shuffle(ASMState *as) | |||
| 958 | if (r != left) { /* Mismatch? */ | 958 | if (r != left) { /* Mismatch? */ |
| 959 | if (!rset_test(as->freeset, r)) { /* PHI register blocked? */ | 959 | if (!rset_test(as->freeset, r)) { /* PHI register blocked? */ |
| 960 | IRRef ref = regcost_ref(as->cost[r]); | 960 | IRRef ref = regcost_ref(as->cost[r]); |
| 961 | if (irt_ismarked(IR(ref)->t)) { /* Blocked by other PHI (w/reg)? */ | 961 | /* Blocked by other PHI (w/reg)? */ |
| 962 | if (!ra_iskref(ref) && irt_ismarked(IR(ref)->t)) { | ||
| 962 | rset_set(blocked, r); | 963 | rset_set(blocked, r); |
| 963 | if (ra_hasreg(left)) | 964 | if (ra_hasreg(left)) |
| 964 | rset_set(blockedby, left); | 965 | rset_set(blockedby, left); |
