This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH]: Dump file globbing


Diego approved this offline.
This is an updated version of a patch from october to do dump file
globbing so that you can specify -fdump-tree-dom and get dumps for dom1,
2, and 3.

I'm not sure whether to try to document the glob names specially or not
The current documentation is actually right when you have glob names,
because we document "-fdump-tree-dom" not "-fdump-tree-dom1,
-fdump-tree-dom2, and -fdump-tree-dom3". It was wrong for what we
actually had before (it has -fdump-tree-dom[n] in one place, and just
-fdump-tree-dom in the other)

I also noticed there are a few missing passes in the dump flag
documentation, so i'll add those in a followup patch when someone tells
me whether we want to try to *add* docs for each seperate dump option.
I would prefer not to, as it wuld mean trying to keep it in sync with
the pass order and numbre of times each pass runs.

Anyway, this patch was bootstrapped and regtested on i686-pc-linux-gnu.
I'll be committing it sometime in the near future (my connection is a
bit spotty) to the mainline :).



2005-02-11  Daniel Berlin  <dberlin@dberlin.org>
	
	* tree-dump.c (dump_files): Update to reflect new member
	of dump_file_info.
	(dump_register): Add new argument.
	Set glob name.
	(dump_switch_p_1): Check against glob name if doglob was passed.
	(dump_switch_p): Check against regular first, then glob if
 	we didn't have any hits on the dump name.
	* tree-optimize.c (register_one_dump_file):
	Pass in glob name as well.
	* tree-pass.h (struct dump_file_info): Add glob
	member.
