hppa: Improve hppa_rtx_costs for shifts by constants.
authorRoger Sayle <roger@nextmovesoftware.com>
Wed, 2 Sep 2020 08:30:50 +0000 (09:30 +0100)
committerRoger Sayle <roger@nextmovesoftware.com>
Wed, 2 Sep 2020 08:30:50 +0000 (09:30 +0100)
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.

gcc/config/pa/pa.c

index cb88852..a9223ab 100644 (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