[AArch64 costs 8/18] Cost memory accesses using address costs

gcc/

	* config/aarch64/aarch64.c (aarch64_rtx_costs): Use address
	costs when costing loads and stores to memory.


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

From-SVN: r210500
This commit is contained in:
James Greenhalgh 2014-05-16 08:56:54 +00:00 committed by James Greenhalgh
parent ba123b0de5
commit 2961177e7d
2 changed files with 36 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
* config/aarch64/aarch64.c (aarch64_rtx_costs): Use address
costs when costing loads and stores to memory.
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
Philip Tomsich <philipp.tomsich@theobroma-systems.com>

View File

@ -142,6 +142,7 @@ static bool aarch64_const_vec_all_same_int_p (rtx,
static bool aarch64_vectorize_vec_perm_const_ok (enum machine_mode vmode,
const unsigned char *sel);
static int aarch64_address_cost (rtx, enum machine_mode, addr_space_t, bool);
/* The processor for which instructions should be scheduled. */
enum aarch64_processor aarch64_tune = cortexa53;
@ -4870,7 +4871,19 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED,
{
case MEM:
if (speed)
*cost += extra_cost->ldst.store;
{
rtx address = XEXP (op0, 0);
if (GET_MODE_CLASS (mode) == MODE_INT)
*cost += extra_cost->ldst.store;
else if (mode == SFmode)
*cost += extra_cost->ldst.storef;
else if (mode == DFmode)
*cost += extra_cost->ldst.stored;
*cost +=
COSTS_N_INSNS (aarch64_address_cost (address, mode,
0, speed));
}
*cost += rtx_cost (op1, SET, 1, speed);
return true;
@ -4983,7 +4996,22 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED,
case MEM:
if (speed)
*cost += extra_cost->ldst.load;
{
/* For loads we want the base cost of a load, plus an
approximation for the additional cost of the addressing
mode. */
rtx address = XEXP (x, 0);
if (GET_MODE_CLASS (mode) == MODE_INT)
*cost += extra_cost->ldst.load;
else if (mode == SFmode)
*cost += extra_cost->ldst.loadf;
else if (mode == DFmode)
*cost += extra_cost->ldst.loadd;
*cost +=
COSTS_N_INSNS (aarch64_address_cost (address, mode,
0, speed));
}
return true;