diff mbox

[AArch64] Give some new costs for Cortex-A53 floating-point operations

Message ID 1466431030-35005-1-git-send-email-james.greenhalgh@arm.com
State Accepted
Commit f6dbc402e18a4d8e4f4941c4e7b2f9ec4e3c9ed4
Headers show

Commit Message

James Greenhalgh June 20, 2016, 1:57 p.m. UTC
Hi,

As recently done for Cortex-A57 [1], this patch rebases the floating-point
cost table for Cortex-A53 to be relative to the cost of a floating-point move.
I wrote a little more on the justification for doing this in the other patch,
but in summary this is what other targets and sub-targets do, so we should
fall in line with that.

Unlike the Cortex-A57 changes, this had no performance impact across
Spec2000 and Spec2006. I'm posting it to keep the strategy for costs
aligned between the two cores.

Bootstrapped on aarch64-none-linux-gnu and arm-none-linux-gnueabihf with
no issues.

OK?

Thanks,
James

[1]: https://gcc.gnu.org/ml/gcc-patches/2016-06/msg00251.html

---
2016-06-20  James Greenhalgh  <james.greenhalgh@arm.com>

	* config/arm/aarch-cost-tables.h (cortexa53_extra_costs): Make FP
	costs relative to the cost of a register move.

Comments

Richard Earnshaw (lists) June 20, 2016, 1:59 p.m. UTC | #1
On 20/06/16 14:57, James Greenhalgh wrote:
> 

> Hi,

> 

> As recently done for Cortex-A57 [1], this patch rebases the floating-point

> cost table for Cortex-A53 to be relative to the cost of a floating-point move.

> I wrote a little more on the justification for doing this in the other patch,

> but in summary this is what other targets and sub-targets do, so we should

> fall in line with that.

> 

> Unlike the Cortex-A57 changes, this had no performance impact across

> Spec2000 and Spec2006. I'm posting it to keep the strategy for costs

> aligned between the two cores.

> 

> Bootstrapped on aarch64-none-linux-gnu and arm-none-linux-gnueabihf with

> no issues.

> 

> OK?

> 

> Thanks,

> James

> 

> [1]: https://gcc.gnu.org/ml/gcc-patches/2016-06/msg00251.html

> 

> ---

> 2016-06-20  James Greenhalgh  <james.greenhalgh@arm.com>

> 

> 	* config/arm/aarch-cost-tables.h (cortexa53_extra_costs): Make FP

> 	costs relative to the cost of a register move.

> 


OK.

R.

> 

> 0001-AArch64-Give-some-new-costs-for-Cortex-A53-floating-.patch

> 

> 

> diff --git a/gcc/config/arm/aarch-cost-tables.h b/gcc/config/arm/aarch-cost-tables.h

> index 5f42253..8bcfcb4 100644

> --- a/gcc/config/arm/aarch-cost-tables.h

> +++ b/gcc/config/arm/aarch-cost-tables.h

> @@ -191,35 +191,35 @@ const struct cpu_cost_table cortexa53_extra_costs =

>    {

>      /* FP SFmode */

>      {

> -      COSTS_N_INSNS (15),	/* div.  */

> -      COSTS_N_INSNS (3),	/* mult.  */

> -      COSTS_N_INSNS (7),	/* mult_addsub. */

> -      COSTS_N_INSNS (7),	/* fma.  */

> -      COSTS_N_INSNS (3),	/* addsub.  */

> -      COSTS_N_INSNS (1),	/* fpconst. */

> -      COSTS_N_INSNS (2),	/* neg.  */

> -      COSTS_N_INSNS (1),	/* compare.  */

> -      COSTS_N_INSNS (3),	/* widen.  */

> -      COSTS_N_INSNS (3),	/* narrow.  */

> -      COSTS_N_INSNS (3),	/* toint.  */

> -      COSTS_N_INSNS (3),	/* fromint.  */

> -      COSTS_N_INSNS (3)		/* roundint.  */

> +      COSTS_N_INSNS (5),	/* div.  */

> +      COSTS_N_INSNS (1),	/* mult.  */

> +      COSTS_N_INSNS (2),	/* mult_addsub.  */

> +      COSTS_N_INSNS (2),	/* fma.  */

> +      COSTS_N_INSNS (1),	/* addsub.  */

> +      0,			/* fpconst.  */

> +      COSTS_N_INSNS (1),	/* neg.  */

> +      0,			/* compare.  */

> +      COSTS_N_INSNS (1),	/* widen.  */

> +      COSTS_N_INSNS (1),	/* narrow.  */

> +      COSTS_N_INSNS (1),	/* toint.  */

> +      COSTS_N_INSNS (1),	/* fromint.  */

> +      COSTS_N_INSNS (1)		/* roundint.  */

>      },

>      /* FP DFmode */

>      {

> -      COSTS_N_INSNS (30),	/* div.  */

> -      COSTS_N_INSNS (3),	/* mult.  */

> -      COSTS_N_INSNS (7),	/* mult_addsub.  */

> -      COSTS_N_INSNS (7),	/* fma.  */

> -      COSTS_N_INSNS (3),	/* addsub.  */

> -      COSTS_N_INSNS (1),	/* fpconst.  */

> -      COSTS_N_INSNS (2),	/* neg.  */

> -      COSTS_N_INSNS (1),	/* compare.  */

> -      COSTS_N_INSNS (3),	/* widen.  */

> -      COSTS_N_INSNS (3),	/* narrow.  */

> -      COSTS_N_INSNS (3),	/* toint.  */

> -      COSTS_N_INSNS (3),	/* fromint.  */

> -      COSTS_N_INSNS (3)		/* roundint.  */

> +      COSTS_N_INSNS (10),	/* div.  */

> +      COSTS_N_INSNS (1),	/* mult.  */

> +      COSTS_N_INSNS (2),	/* mult_addsub.  */

> +      COSTS_N_INSNS (2),	/* fma.  */

> +      COSTS_N_INSNS (1),	/* addsub.  */

> +      0,			/* fpconst.  */

> +      COSTS_N_INSNS (1),	/* neg.  */

> +      0,			/* compare.  */

> +      COSTS_N_INSNS (1),	/* widen.  */

> +      COSTS_N_INSNS (1),	/* narrow.  */

> +      COSTS_N_INSNS (1),	/* toint.  */

> +      COSTS_N_INSNS (1),	/* fromint.  */

> +      COSTS_N_INSNS (1)		/* roundint.  */

>      }

>    },

