(subst): Move up test for too many restarts.
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 21 Aug 1992 11:52:57 +0000 (07:52 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 21 Aug 1992 11:52:57 +0000 (07:52 -0400)
If we restart, clear OP0_MODE since we don't know it.

From-SVN: r1926

gcc/combine.c

index 75ef97ac7966088381ef491af3d8f7ed03917451..5b9b9a446f5c010071187acc42634a91f977272e 100644 (file)
@@ -2580,6 +2580,18 @@ subst (x, from, to, in_dest, unique_copy)
 
  restart:
 
+  /* If we have restarted more than 4 times, we are probably looping, so
+     give up.  */
+  if (++n_restarts > 4)
+    return x;
+
+  /* If we are restarting at all, it means that we no longer know the
+     original mode of operand 0 (since we have probably changed the
+     form of X).  */
+
+  if (n_restarts > 1)
+    op0_mode = VOIDmode;
+
   code = GET_CODE (x);
 
   /* If this is a commutative operation, put a constant last and a complex
@@ -2663,11 +2675,6 @@ subst (x, from, to, in_dest, unique_copy)
   if (temp)
     x = temp, code = GET_CODE (temp);
 
-  /* If we have restarted more than 4 times, we are probably looping, so
-     give up.  */
-  if (++n_restarts > 4)
-    return x;
-
   /* First see if we can apply the inverse distributive law.  */
   if (code == PLUS || code == MINUS || code == IOR || code == XOR)
     {