From 7abec5bec95f2ef1222f269036b5f47f865c196c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 30 Jan 2003 22:53:07 -0800 Subject: [PATCH] * expr.c (store_expr): Promote all MEM intermediates to regs. From-SVN: r62173 --- gcc/expr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 -- 2.30.2