(gen_rtx, case REG): Don't use frame_pointer_rtx or arg_pointer_rtx if
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 3 Aug 1992 01:44:23 +0000 (21:44 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 3 Aug 1992 01:44:23 +0000 (21:44 -0400)
reload is in progress.

From-SVN: r1758

gcc/emit-rtl.c

index f4d898a779f0bede8b6d0fd9e9f2d297801753d7..a540ef7a3e663bfe710b682eae4314b4ea66776c 100644 (file)
@@ -271,15 +271,21 @@ gen_rtx (va_alist)
         If we have eliminated the frame pointer or arg pointer, we will
         be using it as a normal register, for example as a spill register.
         In such cases, we might be accessing it in a mode that is not
-        Pmode and therefore cannot use the pre-allocated rtx.  */
+        Pmode and therefore cannot use the pre-allocated rtx.
 
-      if (frame_pointer_rtx && regno == FRAME_POINTER_REGNUM && mode == Pmode)
+        Also don't do this when we are making new REGs in reload,
+        since we don't want to get confused with the real pointers.  */
+
+      if (frame_pointer_rtx && regno == FRAME_POINTER_REGNUM && mode == Pmode
+         && ! reload_in_progress)
        return frame_pointer_rtx;
 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
-      if (arg_pointer_rtx && regno == ARG_POINTER_REGNUM && mode == Pmode)
+      if (arg_pointer_rtx && regno == ARG_POINTER_REGNUM && mode == Pmode
+         && ! reload_in_progress)
        return arg_pointer_rtx;
 #endif
-      if (stack_pointer_rtx && regno == STACK_POINTER_REGNUM && mode == Pmode)
+      if (stack_pointer_rtx && regno == STACK_POINTER_REGNUM && mode == Pmode
+         && ! reload_in_progress)
        return stack_pointer_rtx;
       else
        {