public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Stream cgraph_node.ipa_transforms_to_apply
@ 2012-11-04 22:44 Martin Jambor
  2012-11-05 11:15 ` Jan Hubicka
  0 siblings, 1 reply; 3+ messages in thread
From: Martin Jambor @ 2012-11-04 22:44 UTC (permalink / raw)
  To: GCC Patches; +Cc: Jan Hubicka

Hi,

the following patch adds streaming ofcgraph_node.ipa_transforms_to_apply
so that transformation phases of IPA passes are run in LTO too.  It is
done by simple streaming of pass.static_pass_number and then looking
it up among all_regular_ipa_passes.

Bootstrapped and tested on x86_64-linux, required to make aggregate
IPA-CP work in LTO.

OK for trunk?

Thanks,

Martin


2012-11-03  Martin Jambor  <mjambor@suse.cz>

	* lto-cgraph.c: Include tree-pass.h.
	(lto_output_node): Stream node->ipa_transforms_to_apply.
	(input_node): Likewise.
	* Makefile.in (lto-cgraph.o): Add TREE_PASS_H to dependencies.

Index: src/gcc/lto-cgraph.c
===================================================================
--- src.orig/gcc/lto-cgraph.c
+++ src/gcc/lto-cgraph.c
@@ -45,6 +45,7 @@ along with GCC; see the file COPYING3.
 #include "data-streamer.h"
 #include "tree-streamer.h"
 #include "gcov-io.h"
+#include "tree-pass.h"
 
 static void output_cgraph_opt_summary (void);
 static void input_cgraph_opt_summary (VEC (symtab_node, heap) * nodes);
@@ -377,6 +378,8 @@ lto_output_node (struct lto_simple_outpu
   intptr_t ref;
   bool in_other_partition = false;
   struct cgraph_node *clone_of;
+  struct ipa_opt_pass_d *pass;
+  int i;
 
   boundary_p = !lto_symtab_encoder_in_partition_p (encoder, (symtab_node)node);
 
@@ -432,6 +435,12 @@ lto_output_node (struct lto_simple_outpu
   streamer_write_hwi_stream (ob->main_stream, node->count);
   streamer_write_hwi_stream (ob->main_stream, node->count_materialization_scale);
 
+  streamer_write_hwi_stream (ob->main_stream,
+			     VEC_length (ipa_opt_pass,
+					 node->ipa_transforms_to_apply));
+  FOR_EACH_VEC_ELT (ipa_opt_pass, node->ipa_transforms_to_apply, i, pass)
+    streamer_write_hwi_stream (ob->main_stream, pass->pass.static_pass_number);
+
   if (tag == LTO_symtab_analyzed_node)
     {
       if (node->global.inlined_to)
@@ -898,6 +907,7 @@ input_node (struct lto_file_decl_data *f
   int ref = LCC_NOT_FOUND, ref2 = LCC_NOT_FOUND;
   int clone_ref;
   int order;
+  int i, count;
 
   order = streamer_read_hwi (ib) + order_base;
   clone_ref = streamer_read_hwi (ib);
@@ -920,6 +930,23 @@ input_node (struct lto_file_decl_data *f
   node->count = streamer_read_hwi (ib);
   node->count_materialization_scale = streamer_read_hwi (ib);
 
+  count = streamer_read_hwi (ib);
+  node->ipa_transforms_to_apply = NULL;
+  for (i = 0; i < count; i++)
+    {
+      struct opt_pass *pass;
+      int pi = streamer_read_hwi (ib);
+
+      for (pass = all_regular_ipa_passes; pass; pass = pass->next)
+	if (pass->static_pass_number == pi)
+	  {
+	    VEC_safe_push (ipa_opt_pass, heap, node->ipa_transforms_to_apply,
+			   (struct ipa_opt_pass_d *) pass);
+	    break;
+	  }
+      gcc_assert (pass);
+    }
+
   if (tag == LTO_symtab_analyzed_node)
     ref = streamer_read_hwi (ib);
 
Index: src/gcc/Makefile.in
===================================================================
--- src.orig/gcc/Makefile.in
+++ src/gcc/Makefile.in
@@ -2146,7 +2146,7 @@ lto-cgraph.o: lto-cgraph.c $(CONFIG_H) $
    $(HASHTAB_H) langhooks.h $(BASIC_BLOCK_H) \
    $(TREE_FLOW_H) $(CGRAPH_H) $(FUNCTION_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) \
    $(EXCEPT_H) $(TIMEVAR_H) pointer-set.h $(LTO_STREAMER_H) \
-   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H)
+   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H) $(TREE_PASS_H)
 lto-streamer-in.o: lto-streamer-in.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TM_H) toplev.h $(DIAGNOSTIC_CORE_H) $(EXPR_H) $(FLAGS_H) $(PARAMS_H) \
    input.h $(HASHTAB_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) $(TREE_PASS_H) \

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Stream cgraph_node.ipa_transforms_to_apply
  2012-11-04 22:44 [PATCH] Stream cgraph_node.ipa_transforms_to_apply Martin Jambor
@ 2012-11-05 11:15 ` Jan Hubicka
  2012-11-06 17:46   ` Martin Jambor
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Hubicka @ 2012-11-05 11:15 UTC (permalink / raw)
  To: GCC Patches, Jan Hubicka

> Hi,
> 
> the following patch adds streaming ofcgraph_node.ipa_transforms_to_apply
> so that transformation phases of IPA passes are run in LTO too.  It is
> done by simple streaming of pass.static_pass_number and then looking
> it up among all_regular_ipa_passes.
> 
> Bootstrapped and tested on x86_64-linux, required to make aggregate
> IPA-CP work in LTO.
> 
> OK for trunk?
> 
> Thanks,
> 
> Martin
> 
> 
> 2012-11-03  Martin Jambor  <mjambor@suse.cz>
> 
> 	* lto-cgraph.c: Include tree-pass.h.
> 	(lto_output_node): Stream node->ipa_transforms_to_apply.
> 	(input_node): Likewise.
> 	* Makefile.in (lto-cgraph.o): Add TREE_PASS_H to dependencies.
> +  count = streamer_read_hwi (ib);
> +  node->ipa_transforms_to_apply = NULL;
> +  for (i = 0; i < count; i++)
> +    {
> +      struct opt_pass *pass;
> +      int pi = streamer_read_hwi (ib);
> +
> +      for (pass = all_regular_ipa_passes; pass; pass = pass->next)
> +	if (pass->static_pass_number == pi)

passes.c compute vector translating IDs to pass structures, please export it and use it here;
OK with this change.

Honza
> +	  {
> +	    VEC_safe_push (ipa_opt_pass, heap, node->ipa_transforms_to_apply,
> +			   (struct ipa_opt_pass_d *) pass);
> +	    break;
> +	  }
> +      gcc_assert (pass);
> +    }
> +
>    if (tag == LTO_symtab_analyzed_node)
>      ref = streamer_read_hwi (ib);
>  
> Index: src/gcc/Makefile.in
> ===================================================================
> --- src.orig/gcc/Makefile.in
> +++ src/gcc/Makefile.in
> @@ -2146,7 +2146,7 @@ lto-cgraph.o: lto-cgraph.c $(CONFIG_H) $
>     $(HASHTAB_H) langhooks.h $(BASIC_BLOCK_H) \
>     $(TREE_FLOW_H) $(CGRAPH_H) $(FUNCTION_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) \
>     $(EXCEPT_H) $(TIMEVAR_H) pointer-set.h $(LTO_STREAMER_H) \
> -   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H)
> +   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H) $(TREE_PASS_H)
>  lto-streamer-in.o: lto-streamer-in.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
>     $(TM_H) toplev.h $(DIAGNOSTIC_CORE_H) $(EXPR_H) $(FLAGS_H) $(PARAMS_H) \
>     input.h $(HASHTAB_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) $(TREE_PASS_H) \

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Stream cgraph_node.ipa_transforms_to_apply
  2012-11-05 11:15 ` Jan Hubicka
