aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1993-09-24 19:53:15 +0000
committerDoug Evans <dje@gnu.org>1993-09-24 19:53:15 +0000
commitb07ff75d63e1bfb4560d2843554629c2eaf6ae19 (patch)
treefab378085690690c7f0958788888f42480be5c26
parent3ec2ea3e1d3d4a816f5ebcde55519611f87ac91f (diff)
downloadgcc-b07ff75d63e1bfb4560d2843554629c2eaf6ae19.zip
gcc-b07ff75d63e1bfb4560d2843554629c2eaf6ae19.tar.gz
gcc-b07ff75d63e1bfb4560d2843554629c2eaf6ae19.tar.bz2
reorg.c: (mark_referenced_resource): if frame_pointer_needed...
* reorg.c: (mark_referenced_resource): if frame_pointer_needed, HARD_FRAME_POINTER_REGNUM is also a referenced resource. (mark_target_live_regs): value in HARD_FRAME_POINTER_REGNUM is not call-clobbered. (dbr_schedule): HARD_FRAME_POINTER_REGNUM should be valid at the end of a function. From-SVN: r5464
-rw-r--r--gcc/reorg.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index ba3ef38..284c5fc 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -390,7 +390,12 @@ mark_referenced_resources (x, res, include_delayed_effects)
res->memory = 1;
SET_HARD_REG_BIT (res->regs, STACK_POINTER_REGNUM);
if (frame_pointer_needed)
- SET_HARD_REG_BIT (res->regs, FRAME_POINTER_REGNUM);
+ {
+ SET_HARD_REG_BIT (res->regs, FRAME_POINTER_REGNUM);
+#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
+ SET_HARD_REG_BIT (res->regs, HARD_FRAME_POINTER_REGNUM);
+#endif
+ }
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (global_regs[i])
@@ -2445,6 +2450,9 @@ mark_target_live_regs (target, res)
if (call_used_regs[i]
&& i != STACK_POINTER_REGNUM && i != FRAME_POINTER_REGNUM
&& i != ARG_POINTER_REGNUM
+#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
+ && i != HARD_FRAME_POINTER_REGNUM
+#endif
#if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
&& ! (i == ARG_POINTER_REGNUM && fixed_regs[i])
#endif
@@ -4067,6 +4075,9 @@ dbr_schedule (first, file)
if (frame_pointer_needed)
{
SET_HARD_REG_BIT (end_of_function_needs.regs, FRAME_POINTER_REGNUM);
+#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
+ SET_HARD_REG_BIT (end_of_function_needs.regs, HARD_FRAME_POINTER_REGNUM);
+#endif
#ifdef EXIT_IGNORE_STACK
if (! EXIT_IGNORE_STACK)
#endif