Hi, PFA patch series which improves sched1 spilling. This all started with SPEC2017 507.Cactu dynamic icounts on RISC-V being double than those of aarch64 (~2.6 trillion vs. ~1.4 trillion). Robin/Jeff hinted that the issue could be sched1 which it turned out to be.
Essentially there are 2 fixes - Patch 1/4 improves the main list schedular outcomes by not watering down negative pressure change to zero. It implements a target hook, which is seperately enabled in patch 2/4 for RISC-V. - Patch 3/4 improves model schedule to not increase register pressure in certain cases. - Patch 4/4 is just a debug hack which I would like any testers to apply as that helpe dme a lot during development of patch 3/4. More details can be found in individual patches. Results on RISC-V hardware BPI-F3 (perf stat instructions/cycles) and on aarch64 (I could only get QEMU dynamic icounts). RISC-V BPI-F3 (-Ofast -march=rv64gcv_zba_zbb_zbs) baseline | 7,631,707,552,979 cycles:u # 1.600 GHz | 2,630,225,489,010 instructions:u # 0.34 insn per cycle | all | 6,736,337,207,427 cycles:u (12% faster) # 1.600 GHz patches | 2,078,712,047,604 instructions:u (21% fewer) # 0.31 insn per cycle aarch64 (-Ofast -march=armv9-a+sve2) + implement TARGET_SCHED_PRESSURE_PREFER_NARROW=true baseline | 1,382,403,783,566 | all | 1,113,896,471,282 (19.4% fewer) patches | As a follow up to discussions at Cauldron last month, I'm CC'ing some of the aarch64 and power folks to test this on real hardware and get the results (please don't forget to add equivalent of patch 2/4 for your respective backends, i.e. +#undef TARGET_SCHED_PRESSURE_PREFER_NARROW +#define TARGET_SCHED_PRESSURE_PREFER_NARROW hook_bool_void_true Thx, -Vineet Vineet Gupta (4): sched1: hookize pressure scheduling spilling agressiveness RISC-V: Implement TARGET_SCHED_PRESSURE_PREFER_NARROW [PR/114729] sched1: model: only promote true dependecies in predecessor promotion sched1: model: ICE on infinite loops in predecessor promotion (Not for Merge) gcc/config/riscv/riscv.cc | 3 + gcc/doc/tm.texi | 11 ++ gcc/doc/tm.texi.in | 2 + gcc/haifa-sched.cc | 109 ++++++++++++++---- gcc/sched-rgn.cc | 14 ++- gcc/target.def | 13 +++ gcc/testsuite/gcc.target/riscv/riscv.exp | 2 + .../gcc.target/riscv/sched1-spills/hang1.c | 32 +++++ .../gcc.target/riscv/sched1-spills/hang5.c | 60 ++++++++++ .../gcc.target/riscv/sched1-spills/spill1.cpp | 31 +++++ .../gcc.target/riscv/sched1-spills/spill2.cpp | 37 ++++++ 11 files changed, 289 insertions(+), 25 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/hang1.c create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/hang5.c create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/spill2.cpp -- 2.43.0