diff options
author | Richard Henderson <rth@cygnus.com> | 2000-08-08 01:28:00 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-08-08 01:28:00 -0700 |
commit | 2a3e384f15e6f10fc62b27c6671d899b083fed97 (patch) | |
tree | bef654b1dd4f2327e04b2250df973c7f458204ae /gcc/flow.c | |
parent | 43d1e05928a16e48e017625e8dad6aeca2a31282 (diff) | |
download | gcc-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.c | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -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); } |