aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Dvorak <ook@ucw.cz>2007-08-23 01:05:05 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2007-08-22 23:05:05 +0000
commit24938ce920406ea9ca0aafc4a1886b0251a88998 (patch)
tree365bdf9d6b8498fde007508ac75cee89226d9071
parentaa2f6edbf74131aff10dae81dab928b3ddbb307e (diff)
downloadgcc-24938ce920406ea9ca0aafc4a1886b0251a88998.zip
gcc-24938ce920406ea9ca0aafc4a1886b0251a88998.tar.gz
gcc-24938ce920406ea9ca0aafc4a1886b0251a88998.tar.bz2
re PR tree-optimization/32949 (suboptimal address generation for int indices on 64-bit targets)
2007-08-22 Zdenek Dvorak <ook@ucw.cz> PR tree-optimization/32949 * tree-ssa-loop-niter.c (scev_probably_wraps_p): Test nowrap_type_p before failing for ivs with non-constant step. From-SVN: r127720
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-loop-niter.c8
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0d8dae1..6594bea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-08-22 Zdenek Dvorak <ook@ucw.cz>
+
+ PR tree-optimization/32949
+ * tree-ssa-loop-niter.c (scev_probably_wraps_p): Test nowrap_type_p
+ before failing for ivs with non-constant step.
+
2007-08-22 Hans-Peter Nilsson <hp@axis.com>
* doc/md.texi (Iterators): Renamed from Macros. All contents
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 6d1834e..40e7051 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2969,8 +2969,7 @@ scev_probably_wraps_p (tree base, tree step,
2032, 2040, 0, 8, ..., but the code is still legal. */
if (chrec_contains_undetermined (base)
- || chrec_contains_undetermined (step)
- || TREE_CODE (step) != INTEGER_CST)
+ || chrec_contains_undetermined (step))
return true;
if (integer_zerop (step))
@@ -2981,6 +2980,11 @@ scev_probably_wraps_p (tree base, tree step,
if (use_overflow_semantics && nowrap_type_p (type))
return false;
+ /* To be able to use estimates on number of iterations of the loop,
+ we must have an upper bound on the absolute value of the step. */
+ if (TREE_CODE (step) != INTEGER_CST)
+ return true;
+
/* Don't issue signed overflow warnings. */
fold_defer_overflow_warnings ();