aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2018-09-17 06:07:52 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2018-09-17 06:07:52 +0000
commit3cc2fdfd93efaf1b2e8bcffe84c20cbd1ffc4e96 (patch)
treee72c89dd0e3f762a7eb72076ece671dca4277395 /gcc
parentbaeab78db263853f098a549655793b49ff815476 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/tree-vrp.c5
-rw-r--r--gcc/wide-int-range.cc9
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;
}