diff options
author | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2006-11-21 23:45:21 +0000 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2006-11-21 23:45:21 +0000 |
commit | bf8dbe38637ce885c1b7af763f7728955083195e (patch) | |
tree | 227094b35bc9ee38d5a4faf20007c767c35a5d58 /gcc/tree-ssa-loop-manip.c | |
parent | da2a24c3f60194266096c3b807798fbc20d38a7f (diff) | |
download | gcc-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.c | 11 |
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. */ |