diff options
Diffstat (limited to 'gcc/tree-vrp.h')
-rw-r--r-- | gcc/tree-vrp.h | 204 |
1 files changed, 1 insertions, 203 deletions
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h index 4b0e9c7..81f0a7b 100644 --- a/gcc/tree-vrp.h +++ b/gcc/tree-vrp.h @@ -20,103 +20,7 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_TREE_VRP_H #define GCC_TREE_VRP_H -/* Types of value ranges. */ -enum value_range_kind -{ - /* Empty range. */ - VR_UNDEFINED, - /* Range spans the entire domain. */ - VR_VARYING, - /* Range is [MIN, MAX]. */ - VR_RANGE, - /* Range is ~[MIN, MAX]. */ - VR_ANTI_RANGE, - /* Range is a nice guy. */ - VR_LAST -}; - -/* Range of values that can be associated with an SSA_NAME after VRP - has executed. */ -class GTY((for_user)) value_range -{ - friend void range_tests (); -public: - value_range (); - value_range (tree, tree, value_range_kind = VR_RANGE); - value_range (tree type, const wide_int &, const wide_int &, - value_range_kind = VR_RANGE); - value_range (tree type); - - void set (tree, tree, value_range_kind = VR_RANGE); - void set (tree); - void set_nonzero (tree); - void set_zero (tree); - - enum value_range_kind kind () const; - tree min () const; - tree max () const; - - /* Types of value ranges. */ - bool symbolic_p () const; - bool constant_p () const; - bool undefined_p () const; - bool varying_p () const; - void set_varying (tree type); - void set_undefined (); - - void union_ (const value_range *); - void intersect (const value_range *); - void union_ (const value_range &); - void intersect (const value_range &); - - bool operator== (const value_range &) const; - bool operator!= (const value_range &) const /* = delete */; - bool equal_p (const value_range &) const; - - /* Misc methods. */ - tree type () const; - bool may_contain_p (tree) const; - bool zero_p () const; - bool nonzero_p () const; - bool singleton_p (tree *result = NULL) const; - void dump (FILE *) const; - void dump () const; - - static bool supports_type_p (tree); - value_range normalize_symbolics () const; - value_range normalize_addresses () 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 union_helper (const value_range *, const value_range *); - static value_range intersect_helper (const value_range *, - const value_range *); - - enum value_range_kind m_kind; - - tree m_min; - tree m_max; - - friend void gt_ggc_mx_value_range (void *); - friend void gt_pch_p_11value_range (void *, void *, - gt_pointer_operator, void *); - friend void gt_pch_nx_value_range (void *); - friend void gt_ggc_mx (value_range &); - friend void gt_ggc_mx (value_range *&); - friend void gt_pch_nx (value_range &); - friend void gt_pch_nx (value_range *, gt_pointer_operator, void *); - -private: - int value_inside_range (tree) const; -}; +#include "value-range.h" /* Note value_range_equiv cannot currently be used with GC memory, only value_range is fully set up for this. */ @@ -174,77 +78,19 @@ class GTY((user)) value_range_equiv : public value_range }; inline -value_range::value_range () -{ - m_kind = VR_UNDEFINED; - m_min = m_max = NULL; -} - -inline value_range_equiv::value_range_equiv () : value_range () { m_equiv = NULL; } -/* Return the kind of this range. */ - -inline value_range_kind -value_range::kind () const -{ - return m_kind; -} - inline bitmap value_range_equiv::equiv () const { return m_equiv; } -/* Return the lower bound. */ - -inline tree -value_range::min () const -{ - return m_min; -} - -/* Return the upper bound. */ - -inline tree -value_range::max () const -{ - return m_max; -} - -/* Return TRUE if range spans the entire possible domain. */ - -inline bool -value_range::varying_p () const -{ - return m_kind == VR_VARYING; -} - -/* Return TRUE if range is undefined (essentially the empty set). */ - -inline bool -value_range::undefined_p () const -{ - return m_kind == VR_UNDEFINED; -} - -/* Return TRUE if range is the constant zero. */ - -inline bool -value_range::zero_p () const -{ - return (m_kind == VR_RANGE - && integer_zerop (m_min) - && integer_zerop (m_max)); -} - extern void dump_value_range (FILE *, const value_range_equiv *); -extern void dump_value_range (FILE *, const value_range *); struct assert_info { @@ -261,17 +107,6 @@ struct assert_info tree expr; }; -// Return true if TYPE is a valid type for value_range to operate on. -// Otherwise return FALSE. - -inline bool -value_range::supports_type_p (tree type) -{ - if (type && (INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type))) - return type; - return false; -} - extern void register_edge_assert_for (tree, edge, enum tree_code, tree, tree, vec<assert_info> &); extern bool stmt_interesting_for_vrp (gimple *); @@ -282,18 +117,12 @@ extern bool range_int_cst_p (const value_range *); 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 tree vrp_val_min (const_tree); -extern tree vrp_val_max (const_tree); void range_fold_unary_expr (value_range *, enum tree_code, tree type, const value_range *, tree op0_type); void range_fold_binary_expr (value_range *, enum tree_code, tree type, const value_range *, const value_range *); -extern bool vrp_operand_equal_p (const_tree, const_tree); extern enum value_range_kind intersect_range_with_nonzero_bits (enum value_range_kind, wide_int *, wide_int *, const wide_int &, signop); @@ -304,35 +133,4 @@ 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::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)); -} - -/* Return TRUE if *VR includes the value zero. */ - -inline bool -range_includes_zero_p (const value_range *vr) -{ - if (vr->undefined_p ()) - return false; - - if (vr->varying_p ()) - return true; - - return vr->may_contain_p (build_zero_cst (vr->type ())); -} - #endif /* GCC_TREE_VRP_H */ |