[patch][plugins] Provide unique names to all compiler passes

Joern Rennecke amylaar@spamcop.net
Fri Nov 6 17:57:00 GMT 2009


Quoting Basile STARYNKEVITCH <basile@starynkevitch.net>:

> Richard Guenther wrote:
>> On Fri, Nov 6, 2009 at 4:06 PM, Joern Rennecke <amylaar@spamcop.net> wrote:
...
>>> It just occurred to me that we could use a space.

See attached patch.
bootstrapped & regression tested on i686-pc-linux-gnu .

> Agreed, but I would like that the patch also contains a *texi bit to
> document whatever convention is taken.
>
> Otherwise, I am happy with the patch.

I have updated the pass manager description in passes.texi.

tested with "make info" and "make pdf".
-------------- next part --------------
2009-11-06  Zbigniew Chamski  <zbigniew.chamski@gmail.com>
	    Joern Rennecke  <amylaar@spamcop.net>

	* cfgrtl.c (pass_free_cfg): Add pass name.
	* cgraphbuild.c (pass_build_cgraph_edges,
	pass_rebuild_cgraph_edges, pass_remove_cgraph_callee_edges):
	Likewise.
	* dce.c (pass_ud_rtl_dce, pass_fast_rtl_dce): Change pass name.
	* df-core.c (pass_df_initialize_no_opt): Likewise.
	* except.c (pass_rtl_eh): Likewise.
	* function.c (pass_init_function, pass_leaf_regs): Likewise.
	* gcse.c (pass_rtl_pre): Change pass name.
	* passes.c (pass_postreload): Add pass name.
	(make_pass_instance): Don't use duplicate-tracking logic for
	names starting with '*'.
	(next_pass_1): Assert that pass has a name.
	(register_one_dump_file): If there is an space in the name,
	skip past it.
	* predict.c (pass_strip_predict_hints): Add pass name.
	* reg-stack.c (pass_stack_regs): Likewise.
	* stack-ptr-mod.c (pass_stack_ptr_mod): Likewise.
	* tree-cfg.c (pass_warn_function_return,
	pass_warn_function_noreturn): Add pass name.
	* tree-dfa.c (pass_referenced_vars): Likewise.
	* tree-optimize.c (pass_cleanup_cfg_post_optimizing):
	Fix whitespace before comment.
	(pass_fixup_cfg): Add pass name, fix whitespace before comment.
	(pass_init_datastructures): Add pass name.
	* tree-ssa-loop.c (pass_record_bounds): Likewise.
	* tree-ssa.c (pass_early_warn_uninitialized,
	pass_late_warn_uninitialized): Likewise.
	* tree.c (pass_ipa_free_lang_data): Likewise.
	* doc/passes.texi (pass manager): Document how to disambiguate
	pass names.

Index: gcc/doc/passes.texi
===================================================================
--- gcc/doc/passes.texi	(revision 153936)
+++ gcc/doc/passes.texi	(working copy)
@@ -166,9 +166,14 @@ not attempt to (re-)generate data struct
 language form based on the requirements of the next pass.  Nevertheless,
 what is present is useful, and a far sight better than nothing at all.
 
+Each pass should have a unique name.
 Each pass may have its own dump file (for GCC debugging purposes).
-Passes without any names, or with a name starting with a star, do not
-dump anything.
+Passes with a name starting with a star do not dump anything.
+Sometimes passes are supposed to share a dump file / option name.
+To still give these unique names, you can use a prefix that is delimited
+by a space from the part that is used for the dump file / option name.
+E.g. When the pass name is "ud dce", the name used for dump file/options
+is "dce".
 
 TODO: describe the global variables set up by the pass manager,
 and a brief description of how a new pass should use it.
Index: gcc/cgraphbuild.c
===================================================================
--- gcc/cgraphbuild.c	(revision 153936)
+++ gcc/cgraphbuild.c	(working copy)
@@ -205,7 +205,7 @@ struct gimple_opt_pass pass_build_cgraph
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*build_cgraph_edges",			/* name */
   NULL,					/* gate */
   build_cgraph_edges,			/* execute */
   NULL,					/* sub */
