function.h (regno_reg_rtx): Adjust comment.
authorRichard Sandiford <rdsandiford@googlemail.com>
Tue, 31 Jan 2012 19:11:00 +0000 (19:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 31 Jan 2012 19:11:00 +0000 (19:11 +0000)
gcc/
* function.h (regno_reg_rtx): Adjust comment.
* reginfo.c (init_reg_modes_target): Only use the previous mode
if it fits within one register.  Remove MIPS comment.

From-SVN: r183773

gcc/ChangeLog
gcc/function.h
gcc/reginfo.c

index 64ec003..ef9fb3d 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-31  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * function.h (regno_reg_rtx): Adjust comment.
+       * reginfo.c (init_reg_modes_target): Only use the previous mode
+       if it fits within one register.  Remove MIPS comment.
+
 2012-01-31  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/52058
index ce67add..5aaba74 100644 (file)
@@ -87,10 +87,13 @@ struct GTY(()) emit_status {
 };
 
 
-/* Indexed by pseudo register number, gives the rtx for that pseudo.
-   Allocated in parallel with regno_pointer_align.
-   FIXME: We could put it into emit_status struct, but gengtype is not able to deal
-   with length attribute nested in top level structures.  */
+/* Indexed by register number, gives an rtx for that register (and only
+   that register).  For pseudo registers, it is the unique rtx for
+   that pseudo.  For hard registers, it is an rtx of the mode specified
+   by reg_raw_mode.
+
+   FIXME: We could put it into emit_status struct, but gengtype is not
+   able to deal with length attribute nested in top level structures.  */
 
 extern GTY ((length ("crtl->emit.x_reg_rtx_no"))) rtx * regno_reg_rtx;
 
index f6f91a9..6353126 100644 (file)
@@ -615,13 +615,15 @@ init_reg_modes_target (void)
     {
       reg_raw_mode[i] = choose_hard_reg_mode (i, 1, false);
 
-      /* If we couldn't find a valid mode, just use the previous mode.
-         ??? One situation in which we need to do this is on the mips where
-        HARD_REGNO_NREGS (fpreg, [SD]Fmode) returns 2.  Ideally we'd like
-        to use DF mode for the even registers and VOIDmode for the odd
-        (for the cpu models where the odd ones are inaccessible).  */
+      /* If we couldn't find a valid mode, just use the previous mode
+        if it is suitable, otherwise fall back on word_mode.  */
       if (reg_raw_mode[i] == VOIDmode)
-       reg_raw_mode[i] = i == 0 ? word_mode : reg_raw_mode[i-1];
+       {
+         if (i > 0 && hard_regno_nregs[i][reg_raw_mode[i - 1]] == 1)
+           reg_raw_mode[i] = reg_raw_mode[i - 1];
+         else
+           reg_raw_mode[i] = word_mode;
+       }
     }
 }