aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2018-11-21 22:52:06 +0100
committerUros Bizjak <uros@gcc.gnu.org>2018-11-21 22:52:06 +0100
commit13986a58e723e4608ce0172d6713a7a9b06a4c30 (patch)
treed24a7fbca9703267f50c5d9b24a85f07efd06908 /gcc
parent4fd723f869c976c27d9140e36cd79df49032efc6 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/lra-spills.c15
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);
+ }
}
}