]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jan 2012 19:11:00 +0000 (19:11 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jan 2012 19:11:00 +0000 (19:11 +0000)
* 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.

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

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

index 64ec00307f4523b5e8c335c3bb5e0389f637af04..ef9fb3db228deaffc2876b94a7396993765c2833 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 ce67add274875d29b63b53575c09ffc04fc3a13d..5aaba74dc0baec5c38505f6140d88be27afb80a4 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 f6f91a9975b61a462869ad8b4bb089f38b4106c7..635312655bcd0d95da19cfd8d86044518f44b09f 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;
+       }
     }
 }