PR rtl-optimization/46603
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Oct 2011 18:19:54 +0000 (18:19 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Oct 2011 18:19:54 +0000 (18:19 +0000)
PR bootstrap/50879
* reload.c (push_reload): In the out case, restore previous behavior
for subregs that don't have word mode.

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

gcc/ChangeLog
gcc/reload.c

index 1672de9..297192b 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-27  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR rtl-optimization/46603
+       PR bootstrap/50879
+       * reload.c (push_reload): In the out case, restore previous behavior
+       for subregs that don't have word mode.
+
 2011-10-27  Ian Lance Taylor  <iant@google.com>
 
        * cppdefault.c: Undef NATIVE_SYSTEM_HEADER_DIR if
index 307bc3a..7dbc163 100644 (file)
@@ -1140,6 +1140,14 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
                           / UNITS_PER_WORD)))
 #endif
                  ))
+         || (REG_P (SUBREG_REG (out))
+             && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
+             /* The case of a word mode subreg
+                is handled differently in the following statement.  */
+             && ! (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
+                   && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
+                       > UNITS_PER_WORD))
+             && ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode))
          || (secondary_reload_class (0, rclass, outmode, out) != NO_REGS
              && (secondary_reload_class (0, rclass, GET_MODE (SUBREG_REG (out)),
                                          SUBREG_REG (out))