PR rtl-optimization/46603
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Oct 2011 22:26:20 +0000 (22:26 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Oct 2011 22:26:20 +0000 (22:26 +0000)
* reload.c (push_reload): In the out case, reload the subreg as well
as the reg if it has word mode.

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

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

index e6c69f2..06f8ca5 100644 (file)
@@ -1,5 +1,11 @@
 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
        suppress debug info for the parent type.
 
index 3ddc13e..5928660 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 2696fb6..673e53a 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 3c04b6d..ab2ed69 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"