[gcc/devel/ranger] New vr_gori_interface class.
Aldy Hernandez
aldyh@gcc.gnu.org
Thu Mar 5 10:21:00 GMT 2020
https://gcc.gnu.org/g:80966187936e51f32adc45864ce758c9c588d0e2
commit 80966187936e51f32adc45864ce758c9c588d0e2
Author: Aldy Hernandez <aldyh@redhat.com>
Date: Mon Mar 2 12:45:11 2020 +0100
New vr_gori_interface class.
Diff:
---
gcc/gimple-ssa-evrp-analyze.c | 7 ++++---
gcc/vr-values.c | 45 ++++++++++++++++++++++---------------------
gcc/vr-values.h | 35 ++++++++++++++++++++-------------
3 files changed, 49 insertions(+), 38 deletions(-)
diff --git a/gcc/gimple-ssa-evrp-analyze.c b/gcc/gimple-ssa-evrp-analyze.c
index e4fb31f..48780fc 100644
--- a/gcc/gimple-ssa-evrp-analyze.c
+++ b/gcc/gimple-ssa-evrp-analyze.c
@@ -220,7 +220,7 @@ evrp_range_analyzer::try_find_new_range_with_gori
(irange &res, tree name, edge e,
const vec<assert_info> &asserts)
{
- if (!vr_values->in_export_list (name, e->src))
+ if (!vr_values->gori_computable_p (name, e->src))
return;
const value_range_equiv *known_range = get_value_range (name);
@@ -381,8 +381,9 @@ evrp_range_analyzer::record_ranges_from_incoming_edge (basic_block bb)
{
widest_irange vr_gori;
bool gori_can_calculate
- = (vr_values->in_export_list (asserts[i].name, pred_e->src)
- && asserts[i].gori_computable_p);
+ = (asserts[i].gori_computable_p
+ && vr_values->gori_computable_p (asserts[i].name,
+ pred_e->src));
if (gori_can_calculate)
try_find_new_range_with_gori (vr_gori, asserts[i].name,
pred_e, asserts);
diff --git a/gcc/vr-values.c b/gcc/vr-values.c
index 1e632f9..91626fb 100644
--- a/gcc/vr-values.c
+++ b/gcc/vr-values.c
@@ -173,14 +173,6 @@ vr_values::get_value_range (const_tree var)
return vr;
}
-void
-vr_values::range_of_ssa_name (irange &r, tree op,
- gimple *stmt ATTRIBUTE_UNUSED)
-{
- r = *(get_value_range (op));
- r.normalize_symbolics ();
-}
-
/* Set the lattice entry for DEF to VARYING. */
void
@@ -1997,15 +1989,23 @@ equivalence_iterator::next (void)
}
void
-vr_values::save_equivalences (equivalence_iterator *iter)
+vr_values::range_of_ssa_name (irange &r, tree op,
+ gimple *stmt ATTRIBUTE_UNUSED)
+{
+ r = *(get_value_range (op));
+ r.normalize_symbolics ();
+}
+
+void
+vr_gori_interface::save_equivalences (equivalence_iterator *iter)
{
m_equivalences = iter;
}
-// FIXME: Come up with a better name.
+// Return TRUE if NAME is computable by GORI in BB.
bool
-vr_values::in_export_list (tree name, basic_block bb)
+vr_gori_interface::gori_computable_p (tree name, basic_block bb)
{
return m_gori_map.is_export_p (name, bb);
}
@@ -2014,8 +2014,8 @@ vr_values::in_export_list (tree name, basic_block bb)
// Return FALSE if unable to compute a range.
bool
-vr_values::outgoing_edge_range_p (irange &r, edge e, tree name,
- const irange *known_range ATTRIBUTE_UNUSED)
+vr_gori_interface::outgoing_edge_range_p (irange &r, edge e, tree name,
+ const irange *known_range ATTRIBUTE_UNUSED)
{
if (!gori_compute::outgoing_edge_range_p (r, e, name))
r.set_varying (TREE_TYPE (name));
@@ -2030,7 +2030,8 @@ vr_values::outgoing_edge_range_p (irange &r, edge e, tree name,
// equivalences NAME may have.
bool
-vr_values::refine_range_with_equivalences_p (irange &r, edge e, tree name)
+vr_gori_interface::refine_range_with_equivalences_p (irange &r,
+ edge e, tree name)
{
widest_irange branch_range, tmp;
gimple *branch = gimple_outgoing_edge_range_p (branch_range, e);
@@ -2066,9 +2067,9 @@ vr_values::refine_range_with_equivalences_p (irange &r, edge e, tree name)
// in R. LHS is the known range for STMT.
bool
-vr_values::solve_name_at_statement (irange &r,
- tree name, gimple *stmt,
- const irange &lhs)
+vr_gori_interface::solve_name_at_statement (irange &r,
+ tree name, gimple *stmt,
+ const irange &lhs)
{
widest_irange name_range;
range_of_ssa_name (name_range, name, stmt);
@@ -2076,10 +2077,10 @@ vr_values::solve_name_at_statement (irange &r,
}
bool
-vr_values::solve_name_given_equivalence (irange &r,
- tree name,
- tree equiv,
- const irange &equiv_range)
+vr_gori_interface::solve_name_given_equivalence (irange &r,
+ tree name,
+ tree equiv,
+ const irange &equiv_range)
{
// Solve NAME in EQUIV = USE(NAME).
gimple *def = SSA_NAME_DEF_STMT (equiv);
@@ -2103,7 +2104,7 @@ vr_values::solve_name_given_equivalence (irange &r,
}
void
-vr_values::range_for_op2 (irange &res, gimple *stmt, tree type)
+vr_gori_interface::range_for_op2 (irange &res, gimple *stmt, tree type)
{
tree op2 = gimple_assign_rhs2 (stmt);
if (op2)
diff --git a/gcc/vr-values.h b/gcc/vr-values.h
index 307d344..3178ce0 100644
--- a/gcc/vr-values.h
+++ b/gcc/vr-values.h
@@ -34,6 +34,26 @@ private:
unsigned int m_index;
};
+class vr_gori_interface : public gori_compute
+{
+public:
+ virtual bool outgoing_edge_range_p (irange &, edge, tree name,
+ const irange *name_range = NULL);
+ bool gori_computable_p (tree name, basic_block);
+ void save_equivalences (equivalence_iterator *);
+private:
+ virtual void range_of_ssa_name (irange &r ATTRIBUTE_UNUSED,
+ tree op ATTRIBUTE_UNUSED,
+ gimple *stmt ATTRIBUTE_UNUSED = NULL)
+ { gcc_unreachable (); }
+ bool refine_range_with_equivalences_p (irange &, edge, tree name);
+ bool solve_name_at_statement (irange &, tree, gimple *stmt, const irange &);
+ bool solve_name_given_equivalence (irange &r, tree name, tree equiv,
+ const irange &equiv_range);
+ void range_for_op2 (irange &, gimple *, tree type);
+ equivalence_iterator *m_equivalences;
+};
+
/* The VR_VALUES class holds the current view of range information
for all the SSA_NAMEs in the IL.
@@ -48,7 +68,7 @@ private:
gets attached to an SSA_NAME. It's unclear how useful that global
information will be in a world where we can compute context sensitive
range information fast or perform on-demand queries. */
-class vr_values : public gori_compute
+class vr_values : public vr_gori_interface
{
public:
vr_values (void);
@@ -91,19 +111,8 @@ class vr_values : public gori_compute
/* */
void cleanup_edges_and_switches (void);
- bool outgoing_edge_range_p (irange &, edge, tree name,
- const irange *name_range = NULL);
- bool in_export_list (tree name, basic_block);
- void save_equivalences (equivalence_iterator *);
private:
- void range_of_ssa_name (irange &r, tree op, gimple * = NULL);
- equivalence_iterator *m_equivalences;
- bool refine_range_with_equivalences_p (irange &, edge, tree name);
- bool solve_name_at_statement (irange &,
- tree, gimple *stmt, const irange &);
- bool solve_name_given_equivalence (irange &r, tree name, tree equiv,
- const irange &equiv_range);
- void range_for_op2 (irange &, gimple *, tree type);
+ virtual void range_of_ssa_name (irange &r, tree op, gimple * = NULL);
value_range_equiv *get_lattice_entry (const_tree);
bool vrp_stmt_computes_nonzero (gimple *);
More information about the Gcc-cvs
mailing list