From f870302515d5fcf7355f0108c3ead0038ff326fd Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Mon, 3 Mar 2025 16:47:32 +0000 Subject: [PATCH] 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. --- gcc/common/config/aarch64/aarch64-common.cc | 4 +++- gcc/doc/invoke.texi | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gcc/common/config/aarch64/aarch64-common.cc b/gcc/common/config/aarch64/aarch64-common.cc index 500bf784983..b9ed83642ad 100644 --- a/gcc/common/config/aarch64/aarch64-common.cc +++ b/gcc/common/config/aarch64/aarch64-common.cc @@ -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 }, diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6f0779b900c..304de88db07 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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