diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2018-08-23 13:25:36 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2018-08-23 13:25:36 +0000 |
commit | 62852194225ed2df31ff6a600659e5cefbb1e8c0 (patch) | |
tree | 0ae9ff87faf8a472941922a6c3732b1148f5c74f /gcc/wide-int-range.h | |
parent | 488461d8622d5d7b5f85612562fd5abb979f5d57 (diff) | |
download | gcc-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.h | 29 |
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 ÷nd_min, + const wide_int ÷nd_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 */ |