Message ID | CAFULd4at+CWZ_s-CKCg7o_dA7BdqC6db1fRGuKmtvpYnjQVzgg@mail.gmail.com |
---|---|
State | New |
Headers | show |
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
On Mon, Sep 1, 2014 at 10:47 AM, Jakub Jelinek <jakub@redhat.com> wrote: > 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. This comment applies to the original code, not the patched line, I guess. Uros.
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))))