Commit 08223f76 by Segher Boessenkool Committed by Segher Boessenkool

combine: Fix problem with RTL checking

As Jakub found, after my recent combine patch at least on x86 problems
show up with RTL checking enabled.  This is because the I2 generated
by a successful instruction combination can write not only a register
but it can also write a paradoxical subreg of one.

This fixes it.


	* combine.c (try_combine): When adjusting LOG_LINKS for the destination
	that moved to I2, also allow destinations that are a paradoxical
	subreg (instead of a normal reg).

From-SVN: r257736
parent d960ab7b
2018-02-16 Segher Boessenkool <segher@kernel.crashing.org>
* combine.c (try_combine): When adjusting LOG_LINKS for the destination
that moved to I2, also allow destinations that are a paradoxical
subreg (instead of a normal reg).
2018-02-16 Oleg Endo <olegendo@gcc.gnu.org>
PR target/83831
......
......@@ -4283,7 +4283,12 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
if (GET_CODE (x) == PARALLEL)
x = XVECEXP (newi2pat, 0, 0);
unsigned int regno = REGNO (SET_DEST (x));
/* It can only be a SET of a REG or of a paradoxical SUBREG of a REG. */
x = SET_DEST (x);
if (paradoxical_subreg_p (x))
x = SUBREG_REG (x);
unsigned int regno = REGNO (x);
bool done = false;
for (rtx_insn *insn = NEXT_INSN (i3);
......
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