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 */
