Commit f3f2255a by J"orn Rennecke Committed by Joern Rennecke

expr.c (store_expr): Don't generate load-store pair if TEMP is identical…

expr.c (store_expr): Don't generate load-store pair if TEMP is identical (according to ==) with TARGET.

	* expr.c (store_expr): Don't generate load-store pair
	if TEMP is identical (according to ==) with TARGET.

From-SVN: r23696
parent 59e76fc6
Wed Nov 18 22:13:00 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* expr.c (store_expr): Don't generate load-store pair
if TEMP is identical (according to ==) with TARGET.
Tue Nov 17 22:25:16 1998 J"orn Rennecke <amylaar@cygnus.co.uk> Tue Nov 17 22:25:16 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload1.c (reload_reg_free_for_value_p): When considered reload * reload1.c (reload_reg_free_for_value_p): When considered reload
......
...@@ -3676,10 +3676,21 @@ store_expr (exp, target, want_value) ...@@ -3676,10 +3676,21 @@ store_expr (exp, target, want_value)
/* If value was not generated in the target, store it there. /* If value was not generated in the target, store it there.
Convert the value to TARGET's type first if nec. */ Convert the value to TARGET's type first if nec. */
/* If TEMP and TARGET compare equal according to rtx_equal_p, but
one or both of them are volatile memory refs, we have to distinguish
two cases:
- expand_expr has used TARGET. In this case, we must not generate
another copy. This can be detected by TARGET being equal according
to == .
- expand_expr has not used TARGET - that means that the source just
happens to have the same RTX form. Since temp will have been created
by expand_expr, it will compare unequal according to == .
We must generate a copy in this case, to reach the correct number
of volatile memory references. */
if ((! rtx_equal_p (temp, target) if ((! rtx_equal_p (temp, target)
|| side_effects_p (temp) || (temp != target && (side_effects_p (temp)
|| side_effects_p (target)) || side_effects_p (target))))
&& TREE_CODE (exp) != ERROR_MARK) && TREE_CODE (exp) != ERROR_MARK)
{ {
target = protect_from_queue (target, 1); target = protect_from_queue (target, 1);
......
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