aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-11-12 14:53:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-11-12 14:53:36 +0000
commit27922d518d3c81c85df4b2d391bc54e85dab01f5 (patch)
tree9bd088ddcc23b2773c679d63544ec12296cf8f7e /gcc/tree-vrp.h
parent03564d3f6e5ad52bcafb7672c881b6cc68ca0eec (diff)
downloadgcc-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.h44
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