diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2019-10-03 08:08:50 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2019-10-03 08:08:50 +0000 |
commit | 38a734350fd787da1b4bcf9b4e0a99ed2adb5eae (patch) | |
tree | 4f5d0ec3eca5f40efce5cb8725875e0f0d1cf2d0 /gcc/tree-vrp.h | |
parent | 0a8c8f4d6578fac21adc0e156861c4b47bed4418 (diff) | |
download | gcc-38a734350fd787da1b4bcf9b4e0a99ed2adb5eae.zip gcc-38a734350fd787da1b4bcf9b4e0a99ed2adb5eae.tar.gz gcc-38a734350fd787da1b4bcf9b4e0a99ed2adb5eae.tar.bz2 |
Makefile.in (OBJS): Add range.o and range-op.o.
* Makefile.in (OBJS): Add range.o and range-op.o.
Remove wide-int-range.o.
* function-tests.c (test_ranges): New.
(function_tests_c_tests): Call test_ranges.
* ipa-cp.c (ipa_vr_operation_and_type_effects): Call
range_fold_unary_expr instead of extract_range_from_unary_expr.
* ipa-prop.c (ipa_compute_jump_functions_for_edge): Same.
* range-op.cc: New file.
* range-op.h: New file.
* range.cc: New file.
* range.h: New file.
* selftest.h (range_tests): New prototype.
* ssa.h: Include range.h.
* tree-vrp.c (value_range_base::value_range_base): New
constructors.
(value_range_base::singleton_p): Do not call
ranges_from_anti_range until sure we will need to.
(value_range_base::type): Rename gcc_assert to
gcc_checking_assert.
(vrp_val_is_max): New argument.
(vrp_val_is_min): Same.
(wide_int_range_set_zero_nonzero_bits): Move from
wide-int-range.cc.
(extract_range_into_wide_ints): Remove.
(extract_range_from_multiplicative_op): Remove.
(extract_range_from_pointer_plus_expr): Abstract POINTER_PLUS code
from extract_range_from_binary_expr.
(extract_range_from_plus_minus_expr): Abstract PLUS/MINUS code
from extract_range_from_binary_expr.
(extract_range_from_binary_expr): Remove.
(normalize_for_range_ops): New.
(range_fold_binary_expr): New.
(range_fold_unary_expr): New.
(value_range_base::num_pairs): New.
(value_range_base::lower_bound): New.
(value_range_base::upper_bound): New.
(value_range_base::upper_bound): New.
(value_range_base::contains_p): New.
(value_range_base::invert): New.
(value_range_base::union_): New.
(value_range_base::intersect): New.
(range_compatible_p): New.
(value_range_base::operator==): New.
(determine_value_range_1): Call range_fold_*expr instead of
extract_range_from_*expr.
* tree-vrp.h (class value_range_base): Add new constructors.
Add methods for union_, intersect, operator==, contains_p,
num_pairs, lower_bound, upper_bound, invert.
(vrp_val_is_min): Add handle_pointers argument.
(vrp_val_is_max): Same.
(extract_range_from_unary_expr): Remove.
(extract_range_from_binary_expr): Remove.
(range_fold_unary_expr): New.
(range_fold_binary_expr): New.
* vr-values.c (vr_values::extract_range_from_binary_expr): Call
range_fold_binary_expr instead of extract_range_from_binary_expr.
(vr_values::extract_range_basic): Same.
(vr_values::extract_range_from_unary_expr): Call
range_fold_unary_expr instead of extract_range_from_unary_expr.
* wide-int-range.cc: Remove.
* wide-int-range.h: Remove.
From-SVN: r276504
Diffstat (limited to 'gcc/tree-vrp.h')
-rw-r--r-- | gcc/tree-vrp.h | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h index cf236fa..d20d004 100644 --- a/gcc/tree-vrp.h +++ b/gcc/tree-vrp.h @@ -35,14 +35,19 @@ enum value_range_kind VR_LAST }; - /* Range of values that can be associated with an SSA_NAME after VRP has executed. */ class GTY((for_user)) value_range_base { + friend void range_tests (); public: value_range_base (); value_range_base (value_range_kind, tree, tree); + value_range_base (tree, tree); + value_range_base (value_range_kind, + tree type, const wide_int &, const wide_int &); + value_range_base (tree type, const wide_int &, const wide_int &); + value_range_base (tree type); void set (value_range_kind, tree, tree); void set (tree); @@ -63,8 +68,10 @@ public: void union_ (const value_range_base *); void intersect (const value_range_base *); + void union_ (const value_range_base &); + void intersect (const value_range_base &); - bool operator== (const value_range_base &) const /* = delete */; + bool operator== (const value_range_base &) const; bool operator!= (const value_range_base &) const /* = delete */; bool equal_p (const value_range_base &) const; @@ -80,6 +87,14 @@ public: static bool supports_type_p (tree); value_range_base normalize_symbolics () const; + static const unsigned int m_max_pairs = 2; + bool contains_p (tree) const; + unsigned num_pairs () const; + wide_int lower_bound (unsigned = 0) const; + wide_int upper_bound (unsigned) const; + wide_int upper_bound () const; + void invert (); + protected: void check (); static value_range_base union_helper (const value_range_base *, @@ -281,21 +296,17 @@ extern bool range_int_cst_singleton_p (const value_range_base *); extern int compare_values (tree, tree); extern int compare_values_warnv (tree, tree, bool *); extern int operand_less_p (tree, tree); -extern bool vrp_val_is_min (const_tree); -extern bool vrp_val_is_max (const_tree); +extern bool vrp_val_is_min (const_tree, bool handle_pointers = false); +extern bool vrp_val_is_max (const_tree, bool handle_pointers = false); extern tree vrp_val_min (const_tree, bool handle_pointers = false); extern tree vrp_val_max (const_tree, bool handle_pointers = false); -extern void extract_range_from_unary_expr (value_range_base *vr, - enum tree_code code, - tree type, - const value_range_base *vr0_, - tree op0_type); -extern void extract_range_from_binary_expr (value_range_base *, - enum tree_code, - tree, const value_range_base *, - const value_range_base *); +void range_fold_unary_expr (value_range_base *, enum tree_code, tree type, + const value_range_base *, tree op0_type); +void range_fold_binary_expr (value_range_base *, enum tree_code, tree type, + const value_range_base *, + const value_range_base *); extern bool vrp_operand_equal_p (const_tree, const_tree); extern enum value_range_kind intersect_range_with_nonzero_bits |