OSDN Git Service

(rs6000_convert_preincs): New function.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Apr 1994 21:48:23 +0000 (21:48 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Apr 1994 21:48:23 +0000 (21:48 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7013 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/rs6000/rs6000.c

index 0cadc31..04a3c3d 100644 (file)
@@ -157,6 +157,34 @@ rs6000_override_options ()
     }
 }
 \f
+/* Look for an PRE_INC address in X that are marked as dying in INSN.
+   Convert the addresses to a PLUS form if one is found.  */
+
+void
+rs6000_convert_preincs (x, insn)
+     rtx x;
+     rtx insn;
+{
+  enum rtx_code code = GET_CODE (x);
+  char *fmt;
+  int i, j;
+
+  if (code == MEM && GET_CODE (XEXP (x, 0)) == PRE_INC
+      && find_reg_note (insn, REG_DEAD, XEXP (XEXP (x, 0), 0)))
+    XEXP (x, 0) = plus_constant (XEXP (XEXP (x, 0), 0),
+                                GET_MODE_SIZE (GET_MODE (x)));
+  else
+    for (i = GET_RTX_LENGTH (code) - 1, fmt = GET_RTX_FORMAT (code);
+        i >= 0; i--)
+      {
+       if (fmt[i] == 'e')
+         rs6000_convert_preincs (XEXP (x, i), insn);
+       else if (fmt[i] == 'E')
+         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+           rs6000_convert_preincs (XVECEXP (x, i, j), insn);
+      }
+}
+\f
 /* Return non-zero if this function is known to have a null epilogue.  */
 
 int