OSDN Git Service

PR rtl-optimization/17931
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Oct 2004 17:14:42 +0000 (17:14 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Oct 2004 17:14:42 +0000 (17:14 +0000)
* config/i386/i386.c (ix86_rtx_costs): Handle COMPARE with
ZERO_EXTRACT in it.

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

gcc/ChangeLog
gcc/config/i386/i386.c

index d91d260..6ac3aa1 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-12  Kazu Hirata  <kazu@cs.umass.edu>
+
+       PR rtl-optimization/17931
+       * config/i386/i386.c (ix86_rtx_costs): Handle COMPARE with
+       ZERO_EXTRACT in it.
+
 2004-10-12  Richard Earnshaw  <rearnsha@arm.com>
 
        * arm.c (arm_print_operand): Use output_operand_lossage where possible
index 540d390..ba51586 100644 (file)
@@ -14326,6 +14326,21 @@ ix86_rtx_costs (rtx x, int code, int outer_code, int *total)
        *total = COSTS_N_INSNS (ix86_cost->add);
       return false;
 
+    case COMPARE:
+      if (GET_CODE (XEXP (x, 0)) == ZERO_EXTRACT
+         && XEXP (XEXP (x, 0), 1) == const1_rtx
+         && GET_CODE (XEXP (XEXP (x, 0), 2)) == CONST_INT
+         && XEXP (x, 1) == const0_rtx)
+       {
+         /* This kind of construct is implemented using test[bwl].
+            Treat it as if we had an AND.  */
+         *total = (COSTS_N_INSNS (ix86_cost->add)
+                   + rtx_cost (XEXP (XEXP (x, 0), 0), outer_code)
+                   + rtx_cost (const1_rtx, outer_code));
+         return true;
+       }
+      return false;
+
     case FLOAT_EXTEND:
       if (!TARGET_SSE_MATH || !VALID_SSE_REG_MODE (mode))
        *total = 0;