combine.c (try_combine): Don't ignore result of overlap checking loop.

* combine.c (try_combine): Don't ignore result of overlap checking
	loop.  Combine overlap & asm check into single loop.

Co-Authored-By: Nicolai Stange <nicstange@gmail.com>

From-SVN: r244361
This commit is contained in:
Nathan Sidwell 2017-01-12 13:54:43 +00:00 committed by Nathan Sidwell
parent 4bfe4a99e0
commit 0691440320
2 changed files with 21 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2017-01-12 Nathan Sidwell <nathan@acm.org>
Nicolai Stange <nicstange@gmail.com>
* combine.c (try_combine): Don't ignore result of overlap checking
loop. Combine overlap & asm check into single loop.
2017-01-12 Richard Biener <rguenther@suse.de>
* tree-pretty-print.c (dump_generic_node): Provide -gimple

View File

@ -2785,22 +2785,24 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
(Besides, reload can't handle output reloads for this.)
The problem can also happen if the dest of I3 is a memory ref,
if another dest in I2 is an indirect memory ref. */
for (i = 0; i < XVECLEN (p2, 0); i++)
if another dest in I2 is an indirect memory ref.
Neither can this PARALLEL be an asm. We do not allow combining
that usually (see can_combine_p), so do not here either. */
bool ok = true;
for (i = 0; ok && i < XVECLEN (p2, 0); i++)
{
if ((GET_CODE (XVECEXP (p2, 0, i)) == SET
|| GET_CODE (XVECEXP (p2, 0, i)) == CLOBBER)
&& reg_overlap_mentioned_p (SET_DEST (PATTERN (i3)),
SET_DEST (XVECEXP (p2, 0, i))))
break;
/* Make sure this PARALLEL is not an asm. We do not allow combining
that usually (see can_combine_p), so do not here either. */
for (i = 0; i < XVECLEN (p2, 0); i++)
if (GET_CODE (XVECEXP (p2, 0, i)) == SET
ok = false;
else if (GET_CODE (XVECEXP (p2, 0, i)) == SET
&& GET_CODE (SET_SRC (XVECEXP (p2, 0, i))) == ASM_OPERANDS)
break;
ok = false;
}
if (i == XVECLEN (p2, 0))
if (ok)
for (i = 0; i < XVECLEN (p2, 0); i++)
if (GET_CODE (XVECEXP (p2, 0, i)) == SET
&& SET_DEST (XVECEXP (p2, 0, i)) == SET_SRC (PATTERN (i3)))