Commit 7d72a77f by Jan Hubicka Committed by Jan Hubicka

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
parent 8d94f932
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> 2017-06-16 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
* config/aarch64/aarch64.c (qdf24xx_prefetch_tune): Update * config/aarch64/aarch64.c (qdf24xx_prefetch_tune): Update
......
...@@ -54,10 +54,12 @@ int nfunctions_inlined; ...@@ -54,10 +54,12 @@ int nfunctions_inlined;
/* Scale frequency of NODE edges by FREQ_SCALE. */ /* Scale frequency of NODE edges by FREQ_SCALE. */
static void static void
update_noncloned_frequencies (struct cgraph_node *node, update_noncloned_frequencies (struct cgraph_node *node,
int freq_scale) int freq_scale, profile_count num,
profile_count den)
{ {
struct cgraph_edge *e; 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. */ /* We do not want to ignore high loop nest after freq drops to 0. */
if (!freq_scale) if (!freq_scale)
...@@ -68,14 +70,20 @@ update_noncloned_frequencies (struct cgraph_node *node, ...@@ -68,14 +70,20 @@ update_noncloned_frequencies (struct cgraph_node *node,
if (e->frequency > CGRAPH_FREQ_MAX) if (e->frequency > CGRAPH_FREQ_MAX)
e->frequency = CGRAPH_FREQ_MAX; e->frequency = CGRAPH_FREQ_MAX;
if (!e->inline_failed) 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) for (e = node->indirect_calls; e; e = e->next_callee)
{ {
e->frequency = e->frequency * (gcov_type) freq_scale / CGRAPH_FREQ_BASE; e->frequency = e->frequency * (gcov_type) freq_scale / CGRAPH_FREQ_BASE;
if (e->frequency > CGRAPH_FREQ_MAX) if (e->frequency > CGRAPH_FREQ_MAX)
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. /* 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, ...@@ -212,7 +220,8 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
} }
duplicate = false; duplicate = false;
e->callee->externally_visible = 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, dump_callgraph_transformation (e->callee, inlining_into,
"inlining to"); "inlining to");
......
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