@@ -270,7 +270,7 @@ struct gimple_opt_pass pass_rebuild_cgra
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*rebuild_cgraph_edges",		/* name */
   NULL,					/* gate */
   rebuild_cgraph_edges,			/* execute */
   NULL,					/* sub */
@@ -297,7 +297,7 @@ struct gimple_opt_pass pass_remove_cgrap
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*remove_cgraph_callee_edges",		/* name */
   NULL,					/* gate */
   remove_cgraph_callee_edges,		/* execute */
   NULL,					/* sub */
Index: gcc/tree.c
===================================================================
--- gcc/tree.c	(revision 153936)
+++ gcc/tree.c	(working copy)
@@ -4988,7 +4988,7 @@ struct simple_ipa_opt_pass pass_ipa_free
 {
  {
   SIMPLE_IPA_PASS,
-  NULL,					/* name */
+  "*free_lang_data",			/* name */
   NULL,					/* gate */
   free_lang_data,			/* execute */
   NULL,					/* sub */
Index: gcc/df-core.c
===================================================================
--- gcc/df-core.c	(revision 153936)
+++ gcc/df-core.c	(working copy)
@@ -780,7 +780,7 @@ struct rtl_opt_pass pass_df_initialize_n
 {
  {
   RTL_PASS,
-  "dfinit",                             /* name */
+  "no-opt dfinit",                      /* name */
   gate_no_opt,                          /* gate */
   rest_of_handle_df_initialize,         /* execute */
   NULL,                                 /* sub */
Index: gcc/tree-ssa-loop.c
===================================================================
--- gcc/tree-ssa-loop.c	(revision 153936)
+++ gcc/tree-ssa-loop.c	(working copy)
@@ -455,7 +455,7 @@ struct gimple_opt_pass pass_record_bound
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*record_bounds",			/* name */
   NULL,					/* gate */
   tree_ssa_loop_bounds,		       	/* execute */
   NULL,					/* sub */
Index: gcc/predict.c
===================================================================
--- gcc/predict.c	(revision 153936)
+++ gcc/predict.c	(working copy)
@@ -2246,7 +2246,7 @@ struct gimple_opt_pass pass_strip_predic
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*strip_predict_hints",		/* name */
   NULL,					/* gate */
   strip_predict_hints,			/* execute */
   NULL,					/* sub */
Index: gcc/function.c
===================================================================
--- gcc/function.c	(revision 153936)
+++ gcc/function.c	(working copy)
@@ -4228,7 +4228,7 @@ struct rtl_opt_pass pass_init_function =
 {
  {
   RTL_PASS,
-  NULL,                                 /* name */
+  "*init_function",                     /* name */
   NULL,                                 /* gate */   
   init_function_for_compilation,        /* execute */       
   NULL,                                 /* sub */
@@ -5538,7 +5538,7 @@ struct rtl_opt_pass pass_leaf_regs =
 {
  {
   RTL_PASS,
-  NULL,                                 /* name */
+  "*leaf_regs",                         /* name */
   NULL,                                 /* gate */
   rest_of_handle_check_leaf_regs,       /* execute */
   NULL,                                 /* sub */
Index: gcc/gcse.c
===================================================================
--- gcc/gcse.c	(revision 153936)
+++ gcc/gcse.c	(working copy)
@@ -5147,7 +5147,7 @@ struct rtl_opt_pass pass_rtl_pre =
 {
  {
   RTL_PASS,
-  "pre",                                /* name */
+  "rtl pre",                            /* name */
   gate_rtl_pre,                         /* gate */   
   execute_rtl_pre,    			/* execute */       
   NULL,                                 /* sub */
Index: gcc/tree-dfa.c
===================================================================
--- gcc/tree-dfa.c	(revision 153936)
+++ gcc/tree-dfa.c	(working copy)
@@ -106,7 +106,7 @@ struct gimple_opt_pass pass_referenced_v
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*referenced_vars",			/* name */
   NULL,					/* gate */
   find_referenced_vars,			/* execute */
   NULL,					/* sub */
Index: gcc/except.c
===================================================================
--- gcc/except.c	(revision 153936)
+++ gcc/except.c	(working copy)
@@ -1465,7 +1465,7 @@ struct rtl_opt_pass pass_rtl_eh =
 {
  {
   RTL_PASS,
-  "eh",                                 /* name */
+  "rtl eh",                             /* name */
   gate_handle_eh,                       /* gate */
   rest_of_handle_eh,			/* execute */
   NULL,                                 /* sub */
Index: gcc/tree-ssa.c
===================================================================
--- gcc/tree-ssa.c	(revision 153936)
+++ gcc/tree-ssa.c	(working copy)
@@ -1856,7 +1856,7 @@ struct gimple_opt_pass pass_early_warn_u
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*early_warn_uninitialized",		/* name */
   gate_warn_uninitialized,		/* gate */
   execute_early_warn_uninitialized,	/* execute */
   NULL,					/* sub */
@@ -1875,7 +1875,7 @@ struct gimple_opt_pass pass_late_warn_un
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*late_warn_uninitialized",		/* name */
   gate_warn_uninitialized,		/* gate */
   execute_late_warn_uninitialized,	/* execute */
   NULL,					/* sub */
Index: gcc/tree-optimize.c
===================================================================
--- gcc/tree-optimize.c	(revision 153936)
+++ gcc/tree-optimize.c	(working copy)
@@ -201,7 +201,7 @@ struct gimple_opt_pass pass_cleanup_cfg_
 {
  {
   GIMPLE_PASS,
-  "optimized",			/* name */
+  "optimized",				/* name */
   NULL,					/* gate */
   execute_cleanup_cfg_post_optimizing,	/* execute */
   NULL,					/* sub */
@@ -287,9 +287,9 @@ struct gimple_opt_pass pass_fixup_cfg =
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*free_cfg_annotations",		/* name */
   NULL,					/* gate */
-  execute_fixup_cfg,		/* execute */
+  execute_fixup_cfg,			/* execute */
   NULL,					/* sub */
   NULL,					/* next */
   0,					/* static_pass_number */
@@ -317,7 +317,7 @@ struct gimple_opt_pass pass_init_datastr
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*init_datastructures",		/* name */
   NULL,					/* gate */
   execute_init_datastructures,		/* execute */
   NULL,					/* sub */
Index: gcc/stack-ptr-mod.c
===================================================================
--- gcc/stack-ptr-mod.c	(revision 153936)
+++ gcc/stack-ptr-mod.c	(working copy)
@@ -95,7 +95,7 @@ struct rtl_opt_pass pass_stack_ptr_mod =
 {
  {
   RTL_PASS,
-  NULL,		                        /* name */
+  "*stack_ptr_mod",                     /* name */
   NULL,                                 /* gate */
   rest_of_handle_stack_ptr_mod,         /* execute */
   NULL,                                 /* sub */
Index: gcc/reg-stack.c
===================================================================
--- gcc/reg-stack.c	(revision 153936)
+++ gcc/reg-stack.c	(working copy)
@@ -3275,7 +3275,7 @@ struct rtl_opt_pass pass_stack_regs =
 {
  {
   RTL_PASS,
-  NULL,                                 /* name */
+  "*stack_regs",                        /* name */
   gate_handle_stack_regs,               /* gate */
   NULL,					/* execute */
   NULL,                                 /* sub */
Index: gcc/tree-cfg.c
===================================================================
--- gcc/tree-cfg.c	(revision 153936)
+++ gcc/tree-cfg.c	(working copy)
@@ -7191,7 +7191,7 @@ struct gimple_opt_pass pass_warn_functio
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*warn_function_return",		/* name */
   NULL,					/* gate */
   execute_warn_function_return,		/* execute */
   NULL,					/* sub */
@@ -7225,7 +7225,7 @@ struct gimple_opt_pass pass_warn_functio
 {
  {
   GIMPLE_PASS,
-  NULL,					/* name */
+  "*warn_function_noreturn",		/* name */
   NULL,					/* gate */
   execute_warn_function_noreturn,	/* execute */
   NULL,					/* sub */
Index: gcc/passes.c
===================================================================
--- gcc/passes.c	(revision 153936)
+++ gcc/passes.c	(working copy)
@@ -314,7 +314,7 @@ struct rtl_opt_pass pass_postreload =
 {
  {
   RTL_PASS,
-  NULL,                                 /* name */
+  "*all-postreload",                        /* name */
   gate_postreload,                      /* gate */
   NULL,                                 /* execute */
   NULL,                                 /* sub */
@@ -374,7 +374,7 @@ void
 register_one_dump_file (struct opt_pass *pass)
 {
   char *dot_name, *flag_name, *glob_name;
-  const char *prefix;
+  const char *name, *prefix;
   char num[10];
   int flags, id;
 
@@ -384,7 +384,14 @@ register_one_dump_file (struct opt_pass 
     sprintf (num, "%d", ((int) pass->static_pass_number < 0
 			 ? 1 : pass->static_pass_number));
 
-  dot_name = concat (".", pass->name, num, NULL);
+  /* The name is both used to identify the pass for the purposes of plugins,
+     and to specify dump file name and option.
+     The latter two might want something short which is not quite unique; for
+     that reason, we may have a disambiguating prefix, followed by a space
+     to mark the start of the following dump file name / option string.  */
+  name = strchr (pass->name, ' ');
+  name = name ? name + 1 : pass->name;
+  dot_name = concat (".", name, num, NULL);
   if (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS)
     prefix = "ipa-", flags = TDF_IPA;
   else if (pass->type == GIMPLE_PASS)
@@ -392,8 +399,8 @@ register_one_dump_file (struct opt_pass 
   else
     prefix = "rtl-", flags = TDF_RTL;
 
-  flag_name = concat (prefix, pass->name, num, NULL);
-  glob_name = concat (prefix, pass->name, NULL);
+  flag_name = concat (prefix, name, num, NULL);
+  glob_name = concat (prefix, name, NULL);
   id = dump_register (dot_name, flag_name, glob_name, flags);
   set_pass_for_id (id, pass);
 }
@@ -461,7 +468,7 @@ make_pass_instance (struct opt_pass *pas
          and so it should rename the dump file.  The first instance will
          be -1, and be number of duplicates = -static_pass_number - 1.
          Subsequent instances will be > 0 and just the duplicate number.  */
-      if (pass->name || track_duplicates)
+      if ((pass->name && pass->name[0] != '*') || track_duplicates)
         {
           pass->static_pass_number -= 1;
           new_pass->static_pass_number = -pass->static_pass_number;
@@ -482,6 +489,9 @@ make_pass_instance (struct opt_pass *pas
 static struct opt_pass **
 next_pass_1 (struct opt_pass **list, struct opt_pass *pass)
 {
+  /* Every pass should have a name so that plugins can refer to them.  */
+  gcc_assert (pass->name != NULL);
+
   *list = make_pass_instance (pass, false);
   
   return &(*list)->next;
Index: gcc/cfgrtl.c
===================================================================
--- gcc/cfgrtl.c	(revision 153936)
+++ gcc/cfgrtl.c	(working copy)
@@ -433,7 +433,7 @@ struct rtl_opt_pass pass_free_cfg =
 {
  {
   RTL_PASS,
-  NULL,                                 /* name */
+  "*free_cfg",                          /* name */
   NULL,                                 /* gate */
   rest_of_pass_free_cfg,                /* execute */
   NULL,                                 /* sub */
Index: gcc/dce.c
===================================================================
--- gcc/dce.c	(revision 153936)
+++ gcc/dce.c	(working copy)
@@ -738,9 +738,9 @@ struct rtl_opt_pass pass_ud_rtl_dce =
 {
  {
   RTL_PASS,
-  "dce",                                /* name */
-  gate_ud_dce,                        /* gate */
-  rest_of_handle_ud_dce,              /* execute */
+  "ud dce",                             /* name */
+  gate_ud_dce,                          /* gate */
+  rest_of_handle_ud_dce,                /* execute */
   NULL,                                 /* sub */
   NULL,                                 /* next */
   0,                                    /* static_pass_number */
@@ -1123,7 +1123,7 @@ struct rtl_opt_pass pass_fast_rtl_dce =
 {
  {
   RTL_PASS,
-  "dce",                                /* name */
+  "rtl dce",                            /* name */
   gate_fast_dce,                        /* gate */
   rest_of_handle_fast_dce,              /* execute */
   NULL,                                 /* sub */


More information about the Gcc-patches mailing list