> The size_info of ipa_size_summary are created by r277424. It should be > duplicated for cloned nodes, otherwise self_size and estimated_self_stack_size > would be 0, causing param large-function-insns and large-function-growth > working > inaccurate when ipa-inline. > > gcc/ChangeLog: > > 2019-12-18 Luo Xiong Hu <luo...@linux.ibm.com> > > * ipa-fnsummary.c (ipa_fn_summary_t::duplicate): Copy > ipa_size_summary for cloned nodes. > --- > gcc/ipa-fnsummary.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c > index a46b1445765..9a01be1708b 100644 > --- a/gcc/ipa-fnsummary.c > +++ b/gcc/ipa-fnsummary.c > @@ -868,7 +868,12 @@ ipa_fn_summary_t::duplicate (cgraph_node *src, > } > } > if (!dst->inlined_to) > + { > + class ipa_size_summary *src_size = ipa_size_summaries->get_create (src); > + class ipa_size_summary *dst_size = ipa_size_summaries->get_create (dst);
This is intended to happen by the default duplicate method of ipa_size_summaries via to copy constructor. It seems there is a stupid pasto and the copy constructor is unused since the default duplicate implementation does nothing (wonder why). I am testing the attached patch. Does this help? Index: ipa-fnsummary.h =================================================================== --- ipa-fnsummary.h (revision 279523) +++ ipa-fnsummary.h (working copy) @@ -99,11 +99,6 @@ public: : estimated_self_stack_size (0), self_size (0), size (0) { } - /* Copy constructor. */ - ipa_size_summary (const ipa_size_summary &s) - : estimated_self_stack_size (0), self_size (s.self_size), size (s.size) - { - } }; /* Function inlining information. */ @@ -226,18 +221,20 @@ extern GTY(()) fast_function_summary <ip *ipa_fn_summaries; class ipa_size_summary_t: - public fast_function_summary <ipa_size_summary *, va_gc> + public fast_function_summary <ipa_size_summary *, va_heap> { public: ipa_size_summary_t (symbol_table *symtab): - fast_function_summary <ipa_size_summary *, va_gc> (symtab) {} + fast_function_summary <ipa_size_summary *, va_heap> (symtab) + { + disable_insertion_hook (); + } - static ipa_size_summary_t *create_ggc (symbol_table *symtab) + virtual void duplicate (cgraph_node *, cgraph_node *, + ipa_size_summary *src_data, + ipa_size_summary *dst_data) { - class ipa_size_summary_t *summary = new (ggc_alloc <ipa_size_summary_t> ()) - ipa_size_summary_t (symtab); - summary->disable_insertion_hook (); - return summary; + *dst_data = *src_data; } }; extern fast_function_summary <ipa_size_summary *, va_heap> Index: ipa-fnsummary.c =================================================================== --- ipa-fnsummary.c (revision 279523) +++ ipa-fnsummary.c (working copy) @@ -672,8 +672,7 @@ static void ipa_fn_summary_alloc (void) { gcc_checking_assert (!ipa_fn_summaries); - ipa_size_summaries = new fast_function_summary <ipa_size_summary *, va_heap> - (symtab); + ipa_size_summaries = new ipa_size_summary_t (symtab); ipa_fn_summaries = ipa_fn_summary_t::create_ggc (symtab); ipa_call_summaries = new ipa_call_summary_t (symtab); }