diff options
author | Michael Meissner <meissner@linux.ibm.com> | 2018-08-30 18:31:50 +0000 |
---|---|---|
committer | Michael Meissner <meissner@linux.ibm.com> | 2018-08-30 18:31:50 +0000 |
commit | d0ed5596dfd55dbaf41f506784fafcda1d7ad63b (patch) | |
tree | 6fc657e62ff04d4cd7fce825a3b0644d0bffe981 /gcc/wide-int-range.h | |
parent | a3df48ce98f6f37f452eda0b793bec281937782b (diff) | |
parent | ec0e5c27c42959e428d618a1172e5b602584ff9b (diff) |
Merge up to 263992ibm/addr2
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ibm/addr2@263994 138bc75d-0d04-0410-961f-82ee72b054a4
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 41198e05b13..427ef34c6b4 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 */ |