AArch64: Enable early scheduling for -O3 and higher (PR118351)

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
	PR other/38768
	* common/config/aarch64/aarch64-common.cc: Enable early scheduling with
	-O3 and higher.
	* doc/invoke.texi (-fschedule-insns): Update comment.
This commit is contained in:
Wilco Dijkstra 2025-03-03 16:47:32 +00:00
parent 179e01085b
commit f870302515
2 changed files with 6 additions and 2 deletions

View file

@ -53,8 +53,10 @@ static const struct default_options aarch_option_optimization_table[] =
{ OPT_LEVELS_ALL, OPT_fomit_frame_pointer, NULL, 0 },
/* 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 },

View file

@ -13507,7 +13507,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}.
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}.
@opindex fschedule-insns2
@item -fschedule-insns2