aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-10-29 21:55:53 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-10-29 21:55:53 -0500
commitfe0f9c4bfb3209c6cfd18c690535147bc92739da (patch)
tree45532c78346ea0210a84a97ec19c65681b6a4b7b
parente28d6e8a917f47a50d6d29c484d6609a75450966 (diff)
downloadgcc-fe0f9c4bfb3209c6cfd18c690535147bc92739da.zip
gcc-fe0f9c4bfb3209c6cfd18c690535147bc92739da.tar.gz
gcc-fe0f9c4bfb3209c6cfd18c690535147bc92739da.tar.bz2
(life_analysis): Mark FP live at end of function.
From-SVN: r2655
-rw-r--r--gcc/flow.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index c2f94c9..66f0d65 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -861,6 +861,20 @@ life_analysis (f, nregs)
|= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
}
+ /* Mark the frame pointer is needed at the end of the function. If
+ we end up eliminating it, it will be removed from the live list
+ of each basic block by reload. */
+
+ if (n_basic_blocks > 0)
+ {
+ basic_block_live_at_end[n_basic_blocks - 1]
+ [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
+ |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
+ basic_block_new_live_at_end[n_basic_blocks - 1]
+ [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
+ |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
+ }
+
/* Mark all global registers as being live at the end of the function
since they may be referenced by our caller. */