PR target/14812
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Apr 2005 10:51:38 +0000 (10:51 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Apr 2005 10:51:38 +0000 (10:51 +0000)
* arm.c (arm_select_cc_mode): Return CC_Zmode when comparing against
a negated value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97533 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/arm.c

index fe589da..dd8d0b7 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-04  Richard Earnshaw  <richard.earnshaw@arm.com>
+
+       PR target/14812
+       * arm.c (arm_select_cc_mode): Return CC_Zmode when comparing against
+       a negated value.
+
 2005-04-04  Richard Henderson  <rth@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index 83c5b85..bcf1904 100644 (file)
@@ -6100,6 +6100,13 @@ arm_select_cc_mode (enum rtx_code op, rtx x, rtx y)
          || GET_CODE (x) == ROTATERT))
     return CC_SWPmode;
 
+  /* This operation is performed swapped, but since we only rely on the Z
+     flag we don't need an additional mode.  */
+  if (GET_MODE (y) == SImode && REG_P (y)
+      && GET_CODE (x) == NEG
+      && (op ==        EQ || op == NE))
+    return CC_Zmode;
+
   /* This is a special case that is used by combine to allow a
      comparison of a shifted byte load to be split into a zero-extend
      followed by a comparison of the shifted integer (only valid for