diff options
| author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-21 23:45:21 +0000 |
|---|---|---|
| committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-21 23:45:21 +0000 |
| commit | 073924283c3944e098ae1011b58d31e0d05bdbcd (patch) | |
| tree | 227094b35bc9ee38d5a4faf20007c767c35a5d58 /gcc/tree-ssa-loop-manip.c | |
| parent | 1cbdf2bc31aef362e6ea17c15626832ebf610f87 (diff) | |
| download | ppe42-gcc-073924283c3944e098ae1011b58d31e0d05bdbcd.tar.gz ppe42-gcc-073924283c3944e098ae1011b58d31e0d05bdbcd.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119074 138bc75d-0d04-0410-961f-82ee72b054a4
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. */ |

