regclass.c (choose_hard_reg_mode): Add third argument.
* regclass.c (choose_hard_reg_mode): Add third argument. Changed all callers. * rtl.h (choose_hard_reg_mode): Update declaration. * dwarf2out.c (expand_builtin_init_dwarf_reg_sizes): Take HARD_REGNO_CALL_PART_CLOBBERED into account. From-SVN: r69234
This commit is contained in:
parent
7efa3e22e5
commit
fee226d25f
@ -1,3 +1,11 @@
|
|||||||
|
2003-07-11 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* regclass.c (choose_hard_reg_mode): Add third argument.
|
||||||
|
Changed all callers.
|
||||||
|
* rtl.h (choose_hard_reg_mode): Update declaration.
|
||||||
|
* dwarf2out.c (expand_builtin_init_dwarf_reg_sizes):
|
||||||
|
Take HARD_REGNO_CALL_PART_CLOBBERED into account.
|
||||||
|
|
||||||
2003-07-11 Geoffrey Keating <geoffk@apple.com>
|
2003-07-11 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* c-decl.c (finish_decl): Handle 'used' here...
|
* c-decl.c (finish_decl): Handle 'used' here...
|
||||||
|
@ -1135,7 +1135,7 @@ do { \
|
|||||||
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
|
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
|
||||||
(CC_REGNO_P (REGNO) ? VOIDmode \
|
(CC_REGNO_P (REGNO) ? VOIDmode \
|
||||||
: (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \
|
: (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \
|
||||||
: (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS)) \
|
: (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false)\
|
||||||
: (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode \
|
: (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode \
|
||||||
: (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode \
|
: (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode \
|
||||||
: (MODE))
|
: (MODE))
|
||||||
|
@ -448,8 +448,12 @@ expand_builtin_init_dwarf_reg_sizes (tree address)
|
|||||||
if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
|
if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
|
||||||
{
|
{
|
||||||
HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
|
HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
|
||||||
HOST_WIDE_INT size = GET_MODE_SIZE (reg_raw_mode[i]);
|
enum machine_mode save_mode = reg_raw_mode[i];
|
||||||
|
HOST_WIDE_INT size;
|
||||||
|
|
||||||
|
if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
|
||||||
|
save_mode = choose_hard_reg_mode (i, 1, true);
|
||||||
|
size = GET_MODE_SIZE (save_mode);
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -553,7 +553,7 @@ init_reg_modes (void)
|
|||||||
|
|
||||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||||
{
|
{
|
||||||
reg_raw_mode[i] = choose_hard_reg_mode (i, 1);
|
reg_raw_mode[i] = choose_hard_reg_mode (i, 1, false);
|
||||||
|
|
||||||
/* If we couldn't find a valid mode, just use the previous mode.
|
/* If we couldn't find a valid mode, just use the previous mode.
|
||||||
??? One situation in which we need to do this is on the mips where
|
??? One situation in which we need to do this is on the mips where
|
||||||
@ -653,11 +653,12 @@ memory_move_secondary_cost (enum machine_mode mode, enum reg_class class, int in
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Return a machine mode that is legitimate for hard reg REGNO and large
|
/* Return a machine mode that is legitimate for hard reg REGNO and large
|
||||||
enough to save nregs. If we can't find one, return VOIDmode. */
|
enough to save nregs. If we can't find one, return VOIDmode.
|
||||||
|
If CALL_SAVED is true, only consider modes that are call saved. */
|
||||||
|
|
||||||
enum machine_mode
|
enum machine_mode
|
||||||
choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
||||||
unsigned int nregs)
|
unsigned int nregs, bool call_saved)
|
||||||
{
|
{
|
||||||
unsigned int /* enum machine_mode */ m;
|
unsigned int /* enum machine_mode */ m;
|
||||||
enum machine_mode found_mode = VOIDmode, mode;
|
enum machine_mode found_mode = VOIDmode, mode;
|
||||||
@ -670,7 +671,8 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
|||||||
mode != VOIDmode;
|
mode != VOIDmode;
|
||||||
mode = GET_MODE_WIDER_MODE (mode))
|
mode = GET_MODE_WIDER_MODE (mode))
|
||||||
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
||||||
&& HARD_REGNO_MODE_OK (regno, mode))
|
&& HARD_REGNO_MODE_OK (regno, mode)
|
||||||
|
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
|
||||||
found_mode = mode;
|
found_mode = mode;
|
||||||
|
|
||||||
if (found_mode != VOIDmode)
|
if (found_mode != VOIDmode)
|
||||||
@ -680,7 +682,8 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
|||||||
mode != VOIDmode;
|
mode != VOIDmode;
|
||||||
mode = GET_MODE_WIDER_MODE (mode))
|
mode = GET_MODE_WIDER_MODE (mode))
|
||||||
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
||||||
&& HARD_REGNO_MODE_OK (regno, mode))
|
&& HARD_REGNO_MODE_OK (regno, mode)
|
||||||
|
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
|
||||||
found_mode = mode;
|
found_mode = mode;
|
||||||
|
|
||||||
if (found_mode != VOIDmode)
|
if (found_mode != VOIDmode)
|
||||||
@ -690,7 +693,8 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
|||||||
mode != VOIDmode;
|
mode != VOIDmode;
|
||||||
mode = GET_MODE_WIDER_MODE (mode))
|
mode = GET_MODE_WIDER_MODE (mode))
|
||||||
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
||||||
&& HARD_REGNO_MODE_OK (regno, mode))
|
&& HARD_REGNO_MODE_OK (regno, mode)
|
||||||
|
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
|
||||||
found_mode = mode;
|
found_mode = mode;
|
||||||
|
|
||||||
if (found_mode != VOIDmode)
|
if (found_mode != VOIDmode)
|
||||||
@ -700,7 +704,8 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
|||||||
mode != VOIDmode;
|
mode != VOIDmode;
|
||||||
mode = GET_MODE_WIDER_MODE (mode))
|
mode = GET_MODE_WIDER_MODE (mode))
|
||||||
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
||||||
&& HARD_REGNO_MODE_OK (regno, mode))
|
&& HARD_REGNO_MODE_OK (regno, mode)
|
||||||
|
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
|
||||||
found_mode = mode;
|
found_mode = mode;
|
||||||
|
|
||||||
if (found_mode != VOIDmode)
|
if (found_mode != VOIDmode)
|
||||||
@ -711,7 +716,8 @@ choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
|
|||||||
{
|
{
|
||||||
mode = (enum machine_mode) m;
|
mode = (enum machine_mode) m;
|
||||||
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
|
||||||
&& HARD_REGNO_MODE_OK (regno, mode))
|
&& HARD_REGNO_MODE_OK (regno, mode)
|
||||||
|
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ extern int caller_save_needed;
|
|||||||
/* Select a register mode required for caller save of hard regno REGNO. */
|
/* Select a register mode required for caller save of hard regno REGNO. */
|
||||||
#ifndef HARD_REGNO_CALLER_SAVE_MODE
|
#ifndef HARD_REGNO_CALLER_SAVE_MODE
|
||||||
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
|
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
|
||||||
choose_hard_reg_mode (REGNO, NREGS)
|
choose_hard_reg_mode (REGNO, NREGS, false)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Registers that get partially clobbered by a call in a given mode.
|
/* Registers that get partially clobbered by a call in a given mode.
|
||||||
|
@ -1602,7 +1602,8 @@ extern rtx avoid_constant_pool_reference (rtx);
|
|||||||
extern rtx gen_mem_addressof (rtx, tree, int);
|
extern rtx gen_mem_addressof (rtx, tree, int);
|
||||||
|
|
||||||
/* In regclass.c */
|
/* In regclass.c */
|
||||||
extern enum machine_mode choose_hard_reg_mode (unsigned int, unsigned int);
|
extern enum machine_mode choose_hard_reg_mode (unsigned int, unsigned int,
|
||||||
|
bool);
|
||||||
|
|
||||||
/* In emit-rtl.c */
|
/* In emit-rtl.c */
|
||||||
extern rtx set_unique_reg_note (rtx, enum reg_note, rtx);
|
extern rtx set_unique_reg_note (rtx, enum reg_note, rtx);
|
||||||
|
Loading…
Reference in New Issue
Block a user