hppa: Improve hppa_rtx_costs for shifts by constants.

This patch provides more accurate rtx_costs estimates for shifts by
integer constants (which are cheaper than by a register amount).

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

gcc/ChangeLog
	* config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]:
	Provide accurate costs for shifts of integer constants.
This commit is contained in:
Roger Sayle 2020-09-02 09:30:50 +01:00
parent 7047a8bab6
commit 6640a5b9e7

View File

@ -1642,6 +1642,14 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
else
*total = COSTS_N_INSNS (18);
}
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
if (TARGET_64BIT)
*total = COSTS_N_INSNS (2);
else
*total = COSTS_N_INSNS (1);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (4);
else
@ -1665,6 +1673,14 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
else
*total = COSTS_N_INSNS (19);
}
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
if (TARGET_64BIT)
*total = COSTS_N_INSNS (2);
else
*total = COSTS_N_INSNS (1);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (4);
else
@ -1688,6 +1704,11 @@ hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
else
*total = COSTS_N_INSNS (15);
}
else if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1)))
{
*total = COSTS_N_INSNS (1);
return true;
}
else if (TARGET_64BIT)
*total = COSTS_N_INSNS (3);
else