Commit b780f68e by Jim Wilson

RISC-V: Improve caller-save code generation.

Avoid paradoxical subregs when caller save.  This reduces stack frame size
due to smaller loads and stores, and more frequent rematerialization.

	PR target/93532
	* config/riscv/riscv.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
parent aaa26bf4
2020-02-08 Jim Wilson <jimw@sifive.com>
PR target/93532
* config/riscv/riscv.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
2020-02-08 Uroš Bizjak <ubizjak@gmail.com> 2020-02-08 Uroš Bizjak <ubizjak@gmail.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -268,6 +268,13 @@ along with GCC; see the file COPYING3. If not see ...@@ -268,6 +268,13 @@ along with GCC; see the file COPYING3. If not see
1, 1 \ 1, 1 \
} }
/* Select a register mode required for caller save of hard regno REGNO.
Contrary to what is documented, the default is not the smallest suitable
mode but the largest suitable mode for the given (REGNO, NREGS) pair and
it quickly creates paradoxical subregs that can be problematic. */
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
((MODE) == VOIDmode ? choose_hard_reg_mode (REGNO, NREGS, NULL) : (MODE))
/* Internal macros to classify an ISA register's type. */ /* Internal macros to classify an ISA register's type. */
#define GP_REG_FIRST 0 #define GP_REG_FIRST 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment