aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-05-17 10:44:27 -0400
committerAndrew MacLeod <amacleod@redhat.com>2024-05-23 16:48:44 -0400
commit6c64a85ebec448503c3247fc30923e14cc7074fd (patch)
tree20dd7c01f3da0c38b8f5d3596bc2e517bacd26c6
parentfca649dedaf6c4025ae3471cc1f322a90ebdd19a (diff)
downloadgcc-6c64a85ebec448503c3247fc30923e14cc7074fd.zip
gcc-6c64a85ebec448503c3247fc30923e14cc7074fd.tar.gz
gcc-6c64a85ebec448503c3247fc30923e14cc7074fd.tar.bz2
Allow components to be shared among range-queries.
Ranger and the ranger cache need to share components, this provides a blessed way to do so. * gimple-range.cc (gimple_ranger::gimple_ranger): Share the components from ranger_cache. (gimple_ranger::~gimple_ranger): Don't clear pointer. * value-query.cc (range_query::share_query): New. (range_query::range_query): Clear shared component flag. (range_query::~range_query): Don't free shared component copies. * value-query.h (share_query): New prototype. (m_shared_copy_p): New member.
-rw-r--r--gcc/gimple-range.cc4
-rw-r--r--gcc/value-query.cc11
-rw-r--r--gcc/value-query.h5
3 files changed, 17 insertions, 3 deletions
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index 9664300..4326976 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -44,7 +44,7 @@ gimple_ranger::gimple_ranger (bool use_imm_uses) :
current_bb (NULL)
{
// Share the oracle from the cache.
- m_relation = &m_cache.relation ();
+ share_query (m_cache);
if (dump_file && (param_ranger_debug & RANGER_DEBUG_TRACE))
tracer.enable_trace ();
m_stmt_list.create (0);
@@ -67,8 +67,6 @@ gimple_ranger::gimple_ranger (bool use_imm_uses) :
gimple_ranger::~gimple_ranger ()
{
- // Restore the original oracle.
- m_relation = NULL;
m_stmt_list.release ();
}
diff --git a/gcc/value-query.cc b/gcc/value-query.cc
index db64a95..adcc59c 100644
--- a/gcc/value-query.cc
+++ b/gcc/value-query.cc
@@ -211,13 +211,24 @@ range_query::destroy_relation_oracle ()
}
}
+void
+range_query::share_query (range_query &q)
+{
+ m_relation = q.m_relation;
+ m_shared_copy_p = true;
+}
+
range_query::range_query ()
{
m_relation = &default_relation_oracle;
+ m_shared_copy_p = false;
}
range_query::~range_query ()
{
+ // Do not destroy anything if this is a shared copy.
+ if (m_shared_copy_p)
+ return;
destroy_relation_oracle ();
}
diff --git a/gcc/value-query.h b/gcc/value-query.h
index a8688a0..a573590 100644
--- a/gcc/value-query.h
+++ b/gcc/value-query.h
@@ -88,6 +88,11 @@ protected:
basic_block bbentry, basic_block bbexit);
bool get_arith_expr_range (vrange &r, tree expr, gimple *stmt);
relation_oracle *m_relation;
+ // When multiple related range queries wish to share oracles.
+ // This is an internal interface
+ void share_query (range_query &q);
+ bool m_shared_copy_p;
+
};
// Global ranges for SSA names using SSA_NAME_RANGE_INFO.