(store_expr): When storing promoted value, don't return MEM if address
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 29 Sep 1995 11:47:40 +0000 (07:47 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 29 Sep 1995 11:47:40 +0000 (07:47 -0400)
contains target.

From-SVN: r10414

gcc/expr.c

index 998303a94eeecac5e1571fb171e08fe48e5f42c4..a1fda985b78fa42190a1d1c199dfbb51b3fb9b64 100644 (file)
@@ -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