diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-12 14:53:36 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-12 14:53:36 +0000 |
commit | 27922d518d3c81c85df4b2d391bc54e85dab01f5 (patch) | |
tree | 9bd088ddcc23b2773c679d63544ec12296cf8f7e /gcc/tree-vrp.h | |
parent | 03564d3f6e5ad52bcafb7672c881b6cc68ca0eec (diff) | |
download | gcc-27922d518d3c81c85df4b2d391bc54e85dab01f5.zip gcc-27922d518d3c81c85df4b2d391bc54e85dab01f5.tar.gz gcc-27922d518d3c81c85df4b2d391bc54e85dab01f5.tar.bz2 |
2018-11=12 Richard Biener <rguenther@suse.de>
* tree-vrp.h (value_range[_base]::set): Make public. Provide
overload for single value.
(value_range[_base]::set_nonnull): New.
(value_range[_base]::set_null): Likewise.
(value_range): Document bitmap copying behavior, mark
copy constructor and assignment operator deleted.
(value_range::move): New.
(value_range::set_and_canonicalize): Default bitmap to zero.
(set_value_range_to_nonnull): Remove.
(set_value_range_to_null): Likewise.
(set_value_range): Likewise.
(set_value_range_to_value): Likewise.
(extract_range_from_unary_expr): Work on value_range_base.
(extract_range_from_binary_expr_1): Likewise. Rename to...
(extract_range_from_binary_expr): ... this.
* tree-vrp.c (value_range::update): Clear equiv bitmap
if required.
(value_range::move): New, move equiv bitmap.
(value_range_base::set_undefined): Avoid assignment.
(value_range::set_undefined): Likewise.
(value_range_base::set_varying): Likewise.
(value_range::set_varying): Likewise.
(set_value_range): Remove.
(value_range_base::set): New overload for value.
(value_range::set): Likewise.
(set_value_range_to_nonnull): Remove.
(value_range_base::set_nonnull): New.
(value_range::set_nonnull): Likewise.
(set_value_range_to_null): Remove.
(value_range_base::set_null): New.
(value_range::set_null): Likewise.
(range_is_null): Work on value_range_base.
(range_is_nonnull): Likewise.
(ranges_from_anti_range): Likewise.
(extract_range_into_wide_ints): Likewise.
(extract_range_from_multiplicative_op): Likewise.
(extract_range_from_binary_expr): Likewise. Update for API changes.
(extract_range_from_unary_expr): Likewise. Remove OBJ_TYPE_REF
handling.
(value_range::intersect_helper): Avoid copy and assignment.
(value_range::union_helper): Likewise.
(determine_value_range_1): Adjust.
* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::try_find_new_range):
Avoid assignment by using move.
(evrp_range_analyzer::record_ranges_from_stmt): Avoid assignment.
* tree-ssa-threadedge.c (record_temporary_equivalences_from_phis):
Likewise.
* tree-ssanames.c (get_range_info): Likewise.
* vr-values.h (vr_values::get_vr_for_comparison): Adjust API.
* vr-values.c (vr_values::get_value_range): Adjust.
(vr_values::update_value_range): Likewise.
(symbolic_range_based_on_p): Work on value_range_base.
(vr_values::extract_range_from_binary_expr): Use value_range_base.
(vr_values::extract_range_from_unary_expr): Likewise.
(vr_values::extract_range_from_cond_expr): Avoid assignment.
(vr_values::extract_range_from_comparison): Adjust.
(vr_values::check_for_binary_op_overflow): Use value_range_base.
(vr_values::extract_range_basic): Adjust.
(vr_values::adjust_range_with_scev): Likewise.
(vr_values::vrp_visit_assignment_or_call): Likewise.
(vr_values::get_vr_for_comparison): Change API to avoid
assignment and copy construction.
(vr_values::compare_name_with_value): Adjust accordingly.
(vr_values::compare_names): Likewise.
(vr_values::extract_range_from_phi_node): Avoid assignment and
bogus in-place modify of equiv bitmap.
(vr_values::simplify_bit_ops_using_ranges): Use value_range_base.
* ipa-prop.c (ipa_compute_jump_functions_for_edge): Adjust
for extract_range_from_unary_expr API change.
* ipa-cp.c (ipa_vr_operation_and_type_effects): Likewise.
From-SVN: r266030
Diffstat (limited to 'gcc/tree-vrp.h')
-rw-r--r-- | gcc/tree-vrp.h | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h index 8130cb8..ae7dcc7 100644 --- a/gcc/tree-vrp.h +++ b/gcc/tree-vrp.h @@ -44,6 +44,11 @@ public: value_range_base (); value_range_base (value_range_kind, tree, tree); + void set (value_range_kind, tree, tree); + void set (tree); + void set_nonnull (tree); + void set_null (tree); + enum value_range_kind kind () const; tree min () const; tree max () const; @@ -71,7 +76,6 @@ public: void dump () const; protected: - void set (value_range_kind, tree, tree); void check (); enum value_range_kind m_kind; @@ -96,8 +100,25 @@ class GTY((user)) value_range : public value_range_base public: value_range (); value_range (const value_range_base &); + /* Deep-copies equiv bitmap argument. */ value_range (value_range_kind, tree, tree, bitmap = NULL); + + /* Shallow-copies equiv bitmap. */ + value_range (const value_range &) /* = delete */; + /* Shallow-copies equiv bitmap. */ + value_range& operator=(const value_range&) /* = delete */; + + /* Move equiv bitmap from source range. */ + void move (value_range *); + + /* Leaves equiv bitmap alone. */ void update (value_range_kind, tree, tree); + /* Deep-copies equiv bitmap argument. */ + void set (value_range_kind, tree, tree, bitmap = NULL); + void set (tree); + void set_nonnull (tree); + void set_null (tree); + bool operator== (const value_range &) const; bool operator!= (const value_range &) const; void intersect (const value_range *); @@ -114,12 +135,12 @@ class GTY((user)) value_range : public value_range_base /* Misc methods. */ void deep_copy (const value_range *); - void set_and_canonicalize (enum value_range_kind, tree, tree, bitmap); + void set_and_canonicalize (enum value_range_kind, tree, tree, bitmap = NULL); void dump (FILE *) const; void dump () const; private: - void set (value_range_kind, tree, tree, bitmap); + /* Deep-copies bitmap argument. */ void set_equiv (bitmap); void check (); bool equal_p (const value_range &, bool ignore_equivs) const; @@ -225,12 +246,6 @@ extern bool stmt_interesting_for_vrp (gimple *); extern bool range_includes_zero_p (const value_range_base *); extern bool infer_value_range (gimple *, tree, tree_code *, tree *); -extern void set_value_range_to_nonnull (value_range *, tree); -extern void set_value_range_to_null (value_range *, tree); -extern void set_value_range (value_range *, enum value_range_kind, tree, - tree, bitmap); -extern void set_value_range_to_value (value_range *, tree, bitmap); - extern bool vrp_bitmap_equal_p (const_bitmap, const_bitmap); extern tree value_range_constant_singleton (const value_range_base *); @@ -247,14 +262,15 @@ extern int value_inside_range (tree, tree, tree); extern tree vrp_val_min (const_tree); extern tree vrp_val_max (const_tree); -extern void extract_range_from_unary_expr (value_range *vr, +extern void extract_range_from_unary_expr (value_range_base *vr, enum tree_code code, tree type, - const value_range *vr0_, + const value_range_base *vr0_, tree op0_type); -extern void extract_range_from_binary_expr_1 (value_range *, enum tree_code, - tree, const value_range *, - const value_range *); +extern void extract_range_from_binary_expr (value_range_base *, + enum tree_code, + tree, 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 |