aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-08-08 01:28:00 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-08-08 01:28:00 -0700
commit2a3e384f15e6f10fc62b27c6671d899b083fed97 (patch)
treebef654b1dd4f2327e04b2250df973c7f458204ae /gcc/flow.c
parent43d1e05928a16e48e017625e8dad6aeca2a31282 (diff)
downloadgcc-2a3e384f15e6f10fc62b27c6671d899b083fed97.zip
gcc-2a3e384f15e6f10fc62b27c6671d899b083fed97.tar.gz
gcc-2a3e384f15e6f10fc62b27c6671d899b083fed97.tar.bz2
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
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index a5a7f9e..c1a8db8 100644
--- a/gcc/flow.c
+++ b/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);
}