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

Reply via email to