Improve costs for DImode shifts of interger constants.

2020-09-13  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]:
	Provide accurate costs for DImode shifts of integer constants.
This commit is contained in:
John David Anglin 2020-09-13 18:47:59 +00:00
parent 5de41c8862
commit 2fd157813c

View File

@ -1630,13 +1630,16 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
case ASHIFT:
if (mode == DImode)
{
if (TARGET_64BIT)
*total = COSTS_N_INSNS (3);
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
*total = COSTS_N_INSNS (2);
if (TARGET_64BIT)
*total = COSTS_N_INSNS (1);
else
*total = COSTS_N_INSNS (2);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (3);
else if (speed)
*total = COSTS_N_INSNS (13);
else
@ -1661,13 +1664,16 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
case ASHIFTRT:
if (mode == DImode)
{
if (TARGET_64BIT)
*total = COSTS_N_INSNS (3);
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
*total = COSTS_N_INSNS (2);
if (TARGET_64BIT)
*total = COSTS_N_INSNS (1);
else
*total = COSTS_N_INSNS (2);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (3);
else if (speed)
*total = COSTS_N_INSNS (14);
else
@ -1692,13 +1698,16 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
case LSHIFTRT:
if (mode == DImode)
{
if (TARGET_64BIT)
*total = COSTS_N_INSNS (2);
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
*total = COSTS_N_INSNS (2);
if (TARGET_64BIT)
*total = COSTS_N_INSNS (1);
else
*total = COSTS_N_INSNS (2);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (2);
else if (speed)
*total = COSTS_N_INSNS (12);
else