always define INITIAL_FRAME_ADDRESS_RTX
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Sun, 11 Oct 2015 00:47:52 +0000 (00:47 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Sun, 11 Oct 2015 00:47:52 +0000 (00:47 +0000)
gcc/ChangeLog:

2015-10-10  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* builtins.c (expand_builtin_return_addr): Adjust.
* defaults.h (INITIAL_FRAME_ADDRESS_RTX): New default definition.

From-SVN: r228685

gcc/ChangeLog
gcc/builtins.c
gcc/defaults.h

index 531ea11f1555b160250f06c41733df64fba0190c..5da4a5dd09f04383bb083a02946afe5b6be5abaa 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-10  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * builtins.c (expand_builtin_return_addr): Adjust.
+       * defaults.h (INITIAL_FRAME_ADDRESS_RTX): New default definition.
+
 2015-10-10  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree.c (type_with_interoperable_signedness): New.
index 643eeef21061e559bb42078e534af429a6156b4d..3bbe763b0314fdb9ec149f5d4b740cc9555c39a8 100644 (file)
@@ -761,31 +761,28 @@ static rtx
 expand_builtin_return_addr (enum built_in_function fndecl_code, int count)
 {
   int i;
-
-#ifdef INITIAL_FRAME_ADDRESS_RTX
   rtx tem = INITIAL_FRAME_ADDRESS_RTX;
-#else
-  rtx tem;
-
-  /* For a zero count with __builtin_return_address, we don't care what
-     frame address we return, because target-specific definitions will
-     override us.  Therefore frame pointer elimination is OK, and using
-     the soft frame pointer is OK.
-
-     For a nonzero count, or a zero count with __builtin_frame_address,
-     we require a stable offset from the current frame pointer to the
-     previous one, so we must use the hard frame pointer, and
-     we must disable frame pointer elimination.  */
-  if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS)
-    tem = frame_pointer_rtx;
-  else
-    {
-      tem = hard_frame_pointer_rtx;
+  if (tem == NULL_RTX)
+    {
+      /* For a zero count with __builtin_return_address, we don't care what
+        frame address we return, because target-specific definitions will
+        override us.  Therefore frame pointer elimination is OK, and using
+        the soft frame pointer is OK.
+
+        For a nonzero count, or a zero count with __builtin_frame_address,
+        we require a stable offset from the current frame pointer to the
+        previous one, so we must use the hard frame pointer, and
+        we must disable frame pointer elimination.  */
+      if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS)
+       tem = frame_pointer_rtx;
+      else
+       {
+         tem = hard_frame_pointer_rtx;
 
-      /* Tell reload not to eliminate the frame pointer.  */
-      crtl->accesses_prior_frames = 1;
+         /* Tell reload not to eliminate the frame pointer.  */
+         crtl->accesses_prior_frames = 1;
+       }
     }
-#endif
 
   /* Some machines need special handling before we can access
      arbitrary frames.  For example, on the SPARC, we must first flush
index 14ef91ad4b51a035c938a5e02fa15563cf1aa7b3..c4d953622be6b5620345b73a29de3ae5a0029aa6 100644 (file)
@@ -1277,6 +1277,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define CONSTANT_ALIGNMENT(EXP, ALIGN) ALIGN
 #endif
 
+#ifndef INITIAL_FRAME_ADDRESS_RTX
+#define INITIAL_FRAME_ADDRESS_RTX NULL
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions