]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[AArch64][2/2] Add rtx cost function handling of clz, clrsb, rbit.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 22 Jul 2014 13:39:16 +0000 (13:39 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 22 Jul 2014 13:39:16 +0000 (13:39 +0000)
* config/aarch64/aarch64.c (aarch64_rtx_costs): Handle CLRSB, CLZ.
(case UNSPEC): Handle UNSPEC_RBIT.

From-SVN: r212913

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 5c972bb462be2f31321f66bf9346ed61e03d0a10..f40cfd95b00316b46ac5e0dd7f61f1096fba7200 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_rtx_costs): Handle CLRSB, CLZ.
+       (case UNSPEC): Handle UNSPEC_RBIT.
+
 2014-07-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/aarch64/aarch64.md: Delete UNSPEC_CLS.
index 5f8db1dc01ede6c45d4867c704fe06cb7b7c78b4..56a0e443ce1093f51a6b22682035ed2c2692b450 100644 (file)
@@ -5151,6 +5151,13 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED,
 
       return false;
 
+    case CLRSB:
+    case CLZ:
+      if (speed)
+        *cost += extra_cost->alu.clz;
+
+      return false;
+
     case COMPARE:
       op0 = XEXP (x, 0);
       op1 = XEXP (x, 1);
@@ -5796,6 +5803,14 @@ cost_plus:
 
           return false;
         }
+
+      if (XINT (x, 1) == UNSPEC_RBIT)
+        {
+          if (speed)
+            *cost += extra_cost->alu.rev;
+
+          return false;
+        }
       break;
 
     case TRUNCATE: