From 38a734350fd787da1b4bcf9b4e0a99ed2adb5eae Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Thu, 3 Oct 2019 08:08:50 +0000 Subject: 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 --- gcc/tree-vrp.h | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'gcc/tree-vrp.h') 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 -- cgit v1.1