optabs.c (expand_vector_unop): Don't expand using sub_optab if we got the wrong mode.
authorJ"orn Rennecke <joern.rennecke@superh.com>
Mon, 22 Jul 2002 14:22:58 +0000 (14:22 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 22 Jul 2002 14:22:58 +0000 (15:22 +0100)
* optabs.c (expand_vector_unop): Don't expand using sub_optab
if we got the wrong mode.

From-SVN: r55648

gcc/ChangeLog
gcc/optabs.c

index 6e8dfd6e11c60d926087d24454fe8c53f9425f66..1f413bb8dc00f95008dfd68c1655831b4a11bb69 100644 (file)
@@ -1,4 +1,7 @@
-Mon Jul 22 15:18:58 2002  J"orn Rennecke <joern.rennecke@superh.com>
+Mon Jul 22 15:21:41 2002  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * optabs.c (expand_vector_unop): Don't expand using sub_optab
+       if we got the wrong mode.
 
        * hwint.c (define HOST_WIDE_INT_PRINT_DEC_C): New define.
        * genrecog.c (write_switch, write_cond): Use it.
index dcb4df5f04bf2c58a1e71300a498bb0eaf374f10..c2f9863ceb67c344f8698b1cc358bcb9dae1dd80 100644 (file)
@@ -2049,7 +2049,10 @@ expand_vector_unop (mode, unoptab, op0, target, unsignedp)
        submode = tmode;
     }
   /* If there is no negate operation, try doing a subtract from zero.  */
-  if (unoptab == neg_optab && GET_MODE_CLASS (submode) == MODE_INT)
+  if (unoptab == neg_optab && GET_MODE_CLASS (submode) == MODE_INT
+      /* Avoid infinite recursion when an
+        error has left us with the wrong mode.  */
+      && GET_MODE (op0) == mode)
     {    
       rtx temp;
       temp = expand_binop (mode, sub_optab, CONST0_RTX (mode), op0,