diff options
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index b5c0c18..66215a6 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -4293,26 +4293,25 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, if (CALL_P (i3) && CALL_INSN_FUNCTION_USAGE (i3)) { - rtx call_usage = CALL_INSN_FUNCTION_USAGE (i3); - - reset_used_flags (call_usage); - call_usage = copy_rtx (call_usage); - - if (substed_i2) + for (rtx link = CALL_INSN_FUNCTION_USAGE (i3); link; + link = XEXP (link, 1)) { - /* I2SRC must still be meaningful at this point. Some splitting - operations can invalidate I2SRC, but those operations do not - apply to calls. */ - gcc_assert (i2src); - replace_rtx (call_usage, i2dest, i2src); + if (substed_i2) + { + /* I2SRC must still be meaningful at this point. Some + splitting operations can invalidate I2SRC, but those + operations do not apply to calls. */ + gcc_assert (i2src); + XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0), + i2dest, i2src); + } + if (substed_i1) + XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0), + i1dest, i1src); + if (substed_i0) + XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0), + i0dest, i0src); } - - if (substed_i1) - replace_rtx (call_usage, i1dest, i1src); - if (substed_i0) - replace_rtx (call_usage, i0dest, i0src); - - CALL_INSN_FUNCTION_USAGE (i3) = call_usage; } if (undobuf.other_insn) |