[AArch64 costs 16/18] Cost TRUNCATE

gcc/

	* config/aarch64/aarch64.c (aarch64_rtx_costs): Cost TRUNCATE.


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

From-SVN: r210508
This commit is contained in:
James Greenhalgh 2014-05-16 09:23:28 +00:00 committed by James Greenhalgh
parent b292109f9e
commit fb620c4a9a
2 changed files with 38 additions and 0 deletions

View File

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

View File

@ -5724,6 +5724,39 @@ cost_plus:
}
return false;
case TRUNCATE:
/* Decompose <su>muldi3_highpart. */
if (/* (truncate:DI */
mode == DImode
/* (lshiftrt:TI */
&& GET_MODE (XEXP (x, 0)) == TImode
&& GET_CODE (XEXP (x, 0)) == LSHIFTRT
/* (mult:TI */
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT
/* (ANY_EXTEND:TI (reg:DI))
(ANY_EXTEND:TI (reg:DI))) */
&& ((GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == ZERO_EXTEND
&& GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)) == ZERO_EXTEND)
|| (GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == SIGN_EXTEND
&& GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)) == SIGN_EXTEND))
&& GET_MODE (XEXP (XEXP (XEXP (XEXP (x, 0), 0), 0), 0)) == DImode
&& GET_MODE (XEXP (XEXP (XEXP (XEXP (x, 0), 0), 1), 0)) == DImode
/* (const_int 64) */
&& CONST_INT_P (XEXP (XEXP (x, 0), 1))
&& UINTVAL (XEXP (XEXP (x, 0), 1)) == 64)
{
/* UMULH/SMULH. */
if (speed)
*cost += extra_cost->mult[mode == DImode].extend;
*cost += rtx_cost (XEXP (XEXP (XEXP (XEXP (x, 0), 0), 0), 0),
MULT, 0, speed);
*cost += rtx_cost (XEXP (XEXP (XEXP (XEXP (x, 0), 0), 1), 0),
MULT, 1, speed);
return true;
}
/* Fall through. */
default:
break;
}