(global_alloc): Make a more accurate attempt to see if the frame pointer will be used.
(global_alloc): Make a more accurate attempt to see if the frame pointer will be used. If it is, show HARD_FRAME_POINTER_REGNUM used if its not the same as FRAME_POINTER_REGNUM. From-SVN: r7604
This commit is contained in:
parent
245d26eb97
commit
daf55ac69a
21
gcc/global.c
21
gcc/global.c
@ -246,7 +246,7 @@ static struct { int allocno1, allocno2;}
|
|||||||
static rtx *regs_set;
|
static rtx *regs_set;
|
||||||
static int n_regs_set;
|
static int n_regs_set;
|
||||||
|
|
||||||
/* All register that can be eliminated. */
|
/* All registers that can be eliminated. */
|
||||||
|
|
||||||
static HARD_REG_SET eliminable_regset;
|
static HARD_REG_SET eliminable_regset;
|
||||||
|
|
||||||
@ -279,6 +279,13 @@ global_alloc (file)
|
|||||||
#ifdef ELIMINABLE_REGS
|
#ifdef ELIMINABLE_REGS
|
||||||
static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
|
static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
|
||||||
#endif
|
#endif
|
||||||
|
int need_fp
|
||||||
|
= (! flag_omit_frame_pointer
|
||||||
|
#ifdef EXIT_IGNORE_STACK
|
||||||
|
|| (current_function_calls_alloca && EXIT_IGNORE_STACK)
|
||||||
|
#endif
|
||||||
|
|| FRAME_POINTER_REQUIRED);
|
||||||
|
|
||||||
register int i;
|
register int i;
|
||||||
rtx x;
|
rtx x;
|
||||||
|
|
||||||
@ -302,20 +309,18 @@ global_alloc (file)
|
|||||||
SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
|
SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
|
||||||
|
|
||||||
if (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
|
if (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
|
||||||
|| (eliminables[i].from == HARD_FRAME_POINTER_REGNUM
|
|| (eliminables[i].to == STACK_POINTER_REGNUM && need_fp))
|
||||||
&& (! flag_omit_frame_pointer || FRAME_POINTER_REQUIRED)))
|
|
||||||
SET_HARD_REG_BIT (no_global_alloc_regs, eliminables[i].from);
|
SET_HARD_REG_BIT (no_global_alloc_regs, eliminables[i].from);
|
||||||
}
|
}
|
||||||
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
|
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
|
||||||
if (!flag_omit_frame_pointer || FRAME_POINTER_REQUIRED)
|
SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
|
||||||
|
if (need_fp)
|
||||||
SET_HARD_REG_BIT (no_global_alloc_regs, HARD_FRAME_POINTER_REGNUM);
|
SET_HARD_REG_BIT (no_global_alloc_regs, HARD_FRAME_POINTER_REGNUM);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
|
SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
|
||||||
|
if (need_fp)
|
||||||
/* If we know we will definitely not be eliminating the frame pointer,
|
|
||||||
don't allocate it. */
|
|
||||||
if (! flag_omit_frame_pointer || FRAME_POINTER_REQUIRED)
|
|
||||||
SET_HARD_REG_BIT (no_global_alloc_regs, FRAME_POINTER_REGNUM);
|
SET_HARD_REG_BIT (no_global_alloc_regs, FRAME_POINTER_REGNUM);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user