summaryrefslogtreecommitdiff
path: root/lisc
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-01-04 04:26:23 -0500
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-01-04 04:26:23 -0500
commit70f7e8687db2a13a671dee501090bf756db5a941 (patch)
tree4885a2e97a38734bf67e8192c54b358d42a4dfbd /lisc
parent1a677839aad28d5da1ffc9b2dc3741945c68705b (diff)
downloadroux-70f7e8687db2a13a671dee501090bf756db5a941.tar.gz
fix dopm() in spill
Diffstat (limited to 'lisc')
-rw-r--r--lisc/spill.c25
1 files changed, 6 insertions, 19 deletions
diff --git a/lisc/spill.c b/lisc/spill.c
index 966f7aa..c40868c 100644
--- a/lisc/spill.c
+++ b/lisc/spill.c
@@ -210,21 +210,8 @@ limit(Bits *b, int k, Bits *f)
slot(tarr[i]);
}
-static int
-nreg(int k)
-{
- switch (k) {
- default:
- diag("spill: nreg defaulted");
- case 0:
- return NIReg;
- case 1:
- return NFReg;
- }
-}
-
static void
-limit2(Bits *b, Bits *fst)
+limit2(Bits *b, int k1, int k2, Bits *fst)
{
Bits u, t;
int k, z;
@@ -234,7 +221,7 @@ limit2(Bits *b, Bits *fst)
for (k=0; k<2; k++) {
for (z=0; z<BITS; z++)
u.t[z] = t.t[z] & mask[k].t[z];
- limit(&u, nreg(k), fst);
+ limit(&u, k == 0 ? k1 : k2, fst);
for (z=0; z<BITS; z++)
b->t[z] |= u.t[z];
}
@@ -317,7 +304,7 @@ dopm(Blk *b, Ins *i, Bits *v)
u = *v;
if (i != b->ins && (i-1)->op == OCall) {
v->t[0] &= ~calldef(*(i-1), 0);
- limit(v, NReg - NRSave, 0);
+ limit2(v, NIReg - NISave, NFReg - NFSave, 0);
r = 0;
for (n=0; n<NRSave; n++)
r |= BIT(rsave[n]);
@@ -395,7 +382,7 @@ spill(Fn *fn)
/* back-edge */
BZERO(v);
for (k=0; k<2; k++) {
- n = nreg(k);
+ n = k == 0 ? NIReg : NFReg;
for (z=0; z<BITS; z++) {
u.t[z] = b->out.t[z]
& hd->gen.t[z]
@@ -425,7 +412,7 @@ spill(Fn *fn)
w.t[z] &= r;
}
}
- limit2(&v, &w);
+ limit2(&v, NIReg, NFReg, &w);
}
b->out = v;
@@ -474,7 +461,7 @@ spill(Fn *fn)
break;
}
u = v;
- limit2(&v, &w);
+ limit2(&v, NIReg, NFReg, &w);
for (n=0; n<2; n++)
if (rtype(i->arg[n]) == RTmp) {
t = i->arg[n].val;