diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2019-10-14 06:43:03 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2019-10-14 06:43:03 +0000 |
commit | dede82f21ba8b569ad0f5538a0c00216ea71d2b4 (patch) | |
tree | 92959d5a6425c96a01ed74d448c3ba4bf9128c06 /gcc/tree-vrp.h | |
parent | 103197a183446a81d97a6ef975cc7095a64c8c4b (diff) | |
download | gcc-dede82f21ba8b569ad0f5538a0c00216ea71d2b4.zip gcc-dede82f21ba8b569ad0f5538a0c00216ea71d2b4.tar.gz gcc-dede82f21ba8b569ad0f5538a0c00216ea71d2b4.tar.bz2 |
Normalize unsigned ~[0,0] into [1,MAX].
From-SVN: r276949
Diffstat (limited to 'gcc/tree-vrp.h')
-rw-r--r-- | gcc/tree-vrp.h | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h index a3f9e90..4bfdfeb 100644 --- a/gcc/tree-vrp.h +++ b/gcc/tree-vrp.h @@ -245,16 +245,6 @@ value_range_base::zero_p () const && integer_zerop (m_max)); } -/* Return TRUE if range is nonzero. */ - -inline bool -value_range_base::nonzero_p () const -{ - return (m_kind == VR_ANTI_RANGE - && integer_zerop (m_min) - && integer_zerop (m_max)); -} - extern void dump_value_range (FILE *, const value_range *); extern void dump_value_range (FILE *, const value_range_base *); @@ -322,6 +312,23 @@ extern tree get_single_symbol (tree, bool *, tree *); extern void maybe_set_nonzero_bits (edge, tree); extern value_range_kind determine_value_range (tree, wide_int *, wide_int *); +/* Return TRUE if range is nonzero. */ + +inline bool +value_range_base::nonzero_p () const +{ + if (m_kind == VR_ANTI_RANGE + && !TYPE_UNSIGNED (type ()) + && integer_zerop (m_min) + && integer_zerop (m_max)) + return true; + + return (m_kind == VR_RANGE + && TYPE_UNSIGNED (type ()) + && integer_onep (m_min) + && vrp_val_is_max (m_max, true)); +} + /* Return TRUE if *VR includes the value zero. */ inline bool |