<[email protected]> writes: > From: Kyrylo Tkachov <[email protected]> > > 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. > Ok for trunk? > > 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.
If we're optimising the call sites to this extent, perhaps we should call it "start_split" and include the start_sequence as well. The patch is ok as-is though. Thanks, Richard > > Signed-off-by: Kyrylo Tkachov <[email protected]> > --- > 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 4a23eaefe02..08e58ce962d 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 6323aeb19fc..d1dfb296629 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 aa0b4c77a39..d305e15a1d1 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 */
