ira-costs: avoid missing base registers in record_address_regs
authorAlexander Monakov <amonakov@ispras.ru>
Tue, 29 Aug 2017 17:34:21 +0000 (20:34 +0300)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Tue, 29 Aug 2017 17:34:21 +0000 (20:34 +0300)
* ira-costs.c (record_address_regs): Handle both operands of PLUS for
MAX_REGS_PER_ADDRESS == 1.

From-SVN: r251418

gcc/ChangeLog
gcc/ira-costs.c

index 3cf1c74b7586f933f9ca31db1d371d05dd1f6e8a..35bd37964fccb95ce73b3cb8a6a9b483ec4fe86b 100644 (file)
@@ -1,3 +1,8 @@
+2017-08-29  Alexander Monakov  <amonakov@ispras.ru>
+
+       * ira-costs.c (record_address_regs): Handle both operands of PLUS for
+       MAX_REGS_PER_ADDRESS == 1.
+
 2017-08-29  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.opt (flag_fentry): Do not init to -1.
index 2cd102a08102b8606c0ed89a5043336ac993c00b..1690e889471fe2186c36e94365e20619324a53b4 100644 (file)
@@ -1138,17 +1138,12 @@ record_address_regs (machine_mode mode, addr_space_t as, rtx x,
        if (code1 == SUBREG)
          arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
 
-       /* If this machine only allows one register per address, it
-          must be in the first operand.  */
-       if (MAX_REGS_PER_ADDRESS == 1)
-         record_address_regs (mode, as, arg0, 0, PLUS, code1, scale);
-
-       /* If index and base registers are the same on this machine,
+       /* If index registers do not appear, or coincide with base registers,
           just record registers in any non-constant operands.  We
           assume here, as well as in the tests below, that all
           addresses are in canonical form.  */
-       else if (INDEX_REG_CLASS
-                == base_reg_class (VOIDmode, as, PLUS, SCRATCH))
+       if (MAX_REGS_PER_ADDRESS == 1
+           || INDEX_REG_CLASS == base_reg_class (VOIDmode, as, PLUS, SCRATCH))
          {
            record_address_regs (mode, as, arg0, context, PLUS, code1, scale);
            if (! CONSTANT_P (arg1))