]> gcc.gnu.org Git - gcc.git/commitdiff
struct-equiv.c (note_local_live): Handle hard regs with different hard_regno_nregs.
authorJ"orn Rennecke <joern.rennecke@st.com>
Wed, 14 Dec 2005 16:36:29 +0000 (16:36 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Wed, 14 Dec 2005 16:36:29 +0000 (16:36 +0000)
* struct-equiv.c (note_local_live): Handle hard regs with different
hard_regno_nregs.

From-SVN: r108520

gcc/ChangeLog
gcc/struct-equiv.c

index 1051c70e7e0439c2f2c30bec92b006a0437ac1cb..62be1623c165e062dbca7dc05b1bb9578581a1d1 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-14  J"orn Rennecke <joern.rennecke@st.com>
+
+       * struct-equiv.c (note_local_live): Handle hard regs with different
+       hard_regno_nregs.
+
 2005-12-14  Jeff Law  <law@redhat.com>
 
        * tree-ssa-ccp.c (fold_stmt_r): DATA argument is now a pointer
index fc563b64fe7d38c5d231dc51b098b805c505d218..0bee722959c05bbcbd60f939b0fc4b22748d7559 100644 (file)
@@ -309,10 +309,17 @@ struct_equiv_restore_checkpoint (struct struct_equiv_checkpoint *p,
 static int
 note_local_live (struct equiv_info *info, rtx x, rtx y, int rvalue)
 {
+  unsigned x_regno = REGNO (x);
+  unsigned y_regno = REGNO (y);
+  int x_nominal_nregs = (x_regno >= FIRST_PSEUDO_REGISTER
+                        ? 1 : hard_regno_nregs[x_regno][GET_MODE (x)]);
+  int y_nominal_nregs = (y_regno >= FIRST_PSEUDO_REGISTER
+                        ? 1 : hard_regno_nregs[y_regno][GET_MODE (y)]);
   int x_change = assign_reg_reg_set (info->x_local_live, x, rvalue);
   int y_change = assign_reg_reg_set (info->y_local_live, y, rvalue);
 
-  gcc_assert (x_change == y_change);
+  gcc_assert (x_nominal_nregs && y_nominal_nregs);
+  gcc_assert (x_change * y_nominal_nregs == y_change * x_nominal_nregs);
   if (y_change)
     {
       if (reload_completed)
This page took 0.08034 seconds and 5 git commands to generate.