reload.c (push_reload): Do not call remove_address_replacements when...

p
        * reload.c (push_reload): Do not call remove_address_replacements
        when presented with identical optional reloads.

From-SVN: r27191
This commit is contained in:
Jeff Law 1999-05-26 19:19:12 -06:00
parent b5c15deb09
commit b838974e2b
1 changed files with 12 additions and 2 deletions

View File

@ -1360,8 +1360,18 @@ push_reload (in, out, inloc, outloc, class,
are identical in content, there might be duplicate address
reloads. Remove the extra set now, so that if we later find
that we can inherit this reload, we can get rid of the
address reloads altogether. */
if (reload_in[i] != in && rtx_equal_p (in, reload_in[i]))
address reloads altogether.
Do not do this if both reloads are optional since the result
would be an optional reload which could potentially leave
unresolved address replacements.
It is not sufficient to call transfer_replacements since
choose_reload_regs will remove the replacements for address
reloads of inherited reloads which results in the same
problem. */
if (reload_in[i] != in && rtx_equal_p (in, reload_in[i])
&& ! (reload_optional[i] && optional))
{
/* We must keep the address reload with the lower operand
number alive. */