re PR target/16480 (using -msdata causes internal compiler error)
authorAlan Modra <amodra@bigpond.net.au>
Thu, 26 Aug 2004 01:20:25 +0000 (01:20 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 26 Aug 2004 01:20:25 +0000 (10:50 +0930)
PR target/16480
* config/rs6000/rs6000.c (rs6000_split_multireg_move): Don't abort
on "(mem (symbol_ref ..))" rtl.  Look at LO_SUM base regs as well
as PLUS base regs.

From-SVN: r86598

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 5fa3d87820347d5dbe270361576153b934687ebc..4af8f57b048d5114db823e397f9711d26a45b931 100644 (file)
@@ -1,3 +1,10 @@
+2004-08-26  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/16480
+       * config/rs6000/rs6000.c (rs6000_split_multireg_move): Don't abort
+       on "(mem (symbol_ref ..))" rtl.  Look at LO_SUM base regs as well
+       as PLUS base regs.
+
 2005-08-28  Paul Brook  <paul@codesourcery.com>
 
        * config/arm/symbian.h (SUBTARGET_ASM_FLOAT_SPEC): Default to
index fd95f0ba1670cb21fc3fe253e66ccb6c761fd868..745b4759d3b91c6582d47b660da329b64f89b8ca 100644 (file)
@@ -11352,18 +11352,14 @@ rs6000_split_multireg_move (rtx dst, rtx src)
              src = newsrc;
            }
 
-         /* We have now address involving an base register only.
-            If we use one of the registers to address memory,
-            we have change that register last.  */
-
-         breg = (GET_CODE (XEXP (src, 0)) == PLUS
-                 ? XEXP (XEXP (src, 0), 0)
-                 : XEXP (src, 0));
-
-         if (!REG_P (breg))
-             abort();
-
-         if (REGNO (breg) >= REGNO (dst)
+         breg = XEXP (src, 0);
+         if (GET_CODE (breg) == PLUS || GET_CODE (breg) == LO_SUM)
+           breg = XEXP (breg, 0);
+
+         /* If the base register we are using to address memory is
+            also a destination reg, then change that register last.  */
+         if (REG_P (breg)
+             && REGNO (breg) >= REGNO (dst)
              && REGNO (breg) < REGNO (dst) + nregs)
            j = REGNO (breg) - REGNO (dst);
         }