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 New
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 */