summaryrefslogtreecommitdiffstats
path: root/gcc/tree-ssa-loop-manip.c
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-21 23:45:21 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-21 23:45:21 +0000
commit073924283c3944e098ae1011b58d31e0d05bdbcd (patch)
tree227094b35bc9ee38d5a4faf20007c767c35a5d58 /gcc/tree-ssa-loop-manip.c
parent1cbdf2bc31aef362e6ea17c15626832ebf610f87 (diff)
downloadppe42-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.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. */
OpenPOWER on IntegriCloud