regclass.c (record_reg_classes, case 'p'): Set classes appropriately.
authorJeffrey A Law <law@cygnus.com>
Wed, 24 Feb 1999 13:17:04 +0000 (13:17 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 24 Feb 1999 13:17:04 +0000 (06:17 -0700)
        * regclass.c (record_reg_classes, case 'p'): Set classes appropriately.
        An alternative always fails if it needs a pseudo and no suitable
        register class can be found.
Bootstrapped on solaris.

From-SVN: r25402

gcc/ChangeLog
gcc/regclass.c

index ff439fd..057facc 100644 (file)
@@ -1,3 +1,9 @@
+Wed Feb 24 14:03:54 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * regclass.c (record_reg_classes, case 'p'): Set classes appropriately.
+       An alternative always fails if it needs a pseudo and no suitable
+       register class can be found.
+
 Wed Feb 24 19:47:56 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * loop.h (loop_insn_first_p): Declare.
index 9faf8ab..57be118 100644 (file)
@@ -1268,6 +1268,12 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
              case 'p':
                allows_addr = 1;
                win = address_operand (op, GET_MODE (op));
+               /* We know this operand is an address, so we want it to be
+                  allocated to a register that can be the base of an
+                  address, ie BASE_REG_CLASS.  */
+               classes[i]
+                 = reg_class_subunion[(int) classes[i]]
+                   [(int) BASE_REG_CLASS];
                break;
 
              case 'm':  case 'o':  case 'V':
@@ -1399,7 +1405,12 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
            {
              if (classes[i] == NO_REGS)
                {
-                 if (! allows_addr)
+                   /* We must always fail if the operand is a REG, but
+                      we did not find a suitable class.
+
+                      Otherwise we may perform an uninitialized read
+                      from this_op_costs after the `continue' statement
+                      below.  */
                    alt_fail = 1;
                }
              else