aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--copy.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/copy.c b/copy.c
index c76bb79..43b9490 100644
--- a/copy.c
+++ b/copy.c
@@ -60,7 +60,13 @@ usewidthle(Fn *fn, Ref r, int w)
switch (u->type) {
case UPhi:
p = u->u.phi;
- if (p->visit)
+ /* during gvn, phi nodes may be
+ * replaced by other temps; in
+ * this case, the replaced phi
+ * uses are added to the
+ * replacement temp uses and
+ * Phi.to is set to R */
+ if (p->visit || req(p->to, R))
continue;
p->visit = 1;
b = usewidthle(fn, p->to, w);