diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2018-11-21 22:52:06 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2018-11-21 22:52:06 +0100 |
commit | 13986a58e723e4608ce0172d6713a7a9b06a4c30 (patch) | |
tree | d24a7fbca9703267f50c5d9b24a85f07efd06908 /gcc | |
parent | 4fd723f869c976c27d9140e36cd79df49032efc6 (diff) | |
download | gcc-13986a58e723e4608ce0172d6713a7a9b06a4c30.zip gcc-13986a58e723e4608ce0172d6713a7a9b06a4c30.tar.gz gcc-13986a58e723e4608ce0172d6713a7a9b06a4c30.tar.bz2 |
Revert the revert:
2013-10-26 Vladimir Makarov <vmakarov@redhat.com>
Revert:
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
* lra-spills.c (lra_final_code_change): Remove useless move insns.
From-SVN: r266358
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/lra-spills.c | 15 |
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e09cd6..ee5f183 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2018-11-21 Uros Bizjak <ubizjak@gmail.com> + Revert the revert: + 2013-10-26 Vladimir Makarov <vmakarov@redhat.com> + + Revert: + 2013-10-25 Vladimir Makarov <vmakarov@redhat.com> + + * lra-spills.c (lra_final_code_change): Remove useless move insns. + +2018-11-21 Uros Bizjak <ubizjak@gmail.com> + PR middle-end/88129 * function.c (expand_function_end): Do not emit extra blockage insn. diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c index 33caf9f..008d739 100644 --- a/gcc/lra-spills.c +++ b/gcc/lra-spills.c @@ -740,6 +740,7 @@ lra_final_code_change (void) int i, hard_regno; basic_block bb; rtx_insn *insn, *curr; + rtx set; int max_regno = max_reg_num (); for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) @@ -818,5 +819,19 @@ lra_final_code_change (void) } if (insn_change_p) lra_update_operator_dups (id); + + if ((set = single_set (insn)) != NULL + && REG_P (SET_SRC (set)) && REG_P (SET_DEST (set)) + && REGNO (SET_SRC (set)) == REGNO (SET_DEST (set))) + { + /* Remove an useless move insn. IRA can generate move + insns involving pseudos. It is better remove them + earlier to speed up compiler a bit. It is also + better to do it here as they might not pass final RTL + check in LRA, (e.g. insn moving a control register + into itself). */ + lra_invalidate_insn_data (insn); + delete_insn (insn); + } } } |