49 lines
1.6 KiB
Diff
49 lines
1.6 KiB
Diff
|
From 839bc42772ba7af66af3bd16efed4a69511312ae Mon Sep 17 00:00:00 2001
|
||
|
From: Segher Boessenkool <segher@kernel.crashing.org>
|
||
|
Date: Wed, 27 Mar 2024 14:09:52 +0000
|
||
|
Subject: [PATCH] combine: Don't combine if I2 does not change
|
||
|
To: gcc-patches@gcc.gnu.org
|
||
|
|
||
|
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.
|
||
|
---
|
||
|
gcc/combine.cc | 11 +++++++++++
|
||
|
1 file changed, 11 insertions(+)
|
||
|
|
||
|
diff --git a/gcc/combine.cc b/gcc/combine.cc
|
||
|
index a4479f8d836..745391016d0 100644
|
||
|
--- a/gcc/combine.cc
|
||
|
+++ b/gcc/combine.cc
|
||
|
@@ -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. */
|
||
|
|
||
|
--
|
||
|
2.35.3
|
||
|
|