On Sat, Oct 31, 2020 at 2:22 AM Jan Hubicka <hubi...@ucw.cz> wrote: > > Hi, > this patch moves clone_info to summary. > Bootstrapped/regtested x86_64-linux, comitted. > > Honza > > 2020-10-31 Jan Hubicka <hubi...@ucw.cz> > > * Makefile.in: (OBJS): Add symtab-clones.o > (GTFILES): Add symtab-clones.h > * cgraph.c: Include symtab-clones.h. > (cgraph_edge::resolve_speculation): Fix formating > (cgraph_edge::redirect_call_stmt_to_callee): Update. > (cgraph_update_edges_for_call_stmt): Update > (release_function_body): Fix formating. > (cgraph_node::remove): Fix formating. > (cgraph_node::dump): Fix formating. > (cgraph_node::get_availability): Fix formating. > (cgraph_node::call_for_symbol_thunks_and_aliases): Fix formating. > (set_const_flag_1): Fix formating. > (set_pure_flag_1): Fix formating. > (cgraph_node::can_remove_if_no_direct_calls_p): Fix formating. > (collect_callers_of_node_1): Fix formating. > (clone_of_p): Update. > (cgraph_node::verify_node): Update. > (cgraph_c_finalize): Call clone_info::release (). > * cgraph.h (struct cgraph_clone_info): Move to symtab-clones.h. > (cgraph_node): Remove clone_info. > (symbol_table): Add m_clones. > * cgraphclones.c: Include symtab-clone.h. > (duplicate_thunk_for_node): Update. > (cgraph_node::create_clone): Update. > (cgraph_node::create_virtual_clone): Update. > (cgraph_node::find_replacement): Update. > (cgraph_node::materialize_clone): Update. > * gengtype.c (open_base_files): Include symtab-clones.h. > * ipa-cp.c: Include symtab-clones.h. > (initialize_node_lattices): Update. > (want_remove_some_param_p): Update. > (create_specialized_node): Update. > * ipa-fnsummary.c: Include symtab-clones.h. > (ipa_fn_summary_t::duplicate): Update. > * ipa-modref.c: Include symtab-clones.h. > (update_signature): Update. > * ipa-param-manipulation.c: Include symtab-clones.h. > (ipa_param_body_adjustments::common_initialization): Update. > * ipa-prop.c: Include symtab-clones.h. > (adjust_agg_replacement_values): Update. > (ipcp_get_parm_bits): Update. > (ipcp_update_bits): Update. > (ipcp_update_vr): Update. > * ipa-sra.c: Include symtab-clones.h. > (process_isra_node_results): Update. > (disable_unavailable_parameters): Update. > * lto-cgraph.c: Include symtab-clone.h. > (output_cgraph_opt_summary_p): Update. > (output_node_opt_summary): Update. > (input_node_opt_summary): Update. > * symtab-clones.cc: New file. > * symtab-clones.h: New file. > * tree-inline.c (expand_call_inline): Update. > (update_clone_info): Update. > (tree_function_versioning): Update. > > diff --git a/gcc/Makefile.in b/gcc/Makefile.in > index 7fc03c8d946..7b94497b6f2 100644 > --- a/gcc/Makefile.in > +++ b/gcc/Makefile.in > @@ -1299,6 +1299,7 @@ OBJS = \ > cfgrtl.o \ > symtab.o \ > symtab-thunks.o \ > + symtab-clones.o \ > cgraph.o \ > cgraphbuild.o \ > cgraphunit.o \ > @@ -2594,6 +2595,7 @@ GTFILES = $(CPPLIB_H) $(srcdir)/input.h > $(srcdir)/coretypes.h \ > $(srcdir)/output.h $(srcdir)/cfgloop.h $(srcdir)/cfg.h > $(srcdir)/profile-count.h \ > $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/ipa-ref.h > $(srcdir)/cgraph.h \ > $(srcdir)/symtab-thunks.h $(srcdir)/symtab-thunks.cc \ > + $(srcdir)/symtab-clones.h \ > $(srcdir)/reload.h $(srcdir)/caller-save.c $(srcdir)/symtab.c \ > $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c > \ > $(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/ipa-utils.h \ > diff --git a/gcc/cgraph.c b/gcc/cgraph.c > index 9129bcf12d2..9f3a7284310 100644 > --- a/gcc/cgraph.c > +++ b/gcc/cgraph.c > @@ -66,6 +66,7 @@ along with GCC; see the file COPYING3. If not see > #include "ipa-inline.h" > #include "tree-nested.h" > #include "symtab-thunks.h" > +#include "symtab-clones.h" > > /* FIXME: Only for PROP_loops, but cgraph shouldn't have to know about this. > */ > #include "tree-pass.h" > @@ -1236,7 +1237,7 @@ cgraph_edge::resolve_speculation (cgraph_edge *edge, > tree callee_decl) > { > cgraph_edge *tmp = edge; > if (dump_file) > - fprintf (dump_file, "Speculative call turned into direct call.\n"); > + fprintf (dump_file, "Speculative call turned into direct call.\n"); > edge = e2; > e2 = tmp; > /* FIXME: If EDGE is inlined, we should scale up the frequencies > @@ -1488,38 +1489,43 @@ cgraph_edge::redirect_call_stmt_to_callee > (cgraph_edge *e) > return e->call_stmt; > } > } > - > if (flag_checking && decl) > { > cgraph_node *node = cgraph_node::get (decl); > - gcc_assert (!node || !node->clone.param_adjustments); > + clone_info *info = clone_info::get (node); > + gcc_assert (!node || !info || !info->param_adjustments); > } >
Since we assert !node, we can't do clone_info::get (node) unconditionally: diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 9f3a7284310..b3b8af30003 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1492,7 +1492,11 @@ cgraph_edge::redirect_call_stmt_to_callee (cgraph_edge *e) if (flag_checking && decl) { cgraph_node *node = cgraph_node::get (decl); - clone_info *info = clone_info::get (node); + clone_info *info; + if (node) + info = clone_info::get (node); + else + info = nullptr; gcc_assert (!node || !info || !info->param_adjustments); } -- H.J.