diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-05-17 14:27:12 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-05-23 16:50:00 -0400 |
commit | ac0bc89aea79b940a17697fb4a758254631c2400 (patch) | |
tree | 78c3c09fad8c61f7372c87ea5f5938a1c5314f20 /gcc/gimple-range-cache.cc | |
parent | 44db939611a1cd3fdca93ae88d664f9886d549d5 (diff) | |
download | gcc-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.cc | 34 |
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 ¤t_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); } } |