diff options
author | Richard Biener <rguenther@suse.de> | 2012-12-18 13:12:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-12-18 13:12:34 +0000 |
commit | 8b679c9b242fe694269439e3e8be166a5e2d7dc9 (patch) | |
tree | 4097eac3f8bd34e5c316b801522cc85d298958a3 /gcc/tree-ssa-loop-niter.c | |
parent | 898be2f38dd5832034f726feab95661f589ec007 (diff) | |
download | gcc-8b679c9b242fe694269439e3e8be166a5e2d7dc9.zip gcc-8b679c9b242fe694269439e3e8be166a5e2d7dc9.tar.gz gcc-8b679c9b242fe694269439e3e8be166a5e2d7dc9.tar.bz2 |
re PR middle-end/55555 (miscompilation at -O2 (number_of_iterations))
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.
From-SVN: r194578
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index a9b7077..4a09999 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); |