aboutsummaryrefslogtreecommitdiff
path: root/spill.c
diff options
context:
space:
mode:
Diffstat (limited to 'spill.c')
-rw-r--r--spill.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/spill.c b/spill.c
index e4dae28..f9dcc49 100644
--- a/spill.c
+++ b/spill.c
@@ -1,22 +1,14 @@
#include "all.h"
static void
-loopmark(Blk *hd, Blk *b, Phi *p)
+loopmark(Blk *hd, Blk *b)
{
- int k, head;
- uint n, a;
+ int k;
+ uint n;
- head = hd->id;
- if (b->id < head)
+ if (b->id < hd->id || b->visit == hd->id)
return;
- for (; p; p=p->link)
- for (a=0; a<p->narg; a++)
- if (p->blk[a] == b)
- if (rtype(p->arg[a]) == RTmp)
- bsset(hd->gen, p->arg[a].val);
- if (b->visit == head)
- return;
- b->visit = head;
+ b->visit = hd->id;
b->loop *= 10;
/* aggregate looping information at
* loop headers */
@@ -25,7 +17,7 @@ loopmark(Blk *hd, Blk *b, Phi *p)
if (b->nlive[k] > hd->nlive[k])
hd->nlive[k] = b->nlive[k];
for (n=0; n<b->npred; n++)
- loopmark(hd, b->pred[n], b->phi);
+ loopmark(hd, b->pred[n]);
}
static void
@@ -72,7 +64,7 @@ fillcost(Fn *fn)
hd = 0;
for (a=0; a<b->npred; a++)
if (b->pred[a]->id >= n) {
- loopmark(b, b->pred[a], b->phi);
+ loopmark(b, b->pred[a]);
hd = 1;
}
if (hd && debug['S']) {