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/gimple-range-cache.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/gimple-range-cache.cc')
-rw-r--r-- | gcc/gimple-range-cache.cc | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc index 55277ea..34dc9c4 100644 --- a/gcc/gimple-range-cache.cc +++ b/gcc/gimple-range-cache.cc @@ -950,8 +950,7 @@ update_list::pop () // -------------------------------------------------------------------------- ranger_cache::ranger_cache (int not_executable_flag, bool use_imm_uses) - : m_gori (not_executable_flag), - m_exit (use_imm_uses) + : m_gori (not_executable_flag) { 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); unsigned x, lim = last_basic_block_for_fn (cfun); // Calculate outgoing range info upfront. This will fully populate the @@ -977,6 +977,7 @@ ranger_cache::ranger_cache (int not_executable_flag, bool use_imm_uses) ranger_cache::~ranger_cache () { delete m_update; + destroy_infer_oracle (); destroy_relation_oracle (); delete m_temporal; m_workback.release (); @@ -1175,7 +1176,7 @@ ranger_cache::edge_range (vrange &r, edge e, tree name, enum rfd_mode mode) exit_range (r, name, e->src, mode); // If this is not an abnormal edge, check for inferred ranges on exit. if ((e->flags & (EDGE_EH | EDGE_ABNORMAL)) == 0) - m_exit.maybe_adjust_range (r, name, e->src); + infer_oracle ().maybe_adjust_range (r, name, e->src); Value_Range er (TREE_TYPE (name)); if (m_gori.outgoing_edge_range_p (er, e, name, *this)) r.intersect (er); @@ -1544,7 +1545,7 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb) // Regardless of whether we have visited pred or not, if the // pred has inferred ranges, revisit this block. // Don't search the DOM tree. - if (m_exit.has_range_p (name, pred)) + if (infer_oracle ().has_range_p (pred, name)) { if (DEBUG_RANGE_CACHE) fprintf (dump_file, "Inferred range: update "); @@ -1667,7 +1668,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb, for ( ; bb; prev_bb = bb, bb = get_immediate_dominator (CDI_DOMINATORS, bb)) { // Accumulate any block exit inferred ranges. - m_exit.maybe_adjust_range (infer, name, bb); + infer_oracle ().maybe_adjust_range (infer, name, bb); // This block has an outgoing range. if (m_gori.has_edge_range_p (name, bb)) @@ -1742,7 +1743,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb, r.intersect (er); // If this is a normal edge, apply any inferred ranges. if ((e->flags & (EDGE_EH | EDGE_ABNORMAL)) == 0) - m_exit.maybe_adjust_range (r, name, bb); + infer_oracle ().maybe_adjust_range (r, name, bb); if (DEBUG_RANGE_CACHE) { @@ -1811,11 +1812,8 @@ ranger_cache::apply_inferred_ranges (gimple *s) update = false; } - for (unsigned x = 0; x < infer.num (); x++) - { - tree name = infer.name (x); - m_exit.add_range (name, bb, infer.range (x)); - if (update) - register_inferred_value (infer.range (x), name, bb); - } + infer_oracle ().add_ranges (s, infer); + if (update) + for (unsigned x = 0; x < infer.num (); x++) + register_inferred_value (infer.range (x), infer.name (x), bb); } |