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 <[email protected]>
* 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 */