On Mon, Oct 10, 2016 at 4:23 AM, Yuan, Pengfei <y...@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 <y...@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) >