Fix cfg maintenance after inlining in AutoFDO
Todo from early_inliner needs to be propagated so that cleanup_tree_cfg () is called if necessary. This bug was causing an assert in get_loop_body during ipa-sra in autoprofiledbootstrap build since loops weren't fixed up and one of the loops had num_nodes set to 0. Tested on x86_64-pc-linux-gnu. gcc/ChangeLog: * auto-profile.cc (auto_profile): Check todo from early_inline to see if cleanup_tree_vfg needs to be called. (early_inline): Return todo from early_inliner.
This commit is contained in:
parent
5d85b5d649
commit
3d9853eeb2
1 changed files with 12 additions and 9 deletions
|
@ -1589,13 +1589,14 @@ afdo_annotate_cfg (const stmt_set &promoted_stmts)
|
|||
|
||||
/* Wrapper function to invoke early inliner. */
|
||||
|
||||
static void
|
||||
static unsigned int
|
||||
early_inline ()
|
||||
{
|
||||
compute_fn_summary (cgraph_node::get (current_function_decl), true);
|
||||
unsigned todo = early_inliner (cfun);
|
||||
unsigned int todo = early_inliner (cfun);
|
||||
if (todo & TODO_update_ssa_any)
|
||||
update_ssa (TODO_update_ssa);
|
||||
return todo;
|
||||
}
|
||||
|
||||
/* Use AutoFDO profile to annoate the control flow graph.
|
||||
|
@ -1651,20 +1652,22 @@ auto_profile (void)
|
|||
function before annotation, so the profile inside bar@loc_foo2
|
||||
will be useful. */
|
||||
autofdo::stmt_set promoted_stmts;
|
||||
unsigned int todo = 0;
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
if (!flag_value_profile_transformations
|
||||
|| !autofdo::afdo_vpt_for_early_inline (&promoted_stmts))
|
||||
break;
|
||||
early_inline ();
|
||||
if (!flag_value_profile_transformations
|
||||
|| !autofdo::afdo_vpt_for_early_inline (&promoted_stmts))
|
||||
break;
|
||||
todo |= early_inline ();
|
||||
}
|
||||
|
||||
early_inline ();
|
||||
todo |= early_inline ();
|
||||
autofdo::afdo_annotate_cfg (promoted_stmts);
|
||||
compute_function_frequency ();
|
||||
|
||||
/* Local pure-const may imply need to fixup the cfg. */
|
||||
if (execute_fixup_cfg () & TODO_cleanup_cfg)
|
||||
todo |= execute_fixup_cfg ();
|
||||
if (todo & TODO_cleanup_cfg)
|
||||
cleanup_tree_cfg ();
|
||||
|
||||
free_dominance_info (CDI_DOMINATORS);
|
||||
|
@ -1674,7 +1677,7 @@ auto_profile (void)
|
|||
pop_cfun ();
|
||||
}
|
||||
|
||||
return TODO_rebuild_cgraph_edges;
|
||||
return 0;
|
||||
}
|
||||
} /* namespace autofdo. */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue