[AArch64] Properly cost FABD pattern
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Thu, 30 Apr 2015 17:01:34 +0000 (17:01 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Thu, 30 Apr 2015 17:01:34 +0000 (17:01 +0000)
* config/aarch64/aarch64.c (aarch64_rtx_costs): Handle pattern for
fabd in ABS case.

From-SVN: r222638

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

index a4569bbc075f4fe98ecc86c503ef3b9316e50117..371078896d8b0fbbb6b27de02144d85f246bbd08 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_rtx_costs): Handle pattern for
+       fabd in ABS case.
+
 2015-04-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/aarch64/aarch64.md
index 7579f5b2519eb6d279f2c76bcfe13d9ea709809a..f1aec673a9ab08ef9b789df9dc6928e7a0d82289 100644 (file)
@@ -6387,7 +6387,19 @@ cost_plus:
     case ABS:
       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
        {
-         /* FABS and FNEG are analogous.  */
+         op0 = XEXP (x, 0);
+
+         /* FABD, which is analogous to FADD.  */
+         if (GET_CODE (op0) == MINUS)
+           {
+             *cost += rtx_cost (XEXP (op0, 0), MINUS, 0, speed);
+                       + rtx_cost (XEXP (op0, 1), MINUS, 1, speed);
+             if (speed)
+               *cost += extra_cost->fp[mode == DFmode].addsub;
+
+             return true;
+           }
+         /* Simple FABS is analogous to FNEG.  */
          if (speed)
            *cost += extra_cost->fp[mode == DFmode].neg;
        }