Skip to content

Commit

Permalink
combine: Don't combine if I2 does not change
Browse files Browse the repository at this point in the history
In some cases combine will "combine" an I2 and I3, but end up putting
exactly the same thing back as I2 as was there before.  This is never
progress, so we shouldn't do it, it will lead to oscillating behaviour
and the like.

If we want to canonicalise things, that's fine, but this is not the
way to do it.

2024-03-27  Segher Boessenkool  <segher@kernel.crashing.org>

	PR rtl-optimization/101523
	* combine.cc (try_combine): Don't do a 2-insn combination if
	it does not in fact change I2.
  • Loading branch information
segher committed Mar 27, 2024
1 parent db41057 commit 839bc42
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions gcc/combine.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4186,6 +4186,17 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
adjust_for_new_dest (i3);
}

/* If I2 didn't change, this is not a combination (but a simplification or
canonicalisation with context), which should not be done here. Doing
it here explodes the algorithm. Don't. */
if (rtx_equal_p (newi2pat, PATTERN (i2)))
{
if (dump_file)
fprintf (dump_file, "i2 didn't change, not doing this\n");
undo_all ();
return 0;
}

/* We now know that we can do this combination. Merge the insns and
update the status of registers and LOG_LINKS. */

Expand Down

0 comments on commit 839bc42

Please sign in to comment.