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.
This commit is contained in:
parent
aaa26bf496
commit
b780f68e02
@ -1,3 +1,8 @@
|
||||
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>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
|
@ -268,6 +268,13 @@ along with GCC; see the file COPYING3. If not see
|
||||
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. */
|
||||
|
||||
#define GP_REG_FIRST 0
|
||||
|
Loading…
Reference in New Issue
Block a user