From 6640a5b9e7c6f66a7d0c3de1bf01f24c3b20b692 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Wed, 2 Sep 2020 09:30:50 +0100 Subject: [PATCH] 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 gcc/ChangeLog * config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]: Provide accurate costs for shifts of integer constants. --- gcc/config/pa/pa.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index cb888528765..a9223ab3fe9 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -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 -- 2.30.2