This inhibits sched1 aggressive spilling on RISC-V (see prev commit for
details of what the hook does).
On RISC-V (BPI-F3) we see good results.
(Build: -Ofast -march=rv64gcv_zba_zbb_zbs)
Before:
------
Performance counter stats for './cactusBSSN_r_base.rivos spec_ref.par':
4,769,844.10 msec task-clock:u # 1.000 CPUs
utilized
6,029 context-switches:u # 1.264 /sec
0 cpu-migrations:u # 0.000 /sec
201,468 page-faults:u # 42.238 /sec
7,631,707,552,979 cycles:u # 1.600 GHz
2,630,225,489,010 instructions:u # 0.34 insn per
cycle
10,592,305,077 branches:u # 2.221 M/sec
16,274,388 branch-misses:u # 0.15% of all
branches
After:
-----
Performance counter stats for './cactusBSSN_r_base.rivos spec_ref.par':
4,471,770.20 msec task-clock:u # 0.998 CPUs
utilized
159,245 context-switches:u # 35.611 /sec
2 cpu-migrations:u # 0.000 /sec
204,065 page-faults:u # 45.634 /sec
7,153,778,156,281 cycles:u ( 6% faster) # 1.600 GHz
2,143,115,846,207 instructions:u (18.5% fewer) # 0.30 insn per
cycle
10,592,316,035 branches:u # 2.369 M/sec
17,229,411 branch-misses:u # 0.16% of all
branches
Similarly, good results on Cactu on aarch64 as well (qemu dynamic icounts only)
(Build: -march=armv9-a+sve2)
Before: 1,382,403,783,566
After: 1,264,869,192,921 (8.5% improv)
gcc/ChangeLog:
PR target/114729
* config/riscv/riscv.cc (TARGET_SCHED_PRESSURE_PREFER_NARROW):
Define to true.
gcc/testsuite/ChangeLog:
PR target/114729
* gcc.target/riscv/riscv.exp: Enable new tests to build.
* gcc.target/riscv/sched1-spills/spill1.cpp: Add new test.
Signed-off-by: Vineet Gupta <[email protected]>
---
gcc/config/riscv/riscv.cc | 3 ++
gcc/testsuite/gcc.target/riscv/riscv.exp | 2 ++
.../gcc.target/riscv/sched1-spills/spill1.cpp | 31 +++++++++++++++++++
3 files changed, 36 insertions(+)
create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 3ac40234345a..46f775b3cdcb 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -12616,6 +12616,9 @@ riscv_stack_clash_protection_alloca_probe_range (void)
#undef TARGET_SCHED_ADJUST_COST
#define TARGET_SCHED_ADJUST_COST riscv_sched_adjust_cost
+#undef TARGET_SCHED_PRESSURE_PREFER_NARROW
+#define TARGET_SCHED_PRESSURE_PREFER_NARROW hook_bool_void_true
+
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL riscv_function_ok_for_sibcall
diff --git a/gcc/testsuite/gcc.target/riscv/riscv.exp
b/gcc/testsuite/gcc.target/riscv/riscv.exp
index 187eb6640470..3cbbf63b9d0a 100644
--- a/gcc/testsuite/gcc.target/riscv/riscv.exp
+++ b/gcc/testsuite/gcc.target/riscv/riscv.exp
@@ -38,6 +38,8 @@ dg-init
# Main loop.
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
"" $DEFAULT_CFLAGS
+gcc-dg-runtest [lsort [glob -nocomplain
$srcdir/$subdir/sched1-spills/*.{\[cS\],cpp}]] \
+ "" $DEFAULT_CFLAGS
# All done.
dg-finish
diff --git a/gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp
b/gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp
new file mode 100644
index 000000000000..47a9d1a01ab4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp
@@ -0,0 +1,31 @@
+/* Reduced from SPEC2017 Cactu ML_BSSN_Advect.cpp
+ by comparing -fschedule-insn and -fno-schedule-insns builds.
+ Shows up one extra spill (pair of spill markers "sfp") in verbose asm
+ output which the patch fixes. */
+
+/* { dg-options "-O2 -march=rv64gc -mabi=lp64d -save-temps -fverbose-asm" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "O1" "-Og" "-Os" "-Oz" } } */
+/* { dg-final { scan-assembler-times "%sfp" 0 } } */
+
+void s();
+double b, c, d, e, f, g, h, k, l, m, n, o, p, q, t, u, v;
+int *j;
+double *r, *w;
+long x;
+void y() {
+ double *a((double *)s);
+ for (;;)
+ for (; j[1];)
+ for (int i = 1; i < j[0]; i++) {
+ k = l;
+ m = n;
+ o = p = q;
+ r[0] = t;
+ a[0] = u;
+ x = g;
+ e = f;
+ v = w[x];
+ b = c;
+ d = h;
+ }
+}
--
2.43.0