diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-01-04 04:26:23 -0500 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-01-04 04:26:23 -0500 |
commit | 70f7e8687db2a13a671dee501090bf756db5a941 (patch) | |
tree | 4885a2e97a38734bf67e8192c54b358d42a4dfbd /lisc/spill.c | |
parent | 1a677839aad28d5da1ffc9b2dc3741945c68705b (diff) | |
download | roux-70f7e8687db2a13a671dee501090bf756db5a941.tar.gz |
fix dopm() in spill
Diffstat (limited to 'lisc/spill.c')
-rw-r--r-- | lisc/spill.c | 25 |
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; |