aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@redhat.com>2005-06-15 15:19:51 +0000
committerDiego Novillo <dnovillo@gcc.gnu.org>2005-06-15 11:19:51 -0400
commit38e19e4c73b8614fb094c5c36abdd7da47a26a50 (patch)
tree4661bb0b3249ca39b4637e0ce4e79fca3a9451e4 /gcc
parent352364de596dfb63506382fe3d821b5680f1ab00 (diff)
downloadgcc-38e19e4c73b8614fb094c5c36abdd7da47a26a50.zip
gcc-38e19e4c73b8614fb094c5c36abdd7da47a26a50.tar.gz
gcc-38e19e4c73b8614fb094c5c36abdd7da47a26a50.tar.bz2
tree-vrp.c (vrp_int_const_binop): Do not handle MAX_EXPR when the result overflows.
* tree-vrp.c (vrp_int_const_binop): Do not handle MAX_EXPR when the result overflows. From-SVN: r100983
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-vrp.c12
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 03e034f..b029e3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-15 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-vrp.c (vrp_int_const_binop): Do not handle MAX_EXPR
+ when the result overflows.
+
2005-06-15 David Ung <davidu@mips.com>
* config/mips/mips.c (mips_rtx_cost_data): Add cost for 4kc, 4kp,
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 2569267..c0d0514 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -996,9 +996,15 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
int sgn1 = tree_int_cst_sgn (val1);
int sgn2 = tree_int_cst_sgn (val2);
- /* Notice that we only need to handle the restricted set of
- operations handled by extract_range_from_binary_expr. */
- if (((code == PLUS_EXPR || code == MAX_EXPR) && sgn2 >= 0)
+ /* Determine whether VAL1 CODE VAL2 yields a growing value.
+ Notice that we only need to handle the restricted set of
+ operations handled by extract_range_from_binary_expr:
+
+ VAL1 + VAL2 grows if VAL2 is >= 0.
+ VAL1 * VAL2 grows if both VAL1 and VAL2 have the same sign.
+ VAL1 - VAL2 grows if VAL2 is < 0 (because it becomes an addition).
+ */
+ if ((code == PLUS_EXPR && sgn2 >= 0)
|| (code == MULT_EXPR && sgn1 == sgn2)
|| (code == MINUS_EXPR && sgn2 < 0))
grows = true;