[backport from gcc-4.7/trunk, PR46603 fix part 3 of 3 ] gcc/ 2011-10-27 Eric Botcazou 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. --- gcc-4.6.2/gcc/reload.c.~1~ 2011-11-05 13:14:59.000000000 +0100 +++ gcc-4.6.2/gcc/reload.c 2011-11-05 13:18:31.000000000 +0100 @@ -1136,6 +1136,14 @@ push_reload (rtx in, rtx out, rtx *inloc / 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))