aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2011-10-27 18:19:54 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-10-27 18:19:54 +0000
commit2286a26f57ccfc760cc1582effeda293aae4ec00 (patch)
tree6b66cc38664e4bc7b4012fcfac787bd432077dd7 /gcc/reload.c
parent859ed2a79ee502dcc986be3e18f66462a6577cb0 (diff)
downloadgcc-2286a26f57ccfc760cc1582effeda293aae4ec00.zip
gcc-2286a26f57ccfc760cc1582effeda293aae4ec00.tar.gz
gcc-2286a26f57ccfc760cc1582effeda293aae4ec00.tar.bz2
re PR rtl-optimization/46603 (gcc.dg/vect/slp-multitypes-2.c execution failure)
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
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 307bc3a..7dbc163 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -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))