Prevent inconsistent profiles to be created in inlin_transform
* ipa-inline-transform.c (inline_transform): Scale profile before redirecting. From-SVN: r278814
This commit is contained in:
parent
97dd1ee8de
commit
c3f1ae8a30
2 changed files with 31 additions and 25 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-11-28 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* ipa-inline-transform.c (inline_transform): Scale profile before
|
||||
redirecting.
|
||||
|
||||
2019-11-28 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* profile-count.h (profile_count::max): Work on profiles of different
|
||||
|
|
|
@ -681,6 +681,31 @@ inline_transform (struct cgraph_node *node)
|
|||
if (preserve_function_body_p (node))
|
||||
save_inline_function_body (node);
|
||||
|
||||
profile_count num = node->count;
|
||||
profile_count den = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
|
||||
bool scale = num.initialized_p () && !(num == den);
|
||||
if (scale)
|
||||
{
|
||||
profile_count::adjust_for_ipa_scaling (&num, &den);
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (dump_file, "Applying count scale ");
|
||||
num.dump (dump_file);
|
||||
fprintf (dump_file, "/");
|
||||
den.dump (dump_file);
|
||||
fprintf (dump_file, "\n");
|
||||
}
|
||||
|
||||
basic_block bb;
|
||||
cfun->cfg->count_max = profile_count::uninitialized ();
|
||||
FOR_ALL_BB_FN (bb, cfun)
|
||||
{
|
||||
bb->count = bb->count.apply_scale (num, den);
|
||||
cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
|
||||
}
|
||||
ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = node->count;
|
||||
}
|
||||
|
||||
for (e = node->callees; e; e = next)
|
||||
{
|
||||
if (!e->inline_failed)
|
||||
|
@ -693,32 +718,8 @@ inline_transform (struct cgraph_node *node)
|
|||
timevar_push (TV_INTEGRATION);
|
||||
if (node->callees && (opt_for_fn (node->decl, optimize) || has_inline))
|
||||
{
|
||||
profile_count num = node->count;
|
||||
profile_count den = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
|
||||
bool scale = num.initialized_p () && !(num == den);
|
||||
if (scale)
|
||||
{
|
||||
profile_count::adjust_for_ipa_scaling (&num, &den);
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (dump_file, "Applying count scale ");
|
||||
num.dump (dump_file);
|
||||
fprintf (dump_file, "/");
|
||||
den.dump (dump_file);
|
||||
fprintf (dump_file, "\n");
|
||||
}
|
||||
|
||||
basic_block bb;
|
||||
cfun->cfg->count_max = profile_count::uninitialized ();
|
||||
FOR_ALL_BB_FN (bb, cfun)
|
||||
{
|
||||
bb->count = bb->count.apply_scale (num, den);
|
||||
cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
|
||||
}
|
||||
ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = node->count;
|
||||
}
|
||||
todo = optimize_inline_calls (current_function_decl);
|
||||
}
|
||||
}
|
||||
timevar_pop (TV_INTEGRATION);
|
||||
|
||||
cfun->always_inline_functions_inlined = true;
|
||||
|
|
Loading…
Add table
Reference in a new issue