summary refs log tree commit diff
path: root/lisc/spill.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/spill.c')
-rw-r--r--lisc/spill.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lisc/spill.c b/lisc/spill.c
index 6c72b67..898932e 100644
--- a/lisc/spill.c
+++ b/lisc/spill.c
@@ -6,7 +6,7 @@ loopmark(Blk **rpo, int head, Blk *b)
 {
 	uint p;
 
-	if (b->id <= head || b->visit == head)
+	if (b->id < head || b->visit == head)
 		return;
 	b->visit = head;
 	b->loop *= 10;
@@ -66,11 +66,13 @@ fillcost(Fn *fn)
 		for (p=b->phi; p; p=p->link) {
 			/* zero cost for temporaries used
 			 * in phi instructions */
-			assert(rtype(p->to) == RSym);
-			assert(fn->sym[p->to.val].type == STmp);
 			symuse(p->to, 0, 0, fn);
-			for (a=0; a<p->narg; a++)
-				symuse(p->arg[a], 1, 0, fn);
+			for (a=0; a<p->narg; a++) {
+				n = p->blk[a]->loop;
+				assert(b->npred && "invalid cfg");
+				n /= b->npred;
+				symuse(p->arg[a], 1, n, fn);
+			}
 		}
 		n = b->loop;
 		for (i=b->ins; i-b->ins < b->nins; i++) {