aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-07-11 17:19:53 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-07-11 17:19:53 +0000
commit12b308fa865bb6ac7f30671e332ec17926556da4 (patch)
treef05fee7db1568b00a571bc955c30ea0841f20b45 /gcc/lra-constraints.c
parentd5313205efe7b750614a237fca070f2479787c0b (diff)
downloadgcc-12b308fa865bb6ac7f30671e332ec17926556da4.zip
gcc-12b308fa865bb6ac7f30671e332ec17926556da4.tar.gz
gcc-12b308fa865bb6ac7f30671e332ec17926556da4.tar.bz2
lra-constraints.c (remove_inheritance_pseudos): Process destination pseudo too.
2014-07-11 Vladimir Makarov <vmakarov@redhat.com> * lra-constraints.c (remove_inheritance_pseudos): Process destination pseudo too. From-SVN: r212464
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index baed7e7..a43f8dc 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -5697,6 +5697,20 @@ remove_inheritance_pseudos (bitmap remove_pseudos)
SUBREG_REG (SET_SRC (set)) = SET_SRC (prev_set);
else
SET_SRC (set) = SET_SRC (prev_set);
+ /* As we are finishing with processing the insn
+ here, check the destination too as it might
+ inheritance pseudo for another pseudo. */
+ if (bitmap_bit_p (remove_pseudos, dregno)
+ && bitmap_bit_p (&lra_inheritance_pseudos, dregno)
+ && (restore_regno
+ = lra_reg_info[dregno].restore_regno) >= 0)
+ {
+ if (GET_CODE (SET_DEST (set)) == SUBREG)
+ SUBREG_REG (SET_DEST (set))
+ = regno_reg_rtx[restore_regno];
+ else
+ SET_DEST (set) = regno_reg_rtx[restore_regno];
+ }
lra_push_insn_and_update_insn_regno_info (curr_insn);
lra_set_used_insn_alternative_by_uid
(INSN_UID (curr_insn), -1);