From b76b08ef94598e7fe6ef2ec3550f03c7bb1e1e7f Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 22 Feb 2002 16:18:25 -0500 Subject: expr.c (store_expr): When converting expression to promoted equivalent type... * expr.c (store_expr): When converting expression to promoted equivalent type, allow using SUBREG_REG of TARGET as the target of the expansion of EXP. * loop.c (basic_induction_var, case SUBREG): Always look inside. * config/alpha/alpha.c (rtx_equiv_function_matters): Delete decl. (alpha_emit_set_const): Handle SImode when can't make new pseudos. (alpha_emit_set_const_1, alpha_sa_mask): Use no_new_pseudos. * config/alpha/alpha.md (addsi3, subsi3): Don't use if optimizing. From-SVN: r49972 --- gcc/expr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'gcc/expr.c') diff --git a/gcc/expr.c b/gcc/expr.c index b730435..bcc76bc 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -3989,6 +3989,8 @@ store_expr (exp, target, want_value) and then convert to the wider mode. Our value is the computed expression. */ { + rtx inner_target = 0; + /* If we don't want a value, we can do the conversion inside EXP, which will often result in some optimizations. Do the conversion in two steps: first change the signedness, if needed, then @@ -4009,9 +4011,11 @@ store_expr (exp, target, want_value) exp = convert (type_for_mode (GET_MODE (SUBREG_REG (target)), SUBREG_PROMOTED_UNSIGNED_P (target)), exp); + + inner_target = SUBREG_REG (target); } - temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); + temp = expand_expr (exp, inner_target, VOIDmode, 0); /* If TEMP is a volatile MEM and we want a result value, make the access now so it gets done only once. Likewise if -- cgit v1.1