Index: tree-dump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dump.c,v
retrieving revision 1.36
diff -u -3 -p -r1.36 tree-dump.c
--- tree-dump.c	13 Oct 2004 13:48:16 -0000	1.36
+++ tree-dump.c	12 Feb 2005 03:00:09 -0000
@@ -667,56 +667,56 @@ dump_node (tree t, int flags, FILE *stre
    TREE_DUMP_INDEX enumeration in tree.h */
 static struct dump_file_info dump_files[TDI_end] =
 {
-  {NULL, NULL, 0, 0, 0, 0},
-  {".tu", "translation-unit", TDF_TREE, 0, 0, 0},
-  {".class", "class-hierarchy", TDF_TREE, 0, 1, 0},
-  {".original", "tree-original", TDF_TREE, 0, 2, 0},
-  {".generic", "tree-generic", TDF_TREE, 0, 3, 0},
-  {".nested", "tree-nested", TDF_TREE, 0, 4, 0},
-  {".inlined", "tree-inlined", TDF_TREE, 0, 5, 0},
-  {".vcg", "tree-vcg", TDF_TREE, 0, 6, 0},
-  {NULL, "tree-all", TDF_TREE, 0, 0, 0},
-  {NULL, "rtl-all", TDF_RTL, 0, 0, 0},
-  {NULL, "ipa-all", TDF_IPA, 0, 0, 0},
-
-  { ".cgraph", "ipa-cgraph",		TDF_IPA, 0,  1, 0},
-
-  { ".sibling", "rtl-sibling",		TDF_RTL, 0,  1, 'i'},
-  { ".eh", "rtl-eh",			TDF_RTL, 0,  2, 'h'},
-  { ".jump", "rtl-jump",		TDF_RTL, 0,  3, 'j'},
-  { ".cse", "rtl-cse",			TDF_RTL, 0,  4, 's'},
-  { ".gcse", "rtl-gcse",		TDF_RTL, 0,  5, 'G'},
-  { ".loop", "rtl-loop",		TDF_RTL, 0,  6, 'L'},
-  { ".bypass", "rtl-bypass",		TDF_RTL, 0,  7, 'G'},
-  { ".cfg", "rtl-cfg",			TDF_RTL, 0,  8, 'f'},
-  { ".bp", "rtl-bp",			TDF_RTL, 0,  9, 'b'},
-  { ".vpt", "rtl-vpt",			TDF_RTL, 0, 10, 'V'},
-  { ".ce1", "rtl-ce1",			TDF_RTL, 0, 11, 'C'},
-  { ".tracer", "rtl-tracer",		TDF_RTL, 0, 12, 'T'},
-  { ".loop2", "rtl-loop2",		TDF_RTL, 0, 13, 'L'},
-  { ".web", "rtl-web",			TDF_RTL, 0, 14, 'Z'},
-  { ".cse2", "rtl-cse2",		TDF_RTL, 0, 15, 't'},
-  { ".life", "rtl-life",		TDF_RTL, 0, 16, 'f'},
-  { ".combine", "rtl-combine",		TDF_RTL, 0, 17, 'c'},
-  { ".ce2", "rtl-ce2",			TDF_RTL, 0, 18, 'C'},
-  { ".regmove", "rtl-regmove",		TDF_RTL, 0, 19, 'N'},
-  { ".sms", "rtl-sms",			TDF_RTL, 0, 20, 'm'},
-  { ".sched", "rtl-sched",		TDF_RTL, 0, 21, 'S'},
-  { ".lreg", "rtl-lreg",		TDF_RTL, 0, 22, 'l'},
-  { ".greg", "rtl-greg",		TDF_RTL, 0, 23, 'g'},
-  { ".postreload", "rtl-postreload",	TDF_RTL, 0, 24, 'o'},
-  { ".gcse2", "rtl-gcse2",		TDF_RTL, 0, 25, 'J'},
-  { ".flow2", "rtl-flow2",		TDF_RTL, 0, 26, 'w'},
-  { ".peephole2", "rtl-peephole2",	TDF_RTL, 0, 27, 'z'},
-  { ".ce3", "rtl-ce3",			TDF_RTL, 0, 28, 'E'},
-  { ".rnreg", "rtl-rnreg",		TDF_RTL, 0, 29, 'n'},
-  { ".bbro", "rtl-bbro",		TDF_RTL, 0, 30, 'B'},
-  { ".btl", "rtl-btl",			TDF_RTL, 0, 31, 'd'},
-  { ".sched2", "rtl-sched2",		TDF_RTL, 0, 32, 'R'},
-  { ".stack", "rtl-stack",		TDF_RTL, 0, 33, 'k'},
-  { ".vartrack", "rtl-vartrack",	TDF_RTL, 0, 34, 'V'},
-  { ".mach", "rtl-mach",		TDF_RTL, 0, 35, 'M'},
-  { ".dbr", "rtl-dbr",			TDF_RTL, 0, 36, 'd'}
+  {NULL, NULL, NULL, 0, 0, 0, 0},
+  {".tu", "translation-unit", NULL, TDF_TREE, 0, 0, 0},
+  {".class", "class-hierarchy", NULL, TDF_TREE, 0, 1, 0},
+  {".original", "tree-original", NULL, TDF_TREE, 0, 2, 0},
+  {".generic", "tree-generic", NULL, TDF_TREE, 0, 3, 0},
+  {".nested", "tree-nested", NULL, TDF_TREE, 0, 4, 0},
+  {".inlined", "tree-inlined", NULL, TDF_TREE, 0, 5, 0},
+  {".vcg", "tree-vcg", NULL, TDF_TREE, 0, 6, 0},
+  {NULL, "tree-all", NULL, TDF_TREE, 0, 0, 0},
+  {NULL, "rtl-all", NULL, TDF_RTL, 0, 0, 0},
+  {NULL, "ipa-all", NULL, TDF_IPA, 0, 0, 0},
+
+  { ".cgraph", "ipa-cgraph", NULL,	TDF_IPA, 0,  1, 0},
+
+  { ".sibling", "rtl-sibling", NULL,	TDF_RTL, 0,  1, 'i'},
+  { ".eh", "rtl-eh", NULL,		TDF_RTL, 0,  2, 'h'},
+  { ".jump", "rtl-jump", NULL,		TDF_RTL, 0,  3, 'j'},
+  { ".cse", "rtl-cse", NULL,    	 TDF_RTL, 0,  4, 's'},
+  { ".gcse", "rtl-gcse", NULL,		TDF_RTL, 0,  5, 'G'},
+  { ".loop", "rtl-loop", NULL,		TDF_RTL, 0,  6, 'L'},
+  { ".bypass", "rtl-bypass", NULL,		TDF_RTL, 0,  7, 'G'},
+  { ".cfg", "rtl-cfg", NULL,			TDF_RTL, 0,  8, 'f'},
+  { ".bp", "rtl-bp", NULL,			TDF_RTL, 0,  9, 'b'},
+  { ".vpt", "rtl-vpt", NULL,			TDF_RTL, 0, 10, 'V'},
+  { ".ce1", "rtl-ce1", NULL,			TDF_RTL, 0, 11, 'C'},
+  { ".tracer", "rtl-tracer", NULL,		TDF_RTL, 0, 12, 'T'},
+  { ".loop2", "rtl-loop2", NULL,		TDF_RTL, 0, 13, 'L'},
+  { ".web", "rtl-web", NULL,			TDF_RTL, 0, 14, 'Z'},
+  { ".cse2", "rtl-cse2", NULL,		TDF_RTL, 0, 15, 't'},
+  { ".life", "rtl-life", NULL,		TDF_RTL, 0, 16, 'f'},
+  { ".combine", "rtl-combine", NULL,		TDF_RTL, 0, 17, 'c'},
+  { ".ce2", "rtl-ce2", NULL,			TDF_RTL, 0, 18, 'C'},
+  { ".regmove", "rtl-regmove", NULL,		TDF_RTL, 0, 19, 'N'},
+  { ".sms", "rtl-sms", NULL,			TDF_RTL, 0, 20, 'm'},
+  { ".sched", "rtl-sched", NULL,		TDF_RTL, 0, 21, 'S'},
+  { ".lreg", "rtl-lreg", NULL,		TDF_RTL, 0, 22, 'l'},
+  { ".greg", "rtl-greg", NULL,		TDF_RTL, 0, 23, 'g'},
+  { ".postreload", "rtl-postreload", NULL,	TDF_RTL, 0, 24, 'o'},
+  { ".gcse2", "rtl-gcse2", NULL,		TDF_RTL, 0, 25, 'J'},
+  { ".flow2", "rtl-flow2", NULL,		TDF_RTL, 0, 26, 'w'},
+  { ".peephole2", "rtl-peephole2", NULL,	TDF_RTL, 0, 27, 'z'},
+  { ".ce3", "rtl-ce3", NULL,			TDF_RTL, 0, 28, 'E'},
+  { ".rnreg", "rtl-rnreg", NULL,		TDF_RTL, 0, 29, 'n'},
+  { ".bbro", "rtl-bbro", NULL,		TDF_RTL, 0, 30, 'B'},
+  { ".btl", "rtl-btl", NULL,			TDF_RTL, 0, 31, 'd'},
+  { ".sched2", "rtl-sched2", NULL,		TDF_RTL, 0, 32, 'R'},
+  { ".stack", "rtl-stack", NULL,		TDF_RTL, 0, 33, 'k'},
+  { ".vartrack", "rtl-vartrack", NULL,	TDF_RTL, 0, 34, 'V'},
+  { ".mach", "rtl-mach", NULL,		TDF_RTL, 0, 35, 'M'},
+  { ".dbr", "rtl-dbr", NULL,			TDF_RTL, 0, 36, 'd'}
 };
 
 /* Dynamically registered tree dump files and switches.  */
@@ -749,8 +749,8 @@ static const struct dump_option_value_in
 };
 
 unsigned int
