sh.c (shiftcosts): Don't use shiftcosts array for modes wider than SImode.
authorJ"orn Rennecke <amylaar@redhat.com>
Thu, 20 Sep 2001 14:25:11 +0000 (14:25 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 20 Sep 2001 14:25:11 +0000 (15:25 +0100)
* sh.c (shiftcosts): Don't use shiftcosts array for modes wider
than SImode.

From-SVN: r45709

gcc/ChangeLog
gcc/config/sh/sh.c

index 1b17a43b6609106ba444b17d157ead97dbe84859..587e5d9d10782c1dcc9fd9ec66f5c099fa329d1a 100644 (file)
@@ -1,3 +1,8 @@
+Thu Sep 20 12:49:34 2001  J"orn Rennecke <amylaar@redhat.com>
+
+       * sh.c (shiftcosts): Don't use shiftcosts array for modes wider
+       than SImode.
+
 Thu Sep 20 09:00:27 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * stor-layout.c (layout_type, case ARRAY_TYPE): Kludge to disable
index fa39c743bca464ebe427c29c42ec40898c4183ae..53f8b1227e2a7fe3ad98f1214da3de0b8c84eda1 100644 (file)
@@ -1019,6 +1019,16 @@ shiftcosts (x)
 {
   int value;
 
+  if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+    {
+      if (GET_MODE (x) == DImode
+         && GET_CODE (XEXP (x, 1)) == CONST_INT
+         && INTVAL (XEXP (x, 1)) == 1)
+       return 2;
+
+      /* Everything else is invalid, because there is no pattern for it.  */
+      return 10000;
+    }
   /* If shift by a non constant, then this will be expensive.  */
   if (GET_CODE (XEXP (x, 1)) != CONST_INT)
     return SH_DYNAMIC_SHIFT_COST;