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)
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
......
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