aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-path.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-path.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-path.cc')
-rw-r--r--gcc/gimple-range-path.cc28
1 files changed, 14 insertions, 14 deletions
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index 03f7321..707bd0e 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -44,6 +44,8 @@ path_range_query::path_range_query (gimple_ranger &ranger,
m_ranger (ranger),
m_resolve (resolve)
{
+ share_query (ranger);
+ // Override the relation oracle with a local path relation oracle.
m_relation = new path_oracle (&(m_ranger.relation ()));
reset_path (path, dependencies);
@@ -54,6 +56,8 @@ path_range_query::path_range_query (gimple_ranger &ranger, bool resolve)
m_ranger (ranger),
m_resolve (resolve)
{
+ share_query (ranger);
+ // Override the relation oracle with a local path relation oracle.
m_relation = new path_oracle (&(m_ranger.relation ()));
}
@@ -303,7 +307,7 @@ path_range_query::range_defined_in_block (vrange &r, tree name, basic_block bb)
}
if (bb && POINTER_TYPE_P (TREE_TYPE (name)))
- m_ranger.infer_oracle ().maybe_adjust_range (r, name, bb);
+ infer_oracle ().maybe_adjust_range (r, name, bb);
if (DEBUG_SOLVER && (bb || !r.varying_p ()))
{
@@ -409,13 +413,12 @@ path_range_query::compute_ranges_in_block (basic_block bb)
p->reset_path ();
}
- gori_compute &g = m_ranger.gori ();
- bitmap exports = g.map()->exports (bb);
+ bitmap exports = gori ().map ()->exports (bb);
EXECUTE_IF_AND_IN_BITMAP (m_exit_dependencies, exports, 0, i, bi)
{
tree name = ssa_name (i);
Value_Range r (TREE_TYPE (name));
- if (g.edge_range_p (r, e, name, *this))
+ if (gori ().edge_range_p (r, e, name, *this))
{
Value_Range cached_range (TREE_TYPE (name));
if (get_cache (cached_range, name))
@@ -463,7 +466,7 @@ path_range_query::adjust_for_non_null_uses (basic_block bb)
else
r.set_varying (TREE_TYPE (name));
- if (m_ranger.infer_oracle ().maybe_adjust_range (r, name, bb))
+ if (infer_oracle ().maybe_adjust_range (r, name, bb))
m_cache.set_range (name, r);
}
}
@@ -487,8 +490,7 @@ path_range_query::compute_exit_dependencies (bitmap dependencies)
{
// Start with the imports from the exit block...
basic_block exit = m_path[0];
- gori_compute &gori = m_ranger.gori ();
- bitmap_copy (dependencies, gori.map()->imports (exit));
+ bitmap_copy (dependencies, gori ().map()->imports (exit));
auto_vec<tree> worklist (bitmap_count_bits (dependencies));
bitmap_iterator bi;
@@ -536,7 +538,7 @@ path_range_query::compute_exit_dependencies (bitmap dependencies)
{
basic_block bb = m_path[i];
tree name;
- FOR_EACH_GORI_EXPORT_NAME (*(gori.map ()), bb, name)
+ FOR_EACH_GORI_EXPORT_NAME (*(gori ().map ()), bb, name)
if (TREE_CODE (TREE_TYPE (name)) == BOOLEAN_TYPE)
bitmap_set_bit (dependencies, SSA_NAME_VERSION (name));
}
@@ -611,8 +613,7 @@ path_range_query::compute_ranges (const bitmap_head *dependencies)
class jt_fur_source : public fur_depend
{
public:
- jt_fur_source (gimple *s, path_range_query *, gori_compute *,
- const vec<basic_block> &);
+ jt_fur_source (gimple *s, path_range_query *, const vec<basic_block> &);
relation_kind query_relation (tree op1, tree op2) override;
void register_relation (gimple *, relation_kind, tree op1, tree op2) override;
void register_relation (edge, relation_kind, tree op1, tree op2) override;
@@ -622,9 +623,8 @@ private:
jt_fur_source::jt_fur_source (gimple *s,
path_range_query *query,
- gori_compute *gori,
const vec<basic_block> &path)
- : fur_depend (s, gori, query)
+ : fur_depend (s, query)
{
gcc_checking_assert (!path.is_empty ());
@@ -671,7 +671,7 @@ path_range_query::range_of_stmt (vrange &r, gimple *stmt, tree)
if (m_resolve)
{
fold_using_range f;
- jt_fur_source src (stmt, this, &m_ranger.gori (), m_path);
+ jt_fur_source src (stmt, this, m_path);
if (!f.fold_stmt (r, stmt, src))
r.set_varying (type);
}
@@ -761,7 +761,7 @@ path_range_query::compute_outgoing_relations (basic_block bb, basic_block next)
else
gcc_unreachable ();
- jt_fur_source src (NULL, this, &m_ranger.gori (), m_path);
+ jt_fur_source src (NULL, this, m_path);
src.register_outgoing_edges (cond, r, e0, e1);
}
}