aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2018-02-12 11:32:18 -0700
committerJeff Law <law@gcc.gnu.org>2018-02-12 11:32:18 -0700
commit966a140df68bf3e2d378fb9b68a8afb7d80b34d6 (patch)
treee89189e2c2395ff1659a47d1c39d4c44e3aea9be /gcc/cse.c
parentfa2faaa80708b671806849a40bcabff3eb5a1a1e (diff)
downloadgcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.zip
gcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.tar.gz
gcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.tar.bz2
cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when successfully back substituting a reg.
* cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when successfully back substituting a reg. * gcc.c-torture/compile/reg-args-size.c: New test. From-SVN: r257598
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 825b0bd..a73a771 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4256,6 +4256,15 @@ try_back_substitute_reg (rtx set, rtx_insn *insn)
&& (reg_mentioned_p (dest, XEXP (note, 0))
|| rtx_equal_p (src, XEXP (note, 0))))
remove_note (insn, note);
+
+ /* If INSN has a REG_ARGS_SIZE note, move it to PREV. */
+ note = find_reg_note (insn, REG_ARGS_SIZE, NULL_RTX);
+ if (note != 0)
+ {
+ remove_note (insn, note);
+ gcc_assert (!find_reg_note (prev, REG_ARGS_SIZE, NULL_RTX));
+ set_unique_reg_note (prev, REG_ARGS_SIZE, XEXP (note, 0));
+ }
}
}
}