-dump_register (const char *suffix, const char *swtch, int flags,
-	       unsigned int num, int letter)
+dump_register (const char *suffix, const char *swtch, const char *glob,
+	       int flags, unsigned int num, int letter)
 {
   size_t this = extra_dump_files_in_use++;
 
@@ -768,6 +768,7 @@ dump_register (const char *suffix, const
   memset (&extra_dump_files[this], 0, sizeof (struct dump_file_info));
   extra_dump_files[this].suffix = suffix;
   extra_dump_files[this].swtch = swtch;
+  extra_dump_files[this].glob = glob;
   extra_dump_files[this].flags = flags;
   extra_dump_files[this].num = num;
   extra_dump_files[this].letter = letter;
@@ -924,13 +925,16 @@ dump_enable_all (int flags, int letter)
    relevant details in the dump_files array.  */
 
 static int
-dump_switch_p_1 (const char *arg, struct dump_file_info *dfi)
+dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob)
 {
   const char *option_value;
   const char *ptr;
   int flags;
+  
+  if (doglob && !dfi->glob)
+    return 0;
 
-  option_value = skip_leading_substring (arg, dfi->swtch);
+  option_value = skip_leading_substring (arg, doglob ? dfi->glob : dfi->swtch);
   if (!option_value)
     return 0;
 
@@ -981,10 +985,20 @@ dump_switch_p (const char *arg)
   int any = 0;
 
   for (i = TDI_none + 1; i != TDI_end; i++)
-    any |= dump_switch_p_1 (arg, &dump_files[i]);
+    any |= dump_switch_p_1 (arg, &dump_files[i], false);
+
+  /* Don't glob if we got a hit already */
+  if (!any)
+    for (i = TDI_none + 1; i != TDI_end; i++)
+      any |= dump_switch_p_1 (arg, &dump_files[i], true);
 
   for (i = 0; i < extra_dump_files_in_use; i++)
-    any |= dump_switch_p_1 (arg, &extra_dump_files[i]);
+    any |= dump_switch_p_1 (arg, &extra_dump_files[i], false);
+  
+  if (!any)
+    for (i = 0; i < extra_dump_files_in_use; i++)
+      any |= dump_switch_p_1 (arg, &extra_dump_files[i], true);
+
 
   return any;
 }
Index: tree-dump.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dump.h,v
retrieving revision 1.8
diff -u -3 -p -r1.8 tree-dump.h
--- tree-dump.h	15 Oct 2004 14:47:12 -0000	1.8
+++ tree-dump.h	12 Feb 2005 03:00:09 -0000
@@ -88,6 +88,7 @@ extern void queue_and_dump_type (dump_in
 extern void dump_function (enum tree_dump_index, tree);
 extern void dump_function_to_file (tree, FILE *, int);
 
-extern unsigned int dump_register (const char *, const char *, int, unsigned int, int);
+extern unsigned int dump_register (const char *, const char *, const char *, 
+				   int, unsigned int, int);
 
 #endif /* ! GCC_TREE_DUMP_H */
Index: tree-optimize.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-optimize.c,v
retrieving revision 2.70
diff -u -3 -p -r2.70 tree-optimize.c
--- tree-optimize.c	23 Jan 2005 19:35:58 -0000	2.70
+++ tree-optimize.c	12 Feb 2005 03:00:10 -0000
@@ -212,7 +212,7 @@ static struct tree_opt_pass pass_init_da
 static void
 register_one_dump_file (struct tree_opt_pass *pass, int n)
 {
-  char *dot_name, *flag_name;
+  char *dot_name, *flag_name, *glob_name;
   char num[10];
 
   /* See below in next_pass_1.  */
@@ -225,13 +225,15 @@ register_one_dump_file (struct tree_opt_
   if (pass->properties_provided & PROP_trees)
     {
       flag_name = concat ("tree-", pass->name, num, NULL);
-      pass->static_pass_number = dump_register (dot_name, flag_name,
+      glob_name = concat ("tree-", pass->name, NULL);
+      pass->static_pass_number = dump_register (dot_name, flag_name, glob_name,
                                                 TDF_TREE, n + TDI_tree_all, 0);
     }
   else
     {
       flag_name = concat ("rtl-", pass->name, num, NULL);
-      pass->static_pass_number = dump_register (dot_name, flag_name,
+      glob_name = concat ("rtl-", pass->name, NULL);
+      pass->static_pass_number = dump_register (dot_name, flag_name, glob_name,
                                                 TDF_RTL, n, pass->letter);
     }
 }
Index: tree-pass.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-pass.h,v
retrieving revision 2.25
diff -u -3 -p -r2.25 tree-pass.h
--- tree-pass.h	20 Jan 2005 19:20:25 -0000	2.25
+++ tree-pass.h	12 Feb 2005 03:00:10 -0000
@@ -78,6 +78,7 @@ struct dump_file_info
 {
   const char *suffix;           /* suffix to give output file.  */
   const char *swtch;            /* command line switch */
+  const char *glob;             /* command line glob  */
   int flags;                    /* user flags */
   int state;                    /* state of play */
   int num;                      /* dump file number */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]