diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-05-17 10:50:24 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-05-23 16:48:44 -0400 |
commit | 07441e41f5eb4d385e8ee7cfb50b5d71520bff74 (patch) | |
tree | d3f7ff2d2800565ff36eda6fdc01b9c9401adba9 /gcc/value-query.cc | |
parent | 6c64a85ebec448503c3247fc30923e14cc7074fd (diff) | |
download | gcc-07441e41f5eb4d385e8ee7cfb50b5d71520bff74.zip gcc-07441e41f5eb4d385e8ee7cfb50b5d71520bff74.tar.gz gcc-07441e41f5eb4d385e8ee7cfb50b5d71520bff74.tar.bz2 |
Move infer_manager to a range_query oracle.
Turn the infer_manager class into an always available oracle accessible via a
range_query object. Also assocaite each inferrred range with it's
originating stmt.
* gimple-range-cache.cc (ranger_cache::ranger_cache): Create an infer
oracle instead of a local member.
(ranger_cache::~ranger_cache): Destroy the oracle.
(ranger_cache::edge_range): Use oracle.
(ranger_cache::fill_block_cache): Likewise.
(ranger_cache::range_from_dom): Likewise.
(ranger_cache::apply_inferred_ranges): Likewise.
* gimple-range-cache.h (ranger_cache::m_exit): Delete.
* gimple-range-infer.cc (infer_oracle): New static object;
(class infer_oracle): New.
(non_null_wrapper::non_null_wrapper): New.
(non_null_wrapper::add_nonzero): New.
(non_null_wrapper::add_range): New.
(non_null_loadstore): Use nonnull_wrapper.
(gimple_infer_range::gimple_infer_range): New alternate constructor.
(exit_range::stmt): New.
(infer_range_manager::has_range_p): Combine seperate methods.
(infer_range_manager::maybe_adjust_range): Adjust has_range_p call.
(infer_range_manager::add_ranges): New.
(infer_range_manager::add_range): Take stmt rather than BB.
(infer_range_manager::add_nonzero): Adjust from BB to stmt.
* gimple-range-infer.h (class gimple_infer_range): Adjust methods.
(infer_range_oracle): New.
(class infer_range_manager): Inherit from infer_range_oracle.
Adjust methods.
* gimple-range-path.cc (path_range_query::range_defined_in_block): Use
oracle.
(path_range_query::adjust_for_non_null_uses): Likewise.
* gimple-range.cc (gimple_ranger::range_on_edge): Likewise
(gimple_ranger::register_transitive_inferred_ranges): Likewise.
* value-query.cc (default_infer_oracle): New.
(range_query::create_infer_oracle): New.
(range_query::destroy_infer_oracle): New.
(range_query::share_query): Copy infer pointer.
(range_query::range_query): Initialize infer pointer.
(range_query::~range_query): destroy infer object.
* value-query.h (range_query::infer_oracle): New.
(range_query::create_infer_oracle): New prototype.
(range_query::destroy_infer_oracle): New prototype.
(range_query::m_infer): New.
Diffstat (limited to 'gcc/value-query.cc')
-rw-r--r-- | gcc/value-query.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/value-query.cc b/gcc/value-query.cc index adcc59c..41b581b 100644 --- a/gcc/value-query.cc +++ b/gcc/value-query.cc @@ -181,6 +181,23 @@ range_query::dump (FILE *) // Default oracle for all range queries. This contains no storage and thus // can be used anywhere. relation_oracle default_relation_oracle; +infer_range_oracle default_infer_oracle; + +void +range_query::create_infer_oracle (bool do_search) +{ + gcc_checking_assert (m_infer == &default_infer_oracle); + m_infer = new infer_range_manager (do_search); + gcc_checking_assert (m_infer); +} + +void +range_query::destroy_infer_oracle () +{ + if (m_infer && m_infer != &default_infer_oracle) + delete m_infer; + m_infer = &default_infer_oracle; +} // Create dominance based range oracle for the current query if dom info is // available. @@ -215,12 +232,14 @@ void range_query::share_query (range_query &q) { m_relation = q.m_relation; + m_infer = q.m_infer; m_shared_copy_p = true; } range_query::range_query () { m_relation = &default_relation_oracle; + m_infer = &default_infer_oracle; m_shared_copy_p = false; } @@ -229,6 +248,7 @@ range_query::~range_query () // Do not destroy anything if this is a shared copy. if (m_shared_copy_p) return; + destroy_infer_oracle (); destroy_relation_oracle (); } |