From 77e6d08c45e139979e1041843d327d6f0b4cf454 Mon Sep 17 00:00:00 2001 From: yroux Date: Mon, 6 Oct 2014 13:03:24 +0000 Subject: [PATCH] 2014-10-06 Yvan Roux Backport from trunk r215205. 2014-09-12 Wilco Dijkstra * gcc/ree.c (combine_reaching_defs): Ensure inserted copy don't change the number of hard registers. git-svn-id: svn://gcc.gnu.org/svn/gcc/branches/linaro/gcc-4_9-branch@215935 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog.linaro | 8 ++++++++ gcc/ree.c | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog.linaro b/gcc/ChangeLog.linaro index 1204659..0f96c80 100644 --- a/gcc/ChangeLog.linaro +++ b/gcc/ChangeLog.linaro @@ -1,5 +1,13 @@ 2014-10-06 Yvan Roux + Backport from trunk r215205. + 2014-09-12 Wilco Dijkstra + + * gcc/ree.c (combine_reaching_defs): Ensure inserted copy don't change + the number of hard registers. + +2014-10-06 Yvan Roux + Backport from trunk r215136. 2014-09-10 Xinliang David Li diff --git a/gcc/ree.c b/gcc/ree.c index 0d5090b..bdb47af 100644 --- a/gcc/ree.c +++ b/gcc/ree.c @@ -746,6 +746,14 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) if (!SCALAR_INT_MODE_P (GET_MODE (SET_DEST (PATTERN (cand->insn))))) return false; + enum machine_mode dst_mode = GET_MODE (SET_DEST (PATTERN (cand->insn))); + rtx src_reg = get_extended_src_reg (SET_SRC (PATTERN (cand->insn))); + + /* Ensure the number of hard registers of the copy match. */ + if (HARD_REGNO_NREGS (REGNO (src_reg), dst_mode) + != HARD_REGNO_NREGS (REGNO (src_reg), GET_MODE (src_reg))) + return false; + /* There's only one reaching def. */ rtx def_insn = state->defs_list[0]; @@ -795,7 +803,7 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) start_sequence (); rtx pat = PATTERN (cand->insn); rtx new_dst = gen_rtx_REG (GET_MODE (SET_DEST (pat)), - REGNO (XEXP (SET_SRC (pat), 0))); + REGNO (get_extended_src_reg (SET_SRC (pat)))); rtx new_src = gen_rtx_REG (GET_MODE (SET_DEST (pat)), REGNO (SET_DEST (pat))); emit_move_insn (new_dst, new_src); -- 2.7.4