diff options
author | Richard Henderson <rth@gcc.gnu.org> | 2003-01-30 22:53:07 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-01-30 22:53:07 -0800 |
commit | 7abec5bec95f2ef1222f269036b5f47f865c196c (patch) | |
tree | 99e6ba7364dd8f5dd30f4ec7cfe162ed473a75a2 | |
parent | cdd1f01b226e72952c62b46cabd487e930b1cd8f (diff) | |
download | gcc-7abec5bec95f2ef1222f269036b5f47f865c196c.zip gcc-7abec5bec95f2ef1222f269036b5f47f865c196c.tar.gz gcc-7abec5bec95f2ef1222f269036b5f47f865c196c.tar.bz2 |
* expr.c (store_expr): Promote all MEM intermediates to regs.
From-SVN: r62173
-rw-r--r-- | gcc/expr.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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 |