aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2016-08-05 21:31:31 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2016-08-05 21:31:31 +0000
commitb10d44efe5bb64662a55fe74696b8c2ca2d17303 (patch)
tree711ec7aceb96e371bd7b3c1a2aeff512b0f69d87 /gcc/lra-constraints.c
parent9dcd84ec7a7579bb062ef4768810a9d4dc9c3ca2 (diff)
downloadgcc-b10d44efe5bb64662a55fe74696b8c2ca2d17303.zip
gcc-b10d44efe5bb64662a55fe74696b8c2ca2d17303.tar.gz
gcc-b10d44efe5bb64662a55fe74696b8c2ca2d17303.tar.bz2
re PR rtl-optimization/69847 (Spec 2006 403.gcc slows down with -mlra vs. reload on PowerPC)
2016-08-05 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/69847 * lra-constraints.c (process_invariant_for_inheritance): Save pattern instead of src. (remove_inheritance_pseudos): Use the pattern. Add assert. From-SVN: r239180
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 43c05ba..880eee0 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -5475,7 +5475,7 @@ process_invariant_for_inheritance (rtx dst_reg, rtx invariant_rtx)
cl, "invariant inheritance");
bitmap_set_bit (&lra_inheritance_pseudos, REGNO (new_reg));
bitmap_set_bit (&check_only_regs, REGNO (new_reg));
- lra_reg_info[REGNO (new_reg)].restore_rtx = invariant_rtx;
+ lra_reg_info[REGNO (new_reg)].restore_rtx = PATTERN (insn);
start_sequence ();
lra_emit_move (new_reg, dst_reg);
new_insns = get_insns ();
@@ -6343,9 +6343,11 @@ remove_inheritance_pseudos (bitmap remove_pseudos)
start_sequence ();
/* We can not just change the source. It might be
an insn different from the move. */
- lra_emit_move (SET_DEST (set), lra_reg_info[sregno].restore_rtx);
+ emit_insn (lra_reg_info[sregno].restore_rtx);
rtx_insn *new_insns = get_insns ();
end_sequence ();
+ lra_assert (single_set (new_insns) != NULL
+ && SET_DEST (set) == SET_DEST (single_set (new_insns)));
lra_process_new_insns (curr_insn, NULL, new_insns,
"Changing reload<-invariant inheritance");
delete_move_and_clobber (curr_insn, dregno);