From b838974e2be37920f0711e280d29bc61e508980c Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 26 May 1999 19:19:12 -0600 Subject: [PATCH] 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 --- gcc/reload.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/reload.c b/gcc/reload.c index a68f2efa661..011f89955c6 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -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. */