From 30dc1902a777966dc1d1dad0fb5f19b7a960e5ca Mon Sep 17 00:00:00 2001 From: Alan Hayward Date: Mon, 6 Aug 2018 09:51:01 +0000 Subject: lra support for clobber_high gcc/ * lra-eliminations.c (lra_eliminate_regs_1): Check for clobber high. (mark_not_eliminable): Likewise. * lra-int.h (struct lra_insn_reg): Add clobber high marker. * lra-lives.c (process_bb_lives): Check for clobber high. * lra.c (new_insn_reg): Remember clobber highs. (collect_non_operand_hard_regs): Check for clobber high. (lra_set_insn_recog_data): Likewise. (add_regs_to_insn_regno_info): Likewise. (lra_update_insn_regno_info): Likewise. From-SVN: r263329 --- gcc/lra-eliminations.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'gcc/lra-eliminations.c') diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c index f5f1040..d0cfaa8 100644 --- a/gcc/lra-eliminations.c +++ b/gcc/lra-eliminations.c @@ -654,6 +654,7 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode, return x; case CLOBBER: + case CLOBBER_HIGH: case SET: gcc_unreachable (); @@ -806,6 +807,16 @@ mark_not_eliminable (rtx x, machine_mode mem_mode) setup_can_eliminate (ep, false); return; + case CLOBBER_HIGH: + gcc_assert (REG_P (XEXP (x, 0))); + gcc_assert (REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER); + for (ep = reg_eliminate; + ep < ®_eliminate[NUM_ELIMINABLE_REGS]; + ep++) + if (reg_is_clobbered_by_clobber_high (ep->to_rtx, XEXP (x, 0))) + setup_can_eliminate (ep, false); + return; + case SET: if (SET_DEST (x) == stack_pointer_rtx && GET_CODE (SET_SRC (x)) == PLUS -- cgit v1.1