diff options
author | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-01 15:09:41 +0000 |
---|---|---|
committer | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-01 15:09:41 +0000 |
commit | ecf68307ff5fb0df28c908e6ee89a3c2f01f6c4b (patch) | |
tree | 6d4d09788e3e10097c2ae3a66de156d01ebe655b /gcc/tree-ssa-loop-niter.c | |
parent | ee26984e7979e0f12dda46518d559a6e7c048c98 (diff) | |
download | gcc-ecf68307ff5fb0df28c908e6ee89a3c2f01f6c4b.tar.gz |
PR tree-optimization/23410
* tree-ssa-loop-niter.c (scev_probably_wraps_p): Check that the
sequence is not wrapping during the first step.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103733 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 5ecdaebd08e..3ee27f4d5cc 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -1823,7 +1823,8 @@ scev_probably_wraps_p (tree type, tree base, tree step, struct nb_iter_bound *bound; tree delta, step_abs; tree unsigned_type, valid_niter; - tree base_plus_step; + tree base_plus_step, bpsps; + int cps, cpsps; /* FIXME: The following code will not be used anymore once http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html is @@ -1865,7 +1866,17 @@ scev_probably_wraps_p (tree type, tree base, tree step, *unknown_max = false; base_plus_step = fold_build2 (PLUS_EXPR, type, base, step); - switch (compare_trees (base_plus_step, base)) + bpsps = fold_build2 (PLUS_EXPR, type, base_plus_step, step); + cps = compare_trees (base_plus_step, base); + cpsps = compare_trees (bpsps, base_plus_step); + + /* Check that the sequence is not wrapping in the first step: it + should have the same monotonicity for the first two steps. See + PR23410. */ + if (cps != cpsps) + return true; + + switch (cps) { case -1: { |