Hi. This is small improvement for {gimple,generic}-match.c files. The code path that reports application of a pattern is now guarded with __builtin_expect. And reporting function lives in gimple.c.
For gimple-match.o, difference is: bloaty /tmp/after.o -- /tmp/before.o VM SIZE FILE SIZE ++++++++++++++ GROWING ++++++++++++++ [ = ] 0 .rela.debug_loc +58.5Ki +0.5% +0.7% +7.70Ki .text +7.70Ki +0.7% [ = ] 0 .debug_info +3.53Ki +0.6% [ = ] 0 .rela.debug_ranges +2.02Ki +0.0% [ = ] 0 .debug_loc +1.86Ki +0.7% +0.7% +448 .eh_frame +448 +0.7% [ = ] 0 .rela.eh_frame +192 +0.7% [ = ] 0 .rela.debug_line +48 +0.4% [ = ] 0 .debug_str +26 +0.0% +6.9% +9 .rodata.str1.1 +9 +6.9% -------------- SHRINKING -------------- -97.5% -24.8Ki .rodata.str1.8 -24.8Ki -97.5% [ = ] 0 .symtab -14.7Ki -26.1% [ = ] 0 .strtab -3.57Ki -2.2% [ = ] 0 .rela.debug_info -2.81Ki -0.0% [ = ] 0 .debug_line -2.14Ki -0.6% [ = ] 0 .rela.text -816 -0.1% [ = ] 0 .rela.text.unlikely -288 -0.1% -0.1% -131 .text.unlikely -131 -0.1% [ = ] 0 [Unmapped] -23 -14.0% [ = ] 0 .debug_abbrev -2 -0.1% -1.2% -16.8Ki TOTAL +25.1Ki +0.1% I'm testing the patch. Thoughts? Martin gcc/ChangeLog: 2018-08-31 Martin Liska <mli...@suse.cz> * genmatch.c (output_line_directive): Add new argument fnargs. (dt_simplify::gen_1): Generate call to report_match_pattern function and wrap that into __builtin_expect. * gimple.c (report_match_pattern): New function. * gimple.h (report_match_pattern): Likewise. --- gcc/genmatch.c | 18 ++++++++++++------ gcc/gimple.c | 14 ++++++++++++++ gcc/gimple.h | 4 ++++ 3 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 50d72f8f1e7..8e209b7e6cb 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -184,7 +184,7 @@ fprintf_indent (FILE *f, unsigned int indent, const char *format, ...) static void output_line_directive (FILE *f, source_location location, - bool dumpfile = false) + bool dumpfile = false, bool fnargs = false) { const line_map_ordinary *map; linemap_resolve_location (line_table, location, LRK_SPELLING_LOCATION, &map); @@ -202,7 +202,11 @@ output_line_directive (FILE *f, source_location location, file = loc.file; else ++file; - fprintf (f, "%s:%d", file, loc.line); + + if (fnargs) + fprintf (f, "\"%s\", %d", file, loc.line); + else + fprintf (f, "%s:%d", file, loc.line); } else /* Other gen programs really output line directives here, at least for @@ -3305,11 +3309,13 @@ dt_simplify::gen_1 (FILE *f, int indent, bool gimple, operand *result) } } - fprintf_indent (f, indent, "if (dump_file && (dump_flags & TDF_FOLDING)) " - "fprintf (dump_file, \"Applying pattern "); + fprintf_indent (f, indent, "if (__builtin_expect (dump_file && " + "(dump_flags & TDF_FOLDING), 0)) report_match_pattern ("); + output_line_directive (f, - result ? result->location : s->match->location, true); - fprintf (f, ", %%s:%%d\\n\", __FILE__, __LINE__);\n"); + result ? result->location : s->match->location, true, + true); + fprintf (f, ", __FILE__, __LINE__);\n"); if (!result) { diff --git a/gcc/gimple.c b/gcc/gimple.c index e3e651b1e61..7f4254c930d 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -3190,6 +3190,20 @@ gimple_inexpensive_call_p (gcall *stmt) return false; } +/* Report about a match of pattern that lives + in MATCH_FILE at MATCH_FILE_LINE. The pattern is matched + in GENERATED_FILE at line GENERATE_FILE_LINE. */ + +void report_match_pattern (const char *match_file, + unsigned int match_file_line, + const char *generated_file, + unsigned int generate_file_line) +{ + fprintf (dump_file, "Applying pattern %s:%d, %s:%d\n", + match_file, match_file_line, + generated_file, generate_file_line); +} + #if CHECKING_P namespace selftest { diff --git a/gcc/gimple.h b/gcc/gimple.h index a5dda9369bc..cd9e3e54e79 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -6404,6 +6404,10 @@ gimple_set_do_not_emit_location (gimple *g) gimple_set_plf (g, GF_PLF_1, true); } +extern void report_match_pattern (const char *match_file, + unsigned int match_file_line, + const char *generated_file, + unsigned int generate_file_line); /* Macros for showing usage statistics. */ #define SCALE(x) ((unsigned long) ((x) < 1024*10 \