On Thu, Jun 26, 2014 at 12:12:03PM +0200, Jakub Jelinek wrote:
> > @@ -5234,14 +5235,14 @@ store_expr (tree exp, rtx target, int call_param_p,
> > bool nontemporal)
> > if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode)
> > {
> > temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)),
> > - temp, SUBREG_PROMOTED_UNSIGNED_P (target));
> > + temp, SUBREG_PROMOTED_GET (target) &
> > SRP_UNSIGNED);
> > temp = convert_modes (GET_MODE (SUBREG_REG (target)),
> > GET_MODE (target), temp,
> > - SUBREG_PROMOTED_UNSIGNED_P (target));
> > + SUBREG_PROMOTED_GET (target) & SRP_UNSIGNED);
> > }
> >
> > convert_move (SUBREG_REG (target), temp,
> > - SUBREG_PROMOTED_UNSIGNED_P (target));
> > + SUBREG_PROMOTED_GET (target) & SRP_UNSIGNED);
>
> In all 3 cases here you want -1/0/1 and treat SRP_SIGNED_AND_UNSIGNED as
> probably 1, so supposedly you want a macro for that and use it
> in the 3 cases here, in expand_gimple_stmt_1 etc.
That macro (not sure about best name for it), which would for
SUBREG_PROMOTED_GET -1, 0, 1, 2 return -1, 0, 1, 1 could be defined e.g. as
((RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_GET", (RTX), SUBREG)->volatil) ? 1
\
: (RTX)->unchanging - 1)
Jakub