[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