On Tue, Jun 15, 2021 at 8:00 AM Trevor Saunders <tbsau...@tbsaunde.org> wrote: > > This ensures the callers of collect_callers () take ownership of the vector > and > free it when appropriate. > > Signed-off-by: Trevor Saunders <tbsau...@tbsaunde.org> > > bootstrapped and regtested on x86_64-linux-gnu, ok?
OK. > gcc/ChangeLog: > > * cgraph.c (cgraph_node::collect_callers): Return > auto_vec<cgraph_edge *>. > * cgraph.h (cgraph_node::collect_callers): Likewise. > * ipa-cp.c (create_specialized_node): Adjust. > (decide_about_value): Likewise. > (decide_whether_version_node): Likewise. > * ipa-sra.c (process_isra_node_results): Likewise. > --- > gcc/cgraph.c | 4 ++-- > gcc/cgraph.h | 2 +- > gcc/ipa-cp.c | 7 +++---- > gcc/ipa-sra.c | 2 +- > 4 files changed, 7 insertions(+), 8 deletions(-) > > diff --git a/gcc/cgraph.c b/gcc/cgraph.c > index d7c78d518bc..abe4e3ebfb3 100644 > --- a/gcc/cgraph.c > +++ b/gcc/cgraph.c > @@ -3074,10 +3074,10 @@ collect_callers_of_node_1 (cgraph_node *node, void > *data) > /* Collect all callers of cgraph_node and its aliases that are known to lead > to > cgraph_node (i.e. are not overwritable). */ > > -vec<cgraph_edge *> > +auto_vec<cgraph_edge *> > cgraph_node::collect_callers (void) > { > - vec<cgraph_edge *> redirect_callers = vNULL; > + auto_vec<cgraph_edge *> redirect_callers; > call_for_symbol_thunks_and_aliases (collect_callers_of_node_1, > &redirect_callers, false); > return redirect_callers; > diff --git a/gcc/cgraph.h b/gcc/cgraph.h > index 4a1f89920f5..9f4338fdf87 100644 > --- a/gcc/cgraph.h > +++ b/gcc/cgraph.h > @@ -1139,7 +1139,7 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : > public symtab_node > > /* Collect all callers of cgraph_node and its aliases that are known to > lead > to NODE (i.e. are not overwritable) and that are not thunks. */ > - vec<cgraph_edge *> collect_callers (void); > + auto_vec<cgraph_edge *> collect_callers (void); > > /* Remove all callers from the node. */ > void remove_callers (void); > diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index 2cae69e5a1b..57c18af2bab 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -4527,7 +4527,7 @@ create_specialized_node (struct cgraph_node *node, > vec<tree> known_csts, > vec<ipa_polymorphic_call_context> known_contexts, > struct ipa_agg_replacement_value *aggvals, > - vec<cgraph_edge *> callers) > + vec<cgraph_edge *> &callers) > { > ipa_node_params *new_info, *info = ipa_node_params_sum->get (node); > vec<ipa_replace_map *, va_gc> *replace_trees = NULL; > @@ -4672,7 +4672,6 @@ create_specialized_node (struct cgraph_node *node, > > ipcp_discover_new_direct_edges (new_node, known_csts, known_contexts, > aggvals); > > - callers.release (); > return new_node; > } > > @@ -5562,6 +5561,7 @@ decide_about_value (struct cgraph_node *node, int > index, HOST_WIDE_INT offset, > offset, val->value)); > val->spec_node = create_specialized_node (node, known_csts, known_contexts, > aggvals, callers); > + callers.release (); > overall_size += val->local_size_cost; > if (dump_file && (dump_flags & TDF_DETAILS)) > fprintf (dump_file, " overall size reached %li\n", > @@ -5638,7 +5638,7 @@ decide_whether_version_node (struct cgraph_node *node) > } > > struct cgraph_node *clone; > - vec<cgraph_edge *> callers = node->collect_callers (); > + auto_vec<cgraph_edge *> callers = node->collect_callers (); > > for (int i = callers.length () - 1; i >= 0; i--) > { > @@ -5654,7 +5654,6 @@ decide_whether_version_node (struct cgraph_node *node) > /* If node is not called by anyone, or all its caller edges are > self-recursive, the node is not really in use, no need to do > cloning. */ > - callers.release (); > info->do_clone_for_all_contexts = false; > return ret; > } > diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c > index 3f90d4d81b6..3272daf56e4 100644 > --- a/gcc/ipa-sra.c > +++ b/gcc/ipa-sra.c > @@ -3755,7 +3755,7 @@ process_isra_node_results (cgraph_node *node, > unsigned &suffix_counter = clone_num_suffixes->get_or_insert ( > IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME ( > node->decl))); > - vec<cgraph_edge *> callers = node->collect_callers (); > + auto_vec<cgraph_edge *> callers = node->collect_callers (); > cgraph_node *new_node > = node->create_virtual_clone (callers, NULL, new_adjustments, "isra", > suffix_counter); > -- > 2.20.1 >