Commit 0d6d7b9a by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/59754 ([ree.c] Incorrect merge while working with vector registers)

	PR rtl-optimization/59754
	* ree.c (combine_reaching_defs): Disallow !SCALAR_INT_MODE_P
	modes in the REGNO != REGNO case.

From-SVN: r206542
parent 110132c1
2014-01-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/59754
* ree.c (combine_reaching_defs): Disallow !SCALAR_INT_MODE_P
modes in the REGNO != REGNO case.
2014-01-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000-builtin.def: Fix pasto for VPKSDUS.
......
......@@ -702,6 +702,18 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
if (state->modified[INSN_UID (cand->insn)].kind != EXT_MODIFIED_NONE)
return false;
/* Transformation of
(set (reg1) (expression))
(set (reg2) (any_extend (reg1)))
into
(set (reg2) (any_extend (expression)))
(set (reg1) (reg2))
is only valid for scalar integral modes, as it relies on the low
subreg of reg1 to have the value of (expression), which is not true
e.g. for vector modes. */
if (!SCALAR_INT_MODE_P (GET_MODE (SET_DEST (PATTERN (cand->insn)))))
return false;
/* There's only one reaching def. */
rtx def_insn = state->defs_list[0];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment