]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
AArch64: Enable early scheduling for -O3 and higher (PR118351)
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Mon, 3 Mar 2025 16:47:32 +0000 (16:47 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Thu, 6 Mar 2025 17:37:07 +0000 (17:37 +0000)
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
gcc/doc/invoke.texi

index 500bf784983d851c54ea4ec59cf3cad29e5e309e..b9ed83642ade4462f1b030d68cf9744d31d70c23 100644 (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 },
index 6f0779b900cb5fe9d997ba091f636aa78d1cde10..304de88db07c2b6ea92bdbabe7d8ecdc60fec952 100644 (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