summaryrefslogtreecommitdiffstats
path: root/gcc/tree-ssa-loop-niter.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-18 13:12:34 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-18 13:12:34 +0000
commit6ee802add01ebadbc21a8e1db37e586fdaac4daf (patch)
tree4097eac3f8bd34e5c316b801522cc85d298958a3 /gcc/tree-ssa-loop-niter.c
parent26331a7a2729ddd60edaa83a9db55f293d7b30ea (diff)
downloadppe42-gcc-6ee802add01ebadbc21a8e1db37e586fdaac4daf.tar.gz
ppe42-gcc-6ee802add01ebadbc21a8e1db37e586fdaac4daf.zip
2012-12-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/55555 * tree-ssa-loop-niter.c (idx_infer_loop_bounds): Properly analyze evolution of the index for the loop it is used in. * tree-scalar-evolution.c (instantiate_scev_name): Take inner loop we will be creating a chrec for. Generalize fix for PR40281 and prune invalid SCEVs. (instantiate_scev_poly): Likewise - pass down inner loop we will be creating a chrec for. (instantiate_scev_binary): Take and pass through inner loop. (instantiate_array_ref): Likewise. (instantiate_scev_convert): Likewise. (instantiate_scev_not): Likewise. (instantiate_scev_3): Likewise. (instantiate_scev_2): Likewise. (instantiate_scev_1): Likewise. (instantiate_scev_r): Likewise. (resolve_mixers): Adjust. (instantiate_scev): Likewise. * gcc.dg/torture/pr55555.c: New testcase. * gcc.dg/vect/vect-iv-11.c: Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194578 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r--gcc/tree-ssa-loop-niter.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index a9b70778952..4a09999f434 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2671,7 +2671,12 @@ idx_infer_loop_bounds (tree base, tree *idx, void *dta)
upper = false;
}
- ev = instantiate_parameters (loop, analyze_scalar_evolution (loop, *idx));
+ struct loop *dloop = loop_containing_stmt (data->stmt);
+ if (!dloop)
+ return true;
+
+ ev = analyze_scalar_evolution (dloop, *idx);
+ ev = instantiate_parameters (loop, ev);
init = initial_condition (ev);
step = evolution_part_in_loop_num (ev, loop->num);
OpenPOWER on IntegriCloud