diff options
author | Alan Hayward <alan.hayward@arm.com> | 2018-08-06 09:51:01 +0000 |
---|---|---|
committer | Alan Hayward <alahay01@gcc.gnu.org> | 2018-08-06 09:51:01 +0000 |
commit | 30dc1902a777966dc1d1dad0fb5f19b7a960e5ca (patch) | |
tree | 72e457f4dfa5196e0fff6049463f9962e1b6b92b /gcc/lra-eliminations.c | |
parent | 6a7fa0c213063683b2011c735bbf78ee8185fbfd (diff) | |
download | gcc-30dc1902a777966dc1d1dad0fb5f19b7a960e5ca.zip gcc-30dc1902a777966dc1d1dad0fb5f19b7a960e5ca.tar.gz gcc-30dc1902a777966dc1d1dad0fb5f19b7a960e5ca.tar.bz2 |
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
Diffstat (limited to 'gcc/lra-eliminations.c')
-rw-r--r-- | gcc/lra-eliminations.c | 11 |
1 files changed, 11 insertions, 0 deletions
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 |