[PATCH 4/4] Print pass metadata at the start and end of dumpfiles
David Malcolm
dmalcolm@redhat.com
Thu Jun 25 21:25:00 GMT 2015
This patch adds information to the top and bottom of dumpfiles giving
metadata on the pass that they're associated with e.g.:
; start of dump from pass_forwprop (../../src/gcc/tree-ssa-forwprop.c:2103)
(dump goes here)
; end of dump from pass_forwprop (../../src/gcc/tree-ssa-forwprop.c:2103)
My initial implementation of this led to these testsuite regressions:
PASS -> FAIL : gcc.dg/pr34027-1.c scan-tree-dump-times optimized "/" 0
PASS -> FAIL : gcc.dg/strlenopt-1.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-10.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-11.c scan-tree-dump-times strlen "strlen \\(" 3
PASS -> FAIL : gcc.dg/strlenopt-13.c scan-tree-dump-times strlen "strlen \\(" 4
PASS -> FAIL : gcc.dg/strlenopt-14g.c scan-tree-dump-times strlen "strlen \\(" 4
PASS -> FAIL : gcc.dg/strlenopt-14gf.c scan-tree-dump-times strlen "strlen \\(" 4
PASS -> FAIL : gcc.dg/strlenopt-15.c scan-tree-dump-times strlen "strlen \\(" 3
PASS -> FAIL : gcc.dg/strlenopt-16g.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-17g.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-18g.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-19.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-1f.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-2.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-20.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-21.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-22.c scan-tree-dump-times strlen "strlen \\(" 3
PASS -> FAIL : gcc.dg/strlenopt-22g.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-24.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-25.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-26.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-27.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-2f.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-3.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-4.c scan-tree-dump-times strlen "strlen \\(" 3
PASS -> FAIL : gcc.dg/strlenopt-4g.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-4gf.c scan-tree-dump-times strlen "strlen \\(" 1
PASS -> FAIL : gcc.dg/strlenopt-5.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-6.c scan-tree-dump-times strlen "strlen \\(" 2
PASS -> FAIL : gcc.dg/strlenopt-7.c scan-tree-dump-times strlen "strlen \\(" 0
PASS -> FAIL : gcc.dg/strlenopt-9.c scan-tree-dump-times strlen "strlen \\(" 3
PASS -> FAIL : gcc.dg/tree-ssa/forwprop-31.c scan-tree-dump-times forwprop1 "-" 0
PASS -> FAIL : gcc.dg/tree-ssa/loop-22.c scan-tree-dump-times optimized "/" 0
PASS -> FAIL : gcc.dg/tree-ssa/pr32044.c scan-tree-dump-times optimized "/" 0
PASS -> FAIL : gcc.dg/tree-ssa/reassoc-16.c scan-tree-dump-times reassoc1 "/" 1
PASS -> FAIL : gcc.dg/tree-ssa/reassoc-17.c scan-tree-dump-times reassoc1 "/" 1
PASS -> FAIL : gcc.dg/tree-ssa/sra-4.c scan-tree-dump-times optimized "st" 0
due to the metadata lines matching the given regexes.
This version of the patch adds a new -fno-dump-metadata option for
suppressing the metadata, and this is used automatically by the
testsuite if its sees any usage of scan-tree-dump-times.
gcc/ChangeLog:
* common.opt (fdump-metadata): New option.
* doc/invoke.texi: Add -fno-dump-metadata.
* passes.c (pass_init_dump_file): Add information
on the classname and source location of the pass to the top of
the dumpfile.
(pass_fini_dump_file): Likewise to the end of the dumpfile.
gcc/testsuite/ChangeLog:
* lib/gcc-dg.exp (gcc-dg-test-1): Determine if any
scan-tree-dump-times actions were registered, and if so,
add -fno-dump-metadata.
---
gcc/common.opt | 4 ++++
gcc/doc/invoke.texi | 21 +++++++++++++++++++++
gcc/passes.c | 7 +++++++
gcc/testsuite/lib/gcc-dg.exp | 18 ++++++++++++++++++
4 files changed, 50 insertions(+)
diff --git a/gcc/common.opt b/gcc/common.opt
index 32b416a..7b19487 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1177,6 +1177,10 @@ fdump-internal-locations
Common Var(flag_dump_locations) Init(0)
Dump detailed information on GCC's internal representation of source code locations
+fdump-metadata
+Common Var(flag_dump_metadata) Init(1)
+Include metadata about the relevant pass at the start and end of dumpfiles
+
fdump-passes
Common Var(flag_dump_passes) Init(0)
Dump optimization passes
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index b99ab1c..e2c5fed 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -324,6 +324,7 @@ Objective-C and Objective-C++ Dialects}.
-fdump-translation-unit@r{[}-@var{n}@r{]} @gol
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
+-fno-dump-metadata @gol
-fdump-passes @gol
-fdump-statistics @gol
-fdump-tree-all @gol
@@ -6863,6 +6864,26 @@ Dump after function inlining.
Dump the list of optimization passes that are turned on and off by
the current command-line options.
+@item -fno-dump-metadata
+@opindex fno-dump-metadata
+By default, gcc dump files contain header lines of the form:
+
+@smallexample
+
+; start of dump from pass_forwprop (../../src/gcc/tree-ssa-forwprop.c:2103)
+
+(dump goes here)
+
+; end of dump from pass_forwprop (../../src/gcc/tree-ssa-forwprop.c:2103)
+
+@end smallexample
+
+at the top and bottom, identifying the C++ class implementing the
+pass, and its location within GCC's source tree.
+
+This option suppresses these metadata lines, for use by gcc's testsuite
+when looking for regexes in the dump files.
+
@item -fdump-statistics-@var{option}
@opindex fdump-statistics
Enable and control dumping of pass statistics in a separate file. The
diff --git a/gcc/passes.c b/gcc/passes.c
index b9e548b..8c11fd6 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -2114,6 +2114,9 @@ pass_init_dump_file (opt_pass *pass)
!dumps->dump_initialized_p (pass->static_pass_number);
dump_file_name = dumps->get_dump_file_name (pass->static_pass_number);
dumps->dump_start (pass->static_pass_number, &dump_flags);
+ if (dump_file && flag_dump_metadata)
+ fprintf (dump_file, "; start of dump from %s (%s:%i)\n",
+ pass->classname, pass->filename, pass->line_num);
if (dump_file && current_function_decl)
dump_function_header (dump_file, current_function_decl, dump_flags);
if (initializing_dump
@@ -2138,6 +2141,10 @@ pass_fini_dump_file (opt_pass *pass)
{
timevar_push (TV_DUMP);
+ if (dump_file && flag_dump_metadata)
+ fprintf (dump_file, "; end of dump from %s (%s:%i)\n",
+ pass->classname, pass->filename, pass->line_num);
+
/* Flush and close dump file. */
if (dump_file_name)
{
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 9e4ecce..745eaf1 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -278,6 +278,24 @@ proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {
}
}
+ # Determine if any { dg-final { scan-tree-dump-times } } actions were
+ # registered.
+ set will_scan_dump 0
+ foreach x [split $finalcode "\n"] {
+ set finalcmd [lindex $x 0]
+ if { ${finalcmd} == "scan-tree-dump-times" } {
+ set will_scan_dump 1
+ }
+ }
+ # If so, add -fno-dump-metadata to the options to prevent the dumpfiles
+ # from containing lines like:
+ # ; start of dump from pass_forwprop (../../src/gcc/tree-ssa-forwprop.c:2103)
+ # which could potentially match a regexp (e.g. if the path to the
+ # source tree contains strings of interest).
+ if { ${will_scan_dump} } {
+ lappend extra_tool_flags "-fno-dump-metadata"
+ }
+
append finalcode [schedule-cleanups "$options $extra_tool_flags"]
if { $extra_tool_flags != "" } {
lappend options "additional_flags=$extra_tool_flags"
--
1.8.5.3
More information about the Gcc-patches
mailing list