Commit b730d1c9 by Jan Hubicka Committed by Jan Hubicka

re PR ipa/64872 (ICE: Segmentation fault during Chromium PGO build)


	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.

From-SVN: r220329
parent dfde35b3
2015-01-29 Jan Hubicka <hubicka@ucw.cz>
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.
2015-02-01 Jakub Jelinek <jakub@redhat.com> 2015-02-01 Jakub Jelinek <jakub@redhat.com>
PR debug/64817 PR debug/64817
......
...@@ -762,7 +762,7 @@ sem_function::merge (sem_item *alias_item) ...@@ -762,7 +762,7 @@ sem_function::merge (sem_item *alias_item)
} }
alias->icf_merged = true; alias->icf_merged = true;
ipa_merge_profiles (local_original, alias); ipa_merge_profiles (local_original, alias, true);
alias->create_wrapper (local_original); alias->create_wrapper (local_original);
if (dump_file) if (dump_file)
......
...@@ -407,11 +407,13 @@ get_base_var (tree t) ...@@ -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 /* 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 void
ipa_merge_profiles (struct cgraph_node *dst, ipa_merge_profiles (struct cgraph_node *dst,
struct cgraph_node *src) struct cgraph_node *src,
bool preserve_body)
{ {
tree oldsrcdecl = src->decl; tree oldsrcdecl = src->decl;
struct function *srccfun, *dstcfun; struct function *srccfun, *dstcfun;
...@@ -652,7 +654,8 @@ ipa_merge_profiles (struct cgraph_node *dst, ...@@ -652,7 +654,8 @@ ipa_merge_profiles (struct cgraph_node *dst,
e->frequency = freq; e->frequency = freq;
} }
} }
src->release_body (); if (!preserve_body)
src->release_body ();
inline_update_overall_summary (dst); inline_update_overall_summary (dst);
} }
/* TODO: if there is no match, we can scale up. */ /* TODO: if there is no match, we can scale up. */
......
...@@ -44,7 +44,7 @@ bool ipa_edge_within_scc (struct cgraph_edge *); ...@@ -44,7 +44,7 @@ bool ipa_edge_within_scc (struct cgraph_edge *);
int ipa_reverse_postorder (struct cgraph_node **); int ipa_reverse_postorder (struct cgraph_node **);
tree get_base_var (tree); tree get_base_var (tree);
void ipa_merge_profiles (struct cgraph_node *dst, 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); bool recursive_call_p (tree, tree);
/* In ipa-profile.c */ /* In ipa-profile.c */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment