[AArch64 costs 13/18] Improve costs for div/mod
authorJames Greenhalgh <james.greenhalgh@arm.com>
Fri, 16 May 2014 09:12:14 +0000 (09:12 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Fri, 16 May 2014 09:12:14 +0000 (09:12 +0000)
gcc/

* config/aarch64/aarch64.c (aarch64_rtx_costs): Improve costs for
DIV/MOD.

Co-Authored-By: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
From-SVN: r210505

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

index d36a3ca..cdc7236 100644 (file)
@@ -1,4 +1,10 @@
-2014-03-16  James Greenhalgh  <james.greenhalgh@arm.com>
+2014-05-16  James Greenhalgh  <james.greenhalgh@arm.com>
+           Philipp Tomsich  <philipp.tomsich@theobroma-systems.com>
+
+       * config/aarch64/aarch64.c (aarch64_rtx_costs): Improve costs for
+       DIV/MOD.
+
+2014-05-16  James Greenhalgh  <james.greenhalgh@arm.com>
            Philipp Tomsich  <philipp.tomsich@theobroma-systems.com>
 
        * config/aarch64/aarch64.c (aarch64_rtx_arith_op_extract_p): New.
index 37c791d..6c2682a 100644 (file)
@@ -5476,7 +5476,6 @@ cost_minus:
 
     case MOD:
     case UMOD:
-      *cost = COSTS_N_INSNS (2);
       if (speed)
        {
          if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
@@ -5493,15 +5492,15 @@ cost_minus:
 
     case DIV:
     case UDIV:
-      *cost = COSTS_N_INSNS (1);
+    case SQRT:
       if (speed)
        {
-         if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
-           *cost += extra_cost->mult[GET_MODE (x) == DImode].idiv;
-         else if (GET_MODE (x) == DFmode)
-           *cost += extra_cost->fp[1].div;
-         else if (GET_MODE (x) == SFmode)
-           *cost += extra_cost->fp[0].div;
+         if (GET_MODE_CLASS (mode) == MODE_INT)
+           /* There is no integer SQRT, so only DIV and UDIV can get
+              here.  */
+           *cost += extra_cost->mult[mode == DImode].idiv;
+         else
+           *cost += extra_cost->fp[mode == DFmode].div;
        }
       return false;  /* All arguments need to be in registers.  */