Wilco Dijkstra <wilco.dijks...@arm.com> writes: > Hi Richard&Kyrill, > >>> I’m in favour of this. >> >> Yeah, seems ok to me too. I suppose we ought to update the documentation >> too: > > I've added a note to the documentation. However it is impossible to be > complete here > since many targets switch off early scheduling under various circumstances.
Yeah, that's fair. :) > So I've just mentioned what x86 and AArch64 do (see v2 below). SGTM. Getting it right for two target is a strict improvement over the status quo. Wording suggestion below though: > Cheers, > Wilco > > > v2: Update documentation > > Enable the early scheduler on AArch64 for O3/Ofast. This means GCC15 benefits > from much faster build times with -O2, but avoids the regressions in lbm which > is very sensitive to minor scheduling changes due to long FMA chains. > > gcc: > PR target/118351 > * common/config/aarch64/aarch64-common.cc: Enable early scheduling > with > -O3 and higher. > * doc/invoke.texi (-fschedule-insns): Update comment. > > --- > > diff --git a/gcc/common/config/aarch64/aarch64-common.cc > b/gcc/common/config/aarch64/aarch64-common.cc > index > 3d694f16d1fd84e142254a4880c91a7f053e72aa..3044336923415d9414b6c66e66d872612ead24cd > 100644 > --- a/gcc/common/config/aarch64/aarch64-common.cc > +++ b/gcc/common/config/aarch64/aarch64-common.cc > @@ -54,8 +54,10 @@ static const struct default_options > aarch_option_optimization_table[] = > { OPT_LEVELS_FAST, OPT_fomit_frame_pointer, NULL, 1 }, > /* Enable -fsched-pressure by default when optimizing. */ > { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, > - /* Disable early scheduling due to high compile-time overheads. */ > + /* Except for -O3 and higher, disable early scheduling due to high > + compile-time overheads. */ > { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 }, > + { OPT_LEVELS_3_PLUS, OPT_fschedule_insns, NULL, 1 }, > /* Enable redundant extension instructions removal at -O2 and higher. */ > { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 }, > { OPT_LEVELS_2_PLUS, OPT_mearly_ra_, NULL, AARCH64_EARLY_RA_ALL }, > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index > bad49a017cc1bb0922eba9f0b2db80166d409cd7..5eb2e96c483126ad075b427969e8c02ce3f51e7a > 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -13503,7 +13503,9 @@ helps machines that have slow floating point or > memory load instructions > by allowing other instructions to be issued until the result of the load > or floating-point instruction is required. > > -Enabled at levels @option{-O2}, @option{-O3}. > +Enabled at levels @option{-O2}, @option{-O3}. Many targets use a different > +default, for example, it is disabled on x86 and enabled only at level > +@option{-O3} on AArch64. Very minor, and this is going to be personal taste, but how about: Conventionally enabled at optimization levels @option{-O2} and @option{-O3}. However, many targets override this behavior. For example, on x86, it is disabled at all levels, while on AArch64, it is enabled only at @option{-O3}. (I'm just trying to avoid the second sentence contradicting the first.) OK with that change if noone objects in 24hrs. Thanks, Richard