[AArch64 costs 17/18] Cost for SYMBOL_REF, HIGH and LO_SUM

gcc/

	* config/aarch64/aarch64.c (aarch64_rtx_costs): Cost SYMBOL_REF,
	HIGH, LO_SUM.

From-SVN: r210509
This commit is contained in:
James Greenhalgh 2014-05-16 09:25:48 +00:00 committed by James Greenhalgh
parent fb620c4a9a
commit 909734beb7
2 changed files with 40 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64.c (aarch64_rtx_costs): Cost SYMBOL_REF,
HIGH, LO_SUM.
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

View File

@ -5508,15 +5508,44 @@ cost_plus:
return false; /* All arguments need to be in registers. */
}
case HIGH:
if (!CONSTANT_P (XEXP (x, 0)))
*cost += rtx_cost (XEXP (x, 0), HIGH, 0, speed);
case SYMBOL_REF:
if (aarch64_cmodel == AARCH64_CMODEL_LARGE)
{
/* LDR. */
if (speed)
*cost += extra_cost->ldst.load;
}
else if (aarch64_cmodel == AARCH64_CMODEL_SMALL
|| aarch64_cmodel == AARCH64_CMODEL_SMALL_PIC)
{
/* ADRP, followed by ADD. */
*cost += COSTS_N_INSNS (1);
if (speed)
*cost += 2 * extra_cost->alu.arith;
}
else if (aarch64_cmodel == AARCH64_CMODEL_TINY
|| aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
{
/* ADR. */
if (speed)
*cost += extra_cost->alu.arith;
}
if (flag_pic)
{
/* One extra load instruction, after accessing the GOT. */
*cost += COSTS_N_INSNS (1);
if (speed)
*cost += extra_cost->ldst.load;
}
return true;
case HIGH:
case LO_SUM:
if (!CONSTANT_P (XEXP (x, 1)))
*cost += rtx_cost (XEXP (x, 1), LO_SUM, 1, speed);
*cost += rtx_cost (XEXP (x, 0), LO_SUM, 0, speed);
/* ADRP/ADD (immediate). */
if (speed)
*cost += extra_cost->alu.arith;
return true;
case ZERO_EXTRACT: