diff options
author | Ori Bernstein <orib@google.com> | 2013-02-05 15:07:57 -0500 |
---|---|---|
committer | Ori Bernstein <orib@google.com> | 2013-02-05 15:07:57 -0500 |
commit | 7793ebdf61e4082843444877b6b62411537cb243 (patch) | |
tree | 824cef8fc7f00b92fab68ef76d0c9c2eb79a66ec | |
parent | ae076c5f98e0dda484f92ac400b5657f5924efb5 (diff) | |
download | mc-7793ebdf61e4082843444877b6b62411537cb243.tar.gz |
I think this is the right 'ok()' heuristic.
-rw-r--r-- | 6/isel.c | 4 | ||||
-rw-r--r-- | 6/ra.c | 27 |
2 files changed, 20 insertions, 11 deletions
@@ -699,8 +699,8 @@ void iprintf(FILE *fd, Insn *insn) if (insn->args[0]->mode != insn->args[1]->mode) insn->args[0] = coreg(insn->args[0]->reg.colour, insn->args[1]->mode); /* moving a reg to itself is dumb. */ - if (insn->args[0]->reg.colour == insn->args[1]->reg.colour) - return; + // if (insn->args[0]->reg.colour == insn->args[1]->reg.colour) + // return; break; default: break; @@ -636,13 +636,13 @@ static int conservative(Isel *s, regid u, regid v) /* FIXME: is this actually correct? */ static int ok(Isel *s, regid t, regid r) { - if (s->degree[t] >= K) - return 0; - if (!bshas(s->prepainted, t)) - return 0; - if (!gbhasedge(s, t, r)) - return 0; - return 1; + if (s->degree[t] < K) + return 1; + if (bshas(s->prepainted, t)) + return 1; + if (gbhasedge(s, t, r)) + return 1; + return 0; } static int combinable(Isel *s, regid u, regid v) @@ -674,7 +674,7 @@ static void combine(Isel *s, regid u, regid v) size_t i, j; int has; - if (debugopt['r'] || 1) + if (debugopt['r']) printedge(stdout, "combining:", u, v); if (wlhas(s->wlfreeze, s->nwlfreeze, v, &idx)) ldel(&s->wlfreeze, &s->nwlfreeze, idx); @@ -698,7 +698,7 @@ static void combine(Isel *s, regid u, regid v) } for (t = 0; adjiter(s, v, &t); t++) { - if (debugopt['r'] || 1) + if (debugopt['r']) printedge(stdout, "combine-putedge:", v, t); addedge(s, t, u); decdegree(s, t); @@ -1317,3 +1317,12 @@ void edges(Isel *s, regid u) } printf("\n"); } + +void whichwl(Isel *s, regid r) +{ + size_t o; + if (wlhas(s->wlspill, s->nwlspill, r, &o)) printf("on spill\n"); + if (wlhas(s->wlsimp, s->nwlsimp, r, &o)) printf("on simp\n"); + if (wlhas(s->wlfreeze, s->nwlfreeze, r, &o)) printf("on freeze\n"); + if (wlhas(s->selstk, s->nselstk, r, &o)) printf("on selstk\n"); +} |