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