The following two patches are an attempt at further reducing code size when compiling with -msave-restore by attempting to claw back some of the tail call cases where we currently include a call to __riscv_save_0 and __riscv_restore_0.
Any feedback, or suggestions for improvements, or for better approaches I could take are gratefully recieved. Thanks, Andrew -- Andrew Burgess (2): gcc/riscv: Include more registers in SIBCALL_REGS gcc/riscv: Add a mechanism to remove some calls to _riscv_save_0 gcc/ChangeLog | 15 + gcc/config.gcc | 2 +- gcc/config/riscv/riscv-sr.c | 375 ++++++++++++++++++++++++ gcc/config/riscv/riscv.c | 13 + gcc/config/riscv/riscv.h | 22 +- gcc/config/riscv/t-riscv | 5 + gcc/testsuite/ChangeLog | 10 + gcc/testsuite/gcc.target/riscv/save-restore-2.c | 22 ++ gcc/testsuite/gcc.target/riscv/save-restore-3.c | 16 + gcc/testsuite/gcc.target/riscv/save-restore-4.c | 27 ++ gcc/testsuite/gcc.target/riscv/save-restore-5.c | 9 + gcc/testsuite/gcc.target/riscv/save-restore-6.c | 16 + gcc/testsuite/gcc.target/riscv/save-restore-7.c | 30 ++ gcc/testsuite/gcc.target/riscv/save-restore-8.c | 12 + 14 files changed, 572 insertions(+), 2 deletions(-) create mode 100644 gcc/config/riscv/riscv-sr.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/save-restore-8.c -- 2.14.5