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

2016-06-20 Thread Richard Earnshaw (lists)
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  
> 
>   * 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 */
> 



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

2016-06-20 Thread James Greenhalgh

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  

* config/arm/aarch-cost-tables.h (cortexa53_extra_costs): Make FP
costs relative to the cost of a register move.
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 */