qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit 3ad28f1560132688e5a1e951c2152708b2992ee3
parent ef07c2fd9d053ddf54397d529add040726782c7d
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date:   Fri, 20 Nov 2015 15:28:21 -0500

wip on rega bug (sequel of last commit)

Diffstat:
Mlisc/rega.c | 17++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/lisc/rega.c b/lisc/rega.c @@ -223,7 +223,8 @@ move(int r, Ref to, RMap *m) ralloc(m, t); BCLR(m->b, r); } - t = r1 == -1 ? r : to.val; + // t = r1 == -1 ? r : to.val; + t = req(to, R) ? r : to.val; radd(m, t, r); } @@ -231,7 +232,7 @@ static Ins * dopm(Blk *b, Ins *i, RMap *m) { RMap m0; - int n, r, r1, t; + int n, r, r1, t, s; Ins *i0, *i1, *ip, *ir; ulong def; @@ -251,13 +252,23 @@ dopm(Blk *b, Ins *i, RMap *m) if (!(BIT(rsave[r]) & def)) move(rsave[r], R, m); } - for (npm=0, n=0; n<m->n; n++) + for (npm=0, n=0; n<m->n; n++) { + t = m->t[n]; + r1 = m->r[n]; + r = rfind(&m0, t); + if (r != -1) + pmadd(TMP(r1), TMP(r), tmp[t].wide); + else if ((s = tmp[t].slot) != -1) + pmadd(TMP(r1), SLOT(s), tmp[t].wide); + } +#if 0 if ((t = m->t[n]) >= Tmp0) { r1 = m->r[n]; r = rfind(&m0, t); assert(r != -1); pmadd(TMP(r1), TMP(r), tmp[t].wide); } +#endif for (ip=i; ip<i1; ip++) { if (!req(ip->to, R)) rfree(m, ip->to.val);