>    /* Vector */

>
diff mbox

Patch

diff --git a/gcc/config/arm/aarch-cost-tables.h b/gcc/config/arm/aarch-cost-tables.h
index 5f42253..8bcfcb4 100644
--- a/gcc/config/arm/aarch-cost-tables.h
+++ b/gcc/config/arm/aarch-cost-tables.h
@@ -191,35 +191,35 @@  const struct cpu_cost_table cortexa53_extra_costs =
   {
     /* FP SFmode */
     {
-      COSTS_N_INSNS (15),	/* div.  */
-      COSTS_N_INSNS (3),	/* mult.  */
-      COSTS_N_INSNS (7),	/* mult_addsub. */
-      COSTS_N_INSNS (7),	/* fma.  */
-      COSTS_N_INSNS (3),	/* addsub.  */
-      COSTS_N_INSNS (1),	/* fpconst. */
-      COSTS_N_INSNS (2),	/* neg.  */
-      COSTS_N_INSNS (1),	/* compare.  */
-      COSTS_N_INSNS (3),	/* widen.  */
-      COSTS_N_INSNS (3),	/* narrow.  */
-      COSTS_N_INSNS (3),	/* toint.  */
-      COSTS_N_INSNS (3),	/* fromint.  */
-      COSTS_N_INSNS (3)		/* roundint.  */
+      COSTS_N_INSNS (5),	/* div.  */
+      COSTS_N_INSNS (1),	/* mult.  */
+      COSTS_N_INSNS (2),	/* mult_addsub.  */
+      COSTS_N_INSNS (2),	/* fma.  */
+      COSTS_N_INSNS (1),	/* addsub.  */
+      0,			/* fpconst.  */
+      COSTS_N_INSNS (1),	/* neg.  */
+      0,			/* compare.  */
+      COSTS_N_INSNS (1),	/* widen.  */
+      COSTS_N_INSNS (1),	/* narrow.  */
+      COSTS_N_INSNS (1),	/* toint.  */
+      COSTS_N_INSNS (1),	/* fromint.  */
+      COSTS_N_INSNS (1)		/* roundint.  */
     },
     /* FP DFmode */
     {
-      COSTS_N_INSNS (30),	/* div.  */
-      COSTS_N_INSNS (3),	/* mult.  */
-      COSTS_N_INSNS (7),	/* mult_addsub.  */
-      COSTS_N_INSNS (7),	/* fma.  */
-      COSTS_N_INSNS (3),	/* addsub.  */
-      COSTS_N_INSNS (1),	/* fpconst.  */
-      COSTS_N_INSNS (2),	/* neg.  */
-      COSTS_N_INSNS (1),	/* compare.  */
-      COSTS_N_INSNS (3),	/* widen.  */
-      COSTS_N_INSNS (3),	/* narrow.  */
-      COSTS_N_INSNS (3),	/* toint.  */
-      COSTS_N_INSNS (3),	/* fromint.  */
-      COSTS_N_INSNS (3)		/* roundint.  */
+      COSTS_N_INSNS (10),	/* div.  */
+      COSTS_N_INSNS (1),	/* mult.  */
+      COSTS_N_INSNS (2),	/* mult_addsub.  */
+      COSTS_N_INSNS (2),	/* fma.  */
+      COSTS_N_INSNS (1),	/* addsub.  */
+      0,			/* fpconst.  */
+      COSTS_N_INSNS (1),	/* neg.  */
+      0,			/* compare.  */
+      COSTS_N_INSNS (1),	/* widen.  */
+      COSTS_N_INSNS (1),	/* narrow.  */
+      COSTS_N_INSNS (1),	/* toint.  */
+      COSTS_N_INSNS (1),	/* fromint.  */
+      COSTS_N_INSNS (1)		/* roundint.  */
     }
   },
   /* Vector */