https://gcc.gnu.org/g:9dbff9c05520a74e6cd337578f27b56c941f64f3

commit r15-268-g9dbff9c05520a74e6cd337578f27b56c941f64f3
Author: Richard Biener <rguent...@suse.de>
Date:   Tue May 7 10:14:19 2024 +0200

    Revert "Revert "combine: Don't combine if I2 does not change""
    
    This reverts commit 109f1b28fc94c93096506e3df0c25e331cef19d0.

Diff:
---
 gcc/combine.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gcc/combine.cc b/gcc/combine.cc
index 92b8d98e6c1..71c9abc145c 100644
--- a/gcc/combine.cc
+++ b/gcc/combine.cc
@@ -4196,6 +4196,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.  */

Reply via email to