i960.h (FRAME_POINTER_REQUIRED): Revert removal of check for current_function_has_non...
authorDJ Delorie <dj@redhat.com>
Fri, 23 Feb 2001 23:05:33 +0000 (18:05 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Fri, 23 Feb 2001 23:05:33 +0000 (18:05 -0500)
* config/i960/i960.h (FRAME_POINTER_REQUIRED): Revert removal of
check for current_function_has_nonlocal_goto from 1999-11-12.

From-SVN: r40018

gcc/ChangeLog
gcc/config/i960/i960.h

index 43ce072896da906177816f30691319e088abe832..7bb6f8c153609e4dbd124bbfd3675c0b1fe28fd4 100644 (file)
@@ -1,3 +1,8 @@
+2001-02-21  DJ Delorie  <dj@redhat.com>
+
+       * config/i960/i960.h (FRAME_POINTER_REQUIRED): Revert removal of
+       check for current_function_has_nonlocal_goto from 1999-11-12.
+
 Fri Feb 23 15:28:39 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * diagnostic.c (trim_filename): No longer static.
index 510793b307f2dd9fc45027c5263f8644712f23bf..4c85e95d8e8da921493376a027bba2140c5034ef 100644 (file)
@@ -617,7 +617,12 @@ extern int target_flags;
 /* ??? It isn't clear to me why this is here.  Perhaps because of a bug (since
    fixed) in the definition of INITIAL_FRAME_POINTER_OFFSET which would have
    caused this to fail.  */
-#define FRAME_POINTER_REQUIRED (! leaf_function_p ())
+/* ??? Must check current_function_has_nonlocal_goto, otherwise frame pointer
+  elimination messes up nonlocal goto sequences.  I think this works for other
+  targets because they use indirect jumps for the return which disables fp
+  elimination.  */
+#define FRAME_POINTER_REQUIRED \
+  (! leaf_function_p () || current_function_has_nonlocal_goto)
 
 /* Definitions for register eliminations.