aboutsummaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reload.c8
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1672de9..297192b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2011-10-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ 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.
+
2011-10-27 Ian Lance Taylor <iant@google.com>
* cppdefault.c: Undef NATIVE_SYSTEM_HEADER_DIR if
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))