aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2006-03-14 07:13:42 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2006-03-14 07:13:42 +0000
commit2f96b75442ec3b2c211d1b4d37d3de16cd12d4f1 (patch)
tree147df3f58114981a38450f7042123425f31aa25d /gcc
parent17237f6b0eb18d95a307bb81a8c5360fdf01391a (diff)
downloadgcc-2f96b75442ec3b2c211d1b4d37d3de16cd12d4f1.zip
gcc-2f96b75442ec3b2c211d1b4d37d3de16cd12d4f1.tar.gz
gcc-2f96b75442ec3b2c211d1b4d37d3de16cd12d4f1.tar.bz2
Move around a couple of hunks and add a missing one for commit 111866
From-SVN: r112046
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fold-const.c58
1 files changed, 28 insertions, 30 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 582b496..4e05368 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3724,32 +3724,6 @@ range_binop (enum tree_code code, tree type, tree arg0, int upper0_p,
return constant_boolean_node (result, type);
}
-/* Return the predecessor of VAL in its type, handling the infinite case. */
-
-static tree
-range_predecessor (tree val)
-{
- tree type = TREE_TYPE (val);
-
- if (INTEGRAL_TYPE_P (type) && val == TYPE_MIN_VALUE (type))
- return 0;
- else
- return range_binop (MINUS_EXPR, NULL_TREE, val, 0, integer_one_node, 0);
-}
-
-/* Return the successor of VAL in its type, handling the infinite case. */
-
-static tree
-range_successor (tree val)
-{
- tree type = TREE_TYPE (val);
-
- if (INTEGRAL_TYPE_P (type) && val == TYPE_MAX_VALUE (type))
- return 0;
- else
- return range_binop (PLUS_EXPR, NULL_TREE, val, 0, integer_one_node, 0);
-}
-
/* Given EXP, a logical expression, set the range it is testing into
variables denoted by PIN_P, PLOW, and PHIGH. Return the expression
actually being tested. *PLOW and *PHIGH will be made of the same type
@@ -4174,6 +4148,32 @@ build_range_check (tree type, tree exp, int in_p, tree low, tree high)
return 0;
}
+/* Return the predecessor of VAL in its type, handling the infinite case. */
+
+static tree
+range_predecessor (tree val)
+{
+ tree type = TREE_TYPE (val);
+
+ if (INTEGRAL_TYPE_P (type) && val == TYPE_MIN_VALUE (type))
+ return 0;
+ else
+ return range_binop (MINUS_EXPR, NULL_TREE, val, 0, integer_one_node, 0);
+}
+
+/* Return the successor of VAL in its type, handling the infinite case. */
+
+static tree
+range_successor (tree val)
+{
+ tree type = TREE_TYPE (val);
+
+ if (INTEGRAL_TYPE_P (type) && val == TYPE_MAX_VALUE (type))
+ return 0;
+ else
+ return range_binop (PLUS_EXPR, NULL_TREE, val, 0, integer_one_node, 0);
+}
+
/* Given two ranges, see if we can merge them into one. Return 1 if we
can, 0 if we can't. Set the output range into the specified parameters. */
@@ -4348,10 +4348,8 @@ merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
return + [x + 1, y - 1]. */
if (low0 == 0 && high1 == 0)
{
- low = range_binop (PLUS_EXPR, NULL_TREE, high0, 1,
- integer_one_node, 1);
- high = range_binop (MINUS_EXPR, NULL_TREE, low1, 0,
- integer_one_node, 0);
+ low = range_successor (high0);
+ high = range_predecessor (low1);
if (low == 0 || high == 0)
return 0;