From: Richard Kenner Date: Thu, 24 Oct 1996 13:10:37 +0000 (-0400) Subject: (make_range, comparison cases): When making range for unsigned to X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7f423031c0b5c54dd088dd25fb8d64ca3c3bb94a;p=gcc.git (make_range, comparison cases): When making range for unsigned to merge in, use full range. From-SVN: r13027 --- diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2af2f8b2cc3..cb45cd28ee2 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2757,15 +2757,20 @@ make_range (exp, pin_p, plow, phigh) exp = arg0; - /* If this is an unsigned comparison, we also know that EXP - is greater than or equal to zero. We base the range tests - we make on that fact, so we record it here so we can parse - existing range tests. */ - if (TREE_UNSIGNED (type)) + /* If this is an unsigned comparison, we also know that EXP is + greater than or equal to zero and less than the maximum value of + the unsigned type. We base the range tests we make on that fact, + so we record it here so we can parse existing range tests. */ + if (TREE_UNSIGNED (type) && (low == 0 || high == 0)) { if (! merge_ranges (&n_in_p, &n_low, &n_high, in_p, low, high, 1, convert (type, integer_zero_node), - NULL_TREE)) + const_binop (MINUS_EXPR, + convert (type, + integer_zero_node), + convert (type, + integer_one_node), + 0))) break; in_p = n_in_p, low = n_low, high = n_high;