forked from pool/gcc13
compile-time and memory doing nothing on s390x. [boo#1188441] OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc13?expand=0&rev=102
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
|
|
|