summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-manip.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@gcc.gnu.org>2006-11-21 23:45:21 +0000
committerZdenek Dvorak <rakdver@gcc.gnu.org>2006-11-21 23:45:21 +0000
commitbf8dbe38637ce885c1b7af763f7728955083195e (patch)
tree227094b35bc9ee38d5a4faf20007c767c35a5d58 /gcc/tree-ssa-loop-manip.c
parentda2a24c3f60194266096c3b807798fbc20d38a7f (diff)
downloadgcc-bf8dbe38637ce885c1b7af763f7728955083195e.tar.gz
re PR tree-optimization/29902 (ICE in coalesce_abnormal_edges, at tree-outof-ssa.c:644)
PR tree-optimization/29902 * tree-ssa-loop-manip.c (can_unroll_loop_p): Return false if any involved ssa name appears in abnormal phi node. * g++.dg/tree-ssa/pr29902.C: New test. From-SVN: r119074
Diffstat (limited to 'gcc/tree-ssa-loop-manip.c')
-rw-r--r--gcc/tree-ssa-loop-manip.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 68e0fa6fe49..a23c787ccbe 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -625,7 +625,16 @@ can_unroll_loop_p (struct loop *loop, unsigned factor,
return false;
if (!number_of_iterations_exit (loop, exit, niter, false)
- || niter->cmp == ERROR_MARK)
+ || niter->cmp == ERROR_MARK
+ /* Scalar evolutions analysis might have copy propagated
+ the abnormal ssa names into these expressions, hence
+ emiting the computations based on them during loop
+ unrolling might create overlapping life ranges for
+ them, and failures in out-of-ssa. */
+ || contains_abnormal_ssa_name_p (niter->may_be_zero)
+ || contains_abnormal_ssa_name_p (niter->control.base)
+ || contains_abnormal_ssa_name_p (niter->control.step)
+ || contains_abnormal_ssa_name_p (niter->bound))
return false;
/* And of course, we must be able to duplicate the loop. */