From 95d17cbf6da07f46e0d2a232bb5d102ed53c1855 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 25 Oct 2011 22:26:20 +0000 Subject: [PATCH] re PR rtl-optimization/46603 (gcc.dg/vect/slp-multitypes-2.c execution failure) 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 | 6 ++++++ gcc/reload.c | 18 ++++-------------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c | 1 - 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e6c69f2b656..06f8ca59da8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-10-25 Eric Botcazou + + 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 * dwarf2out.c (add_gnat_descriptive_type_attribute): Temporarily diff --git a/gcc/reload.c b/gcc/reload.c index 3ddc13e48fc..5928660746a 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2696fb61874..673e53aad32 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-10-25 Eric Botcazou + + * gcc.dg/vect/slp-multitypes-2.c: Do not XFAIL on SPARC 32-bit. + 2011-10-25 Jason Merrill PR c++/50866 diff --git a/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c b/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c index 3c04b6d21c5..ab2ed69d4cd 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c +++ b/gcc/testsuite/gcc.dg/vect/slp-multitypes-2.c @@ -1,5 +1,4 @@ /* { dg-require-effective-target vect_int } */ -/* { dg-xfail-run-if "PR rtl-optimization/46603" { sparc*-*-* && { ilp32 && gas } } } */ #include #include "tree-vect.h" -- 2.30.2