From f29369b9f2b1d1d7bc55ba044076860b7a636231 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 29 Sep 1995 07:47:40 -0400 Subject: [PATCH] (store_expr): When storing promoted value, don't return MEM if address contains target. From-SVN: r10414 --- gcc/expr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index 998303a94eee..a1fda985b78f 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -2785,8 +2785,11 @@ store_expr (exp, target, want_value) temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); /* If TEMP is a volatile MEM and we want a result value, make - the access now so it gets done only once. */ - if (GET_CODE (temp) == MEM && MEM_VOLATILE_P (temp) && want_value) + 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)))) temp = copy_to_reg (temp); /* If TEMP is a VOIDmode constant, use convert_modes to make -- 2.43.5