On Wed, Aug 27, 2014 at 12:25:14PM +0200, Uros Bizjak wrote: > Something like following (untested) patch that also fixes the testcase > perhaps? > > -- cut here-- > Index: cfgexpand.c > =================================================================== > --- cfgexpand.c (revision 214445) > +++ cfgexpand.c (working copy) > @@ -3322,6 +3322,7 @@ expand_gimple_stmt_1 (gimple stmt) > > if ((SUBREG_PROMOTED_GET (target) == SRP_SIGNED_AND_UNSIGNED) > && (GET_CODE (temp) == SUBREG) > + && SUBREG_PROMOTED_VAR_P (temp) > && (GET_MODE (target) == GET_MODE (temp)) > && (GET_MODE (SUBREG_REG (target)) == GET_MODE > (SUBREG_REG (temp))))
Looks like a wrong order of the predicates in any case, first you should check if it is a SUBREG, then SUBREG_PROMOTED_VAR_P and only then SUBREG_PROMOTED_GET. Also, the extra ()s around single line conditions are unnecessary. > emit_move_insn (SUBREG_REG (target), SUBREG_REG (temp)); > -- cut here > > Uros. Jakub