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.