diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-05-17 10:44:27 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-05-23 16:48:44 -0400 |
commit | 6c64a85ebec448503c3247fc30923e14cc7074fd (patch) | |
tree | 20dd7c01f3da0c38b8f5d3596bc2e517bacd26c6 /gcc | |
parent | fca649dedaf6c4025ae3471cc1f322a90ebdd19a (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range.cc | 4 | ||||
-rw-r--r-- | gcc/value-query.cc | 11 | ||||
-rw-r--r-- | gcc/value-query.h | 5 |
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. |