Patchwork Add overload for register_pass

login
register
mail settings
Submitter Oleg Endo
Date Aug. 24, 2013, 9:33 p.m.
Message ID <1377380017.8069.8.camel@yam-132-YW-E178-FTW>
Download mbox | patch
Permalink /patch/269670/
State New
Headers show

Comments

Oleg Endo - Aug. 24, 2013, 9:33 p.m.
Hi,

I've been working on a SH specific RTL pass and just adapted it to the
new pass handling.  One thing that bugged me was pass registration.  How
about adding an overload for 'register_pass' as in the attached patch?
Registering a pass is then as simple as:

  register_pass (make_new_ifcvt_sh (g, false, "ifcvt1_sh"),
		 PASS_POS_INSERT_AFTER, "ce1", 1);

Tested with make all-gcc.

Cheers,
Oleg

gcc/ChangeLog:
	* passes.c (register_pass): Add overload.
	* tree-pass.h (register_pass): Forward declare it.
	Add comment.
Richard Henderson - Aug. 26, 2013, 2:25 p.m.
On 08/24/2013 02:33 PM, Oleg Endo wrote:
> gcc/ChangeLog:
> 	* passes.c (register_pass): Add overload.
> 	* tree-pass.h (register_pass): Forward declare it.
> 	Add comment.

Ok.


r~

Patch

Index: gcc/tree-pass.h
===================================================================
--- gcc/tree-pass.h	(revision 201967)
+++ gcc/tree-pass.h	(working copy)
@@ -91,7 +91,8 @@ 
   virtual opt_pass *clone ();
 
   /* If has_gate is set, this pass and all sub-passes are executed only if
-     the function returns true.  */
+     the function returns true.
+     The default implementation returns true.  */
   virtual bool gate ();
 
   /* This is the code to run.  If has_execute is false, then there should
@@ -330,6 +331,14 @@ 
   enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
 };
 
+/* Registers a new pass.  Either fill out the register_pass_info or specify
+   the individual parameters.  The pass object is expected to have been
+   allocated using operator new and the pass manager takes the ownership of
+   the pass object.  */
+extern void register_pass (register_pass_info *);
+extern void register_pass (opt_pass* pass, pass_positioning_ops pos,
+			   const char* ref_pass_name, int ref_pass_inst_number);
+
 extern gimple_opt_pass *make_pass_mudflap_1 (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_mudflap_2 (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt);
@@ -594,7 +603,6 @@ 
 extern void ipa_read_optimization_summaries (void);
 extern void register_one_dump_file (struct opt_pass *);
 extern bool function_called_by_processed_nodes_p (void);
-extern void register_pass (struct register_pass_info *);
 
 /* Set to true if the pass is called the first time during compilation of the
    current function.  Note that using this information in the optimization
Index: gcc/passes.c
===================================================================
--- gcc/passes.c	(revision 201967)
+++ gcc/passes.c	(working copy)
@@ -1365,7 +1365,19 @@ 
 register_pass (struct register_pass_info *pass_info)
 {
   g->get_passes ()->register_pass (pass_info);
+}
 
+void
+register_pass (opt_pass* pass, pass_positioning_ops pos,
+	       const char* ref_pass_name, int ref_pass_inst_number)
+{
+  register_pass_info i;
+  i.pass = pass;
+  i.reference_pass_name = ref_pass_name;
+  i.ref_pass_instance_number = ref_pass_inst_number;
+  i.pos_op = pos;
+
+  g->get_passes ()->register_pass (&i);
 }
 
 void