aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-05-17 14:27:12 -0400
committerAndrew MacLeod <amacleod@redhat.com>2024-05-23 16:50:00 -0400
commitac0bc89aea79b940a17697fb4a758254631c2400 (patch)
tree78c3c09fad8c61f7372c87ea5f5938a1c5314f20 /gcc/gimple-range-cache.cc
parent44db939611a1cd3fdca93ae88d664f9886d549d5 (diff)
downloadgcc-ac0bc89aea79b940a17697fb4a758254631c2400.zip
gcc-ac0bc89aea79b940a17697fb4a758254631c2400.tar.gz
gcc-ac0bc89aea79b940a17697fb4a758254631c2400.tar.bz2
Make GORI a range_query component.
This patch moves the GORI component into the range_query object, and makes it generally available. This makes it much easier to share between ranger and the passes. * gimple-range-cache.cc (ranger_cache::ranger_cache): Create GORi via the range_query instead of a local member. (ranger_cache::dump_bb): Use gori via from the range_query parent. (ranger_cache::get_global_range): Likewise. (ranger_cache::set_global_range): Likewise. (ranger_cache::edge_range): Likewise. (anger_cache::block_range): Likewise. (ranger_cache::fill_block_cache): Likewise. (ranger_cache::range_from_dom): Likewise. (ranger_cache::register_inferred_value): Likewise. * gimple-range-cache.h (ranger_cache::m_gori): Delete. * gimple-range-fold.cc (fur_source::fur_source): Set m_depend_p. (fur_depend::fur_depend): Remove gori parameter. * gimple-range-fold.h (fur_source::gori): Adjust. (fur_source::m_gori): Delete. (fur_source::m_depend): New. (fur_depend::fur_depend): Adjust prototype. * gimple-range-path.cc (path_range_query::path_range_query): Share ranger oracles. (path_range_query::range_defined_in_block): Use oracle directly. (path_range_query::compute_ranges_in_block): Use new gori() method. (path_range_query::adjust_for_non_null_uses): Use oracle directly. (path_range_query::compute_exit_dependencies): Likewise. (jt_fur_source::jt_fur_source): No gori in the parameters. (path_range_query::range_of_stmt): Likewise. (path_range_query::compute_outgoing_relations): Likewise. * gimple-range.cc (gimple_ranger::fold_range_internal): Likewise. (gimple_ranger::range_of_stmt): Access gori via gori () method. (assume_query::range_of_expr): Create a gori object. (assume_query::~assume_query): Destroy a gori object. (assume_query::calculate_op): Remove old gori() accessor. * gimple-range.h (gimple_ranger::gori): Delete. (assume_query::~assume_query): New. (assume_query::m_gori): Delete. * tree-ssa-dom.cc (set_global_ranges_from_unreachable_edges): use gori () method. * tree-ssa-threadedge.cc (compute_exit_dependencies): Likewise. * value-query.cc (default_gori): New. (range_query::create_gori): New. (range_query::destroy_gori): New. (range_query::share_oracles): Set m_gori. (range_query::range_query): Set m_gori to default. (range_query::~range_query): call destroy gori. * value-query.h (range_query): Adjust prototypes (range_query::m_gori): New.
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r--gcc/gimple-range-cache.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 40e4baa..e75cac6 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -950,7 +950,6 @@ update_list::pop ()
// --------------------------------------------------------------------------
ranger_cache::ranger_cache (int not_executable_flag, bool use_imm_uses)
- : m_gori (not_executable_flag, param_vrp_switch_limit)
{
m_workback.create (0);
m_workback.safe_grow_cleared (last_basic_block_for_fn (cfun));
@@ -960,6 +959,7 @@ ranger_cache::ranger_cache (int not_executable_flag, bool use_imm_uses)
// If DOM info is available, spawn an oracle as well.
create_relation_oracle ();
create_infer_oracle (use_imm_uses);
+ create_gori (not_executable_flag, param_vrp_switch_limit);
unsigned x, lim = last_basic_block_for_fn (cfun);
// Calculate outgoing range info upfront. This will fully populate the
@@ -969,7 +969,7 @@ ranger_cache::ranger_cache (int not_executable_flag, bool use_imm_uses)
{
basic_block bb = BASIC_BLOCK_FOR_FN (cfun, x);
if (bb)
- m_gori.map ()->exports (bb);
+ gori ().map ()->exports (bb);
}
m_update = new update_list ();
}
@@ -1000,7 +1000,7 @@ ranger_cache::dump (FILE *f)
void
ranger_cache::dump_bb (FILE *f, basic_block bb)
{
- m_gori.map ()->dump (f, bb, false);
+ gori ().map ()->dump (f, bb, false);
m_on_entry.dump (f, bb);
m_relation->dump (f, bb);
}
@@ -1033,8 +1033,8 @@ ranger_cache::get_global_range (vrange &r, tree name, bool &current_p)
current_p = false;
if (had_global)
current_p = r.singleton_p ()
- || m_temporal->current_p (name, m_gori.map ()->depend1 (name),
- m_gori.map ()->depend2 (name));
+ || m_temporal->current_p (name, gori ().map ()->depend1 (name),
+ gori ().map ()->depend2 (name));
else
{
// If no global value has been set and value is VARYING, fold the stmt
@@ -1071,8 +1071,8 @@ ranger_cache::set_global_range (tree name, const vrange &r, bool changed)
if (!changed)
{
// If there are dependencies, make sure this is not out of date.
- if (!m_temporal->current_p (name, m_gori.map ()->depend1 (name),
- m_gori.map ()->depend2 (name)))
+ if (!m_temporal->current_p (name, gori ().map ()->depend1 (name),
+ gori ().map ()->depend2 (name)))
m_temporal->set_timestamp (name);
return;
}
@@ -1097,7 +1097,7 @@ ranger_cache::set_global_range (tree name, const vrange &r, bool changed)
if (r.singleton_p ()
|| (POINTER_TYPE_P (TREE_TYPE (name)) && r.nonzero_p ()))
- m_gori.map ()->set_range_invariant (name);
+ gori ().map ()->set_range_invariant (name);
m_temporal->set_timestamp (name);
}
@@ -1178,7 +1178,7 @@ ranger_cache::edge_range (vrange &r, edge e, tree name, enum rfd_mode mode)
if ((e->flags & (EDGE_EH | EDGE_ABNORMAL)) == 0)
infer_oracle ().maybe_adjust_range (r, name, e->src);
Value_Range er (TREE_TYPE (name));
- if (m_gori.edge_range_p (er, e, name, *this))
+ if (gori ().edge_range_p (er, e, name, *this))
r.intersect (er);
return true;
}
@@ -1230,7 +1230,7 @@ ranger_cache::block_range (vrange &r, basic_block bb, tree name, bool calc)
// If there are no range calculations anywhere in the IL, global range
// applies everywhere, so don't bother caching it.
- if (!m_gori.has_edge_range_p (name))
+ if (!gori ().has_edge_range_p (name))
return false;
if (calc)
@@ -1449,7 +1449,7 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
continue;
// Check if the equiv has any ranges calculated.
- if (!m_gori.has_edge_range_p (equiv_name))
+ if (!gori ().has_edge_range_p (equiv_name))
continue;
// Check if the equiv definition dominates this block
@@ -1562,7 +1562,7 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
r.dump (dump_file);
fprintf (dump_file, ", ");
}
- if (!r.undefined_p () || m_gori.has_edge_range_p (name, e))
+ if (!r.undefined_p () || gori ().has_edge_range_p (name, e))
{
m_update->add (node);
if (DEBUG_RANGE_CACHE)
@@ -1671,7 +1671,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb,
infer_oracle ().maybe_adjust_range (infer, name, bb);
// This block has an outgoing range.
- if (m_gori.has_edge_range_p (name, bb))
+ if (gori ().has_edge_range_p (name, bb))
m_workback.quick_push (prev_bb);
else
{
@@ -1683,7 +1683,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb,
// If the first pred does not generate a range, then we will be
// using the dominator range anyway, so that's all the check needed.
if (EDGE_COUNT (prev_bb->preds) > 1
- && m_gori.has_edge_range_p (name, EDGE_PRED (prev_bb, 0)->src))
+ && gori ().has_edge_range_p (name, EDGE_PRED (prev_bb, 0)->src))
{
edge e;
edge_iterator ei;
@@ -1738,7 +1738,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb,
edge e = single_pred_edge (prev_bb);
bb = e->src;
- if (m_gori.edge_range_p (er, e, name, *this))
+ if (gori ().edge_range_p (er, e, name, *this))
{
r.intersect (er);
// If this is a normal edge, apply any inferred ranges.
@@ -1782,8 +1782,8 @@ ranger_cache::register_inferred_value (const vrange &ir, tree name,
{
m_on_entry.set_bb_range (name, bb, r);
// If this range was invariant before, remove invariant.
- if (!m_gori.has_edge_range_p (name))
- m_gori.map ()->set_range_invariant (name, false);
+ if (!gori ().has_edge_range_p (name))
+ gori ().map ()->set_range_invariant (name, false);
}
}