On Mon, Mar 17, 2025 at 2:14 PM Aleksandar Rakic
<aleksandar.ra...@htecgroup.com> wrote:
>
> From: Robert Suchanek <robert.sucha...@imgtec.com>
>
> --param early-inlining-insns-cold=NUMBER
> --param max-inline-insns-small-and-cold=NUMBER
>
> Analysis shows that the main difference between -O2 and -Os goes down to
> inlining of cold or unlikely functions. The new parameters (defaulted to
> 0) mean to disable these limitations with -Os. NUMBER could be set to
> something like 4-32 to see the impact.
>
> The main reason that smaller functions are treated as cold or unlikely
> is the function cgraph_maybe_hot_edge_p () always returning FALSE for
> -Os.

If you want the code to grow you don't want to use -Os, so it seems odd
to add such a parameter.  In fact we already have --param max-inline-insns-size
which defaults to zero that you could use and that looks to exactly implement
your new param?

Richard.

>
> gcc/
>         * ipa-inline.cc (want_early_inline_function_p): Check if the
>         growth is greater than param_early_inlining_insns_cold.
>         (want_inline_small_function_p): Check if the growth is greater
>         than param_max_inline_insns_small_and_cold.
>         * params.opt (early-inlining-insns-cold): New option.
>         (max-inline-insns-small-and-cold): Likewise.
>
> Cherry-picked c38d7e548cbb3defb141efb528cb356333e8eb7a
> from https://github.com/MIPS/gcc
>
> Signed-off-by: Robert Suchanek <robert.sucha...@imgtec.com>
> Signed-off-by: Faraz Shahbazker <fshahbaz...@wavecomp.com>
> Signed-off-by: Aleksandar Rakic <aleksandar.ra...@htecgroup.com>
> ---
>  gcc/ipa-inline.cc | 4 +++-
>  gcc/params.opt    | 8 ++++++++
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc
> index fe8efa9a157..4d3d0fbc0c3 100644
> --- a/gcc/ipa-inline.cc
> +++ b/gcc/ipa-inline.cc
> @@ -820,7 +820,8 @@ want_early_inline_function_p (struct cgraph_edge *e)
>
>        if (!want_inline || growth <= param_max_inline_insns_size)
>         ;
> -      else if (!e->maybe_hot_p ())
> +      else if (!e->maybe_hot_p ()
> +              && growth > param_early_inlining_insns_cold)
>         {
>           if (dump_enabled_p ())
>             dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
> @@ -1060,6 +1061,7 @@ want_inline_small_function_p (struct cgraph_edge *e, 
> bool report)
>         }
>        /* If call is cold, do not inline when function body would grow. */
>        else if (!e->maybe_hot_p ()
> +              && growth > param_max_inline_insns_small_and_cold
>                && (growth >= inline_insns_single (e->caller, false, false)
>                    || growth_positive_p (callee, e, growth)))
>         {
> diff --git a/gcc/params.opt b/gcc/params.opt
> index 7c572774df2..edb62a221fb 100644
> --- a/gcc/params.opt
> +++ b/gcc/params.opt
> @@ -130,6 +130,10 @@ Maximum size (in bytes) of objects tracked bytewise by 
> dead store elimination.
>  Common Joined UInteger Var(param_early_inlining_insns) Init(6) Optimization 
> Param
>  Maximal estimated growth of function body caused by early inlining of single 
> call.
>
> +-param=early-inlining-insns-cold=
> +Common Joined UInteger Var(param_early_inlining_insns_cold) Init(0) 
> Optimization Param
> +Maximal estimated growth of function body caused by early inlining of cold 
> call.
> +
>  -param=fsm-scale-path-stmts=
>  Common Joined UInteger Var(param_fsm_scale_path_stmts) Init(2) 
> IntegerRange(1, 10) Param Optimization
>  Scale factor to apply to the number of statements in a threading path 
> crossing a loop backedge when comparing to max-jump-thread-duplication-stmts.
> @@ -573,6 +577,10 @@ The maximum number of instructions when inlining for 
> size.
>  Common Joined UInteger Var(param_max_inline_insns_small) Optimization Param
>  The maximum number of instructions when automatically inlining small 
> functions.
>
> +-param=max-inline-insns-small-and-cold=
> +Common Joined UInteger Var(param_max_inline_insns_small_and_cold) 
> Optimization Init(0) Param
> +The maximum number of instructions in a small and cold function eligible for 
> inlining.
> +
>  -param=max-inline-recursive-depth=
>  Common Joined UInteger Var(param_max_inline_recursive_depth) Optimization 
> Init(8) Param
>  The maximum depth of recursive inlining for inline functions.
> --
> 2.34.1

Reply via email to