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:
parent
b5c15deb09
commit
b838974e2b
14
gcc/reload.c
14
gcc/reload.c
@ -1360,8 +1360,18 @@ push_reload (in, out, inloc, outloc, class,
|
|||||||
are identical in content, there might be duplicate address
|
are identical in content, there might be duplicate address
|
||||||
reloads. Remove the extra set now, so that if we later find
|
reloads. Remove the extra set now, so that if we later find
|
||||||
that we can inherit this reload, we can get rid of the
|
that we can inherit this reload, we can get rid of the
|
||||||
address reloads altogether. */
|
address reloads altogether.
|
||||||
if (reload_in[i] != in && rtx_equal_p (in, reload_in[i]))
|
|
||||||
|
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
|
/* We must keep the address reload with the lower operand
|
||||||
number alive. */
|
number alive. */
|
||||||
|
Loading…
Reference in New Issue
Block a user