diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2011-10-27 18:19:54 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2011-10-27 18:19:54 +0000 |
commit | 2286a26f57ccfc760cc1582effeda293aae4ec00 (patch) | |
tree | 6b66cc38664e4bc7b4012fcfac787bd432077dd7 /gcc/reload.c | |
parent | 859ed2a79ee502dcc986be3e18f66462a6577cb0 (diff) | |
download | gcc-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.c | 8 |
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)) |