diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2018-09-17 06:07:52 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2018-09-17 06:07:52 +0000 |
commit | 3cc2fdfd93efaf1b2e8bcffe84c20cbd1ffc4e96 (patch) | |
tree | e72c89dd0e3f762a7eb72076ece671dca4277395 /gcc | |
parent | baeab78db263853f098a549655793b49ff815476 (diff) | |
download | gcc-3cc2fdfd93efaf1b2e8bcffe84c20cbd1ffc4e96.zip gcc-3cc2fdfd93efaf1b2e8bcffe84c20cbd1ffc4e96.tar.gz gcc-3cc2fdfd93efaf1b2e8bcffe84c20cbd1ffc4e96.tar.bz2 |
tree-vrp.c (extract_range_from_unary_expr): Do not special case symbolics or VR_VARYING ranges for ABS_EXPR.
* tree-vrp.c (extract_range_from_unary_expr): Do not special case
symbolics or VR_VARYING ranges for ABS_EXPR.
* wide-int-range.cc (wide_int_range_abs): Return positive numbers
when range will wrap.
From-SVN: r264356
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 5 | ||||
-rw-r--r-- | gcc/wide-int-range.cc | 9 |
3 files changed, 13 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f6b4b5..59b73ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-09-17 Aldy Hernandez <aldyh@redhat.com> + + * tree-vrp.c (extract_range_from_unary_expr): Do not special case + symbolics or VR_VARYING ranges for ABS_EXPR. + * wide-int-range.cc (wide_int_range_abs): Return positive numbers + when range will wrap. + 2018-09-15 Eric Botcazou <ebotcazou@adacore.com> PR middle-end/86864 diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 1adb919..622ccbc 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1894,11 +1894,6 @@ extract_range_from_unary_expr (value_range *vr, } else if (code == ABS_EXPR) { - if (vr0.type != VR_RANGE || symbolic_range_p (&vr0)) - { - set_value_range_to_varying (vr); - return; - } wide_int wmin, wmax; wide_int vr0_min, vr0_max; extract_range_into_wide_ints (&vr0, sign, prec, vr0_min, vr0_max); diff --git a/gcc/wide-int-range.cc b/gcc/wide-int-range.cc index 8a3dfd2..a85fe9f 100644 --- a/gcc/wide-int-range.cc +++ b/gcc/wide-int-range.cc @@ -728,10 +728,13 @@ wide_int_range_abs (wide_int &min, wide_int &max, } /* If the new range has its limits swapped around (MIN > MAX), then - the operation caused one of them to wrap around, mark the new - range VARYING. */ + the operation caused one of them to wrap around. The only thing + we know is that the result is positive. */ if (wi::gt_p (min, max, sign)) - return false; + { + min = wi::zero (prec); + max = max_value; + } return true; } |