PING: [PATCH] Be more conservative in early inliner if FDO is enabled

Richard Biener richard.guenther@gmail.com
Mon Oct 10 09:55:00 GMT 2016


On Mon, Oct 10, 2016 at 4:23 AM, Yuan, Pengfei <ypf@pku.edu.cn> wrote:
> Hi,
>
> What is the decision on this patch?
> https://gcc.gnu.org/ml/gcc-patches/2016-09/msg01041.html

Honza approved the patch already.

Richard.

> Regards,
> Yuan, Pengfei
>
>> A new patch for trunk is attached.
>>
>> Regards,
>> Yuan, Pengfei
>>
>>
>> 2016-09-16  Yuan Pengfei  <ypf@pku.edu.cn>
>>
>>       * doc/invoke.texi (--param early-inlining-insns-feedback): New.
>>       * ipa-inline.c (want_early_inline_function_p): Use
>>       PARAM_EARLY_INLINING_INSNS_FEEDBACK when FDO is enabled.
>>       * params.def (PARAM_EARLY_INLINING_INSNS_FEEDBACK): Define.
>>       (PARAM_EARLY_INLINING_INSNS): Change help string accordingly.
>>
>>
>> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
>> index 8eb5eff..6e7659a 100644
>> --- a/gcc/doc/invoke.texi
>> +++ b/gcc/doc/invoke.texi
>> @@ -9124,12 +9124,18 @@ given call expression.  This parameter limits inlining only to call expressions
>>  whose probability exceeds the given threshold (in percents).
>>  The default value is 10.
>>
>>  @item early-inlining-insns
>> +@itemx early-inlining-insns-feedback
>>  Specify growth that the early inliner can make.  In effect it increases
>>  the amount of inlining for code having a large abstraction penalty.
>>  The default value is 14.
>>
>> +The @option{early-inlining-insns-feedback} parameter is used only when
>> +profile feedback-directed optimizations are enabled (by
>> +@option{-fprofile-generate} or @option{-fprofile-use}).
>> +The default value is 2.
>> +
>>  @item max-early-inliner-iterations
>>  Limit of iterations of the early inliner.  This basically bounds
>>  the number of nested indirect calls the early inliner can resolve.
>>  Deeper chains are still handled by late inlining.
>> diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
>> index 5c9366a..e028c08 100644
>> --- a/gcc/ipa-inline.c
>> +++ b/gcc/ipa-inline.c
>> @@ -594,10 +594,17 @@ want_early_inline_function_p (struct cgraph_edge *e)
>>      }
>>    else
>>      {
>>        int growth = estimate_edge_growth (e);
>> +      int growth_limit;
>>        int n;
>>
>> +      if ((profile_arc_flag && !flag_test_coverage)
>> +       || (flag_branch_probabilities && !flag_auto_profile))
>> +     growth_limit = PARAM_VALUE (PARAM_EARLY_INLINING_INSNS_FEEDBACK);
>> +      else
>> +     growth_limit = PARAM_VALUE (PARAM_EARLY_INLINING_INSNS);
>> +
>>        if (growth <= 0)
>>       ;
>>        else if (!e->maybe_hot_p ()
>>              && growth > 0)
>> @@ -610,9 +617,9 @@ want_early_inline_function_p (struct cgraph_edge *e)
>>                    xstrdup_for_dump (callee->name ()), callee->order,
>>                    growth);
>>         want_inline = false;
>>       }
>> -      else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
>> +      else if (growth > growth_limit)
>>       {
>>         if (dump_file)
>>           fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
>>                    "growth %i exceeds --param early-inlining-insns\n",
>> @@ -622,9 +629,9 @@ want_early_inline_function_p (struct cgraph_edge *e)
>>                    growth);
>>         want_inline = false;
>>       }
>>        else if ((n = num_calls (callee)) != 0
>> -            && growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
>> +            && growth * (n + 1) > growth_limit)
>>       {
>>         if (dump_file)
>>           fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
>>                    "growth %i exceeds --param early-inlining-insns "
>> diff --git a/gcc/params.def b/gcc/params.def
>> index 79b7dd4..91ea513 100644
>> --- a/gcc/params.def
>> +++ b/gcc/params.def
>> @@ -199,12 +199,20 @@ DEFPARAM(PARAM_INLINE_UNIT_GROWTH,
>>  DEFPARAM(PARAM_IPCP_UNIT_GROWTH,
>>        "ipcp-unit-growth",
>>        "How much can given compilation unit grow because of the interprocedural constant propagation (in percent).",
>>        10, 0, 0)
>> -DEFPARAM(PARAM_EARLY_INLINING_INSNS,
>> -      "early-inlining-insns",
>> -      "Maximal estimated growth of function body caused by early inlining of single call.",
>> -      14, 0, 0)
>> +DEFPARAM (PARAM_EARLY_INLINING_INSNS_FEEDBACK,
>> +       "early-inlining-insns-feedback",
>> +       "Maximal estimated growth of function body caused by early "
>> +       "inlining of single call.  Used when profile feedback-directed "
>> +       "optimizations are enabled.",
>> +       2, 0, 0)
>> +DEFPARAM (PARAM_EARLY_INLINING_INSNS,
>> +       "early-inlining-insns",
>> +       "Maximal estimated growth of function body caused by early "
>> +       "inlining of single call.  Used when profile feedback-directed "
>> +       "optimizations are not enabled.",
>> +       14, 0, 0)
>>  DEFPARAM(PARAM_LARGE_STACK_FRAME,
>>        "large-stack-frame",
>>        "The size of stack frame to be considered large.",
>>        256, 0, 0)
>



More information about the Gcc-patches mailing list