diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cgraphclones.c | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39486ff..1ac0ef0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-11-23 Jan Hubicka <hubicka@ucw.cz> + + * cgraphclones.c (cgraph_node::create_clone): Fix updating of profile + when inlining. + 2017-11-23 Tom de Vries <tom@codesourcery.com> * config/sh/sh.h (ASM_OUTPUT_ADDR_VEC_ELT): Wrap in "do {} while (0)". diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c index ef39d85..0e7e35b 100644 --- a/gcc/cgraphclones.c +++ b/gcc/cgraphclones.c @@ -428,7 +428,10 @@ cgraph_node::create_clone (tree new_decl, profile_count prof_count, if (new_inlined_to) dump_callgraph_transformation (this, new_inlined_to, "inlining to"); - prof_count = count.combine_with_ipa_count (prof_count); + /* When inlining we scale precisely to prof_count, when cloning we can + preserve local profile. */ + if (!new_inlined_to) + prof_count = count.combine_with_ipa_count (prof_count); new_node->count = prof_count; /* Update IPA profile. Local profiles need no updating in original. */ |