aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-10-29 21:56:18 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-10-29 21:56:18 -0500
commit2a1f8b6bca3e10f7380a7165a3cb376a94ef6a39 (patch)
treeb5dc894b3cfe44ac89be1c89db7e17565e8553af
parentfe0f9c4bfb3209c6cfd18c690535147bc92739da (diff)
downloadgcc-2a1f8b6bca3e10f7380a7165a3cb376a94ef6a39.zip
gcc-2a1f8b6bca3e10f7380a7165a3cb376a94ef6a39.tar.gz
gcc-2a1f8b6bca3e10f7380a7165a3cb376a94ef6a39.tar.bz2
(reload): If FP was eliminated, remove it from being live in any basic
block. From-SVN: r2656
-rw-r--r--gcc/reload1.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index f1933d7..c065da8 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1805,6 +1805,17 @@ reload (first, global, dumpfile)
|| caller_save_spill_class != NO_REGS)
reload_as_needed (first, global);
+ /* If we were able to eliminate the frame pointer, show that it is no
+ longer live at the start of any basic block. If it ls live by
+ virtue of being in a pseudo, that pseudo will be marked live
+ and hence the frame pointer will be known to be live via that
+ pseudo. */
+
+ if (! frame_pointer_needed)
+ for (i = 0; i < n_basic_blocks; i++)
+ basic_block_live_at_start[i][FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
+ &= ~ ((REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS));
+
reload_in_progress = 0;
/* Come here (with failure set nonzero) if we can't get enough spill regs