]> 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>
Tue, 25 Oct 2011 22:26:20 +0000 (22:26 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 25 Oct 2011 22:26:20 +0000 (22:26 +0000)
PR rtl-optimization/46603
* reload.c (push_reload): In the out case, reload the subreg as well
as the reg if it has word mode.

From-SVN: r180457

gcc/ChangeLog
gcc/reload.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c

index e6c69f2b65683027068fc69386093f8aeb97311e..06f8ca59da83f987ccd0cb08994b5f057c0f967d 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-25  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR rtl-optimization/46603
+       * reload.c (push_reload): In the out case, reload the subreg as well
+       as the reg if it has word mode.
+
 2011-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
        * dwarf2out.c (add_gnat_descriptive_type_attribute): Temporarily
index 3ddc13e48fc03d13303670e6a42ebb56edfa4238..5928660746ac9d842fe3b201921380b8c423cd09 100644 (file)
@@ -1117,10 +1117,10 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
 
   /* Similarly for paradoxical and problematical SUBREGs on the output.
      Note that there is no reason we need worry about the previous value
-     of SUBREG_REG (out); even if wider than out,
-     storing in a subreg is entitled to clobber it all
-     (except in the case of STRICT_LOW_PART,
-     and in that case the constraint should label it input-output.)  */
+     of SUBREG_REG (out); even if wider than out, storing in a subreg is
+     entitled to clobber it all (except in the case of a word mode subreg
+     or of a STRICT_LOW_PART, in that latter case the constraint should
+     label it input-output.)  */
   if (out != 0 && GET_CODE (out) == SUBREG
       && (subreg_lowpart_p (out) || strict_low)
 #ifdef CANNOT_CHANGE_MODE_CLASS
@@ -1142,16 +1142,6 @@ 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
-             && ((GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
-                  && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-                      > UNITS_PER_WORD)
-                  && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-                       / UNITS_PER_WORD)
-                      != (int) hard_regno_nregs[REGNO (SUBREG_REG (out))]
-                                               [GET_MODE (SUBREG_REG (out))]))
-                 || ! 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))
index 2696fb61874e2df7d4ac08775c02290135841d36..673e53aad321a2ff5e709e3a2bfd946587882fab 100644 (file)
@@ -1,3 +1,7 @@
+2011-10-25  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc.dg/vect/slp-multitypes-2.c: Do not XFAIL on SPARC 32-bit.
+
 2011-10-25  Jason Merrill  <jason@redhat.com>
 
        PR c++/50866
index 3c04b6d21c5c7a56424209bcb9a23f0f3a9b49d2..ab2ed69d4cd511d7644c176ba7f871eae06e9649 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-xfail-run-if "PR rtl-optimization/46603" { sparc*-*-* && { ilp32 && gas } } } */
 
 #include <stdarg.h>
 #include "tree-vect.h"