Hi, this PR is about IPA icf first releasing body during profile merge and then attempting to use result to build tunk.
Bootstrapped/regtested x86_64-linux. Tested on Firefox build. Will commit it shortly. Honza PR ipa/64872 * ipa-utils.c (ipa_merge_profiles): Add release argument. * ipa-icf.c (sem_function::merge): Do not release body when merging. * ipa-utils.h (ipa_merge_profiles): Update prototype. Index: ipa-utils.c =================================================================== --- ipa-utils.c (revision 220313) +++ ipa-utils.c (working copy) @@ -407,11 +407,13 @@ get_base_var (tree t) /* SRC and DST are going to be merged. Take SRC's profile and merge it into - DST so it is not going to be lost. Destroy SRC's body on the way. */ + DST so it is not going to be lost. Possibly destroy SRC's body on the way + unless PRESERVE_BODY is set. */ void ipa_merge_profiles (struct cgraph_node *dst, - struct cgraph_node *src) + struct cgraph_node *src, + bool preserve_body) { tree oldsrcdecl = src->decl; struct function *srccfun, *dstcfun; @@ -652,7 +654,8 @@ ipa_merge_profiles (struct cgraph_node * e->frequency = freq; } } - src->release_body (); + if (!preserve_body) + src->release_body (); inline_update_overall_summary (dst); } /* TODO: if there is no match, we can scale up. */ Index: ipa-icf.c =================================================================== --- ipa-icf.c (revision 220313) +++ ipa-icf.c (working copy) @@ -762,7 +762,7 @@ sem_function::merge (sem_item *alias_ite } alias->icf_merged = true; - ipa_merge_profiles (local_original, alias); + ipa_merge_profiles (local_original, alias, true); alias->create_wrapper (local_original); if (dump_file) Index: ipa-utils.h =================================================================== --- ipa-utils.h (revision 220313) +++ ipa-utils.h (working copy) @@ -44,7 +44,7 @@ bool ipa_edge_within_scc (struct cgraph_ int ipa_reverse_postorder (struct cgraph_node **); tree get_base_var (tree); void ipa_merge_profiles (struct cgraph_node *dst, - struct cgraph_node *src); + struct cgraph_node *src, bool preserve_body = false); bool recursive_call_p (tree, tree); /* In ipa-profile.c */