Fix ARM bootstrap problems introduced by last change
authorBernd Schmidt <bernds@redhat.com>
Wed, 20 Dec 2000 15:48:26 +0000 (15:48 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 20 Dec 2000 15:48:26 +0000 (15:48 +0000)
From-SVN: r38399

gcc/ChangeLog
gcc/flow.c

index 1bfbdfa17f1c964a5e9b6d9b53afd46bda046154..10f00cb9d6c3316799d733d63d3d61c479afced7 100644 (file)
@@ -1,3 +1,8 @@
+2000-12-20  Bernd Schmidt  <bernds@redhat.com>
+
+       * flow.c (ior_reg_cond, and_reg_cond, elim_reg_cond): Properly
+       handle all relational operators.
+
 2000-12-20  Alexandre Oliva  <aoliva@redhat.com>
 
        * final.c (output_addr_const): Use ASM_OUTPUT_SYMBOL_REF.
index 725f63fc8215e489e082ba30072991c18670eba2..ae98448f44c8cc84d3cd97dc80a78173787ce239 100644 (file)
@@ -5010,6 +5010,20 @@ ior_reg_cond (old, x, add)
 {
   rtx op0, op1;
 
+  if (GET_RTX_CLASS (GET_CODE (old)) == '<')
+    {
+      if (GET_RTX_CLASS (GET_CODE (x)) == '<'
+         && GET_CODE (x) == reverse_condition (GET_CODE (old))
+         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
+       return const1_rtx;
+      if (GET_CODE (x) == GET_CODE (old)
+         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
+       return old;
+      if (! add)
+       return old;
+      return gen_rtx_IOR (0, old, x);
+    }
+
   switch (GET_CODE (old))
     {
     case IOR:
@@ -5062,19 +5076,6 @@ ior_reg_cond (old, x, add)
        return old;
       return gen_rtx_IOR (0, old, x);
 
-    case EQ:
-    case NE:
-      if ((GET_CODE (x) == EQ || GET_CODE (x) == NE)
-         && GET_CODE (x) != GET_CODE (old)
-         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
-       return const1_rtx;
-      if (GET_CODE (x) == GET_CODE (old)
-         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
-       return old;
-      if (! add)
-       return old;
-      return gen_rtx_IOR (0, old, x);
-
     default:
       abort ();
     }
@@ -5112,6 +5113,20 @@ and_reg_cond (old, x, add)
 {
   rtx op0, op1;
 
+  if (GET_RTX_CLASS (GET_CODE (old)) == '<')
+    {
+      if (GET_RTX_CLASS (GET_CODE (x)) == '<'
+         && GET_CODE (x) == reverse_condition (GET_CODE (old))
+         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
+       return const0_rtx;
+      if (GET_CODE (x) == GET_CODE (old)
+         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
+       return old;
+      if (! add)
+       return old;
+      return gen_rtx_AND (0, old, x);
+    }
+
   switch (GET_CODE (old))
     {
     case IOR:
@@ -5164,19 +5179,6 @@ and_reg_cond (old, x, add)
        return old;
       return gen_rtx_AND (0, old, x);
 
-    case EQ:
-    case NE:
-      if ((GET_CODE (x) == EQ || GET_CODE (x) == NE)
-         && GET_CODE (x) != GET_CODE (old)
-         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
-       return const0_rtx;
-      if (GET_CODE (x) == GET_CODE (old)
-         && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
-       return old;
-      if (! add)
-       return old;
-      return gen_rtx_AND (0, old, x);
-
     default:
       abort ();
     }
@@ -5193,6 +5195,14 @@ elim_reg_cond (x, regno)
      unsigned int regno;
 {
   rtx op0, op1;
+
+  if (GET_RTX_CLASS (GET_CODE (x)) == '<')
+    {
+      if (REGNO (XEXP (x, 0)) == regno)
+       return const0_rtx;
+      return x;
+    }
+
   switch (GET_CODE (x))
     {
     case AND:
@@ -5231,11 +5241,6 @@ elim_reg_cond (x, regno)
        return not_reg_cond (op0);
       return x;
 
-    case EQ:
-    case NE:
-      if (REGNO (XEXP (x, 0)) == regno)
-       return const0_rtx;
-      return x;
     default:
       abort ();
     }