diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-06-16 11:41:19 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-06-16 11:41:19 +0000 |
commit | c9ef88dc9eecd3868965c3a69834ca777d42c360 (patch) | |
tree | 77051b4b87d6df7956332bd6d3707b0007772e61 /gcc/ipa-inline-transform.c | |
parent | d1a427e6705f8dd0a2d0bade3defe4c7d74ac872 (diff) | |
download | gcc-c9ef88dc9eecd3868965c3a69834ca777d42c360.tar.gz |
* ipa-inline-transform.c (update_noncloned_frequencies): Update also
counts.
(clone_inlined_nodes): Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@249244 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-inline-transform.c')
-rw-r--r-- | gcc/ipa-inline-transform.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c index 9866a55e8b5..dc224f7a394 100644 --- a/gcc/ipa-inline-transform.c +++ b/gcc/ipa-inline-transform.c @@ -54,10 +54,12 @@ int nfunctions_inlined; /* Scale frequency of NODE edges by FREQ_SCALE. */ static void -update_noncloned_frequencies (struct cgraph_node *node, - int freq_scale) +update_noncloned_frequencies (struct cgraph_node *node, + int freq_scale, profile_count num, + profile_count den) { struct cgraph_edge *e; + bool scale = (num == profile_count::zero () || den > 0); /* We do not want to ignore high loop nest after freq drops to 0. */ if (!freq_scale) @@ -68,14 +70,20 @@ update_noncloned_frequencies (struct cgraph_node *node, if (e->frequency > CGRAPH_FREQ_MAX) e->frequency = CGRAPH_FREQ_MAX; if (!e->inline_failed) - update_noncloned_frequencies (e->callee, freq_scale); + update_noncloned_frequencies (e->callee, freq_scale, num, den); + if (scale) + e->count = e->count.apply_scale (num, den); } for (e = node->indirect_calls; e; e = e->next_callee) { e->frequency = e->frequency * (gcov_type) freq_scale / CGRAPH_FREQ_BASE; if (e->frequency > CGRAPH_FREQ_MAX) e->frequency = CGRAPH_FREQ_MAX; + if (scale) + e->count = e->count.apply_scale (num, den); } + if (scale) + node->count = node->count.apply_scale (num, den); } /* We removed or are going to remove the last call to NODE. @@ -212,7 +220,8 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, } duplicate = false; e->callee->externally_visible = false; - update_noncloned_frequencies (e->callee, e->frequency); + update_noncloned_frequencies (e->callee, e->frequency, + e->count, e->callee->count); dump_callgraph_transformation (e->callee, inlining_into, "inlining to"); |