@ 2012-11-06 17:46   ` Martin Jambor
  0 siblings, 0 replies; 3+ messages in thread
From: Martin Jambor @ 2012-11-06 17:46 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: GCC Patches

Hi,

On Mon, Nov 05, 2012 at 12:15:50PM +0100, Jan Hubicka wrote:
> > Hi,
> > 
> > the following patch adds streaming ofcgraph_node.ipa_transforms_to_apply
> > so that transformation phases of IPA passes are run in LTO too.  It is
> > done by simple streaming of pass.static_pass_number and then looking
> > it up among all_regular_ipa_passes.
> > 
> > Bootstrapped and tested on x86_64-linux, required to make aggregate
> > IPA-CP work in LTO.
> > 
> > OK for trunk?
> > 
> > Thanks,
> > 
> > Martin
> > 
> > 
> > 2012-11-03  Martin Jambor  <mjambor@suse.cz>
> > 
> > 	* lto-cgraph.c: Include tree-pass.h.
> > 	(lto_output_node): Stream node->ipa_transforms_to_apply.
> > 	(input_node): Likewise.
> > 	* Makefile.in (lto-cgraph.o): Add TREE_PASS_H to dependencies.
> > +  count = streamer_read_hwi (ib);
> > +  node->ipa_transforms_to_apply = NULL;
> > +  for (i = 0; i < count; i++)
> > +    {
> > +      struct opt_pass *pass;
> > +      int pi = streamer_read_hwi (ib);
> > +
> > +      for (pass = all_regular_ipa_passes; pass; pass = pass->next)
> > +	if (pass->static_pass_number == pi)
> 
> passes.c compute vector translating IDs to pass structures, please export it and use it here;
> OK with this change.
> 

The following passes bootstrap and testsuite run on
x86_64-linux.  I will commit it tomorrow morning unless somebody
objects.

Thanks,

Martin
 

2012-11-06  Martin Jambor  <mjambor@suse.cz>

	* lto-cgraph.c: Include tree-pass.h.
	(lto_output_node): Stream node->ipa_transforms_to_apply.
	(input_node): Likewise.
	* tree-pass.h (passes_by_id): Declare.
	(passes_by_id_size): Likewise.
	* Makefile.in (lto-cgraph.o): Add TREE_PASS_H to dependencies.

Index: src/gcc/lto-cgraph.c
===================================================================
--- src.orig/gcc/lto-cgraph.c
+++ src/gcc/lto-cgraph.c
@@ -45,6 +45,7 @@ along with GCC; see the file COPYING3.
 #include "data-streamer.h"
 #include "tree-streamer.h"
 #include "gcov-io.h"
+#include "tree-pass.h"
 
 static void output_cgraph_opt_summary (void);
 static void input_cgraph_opt_summary (VEC (symtab_node, heap) * nodes);
@@ -377,6 +378,8 @@ lto_output_node (struct lto_simple_outpu
   intptr_t ref;
   bool in_other_partition = false;
   struct cgraph_node *clone_of;
+  struct ipa_opt_pass_d *pass;
+  int i;
 
   boundary_p = !lto_symtab_encoder_in_partition_p (encoder, (symtab_node)node);
 
@@ -432,6 +435,12 @@ lto_output_node (struct lto_simple_outpu
   streamer_write_hwi_stream (ob->main_stream, node->count);
   streamer_write_hwi_stream (ob->main_stream, node->count_materialization_scale);
 
+  streamer_write_hwi_stream (ob->main_stream,
+			     VEC_length (ipa_opt_pass,
+					 node->ipa_transforms_to_apply));
+  FOR_EACH_VEC_ELT (ipa_opt_pass, node->ipa_transforms_to_apply, i, pass)
+    streamer_write_hwi_stream (ob->main_stream, pass->pass.static_pass_number);
+
   if (tag == LTO_symtab_analyzed_node)
     {
       if (node->global.inlined_to)
@@ -897,6 +906,7 @@ input_node (struct lto_file_decl_data *f
   int ref = LCC_NOT_FOUND, ref2 = LCC_NOT_FOUND;
   int clone_ref;
   int order;
+  int i, count;
 
   order = streamer_read_hwi (ib) + order_base;
   clone_ref = streamer_read_hwi (ib);
@@ -919,6 +929,19 @@ input_node (struct lto_file_decl_data *f
   node->count = streamer_read_hwi (ib);
   node->count_materialization_scale = streamer_read_hwi (ib);
 
+  count = streamer_read_hwi (ib);
+  node->ipa_transforms_to_apply = NULL;
+  for (i = 0; i < count; i++)
+    {
+      struct opt_pass *pass;
+      int pid = streamer_read_hwi (ib);
+
+      gcc_assert (pid < passes_by_id_size);
+      pass = passes_by_id[pid];
+      VEC_safe_push (ipa_opt_pass, heap, node->ipa_transforms_to_apply,
+		     (struct ipa_opt_pass_d *) pass);
+    }
+
   if (tag == LTO_symtab_analyzed_node)
     ref = streamer_read_hwi (ib);
 
Index: src/gcc/Makefile.in
===================================================================
--- src.orig/gcc/Makefile.in
+++ src/gcc/Makefile.in
@@ -2143,7 +2143,7 @@ lto-cgraph.o: lto-cgraph.c $(CONFIG_H) $
    $(HASHTAB_H) langhooks.h $(BASIC_BLOCK_H) \
    $(TREE_FLOW_H) $(CGRAPH_H) $(FUNCTION_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) \
    $(EXCEPT_H) $(TIMEVAR_H) pointer-set.h $(LTO_STREAMER_H) \
-   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H)
+   $(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H) $(TREE_PASS_H)
 lto-streamer-in.o: lto-streamer-in.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TM_H) toplev.h $(DIAGNOSTIC_CORE_H) $(EXPR_H) $(FLAGS_H) $(PARAMS_H) \
    input.h $(HASHTAB_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) $(TREE_PASS_H) \
Index: src/gcc/tree-pass.h
===================================================================
--- src.orig/gcc/tree-pass.h
+++ src/gcc/tree-pass.h
@@ -544,6 +544,9 @@ extern void register_pass (struct regist
    directly in jump threading, and avoid peeling them next time.  */
 extern bool first_pass_instance;
 
+extern struct opt_pass **passes_by_id;
+extern int passes_by_id_size;
+
 /* Declare for plugins.  */
 extern void do_per_function_toporder (void (*) (void *), void *);
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-11-06 17:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-04 22:44 [PATCH] Stream cgraph_node.ipa_transforms_to_apply Martin Jambor
2012-11-05 11:15 ` Jan Hubicka
2012-11-06 17:46   ` Martin Jambor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).