https://gcc.gnu.org/g:ac784bf5f58a4457c5dd49abdb258577b1821fdc

commit r17-4223-gac784bf5f58a4457c5dd49abdb258577b1821fdc
Author: Kyrylo Tkachov <[email protected]>
Date:   Fri Aug 7 14:11:26 2026 +0200

    genemit: emit the split dump message through a helper
    
    Every define_split and define_peephole2 generator opens by announcing
    itself to the dump file:
    
      if (dump_file)
        fprintf (dump_file, "Splitting with gen_split_9 (aarch64.md:2772)\n");
    
    That is a test and a call in each of 4189 functions on aarch64, 414127
    bytes of insn-emit-*.cc, to say something that differs only in the name
    and the location.  Put the test and the call in emit-rtl.cc, next to
    expand_rtx and complete_seq, and pass the part that varies:
    
      note_split ("gen_split_9 (aarch64.md:2772)");
    
    The dump text is unchanged, which matters because scan-rtl-dump tests
    match on it.
    
    insn-emit-*.cc goes from 12977106 bytes to 12792702 and compiles in 5% less
    time, with peak memory 387MB against 424MB.
    
    Bootstrapped on aarch64-none-linux-gnu.
    
    gcc/ChangeLog:
    
            * rtl.h (note_split): Declare.
            * emit-rtl.cc (note_split): New function.
            * genemit.cc (gen_split): Call it rather than emitting the test and
            the fprintf.
    
    Signed-off-by: Kyrylo Tkachov <[email protected]>

Diff:
---
 gcc/emit-rtl.cc | 12 ++++++++++++
 gcc/genemit.cc  |  3 +--
 gcc/rtl.h       |  1 +
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gcc/emit-rtl.cc b/gcc/emit-rtl.cc
index 01770e5e0c78..a190429cf22c 100644
--- a/gcc/emit-rtl.cc
+++ b/gcc/emit-rtl.cc
@@ -7092,6 +7092,18 @@ complete_seq (const uint8_t *seq, rtx *operands)
   return end_sequence ();
 }
 
+/* Note in the dump file that WHAT, which names a define_split or a
+   define_peephole2 and where it came from, is being applied.  genemit.cc
+   emits a call to this rather than the test and the fprintf, so that the
+   dump is written out once instead of once per pattern.  */
+
+void
+note_split (const char *what)
+{
+  if (dump_file)
+    fprintf (dump_file, "Splitting with %s\n", what);
+}
+
 /* Initialize fields of rtl_data related to stack alignment.  */
 
 void
diff --git a/gcc/genemit.cc b/gcc/genemit.cc
index 6323aeb19fc4..d1dfb296629d 100644
--- a/gcc/genemit.cc
+++ b/gcc/genemit.cc
@@ -600,8 +600,7 @@ gen_split (const md_rtx_info &info, FILE *file)
     if (*p == '/')
       fn = p + 1;
 
-  fprintf (file, "  if (dump_file)\n");
-  fprintf (file, "    fprintf (dump_file, \"Splitting with gen_%s_%d 
(%s:%d)\\n\");\n",
+  fprintf (file, "  note_split (\"gen_%s_%d (%s:%d)\");\n",
          name, info.index, fn, info.loc.lineno);
 
   fprintf (file, "  start_sequence ();\n");
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 77a71e5bbec5..065fe8c86c77 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3080,6 +3080,7 @@ enum class expand_opcode {
 
 extern rtx expand_rtx (const uint8_t *, rtx *);
 extern rtx_insn *complete_seq (const uint8_t *, rtx *);
+extern void note_split (const char *);
 extern rtx copy_rtx_if_shared (rtx);
 
 /* In rtl.cc */

Reply via email to