RISC-V: Fix build errors with shNadd/shNadd.uw patterns in zba cost model
authorMaciej W. Rozycki <macro@embecosm.com>
Tue, 2 Nov 2021 16:05:00 +0000 (16:05 +0000)
committerMaciej W. Rozycki <macro@embecosm.com>
Tue, 2 Nov 2021 16:05:00 +0000 (16:05 +0000)
Fix a build regression from commit 04a9b554ba1a ("RISC-V: Cost model
for zba extension."):

.../gcc/config/riscv/riscv.c: In function 'bool riscv_rtx_costs(rtx, machine_mode, int, int, int*, bool)':
.../gcc/config/riscv/riscv.c:2018:11: error: 'and' of mutually exclusive equal-tests is always 0 [-Werror]
 2018 |           && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 0)), 1, 3))
      |           ^~
.../gcc/config/riscv/riscv.c:2047:17: error: unused variable 'ashift_lhs' [-Werror=unused-variable]
 2047 |             rtx ashift_lhs = XEXP (and_lhs, 0);
      |                 ^~~~~~~~~~

by correcting a CONST_INT_P check referring the wrong operand and
getting rid of the unused variable.

gcc/
* config/riscv/riscv.c (riscv_rtx_costs): Correct a CONST_INT_P
check and remove an unused local variable with shNadd/shNadd.uw
pattern handling.

gcc/config/riscv/riscv.c

index 6aef3d3..5387bfc 100644 (file)
@@ -2014,8 +2014,8 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
              (TARGET_64BIT && (mode == DImode)))
          && (GET_CODE (XEXP (x, 0)) == ASHIFT)
          && REG_P (XEXP (XEXP (x, 0), 0))
-         && CONST_INT_P (XEXP (XEXP (x, 0), 0))
-         && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 0)), 1, 3))
+         && CONST_INT_P (XEXP (XEXP (x, 0), 1))
+         && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 1)), 1, 3))
        {
          *total = COSTS_N_INSNS (1);
          return true;
@@ -2044,7 +2044,6 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
            if (!CONST_INT_P (and_rhs))
              break;
 
-           rtx ashift_lhs = XEXP (and_lhs, 0);
            rtx ashift_rhs = XEXP (and_lhs, 1);
 
            if (!CONST_INT_P (ashift_rhs)