mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 11:57:22 +08:00
tm.texi (LOCAL_REGNO): Document.
* tm.texi (LOCAL_REGNO): Document. * flow.c (LOCAL_REGNO, EPILOGUE_USES): Provide default. (mark_regs_live_at_end): Don't mark LOCAL_REGNO registers. * reload1.c (reload): Likewise when considering nonlocal labels. * config/ia64/ia64.h (LOCAL_REGNO): New. * config/sparc/sparc.h (LOCAL_REGNO): New. From-SVN: r35564
This commit is contained in:
parent
43d1e05928
commit
2a3e384f15
@ -1,3 +1,13 @@
|
||||
2000-08-08 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* tm.texi (LOCAL_REGNO): Document.
|
||||
* flow.c (LOCAL_REGNO, EPILOGUE_USES): Provide default.
|
||||
(mark_regs_live_at_end): Don't mark LOCAL_REGNO registers.
|
||||
* reload1.c (reload): Likewise when considering nonlocal labels.
|
||||
|
||||
* config/ia64/ia64.h (LOCAL_REGNO): New.
|
||||
* config/sparc/sparc.h (LOCAL_REGNO): New.
|
||||
|
||||
2000-08-08 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* c-lex.c (yylex): Don't allow integer suffixes 'LUL', 'Ll', 'lL'.
|
||||
|
@ -686,6 +686,12 @@ while (0)
|
||||
#define OUTGOING_REGNO(IN) \
|
||||
((unsigned) ((IN) - IN_REG (0)) < 8 ? OUT_REG ((IN) - IN_REG (0)) : (IN))
|
||||
|
||||
/* Define this macro if the target machine has register windows. This
|
||||
C expression returns true if the register is call-saved but is in the
|
||||
register window. */
|
||||
|
||||
#define LOCAL_REGNO(REGNO) \
|
||||
(IN_REGNO_P (REGNO) || LOC_REGNO_P (REGNO))
|
||||
|
||||
/* Order of allocation of registers */
|
||||
|
||||
|
@ -1711,6 +1711,13 @@ extern char leaf_reg_remap[];
|
||||
#define OUTGOING_REGNO(IN) \
|
||||
((TARGET_FLAT || (IN) < 24 || (IN) > 31) ? (IN) : (IN) - 16)
|
||||
|
||||
/* Define this macro if the target machine has register windows. This
|
||||
C expression returns true if the register is call-saved but is in the
|
||||
register window. */
|
||||
|
||||
#define LOCAL_REGNO(REGNO) \
|
||||
(TARGET_FLAT ? 0 : (REGNO) >= 16 && (REGNO) <= 31)
|
||||
|
||||
/* Define how to find the value returned by a function.
|
||||
VALTYPE is the data type of the value (as a tree).
|
||||
If the precise function being called is known, FUNC is its FUNCTION_DECL;
|
||||
|
20
gcc/flow.c
20
gcc/flow.c
@ -163,6 +163,13 @@ Boston, MA 02111-1307, USA. */
|
||||
#define HAVE_sibcall_epilogue 0
|
||||
#endif
|
||||
|
||||
#ifndef LOCAL_REGNO
|
||||
#define LOCAL_REGNO(REGNO) 0
|
||||
#endif
|
||||
#ifndef EPILOGUE_USES
|
||||
#define EPILOGUE_USES(REGNO) 0
|
||||
#endif
|
||||
|
||||
/* The contents of the current function definition are allocated
|
||||
in this obstack, and all are freed at the end of the function.
|
||||
For top-level functions, this is temporary_obstack.
|
||||
@ -3051,8 +3058,9 @@ mark_regs_live_at_end (set)
|
||||
{
|
||||
SET_REGNO_REG_SET (set, FRAME_POINTER_REGNUM);
|
||||
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
|
||||
/* If they are different, also mark the hard frame pointer as live */
|
||||
SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
|
||||
/* If they are different, also mark the hard frame pointer as live. */
|
||||
if (! LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM))
|
||||
SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -3070,18 +3078,14 @@ mark_regs_live_at_end (set)
|
||||
as being live at the end of the function since they may be
|
||||
referenced by our caller. */
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
if (global_regs[i]
|
||||
#ifdef EPILOGUE_USES
|
||||
|| EPILOGUE_USES (i)
|
||||
#endif
|
||||
)
|
||||
if (global_regs[i] || EPILOGUE_USES (i))
|
||||
SET_REGNO_REG_SET (set, i);
|
||||
|
||||
/* Mark all call-saved registers that we actaully used. */
|
||||
if (HAVE_epilogue && reload_completed)
|
||||
{
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
if (! call_used_regs[i] && regs_ever_live[i])
|
||||
if (regs_ever_live[i] && ! call_used_regs[i] && ! LOCAL_REGNO (i))
|
||||
SET_REGNO_REG_SET (set, i);
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,10 @@ Boston, MA 02111-1307, USA. */
|
||||
#ifndef REGISTER_MOVE_COST
|
||||
#define REGISTER_MOVE_COST(x, y) 2
|
||||
#endif
|
||||
|
||||
#ifndef LOCAL_REGNO
|
||||
#define LOCAL_REGNO(REGNO) 0
|
||||
#endif
|
||||
|
||||
/* During reload_as_needed, element N contains a REG rtx for the hard reg
|
||||
into which reg N has been reloaded (perhaps for a previous insn). */
|
||||
@ -654,10 +658,8 @@ reload (first, global, dumpfile)
|
||||
registers. */
|
||||
if (current_function_has_nonlocal_label)
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
{
|
||||
if (! call_used_regs[i] && ! fixed_regs[i])
|
||||
regs_ever_live[i] = 1;
|
||||
}
|
||||
if (! call_used_regs[i] && ! fixed_regs[i] && ! LOCAL_REGNO (i))
|
||||
regs_ever_live[i] = 1;
|
||||
|
||||
/* Find all the pseudo registers that didn't get hard regs
|
||||
but do have known equivalent constants or memory slots.
|
||||
|
Loading…
Reference in New Issue
Block a user