[AArch64 costs 13/18] Improve costs for div/mod

gcc/

	* config/aarch64/aarch64.c (aarch64_rtx_costs): Improve costs for
	DIV/MOD.


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

From-SVN: r210505
This commit is contained in:
James Greenhalgh 2014-05-16 09:12:14 +00:00 committed by James Greenhalgh
parent 7cc2145f54
commit 4105fe3885
2 changed files with 14 additions and 9 deletions

View File

@ -1,4 +1,10 @@
2014-03-16 James Greenhalgh <james.greenhalgh@arm.com>
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
* config/aarch64/aarch64.c (aarch64_rtx_costs): Improve costs for
DIV/MOD.
2014-05-16 James Greenhalgh <james.greenhalgh@arm.com>
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
* config/aarch64/aarch64.c (aarch64_rtx_arith_op_extract_p): New.

View File

@ -5476,7 +5476,6 @@ cost_minus:
case MOD:
case UMOD:
*cost = COSTS_N_INSNS (2);
if (speed)
{
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
@ -5493,15 +5492,15 @@ cost_minus:
case DIV:
case UDIV:
*cost = COSTS_N_INSNS (1);
case SQRT:
if (speed)
{
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
*cost += extra_cost->mult[GET_MODE (x) == DImode].idiv;
else if (GET_MODE (x) == DFmode)
*cost += extra_cost->fp[1].div;
else if (GET_MODE (x) == SFmode)
*cost += extra_cost->fp[0].div;
if (GET_MODE_CLASS (mode) == MODE_INT)
/* There is no integer SQRT, so only DIV and UDIV can get
here. */
*cost += extra_cost->mult[mode == DImode].idiv;
else
*cost += extra_cost->fp[mode == DFmode].div;
}
return false; /* All arguments need to be in registers. */