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: