OSDN Git Service

* reload.c (find_reloads): Also check that all of a multi-reg
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 May 2003 00:53:45 +0000 (00:53 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 May 2003 00:53:45 +0000 (00:53 +0000)
value is in the class.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66366 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reload.c

index 9d3429f..deea69f 100644 (file)
@@ -1,3 +1,8 @@
+2003-05-01  DJ Delorie  <dj@redhat.com>
+
+       * reload.c (find_reloads): Also check that all of a multi-reg
+       value is in the class.
+
 2003-05-01  Nathan Sidwell  <nathan@codesourcery.com>
 
        * scan.h (lineno): Revert the rename here.
index bc3c177..5a82d99 100644 (file)
@@ -4346,7 +4346,17 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
        if (regno < FIRST_PSEUDO_REGISTER
            && TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno)
            && HARD_REGNO_MODE_OK (regno, rld[i].mode))
-         rld[i].reg_rtx = dest;
+         {
+           int nr = HARD_REGNO_NREGS (regno, rld[i].mode);
+           int ok = 1, nri;
+
+           for (nri = 1; nri < nr; nri ++)
+             if (! TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno + nri))
+               ok = 0;
+
+           if (ok)
+             rld[i].reg_rtx = dest;
+         }
       }
 
   return retval;