reload.c (find_equiv_reg): When checking for register overlap, don't index hard_regno...
authorGeoffrey Keating <geoffk@apple.com>
Wed, 4 Feb 2004 23:58:11 +0000 (23:58 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Wed, 4 Feb 2004 23:58:11 +0000 (23:58 +0000)
* reload.c (find_equiv_reg): When checking for register overlap,
don't index hard_regno_nregs with a pseudo-reg.

From-SVN: r77278

gcc/ChangeLog
gcc/reload.c

index 03b8b699bf514a6e1f9fe500e771a34bd1b91566..848a04e945ce4423aef47bedc44bdf1d42eb2396 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-04  Geoffrey Keating  <geoffk@apple.com>
+
+       * reload.c (find_equiv_reg): When checking for register overlap,
+       don't index hard_regno_nregs with a pseudo-reg.
+
 2004-02-04  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config/s390/s390.c (s390_trampoline_template): Remove gen_rtx().
index ea5b6f50f949b95674b49146f538febd4372d803..ae123cffdcabcd43f6ddbdcf7b7f9d294fa3d236 100644 (file)
@@ -6587,17 +6587,16 @@ find_equiv_reg (rtx goal, rtx insn, enum reg_class class, int other,
 
   /* Reject registers that overlap GOAL.  */
 
-  if (!goal_mem && !goal_const
-      && regno + (int) hard_regno_nregs[regno][mode] > valueno
-      && regno < valueno + (int) hard_regno_nregs[valueno][mode])
-    return 0;
-
   if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER)
     nregs = hard_regno_nregs[regno][mode];
   else
     nregs = 1;
   valuenregs = hard_regno_nregs[valueno][mode];
 
+  if (!goal_mem && !goal_const
+      && regno + nregs > valueno && regno < valueno + valuenregs)
+    return 0;
+
   /* Reject VALUE if it is one of the regs reserved for reloads.
      Reload1 knows how to reuse them anyway, and it would get
      confused if we allocated one without its knowledge.