combine: Don't combine if I2 does not change
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.
This commit is contained in:
parent
db41057a94
commit
839bc42772
1 changed files with 11 additions and 0 deletions
|
@ -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. */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue