diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2017-06-16 13:41:19 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2017-06-16 11:41:19 +0000 |
commit | 7d72a77f93da14f52b2244d9bbd19dea52bcea26 (patch) | |
tree | 77051b4b87d6df7956332bd6d3707b0007772e61 /gcc | |
parent | 8d94f9324a2c79c6f93e5eea37776b2a27c3532c (diff) | |
download | gcc-7d72a77f93da14f52b2244d9bbd19dea52bcea26.zip gcc-7d72a77f93da14f52b2244d9bbd19dea52bcea26.tar.gz gcc-7d72a77f93da14f52b2244d9bbd19dea52bcea26.tar.bz2 |
ipa-inline-transform.c (update_noncloned_frequencies): Update also counts.
* ipa-inline-transform.c (update_noncloned_frequencies): Update also
counts.
(clone_inlined_nodes): Update.
From-SVN: r249244
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-inline-transform.c | 17 |
2 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 219dc12..0fed0dc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-06-16 Jan Hubicka <hubicka@ucw.cz> + + * ipa-inline-transform.c (update_noncloned_frequencies): Update also + counts. + (clone_inlined_nodes): Update. + 2017-06-16 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> * config/aarch64/aarch64.c (qdf24xx_prefetch_tune): Update diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c index 9866a55..dc224f7 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"); |