aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-03-08 16:45:38 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-03-08 16:45:38 -0500
commit5c23c401723bd1c663709d2ae3493bbeee02f9d1 (patch)
tree955c21bf02427414034ee6f0d87515e833a4d3e2 /gcc/reload1.c
parent82bb2b597d775a92172cc4d3832345a262fe8ce5 (diff)
downloadgcc-5c23c401723bd1c663709d2ae3493bbeee02f9d1.zip
gcc-5c23c401723bd1c663709d2ae3493bbeee02f9d1.tar.gz
gcc-5c23c401723bd1c663709d2ae3493bbeee02f9d1.tar.bz2
*** empty log message ***
From-SVN: r422
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index e26cefe..c6f46b1 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1367,6 +1367,20 @@ reload (first, global, dumpfile)
}
}
+ /* See if anything that happened changes which eliminations are valid.
+ For example, on the Sparc, whether or not the frame pointer can
+ be eliminated can depend on what registers have been used. We need
+ not check some conditions again (such as flag_omit_frame_pointer)
+ since they can't have changed. */
+
+ for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
+ if ((ep->from == FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED)
+#ifdef ELIMINABLE_REGS
+ || ! CAN_ELIMINATE (ep->from, ep->to)
+#endif
+ )
+ ep->can_eliminate = 0;
+
/* Look for the case where we have discovered that we can't replace
register A with register B and that means that we will now be
trying to replace register A with register C. This means we can