]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/46603 (gcc.dg/vect/slp-multitypes-2.c execution failure)
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 27 Oct 2011 18:19:54 +0000 (18:19 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 27 Oct 2011 18:19:54 +0000 (18:19 +0000)
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.

From-SVN: r180572

gcc/ChangeLog
gcc/reload.c

index 1672de956488795f7a61ab6207207e59e68b9b85..297192bd703b883c35b76babeaf401e282663ada 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 307bc3a91efbf4ce2b6c45065567ff61e5a38a7c..7dbc163da4d117ee156ce6d4840336839fe07aa1 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))