Commit 7abec5be by Richard Henderson

* expr.c (store_expr): Promote all MEM intermediates to regs.

From-SVN: r62173
parent cdd1f01b
...@@ -4398,12 +4398,12 @@ store_expr (exp, target, want_value) ...@@ -4398,12 +4398,12 @@ store_expr (exp, target, want_value)
temp = expand_expr (exp, inner_target, VOIDmode, 0); temp = expand_expr (exp, inner_target, VOIDmode, 0);
/* If TEMP is a volatile MEM and we want a result value, make /* If TEMP is a MEM and we want a result value, make the access
the access now so it gets done only once. Likewise if now so it gets done only once. Strictly speaking, this is
it contains TARGET. */ only necessary if the MEM is volatile, or if the address
if (GET_CODE (temp) == MEM && want_value overlaps TARGET. But not performing the load twice also
&& (MEM_VOLATILE_P (temp) reduces the amount of rtl we generate and then have to CSE. */
|| reg_mentioned_p (SUBREG_REG (target), XEXP (temp, 0)))) if (GET_CODE (temp) == MEM && want_value)
temp = copy_to_reg (temp); temp = copy_to_reg (temp);
/* If TEMP is a VOIDmode constant, use convert_modes to make /* If TEMP is a VOIDmode constant, use convert_modes to make
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment