summary refs log tree commit diff
path: root/ssa.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssa.c')
-rw-r--r--ssa.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/ssa.c b/ssa.c
index 632ebbe..9aff73c 100644
--- a/ssa.c
+++ b/ssa.c
@@ -40,7 +40,7 @@ filluse(Fn *fn)
 	Blk *b;
 	Phi *p;
 	Ins *i;
-	int m, t, w;
+	int m, t, tp, w;
 	uint a;
 	Tmp *tmp;
 
@@ -49,8 +49,8 @@ filluse(Fn *fn)
 	for (t=Tmp0; t<fn->ntmp; t++) {
 		tmp[t].ndef = 0;
 		tmp[t].nuse = 0;
-		tmp[t].phi = 0;
 		tmp[t].cls = 0;
+		tmp[t].phi = 0;
 		tmp[t].width = WFull;
 		if (tmp[t].use == 0)
 			tmp[t].use = vnew(0, sizeof(Use), Pfn);
@@ -58,16 +58,17 @@ filluse(Fn *fn)
 	for (b=fn->start; b; b=b->link) {
 		for (p=b->phi; p; p=p->link) {
 			assert(rtype(p->to) == RTmp);
-			t = p->to.val;
-			tmp[t].ndef++;
-			tmp[t].cls = p->cls;
-			tmp[t].phi = p->to.val;
+			tp = p->to.val;
+			tmp[tp].ndef++;
+			tmp[tp].cls = p->cls;
+			tp = phicls(tp, fn->tmp);
 			for (a=0; a<p->narg; a++)
 				if (rtype(p->arg[a]) == RTmp) {
 					t = p->arg[a].val;
 					adduse(&tmp[t], UPhi, b, p);
-					if (!tmp[t].phi)
-						tmp[t].phi = p->to.val;
+					t = phicls(t, fn->tmp);
+					if (t != tp)
+						tmp[t].phi = tp;
 				}
 		}
 		for (i=b->ins; i-b->ins < b->nins; i++) {