diff options
Diffstat (limited to 'ssa.c')
-rw-r--r-- | ssa.c | 17 |
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++) { |