summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/tree-ssa-loop-niter.c21
2 files changed, 17 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 24be81187b7..c9df1058600 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2005-08-16 Sebastian Pop <pop@cri.ensmp.fr>
+
+ * tree-ssa-loop-niter.c (scev_probably_wraps_p): Reword a comment.
+
2005-08-15 Richard Earnshaw <richard.earnshaw@arm.com>
PR target/23355
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 8399faf30e2..ce4b3cf7df1 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -1891,19 +1891,24 @@ scev_probably_wraps_p (tree type, tree base, tree step,
/* If AT_STMT represents a cast operation, we may not be able to
take advantage of the undefinedness of signed type evolutions.
+
+ implement-c.texi states: "For conversion to a type of width
+ N, the value is reduced modulo 2^N to be within range of the
+ type;"
+
See PR 21959 for a test case. Essentially, given a cast
operation
- unsigned char i;
- signed char i.0;
+ unsigned char uc;
+ signed char sc;
...
- i.0_6 = (signed char) i_2;
- if (i.0_6 < 0)
+ sc = (signed char) uc;
+ if (sc < 0)
...
- where i_2 and i.0_6 have the scev {0, +, 1}, we would consider
- i_2 to wrap around, but not i.0_6, because it is of a signed
- type. This causes VRP to erroneously fold the predicate above
- because it thinks that i.0_6 cannot be negative. */
+ where uc and sc have the scev {0, +, 1}, we would consider uc to
+ wrap around, but not sc, because it is of a signed type. This
+ causes VRP to erroneously fold the predicate above because it
+ thinks that sc cannot be negative. */
if (at_stmt && TREE_CODE (at_stmt) == MODIFY_EXPR)
{
tree rhs = TREE_OPERAND (at_stmt, 1);