diff options
author | Sebastian Pop <pop@cri.ensmp.fr> | 2005-08-16 11:41:33 +0200 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2005-08-16 09:41:33 +0000 |
commit | 546ad2d9fce6b9ed05b0634a9731db3609414c9d (patch) | |
tree | 044bb428cfee06d0eb3cfb07601e98fd7fdcba38 | |
parent | 39c39be09e9537d1d642cc49a48d2a2d76a7d960 (diff) | |
download | gcc-546ad2d9fce6b9ed05b0634a9731db3609414c9d.zip gcc-546ad2d9fce6b9ed05b0634a9731db3609414c9d.tar.gz gcc-546ad2d9fce6b9ed05b0634a9731db3609414c9d.tar.bz2 |
* tree-ssa-loop-niter.c (scev_probably_wraps_p): Reword a comment.
From-SVN: r103152
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 21 |
2 files changed, 17 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24be811..c9df105 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 8399faf..ce4b3cf 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); |