diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2014-09-12 09:29:16 +0000 |
---|---|---|
committer | Jiong Wang <jiwang@gcc.gnu.org> | 2014-09-12 09:29:16 +0000 |
commit | e533e26c0afe3a117418acc65ccaae536f59f105 (patch) | |
tree | 7d0f63c269288ae9656953b28230f8b047a3d065 /gcc | |
parent | 6ead0238de25faf67f38a61ac5cacde8125d9fa2 (diff) | |
download | gcc-e533e26c0afe3a117418acc65ccaae536f59f105.zip gcc-e533e26c0afe3a117418acc65ccaae536f59f105.tar.gz gcc-e533e26c0afe3a117418acc65ccaae536f59f105.tar.bz2 |
[Ree] Ensure inserted copy don't change the number of hard registers
2014-09-12 Wilco Dijkstra <wilco.dijkstra@arm.com>
gcc/
* ree.c (combine_reaching_defs): Ensure inserted copy don't change the
number of hard registers.
From-SVN: r215205
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ree.c | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b70dd5..4d43c39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-09-12 Wilco Dijkstra <wilco.dijkstra@arm.com> + + * gcc/ree.c (combine_reaching_defs): Ensure inserted copy don't change + the number of hard registers. + 2014-09-12 Alexander Ivchenko <alexander.ivchenko@intel.com> Maxim Kuznetsov <maxim.kuznetsov@intel.com> Anna Tikhonova <anna.tikhonova@intel.com> @@ -743,6 +743,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_insn *def_insn = state->defs_list[0]; @@ -792,7 +800,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); |