* [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).