aboutsummaryrefslogtreecommitdiff
path: root/gcc/wide-int-range.h
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2018-08-23 13:25:36 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2018-08-23 13:25:36 +0000
commit62852194225ed2df31ff6a600659e5cefbb1e8c0 (patch)
tree0ae9ff87faf8a472941922a6c3732b1148f5c74f /gcc/wide-int-range.h
parent488461d8622d5d7b5f85612562fd5abb979f5d57 (diff)
downloadgcc-62852194225ed2df31ff6a600659e5cefbb1e8c0.zip
gcc-62852194225ed2df31ff6a600659e5cefbb1e8c0.tar.gz
gcc-62852194225ed2df31ff6a600659e5cefbb1e8c0.tar.bz2
tree-vrp.c (abs_extent_range): Remove.
* tree-vrp.c (abs_extent_range): Remove. (extract_range_into_wide_ints): Pass wide ints by reference. (extract_range_from_binary_expr_1): Rewrite the *DIV_EXPR code. Pass wide ints by reference in all calls to extract_range_into_wide_ints. * wide-int-range.cc (wide_int_range_div): New. * wide-int-range.h (wide_int_range_div): New. (wide_int_range_includes_zero_p): New. (wide_int_range_zero_p): New. From-SVN: r263813
Diffstat (limited to 'gcc/wide-int-range.h')
-rw-r--r--gcc/wide-int-range.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/wide-int-range.h b/gcc/wide-int-range.h
index 41198e0..427ef34 100644
--- a/gcc/wide-int-range.h
+++ b/gcc/wide-int-range.h
@@ -99,6 +99,17 @@ extern bool wide_int_range_abs (wide_int &min, wide_int &max,
const wide_int &vr0_min,
const wide_int &vr0_max,
bool overflow_undefined);
+extern bool wide_int_range_div (wide_int &wmin, wide_int &wmax,
+ enum tree_code code,
+ signop sign, unsigned prec,
+ const wide_int &dividend_min,
+ const wide_int &dividend_max,
+ const wide_int &divisor_min,
+ const wide_int &divisor_max,
+ bool overflow_undefined,
+ bool overflow_wraps,
+ bool &extra_range_p,
+ wide_int &extra_min, wide_int &extra_max);
/* Return TRUE if shifting by range [MIN, MAX] is undefined behavior. */
@@ -137,4 +148,22 @@ wide_int_range_min_max (wide_int &min, wide_int &max,
return true;
}
+/* Return TRUE if 0 is within [WMIN, WMAX]. */
+
+inline bool
+wide_int_range_includes_zero_p (const wide_int &wmin, const wide_int &wmax,
+ signop sign)
+{
+ return wi::le_p (wmin, 0, sign) && wi::ge_p (wmax, 0, sign);
+}
+
+/* Return TRUE if [WMIN, WMAX] is the singleton 0. */
+
+inline bool
+wide_int_range_zero_p (const wide_int &wmin, const wide_int &wmax,
+ unsigned prec)
+{
+ return wmin == wmax && wi::eq_p (wmin, wi::zero (prec));
+}
+
#endif /* GCC_WIDE_INT_RANGE_H */