(gen_rtx, case REG): Don't use frame_pointer_rtx or arg_pointer_rtx if
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Aug 1992 01:44:23 +0000 (01:44 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Aug 1992 01:44:23 +0000 (01:44 +0000)
reload is in progress.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@1758 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/emit-rtl.c

index f4d898a..a540ef7 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
        {