After inline summary is recomputed, the large code growth problem will also be better controlled, right?
David On Thu, Nov 13, 2014 at 2:48 PM, Xinliang David Li <davi...@google.com> wrote: > Is there a need to have 10 iterations of early inline for autofdo? > > David > > On Thu, Nov 13, 2014 at 2:25 PM, Dehao Chen <de...@google.com> wrote: >> In AutoFDO, we increase einline iterations. This could lead to >> extensive code bloat if we have recursive calls like: >> >> dtor() { >> destroy(node); >> } >> >> destroy(node) { >> destroy(left) >> destroy(right) >> } >> >> In this case, the size growth will be around 8 which is smaller than >> threshold (11). However, if we allow this to happen for 2 iterations, >> it will expand the size by 1024X. To fix this problem, we want to set >> a much smaller threshold in the AutoFDO case. This is because AutoFDO >> do not not rely on aggressive einline to gain more profile context. >> >> And also, in AutoFDO pass, after we processed a function, we need to >> recompute inline parameters because rebuild_cgraph_edges will zero out >> all inline parameters. >> >> The patch is attached below, bootstrapped and perf test on-going. OK >> for google-4_9? >> >> Thanks, >> Dehao >> >> Index: gcc/auto-profile.c >> =================================================================== >> --- gcc/auto-profile.c (revision 217523) >> +++ gcc/auto-profile.c (working copy) >> @@ -1771,6 +1771,7 @@ auto_profile (void) >> free_dominance_info (CDI_DOMINATORS); >> free_dominance_info (CDI_POST_DOMINATORS); >> rebuild_cgraph_edges (); >> + compute_inline_parameters (cgraph_get_node >> (current_function_decl), true); >> pop_cfun (); >> } >> >> Index: gcc/opts.c >> =================================================================== >> --- gcc/opts.c (revision 217523) >> +++ gcc/opts.c (working copy) >> @@ -1853,6 +1853,12 @@ common_handle_option (struct gcc_options *opts, >> maybe_set_param_value ( >> PARAM_EARLY_INLINER_MAX_ITERATIONS, 10, >> opts->x_param_values, opts_set->x_param_values); >> + maybe_set_param_value ( >> + PARAM_EARLY_INLINING_INSNS, 4, >> + opts->x_param_values, opts_set->x_param_values); >> + maybe_set_param_value ( >> + PARAM_EARLY_INLINING_INSNS_COMDAT, 4, >> + opts->x_param_values, opts_set->x_param_values); >> value = true; >> /* No break here - do -fauto-profile processing. */ >> case OPT_fauto_profile: