IIRC, AutoFDO the actual iteration for AutoFDO is mostly <3. But it
should not harm to set max iter as 10.

On Thu, Nov 13, 2014 at 2:51 PM, Xinliang David Li <davi...@google.com> wrote:
> After inline summary is recomputed, the large code growth problem will
> also be better controlled, right?

For this case, recomputing inline summary does not help because the
code was bloated in first einline phase.

Dehao

>
> 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:

Reply via email to