From: Richard Henderson Date: Fri, 31 Jan 2003 06:53:07 +0000 (-0800) Subject: * expr.c (store_expr): Promote all MEM intermediates to regs. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7abec5bec95f2ef1222f269036b5f47f865c196c;p=gcc.git * expr.c (store_expr): Promote all MEM intermediates to regs. From-SVN: r62173 --- diff --git a/gcc/expr.c b/gcc/expr.c index 99f38987f6a..8d1fd4d4d1d 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4398,12 +4398,12 @@ store_expr (exp, target, want_value) 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 - it contains TARGET. */ - if (GET_CODE (temp) == MEM && want_value - && (MEM_VOLATILE_P (temp) - || reg_mentioned_p (SUBREG_REG (target), XEXP (temp, 0)))) + /* If TEMP is a MEM and we want a result value, make the access + now so it gets done only once. Strictly speaking, this is + only necessary if the MEM is volatile, or if the address + overlaps TARGET. But not performing the load twice also + reduces the amount of rtl we generate and then have to CSE. */ + if (GET_CODE (temp) == MEM && want_value) temp = copy_to_reg (temp); /* If TEMP is a VOIDmode constant, use convert_modes to make