On Mon, Jun 24, 2024 at 1:18 PM Malladi, Rama <rvmal...@amazon.com> wrote: > > From: Rama Malladi <rvmal...@amazon.com>
Hmm, if we offer the ability to set -O3 inline limits why wouldn't we offer a way to set -O2 inline limits for example with -O3? So ... wouldn't a -finline-limit={default,O2,O3} option be a more generic and extensible way to achieve what the patch does? Yeah, it conflicts somewhat with the existing -finline-limit[-=] flags, so possibly another name (-finline-as=O3?) is needed. Richard. > Signed-off-by: Rama Malladi <rvmal...@amazon.com> > --- > gcc/common.opt | 5 +++++ > gcc/doc/invoke.texi | 18 +++++++++++++----- > gcc/opts.cc | 17 ++++++++++++----- > 3 files changed, 30 insertions(+), 10 deletions(-) > > diff --git a/gcc/common.opt b/gcc/common.opt > index f2bc47fdc5e..ce95175c1e4 100644 > --- a/gcc/common.opt > +++ b/gcc/common.opt > @@ -1961,6 +1961,11 @@ finline-functions-called-once > Common Var(flag_inline_functions_called_once) Optimization > Integrate functions only required by their single caller. > > +finline-functions-aggressive > +Common Var(flag_inline_functions_aggressive) Init(0) Optimization > +Aggressively integrate functions not declared \"inline\" into their callers > when profitable. > +This option selects the same inlining heuristics as \"-O3\". > + > finline-limit- > Common RejectNegative Joined Alias(finline-limit=) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index c790e2f3518..7dc5c5ab433 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -570,8 +570,8 @@ Objective-C and Objective-C++ Dialects}. > -fgcse-sm -fhoist-adjacent-loads -fif-conversion > -fif-conversion2 -findirect-inlining > -finline-stringops[=@var{fn}] > --finline-functions -finline-functions-called-once -finline-limit=@var{n} > --finline-small-functions -fipa-modref -fipa-cp -fipa-cp-clone > +-finline-functions -finline-functions-aggressive > -finline-functions-called-once > +-finline-limit=@var{n} -finline-small-functions -fipa-modref -fipa-cp > -fipa-cp-clone > -fipa-bit-cp -fipa-vrp -fipa-pta -fipa-profile -fipa-pure-const > -fipa-reference -fipa-reference-addressable > -fipa-stack-alignment -fipa-icf -fira-algorithm=@var{algorithm} > @@ -12625,9 +12625,9 @@ designed to reduce code size. > Disregard strict standards compliance. @option{-Ofast} enables all > @option{-O3} optimizations. It also enables optimizations that are not > valid for all standard-compliant programs. > -It turns on @option{-ffast-math}, @option{-fallow-store-data-races} > -and the Fortran-specific @option{-fstack-arrays}, unless > -@option{-fmax-stack-var-size} is specified, and @option{-fno-protect-parens}. > +It turns on @option{-ffast-math}, @option{-finline-functions-aggressive}, > +@option{-fallow-store-data-races} and the Fortran-specific > @option{-fstack-arrays}, > +unless @option{-fmax-stack-var-size} is specified, and > @option{-fno-protect-parens}. > It turns off @option{-fsemantic-interposition}. > > @opindex Og > @@ -12793,6 +12793,14 @@ assembler code in its own right. > Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. Also enabled > by @option{-fprofile-use} and @option{-fauto-profile}. > > +@opindex finline-functions-aggressive > +@item -finline-functions-aggressive > +Aggressively integrate functions not declared @code{inline} into their > callers when > +profitable. This option selects the same inlining heuristics as @option{-O3}. > + > +Enabled at levels @option{-O3}, @option{-Ofast}, but not @option{-Og}, > +@option{-O1}, @option{-O2}, @option{-Os}. > + > @opindex finline-functions-called-once > @item -finline-functions-called-once > Consider all @code{static} functions called once for inlining into their > diff --git a/gcc/opts.cc b/gcc/opts.cc > index 1b1b46455af..729f2831e67 100644 > --- a/gcc/opts.cc > +++ b/gcc/opts.cc > @@ -700,11 +700,7 @@ static const struct default_options > default_options_table[] = > { OPT_LEVELS_3_PLUS, OPT_fversion_loops_for_strides, NULL, 1 }, > > /* -O3 parameters. */ > - { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_auto_, NULL, 30 }, > - { OPT_LEVELS_3_PLUS, OPT__param_early_inlining_insns_, NULL, 14 }, > - { OPT_LEVELS_3_PLUS, OPT__param_inline_heuristics_hint_percent_, NULL, > 600 }, > - { OPT_LEVELS_3_PLUS, OPT__param_inline_min_speedup_, NULL, 15 }, > - { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_single_, NULL, 200 }, > + { OPT_LEVELS_3_PLUS, OPT_finline_functions_aggressive, NULL, 1 }, > > /* -Ofast adds optimizations to -O3. */ > { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, > @@ -3037,6 +3033,17 @@ common_handle_option (struct gcc_options *opts, > value / 2); > break; > > + case OPT_finline_functions_aggressive: > + if(opts->x_flag_inline_functions_aggressive) > + { > + opts->x_param_max_inline_insns_auto = 30; > + opts->x_param_early_inlining_insns = 14; > + opts->x_param_inline_heuristics_hint_percent = 600; > + opts->x_param_inline_min_speedup = 15; > + opts->x_param_max_inline_insns_single = 200; > + } > + break; > + > case OPT_finstrument_functions_exclude_function_list_: > add_comma_separated_to_vector > (&opts->x_flag_instrument_functions_exclude_functions, arg); > -- > 2.45.1 >