diff options
author | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-22 09:19:09 +0000 |
---|---|---|
committer | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-22 09:19:09 +0000 |
commit | 2cc80ac37074949b269d06bd7b3b8e61932eb0be (patch) | |
tree | 844d04e2bcaef55647fafa93f6a03d340b1f3412 /gcc | |
parent | a5d83f7dfcdca9b77d234661d447ad5874597f81 (diff) | |
download | gcc-2cc80ac37074949b269d06bd7b3b8e61932eb0be.tar.gz |
ipa-prop uses symbol_summary class.
* lto-partition.c: Include of symbol-summary.h is added.
* lto-symtab.c: Likewise.
* lto.c: Likewise.
* auto-profile.c: Include of symbol-summary.h is added.
* cgraph.c: Likewise.
* cgraphbuild.c: Likewise.
* cgraphclones.c: Likewise.
* cgraphunit.c: Likewise.
* ipa-cp.c: Likewise.
* ipa-devirt.c: Likewise.
* ipa-icf.c: Likewise.
* ipa-inline-analysis.c (evaluate_properties_for_edge): New
ipa_node_params_sum data structure is used.
(inline_node_duplication_hook): Likewise.
(estimate_function_body_sizes): Likewise.
(remap_edge_change_prob): Likewise.
(inline_merge_summary): Likewise.
* ipa-inline-transform.c: Include of symbol-summary.h is added.
* ipa-inline.c (early_inliner): New ipa_node_params_sum data structure
is used.
* ipa-polymorphic-call.c: Include of symbol-summary.h is added.
* ipa-profile.c: Include of symbol-summary.h is added.
* ipa-prop.c (ipa_propagate_indirect_call_infos): New ipa_node_params_sum
data structure is used.
(ipa_node_params::~ipa_node_params): New function.
(ipa_free_all_node_params): Destruction is simplified.
(ipa_node_removal_hook): Removed.
(ipa_add_new_function): Renamed from ipa_node_duplication_hook.
(ipa_node_params_t::duplicate): New function.
(ipa_register_cgraph_hooks): Few hooks are removed.
(ipa_unregister_cgraph_hooks): Likewise.
(ipa_prop_write_jump_functions): New ipa_node_params_sum is used.
* ipa-prop.h (struct ipa_node_params): Destructor introduced for
the structure.
(ipa_check_create_node_params): Vector for ipa_node_params is replaced
with function_summary.
* ipa-split.c: Include of symbol-summary.h is added.
* ipa-utils.c: Include of symbol-summary.h is added.
* ipa.c: Include of symbol-summary.h is added.
* omp-low.c: Include of symbol-summary.h is added.
* tree-inline.c: Include of symbol-summary.h is added.
* tree-sra.c: Include of symbol-summary.h is added.
* tree-ssa-pre.c: Include of symbol-summary.h is added.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@219005 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 43 | ||||
-rw-r--r-- | gcc/auto-profile.c | 1 | ||||
-rw-r--r-- | gcc/cgraph.c | 1 | ||||
-rw-r--r-- | gcc/cgraphbuild.c | 1 | ||||
-rw-r--r-- | gcc/cgraphclones.c | 1 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 1 | ||||
-rw-r--r-- | gcc/ipa-cp.c | 1 | ||||
-rw-r--r-- | gcc/ipa-devirt.c | 1 | ||||
-rw-r--r-- | gcc/ipa-icf.c | 1 | ||||
-rw-r--r-- | gcc/ipa-inline-analysis.c | 13 | ||||
-rw-r--r-- | gcc/ipa-inline-transform.c | 1 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 3 | ||||
-rw-r--r-- | gcc/ipa-polymorphic-call.c | 1 | ||||
-rw-r--r-- | gcc/ipa-profile.c | 1 | ||||
-rw-r--r-- | gcc/ipa-prop.c | 103 | ||||
-rw-r--r-- | gcc/ipa-prop.h | 32 | ||||
-rw-r--r-- | gcc/ipa-split.c | 1 | ||||
-rw-r--r-- | gcc/ipa-utils.c | 1 | ||||
-rw-r--r-- | gcc/ipa.c | 1 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto-partition.c | 1 | ||||
-rw-r--r-- | gcc/lto/lto-symtab.c | 1 | ||||
-rw-r--r-- | gcc/lto/lto.c | 1 | ||||
-rw-r--r-- | gcc/omp-low.c | 1 | ||||
-rw-r--r-- | gcc/tree-inline.c | 1 | ||||
-rw-r--r-- | gcc/tree-sra.c | 1 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 1 |
27 files changed, 136 insertions, 85 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d5e2b7b8899..abe1785955f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,48 @@ 2014-12-22 Martin Liska <mliska@suse.cz> + * auto-profile.c: Include of symbol-summary.h is added. + * cgraph.c: Likewise. + * cgraphbuild.c: Likewise. + * cgraphclones.c: Likewise. + * cgraphunit.c: Likewise. + * ipa-cp.c: Likewise. + * ipa-devirt.c: Likewise. + * ipa-icf.c: Likewise. + * ipa-inline-analysis.c (evaluate_properties_for_edge): New + ipa_node_params_sum data structure is used. + (inline_node_duplication_hook): Likewise. + (estimate_function_body_sizes): Likewise. + (remap_edge_change_prob): Likewise. + (inline_merge_summary): Likewise. + * ipa-inline-transform.c: Include of symbol-summary.h is added. + * ipa-inline.c (early_inliner): New ipa_node_params_sum data structure + is used. + * ipa-polymorphic-call.c: Include of symbol-summary.h is added. + * ipa-profile.c: Include of symbol-summary.h is added. + * ipa-prop.c (ipa_propagate_indirect_call_infos): New ipa_node_params_sum + data structure is used. + (ipa_node_params::~ipa_node_params): New function. + (ipa_free_all_node_params): Destruction is simplified. + (ipa_node_removal_hook): Removed. + (ipa_add_new_function): Renamed from ipa_node_duplication_hook. + (ipa_node_params_t::duplicate): New function. + (ipa_register_cgraph_hooks): Few hooks are removed. + (ipa_unregister_cgraph_hooks): Likewise. + (ipa_prop_write_jump_functions): New ipa_node_params_sum is used. + * ipa-prop.h (struct ipa_node_params): Destructor introduced for + the structure. + (ipa_check_create_node_params): Vector for ipa_node_params is replaced + with function_summary. + * ipa-split.c: Include of symbol-summary.h is added. + * ipa-utils.c: Include of symbol-summary.h is added. + * ipa.c: Include of symbol-summary.h is added. + * omp-low.c: Include of symbol-summary.h is added. + * tree-inline.c: Include of symbol-summary.h is added. + * tree-sra.c: Include of symbol-summary.h is added. + * tree-ssa-pre.c: Include of symbol-summary.h is added. + +2014-12-22 Martin Liska <mliska@suse.cz> + * cgraph.h (symbol_table::allocate_cgraph_symbol): Summary UID is filled up. * symbol-summary.h: New file. diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c index 085bbd6ec54..a7fa559fee5 100644 --- a/gcc/auto-profile.c +++ b/gcc/auto-profile.c @@ -67,6 +67,7 @@ along with GCC; see the file COPYING3. If not see #include "coverage.h" #include "params.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "tree-inline.h" diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 50c7b34b3dc..c415a0302f3 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -72,6 +72,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-utils.h" #include "lto-streamer.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "cfgloop.h" diff --git a/gcc/cgraphbuild.c b/gcc/cgraphbuild.c index 53acb43dc56..2a5bc9b2eb3 100644 --- a/gcc/cgraphbuild.c +++ b/gcc/cgraphbuild.c @@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-utils.h" #include "except.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c index 43d81a9f0ab..77d0b118158 100644 --- a/gcc/cgraphclones.c +++ b/gcc/cgraphclones.c @@ -103,6 +103,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "tree-iterator.h" #include "tree-dump.h" diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index b0f78ef908e..41b284c466b 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -203,6 +203,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "tree-iterator.h" #include "tree-pass.h" diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 79a1799d901..ba86f0e8583 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -123,6 +123,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "bitmap.h" #include "tree-pass.h" diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 9f8dcb57ceb..497db77e458 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -139,6 +139,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-expr.h" #include "gimple.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "diagnostic.h" diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 244edaa1bc4..6cdc21b1ae6 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -87,6 +87,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "cfgloop.h" diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 3b622f2f0e4..888d6e35f85 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -110,6 +110,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "lto-streamer.h" #include "data-streamer.h" @@ -920,7 +921,7 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p, if (known_contexts_ptr) known_contexts_ptr->create (0); - if (ipa_node_params_vector.exists () + if (ipa_node_params_sum && !e->call_stmt_cannot_inline_p && ((clause_ptr && info->conds) || known_vals_ptr || known_contexts_ptr)) { @@ -1142,7 +1143,7 @@ inline_node_duplication_hook (struct cgraph_node *src, /* When there are any replacements in the function body, see if we can figure out that something was optimized out. */ - if (ipa_node_params_vector.exists () && dst->clone.tree_map) + if (ipa_node_params_sum && dst->clone.tree_map) { vec<size_time_entry, va_gc> *entry = info->entry; /* Use SRC parm info since it may not be copied yet. */ @@ -2487,7 +2488,7 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early) calculate_dominance_info (CDI_DOMINATORS); loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS); - if (ipa_node_params_vector.exists ()) + if (ipa_node_params_sum) { parms_info = IPA_NODE_REF (node); nonconstant_names.safe_grow_cleared @@ -2637,7 +2638,7 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early) nonconstant_names[SSA_NAME_VERSION (gimple_call_lhs (stmt))] = false_p; } - if (ipa_node_params_vector.exists ()) + if (ipa_node_params_sum) { int count = gimple_call_num_args (stmt); int i; @@ -3384,7 +3385,7 @@ static void remap_edge_change_prob (struct cgraph_edge *inlined_edge, struct cgraph_edge *edge) { - if (ipa_node_params_vector.exists ()) + if (ipa_node_params_sum) { int i; struct ipa_edge_args *args = IPA_EDGE_REF (edge); @@ -3540,7 +3541,7 @@ inline_merge_summary (struct cgraph_edge *edge) else toplev_predicate = true_predicate (); - if (ipa_node_params_vector.exists () && callee_info->conds) + if (ipa_node_params_sum && callee_info->conds) { struct ipa_edge_args *args = IPA_EDGE_REF (edge); int count = ipa_get_cs_argument_count (args); diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c index 063cd94cda6..62f68f09972 100644 --- a/gcc/ipa-inline-transform.c +++ b/gcc/ipa-inline-transform.c @@ -51,6 +51,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "tree-inline.h" diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 451695f0a80..dc017c6ff46 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -128,6 +128,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "except.h" #include "target.h" @@ -2394,7 +2395,7 @@ early_inliner (function *fun) it. This may confuse ourself when early inliner decide to inline call to function clone, because function clones don't have parameter list in ipa-prop matching their signature. */ - if (ipa_node_params_vector.exists ()) + if (ipa_node_params_sum) return 0; #ifdef ENABLE_CHECKING diff --git a/gcc/ipa-polymorphic-call.c b/gcc/ipa-polymorphic-call.c index bfd4bd4f0a5..75820a99934 100644 --- a/gcc/ipa-polymorphic-call.c +++ b/gcc/ipa-polymorphic-call.c @@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-expr.h" #include "gimple.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "diagnostic.h" diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c index f540bd6558b..eaa6b4960a8 100644 --- a/gcc/ipa-profile.c +++ b/gcc/ipa-profile.c @@ -82,6 +82,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-inline.h" #include "lto-streamer.h" #include "data-streamer.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 50adefbcde5..febcd0cef87 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -54,6 +54,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "bitmap.h" #include "gimple-ssa.h" @@ -131,8 +132,8 @@ struct func_body_info unsigned int aa_walked; }; -/* Vector where the parameter infos are actually stored. */ -vec<ipa_node_params> ipa_node_params_vector; +/* Function summary where the parameter infos are actually stored. */ +ipa_node_params_t *ipa_node_params_sum = NULL; /* Vector of IPA-CP transformation data for each clone. */ vec<ipcp_transformation_summary, va_gc> *ipcp_transformations; /* Vector where the parameter infos are actually stored. */ @@ -140,9 +141,7 @@ vec<ipa_edge_args, va_gc> *ipa_edge_args_vector; /* Holders of ipa cgraph hooks: */ static struct cgraph_edge_hook_list *edge_removal_hook_holder; -static struct cgraph_node_hook_list *node_removal_hook_holder; static struct cgraph_2edge_hook_list *edge_duplication_hook_holder; -static struct cgraph_2node_hook_list *node_duplication_hook_holder; static struct cgraph_node_hook_list *function_insertion_hook_holder; /* Description of a reference to an IPA constant. */ @@ -3300,7 +3299,7 @@ ipa_propagate_indirect_call_infos (struct cgraph_edge *cs, bool changed; /* Do nothing if the preparation phase has not been carried out yet (i.e. during early inlining). */ - if (!ipa_node_params_vector.exists ()) + if (!ipa_node_params_sum) return false; gcc_assert (ipa_edge_args_vector); @@ -3340,16 +3339,21 @@ ipa_free_all_edge_args (void) /* Frees all dynamically allocated structures that the param info points to. */ -void -ipa_free_node_params_substructures (struct ipa_node_params *info) +ipa_node_params::~ipa_node_params () { - info->descriptors.release (); - free (info->lattices); + descriptors.release (); + free (lattices); /* Lattice values and their sources are deallocated with their alocation pool. */ - info->known_csts.release (); - info->known_contexts.release (); - memset (info, 0, sizeof (*info)); + known_contexts.release (); + + lattices = NULL; + ipcp_orig_node = NULL; + analysis_done = 0; + node_enqueued = 0; + do_clone_for_all_contexts = 0; + is_all_contexts_clone = 0; + node_dead = 0; } /* Free all ipa_node_params structures. */ @@ -3357,13 +3361,8 @@ ipa_free_node_params_substructures (struct ipa_node_params *info) void ipa_free_all_node_params (void) { - int i; - struct ipa_node_params *info; - - FOR_EACH_VEC_ELT (ipa_node_params_vector, i, info) - ipa_free_node_params_substructures (info); - - ipa_node_params_vector.release (); + delete ipa_node_params_sum; + ipa_node_params_sum = NULL; } /* Grow ipcp_transformations if necessary. */ @@ -3416,26 +3415,11 @@ ipa_edge_removal_hook (struct cgraph_edge *cs, void *data ATTRIBUTE_UNUSED) ipa_free_edge_args_substructures (IPA_EDGE_REF (cs)); } -/* Hook that is called by cgraph.c when a node is removed. */ - -static void -ipa_node_removal_hook (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) -{ - /* During IPA-CP updating we can be called on not-yet analyze clones. */ - if (ipa_node_params_vector.length () > (unsigned)node->uid) - ipa_free_node_params_substructures (IPA_NODE_REF (node)); - if (vec_safe_length (ipcp_transformations) > (unsigned)node->uid) - { - (*ipcp_transformations)[(unsigned)node->uid].agg_values = NULL; - (*ipcp_transformations)[(unsigned)node->uid].alignments = NULL; - } -} - /* Hook that is called by cgraph.c when an edge is duplicated. */ static void ipa_edge_duplication_hook (struct cgraph_edge *src, struct cgraph_edge *dst, - __attribute__((unused)) void *data) + void *) { struct ipa_edge_args *old_args, *new_args; unsigned int i; @@ -3535,18 +3519,23 @@ ipa_edge_duplication_hook (struct cgraph_edge *src, struct cgraph_edge *dst, } } -/* Hook that is called by cgraph.c when a node is duplicated. */ +/* Analyze newly added function into callgraph. */ static void -ipa_node_duplication_hook (struct cgraph_node *src, struct cgraph_node *dst, - ATTRIBUTE_UNUSED void *data) +ipa_add_new_function (cgraph_node *node, void *data ATTRIBUTE_UNUSED) { - struct ipa_node_params *old_info, *new_info; - struct ipa_agg_replacement_value *old_av, *new_av; + if (node->has_gimple_body_p ()) + ipa_analyze_node (node); +} - ipa_check_create_node_params (); - old_info = IPA_NODE_REF (src); - new_info = IPA_NODE_REF (dst); +/* Hook that is called by summary when a node is duplicated. */ + +void +ipa_node_params_t::duplicate(cgraph_node *src, cgraph_node *dst, + ipa_node_params *old_info, + ipa_node_params *new_info) +{ + ipa_agg_replacement_value *old_av, *new_av; new_info->descriptors = old_info->descriptors.copy (); new_info->lattices = NULL; @@ -3587,35 +3576,20 @@ ipa_node_duplication_hook (struct cgraph_node *src, struct cgraph_node *dst, } } - -/* Analyze newly added function into callgraph. */ - -static void -ipa_add_new_function (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) -{ - if (node->has_gimple_body_p ()) - ipa_analyze_node (node); -} - /* Register our cgraph hooks if they are not already there. */ void ipa_register_cgraph_hooks (void) { + ipa_check_create_node_params (); + if (!edge_removal_hook_holder) edge_removal_hook_holder = symtab->add_edge_removal_hook (&ipa_edge_removal_hook, NULL); - if (!node_removal_hook_holder) - node_removal_hook_holder = - symtab->add_cgraph_removal_hook (&ipa_node_removal_hook, NULL); if (!edge_duplication_hook_holder) edge_duplication_hook_holder = symtab->add_edge_duplication_hook (&ipa_edge_duplication_hook, NULL); - if (!node_duplication_hook_holder) - node_duplication_hook_holder = - symtab->add_cgraph_duplication_hook (&ipa_node_duplication_hook, NULL); - if (!function_insertion_hook_holder) - function_insertion_hook_holder = + function_insertion_hook_holder = symtab->add_cgraph_insertion_hook (&ipa_add_new_function, NULL); } @@ -3626,12 +3600,8 @@ ipa_unregister_cgraph_hooks (void) { symtab->remove_edge_removal_hook (edge_removal_hook_holder); edge_removal_hook_holder = NULL; - symtab->remove_cgraph_removal_hook (node_removal_hook_holder); - node_removal_hook_holder = NULL; symtab->remove_edge_duplication_hook (edge_duplication_hook_holder); edge_duplication_hook_holder = NULL; - symtab->remove_cgraph_duplication_hook (node_duplication_hook_holder); - node_duplication_hook_holder = NULL; symtab->remove_cgraph_insertion_hook (function_insertion_hook_holder); function_insertion_hook_holder = NULL; } @@ -4801,8 +4771,7 @@ ipa_prop_write_jump_functions (void) lto_symtab_encoder_iterator lsei; lto_symtab_encoder_t encoder; - - if (!ipa_node_params_vector.exists ()) + if (!ipa_node_params_sum) return; ob = create_output_block (LTO_section_jump_functions); diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 76b503382a6..16ab1d08e89 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -20,7 +20,6 @@ along with GCC; see the file COPYING3. If not see #ifndef IPA_PROP_H #define IPA_PROP_H - /* The following definitions and interfaces are used by interprocedural analyses or parameters. */ @@ -301,6 +300,8 @@ struct ipa_param_descriptor struct ipa_node_params { + ~ipa_node_params (); + /* Information about individual formal parameters that are gathered when summaries are generated. */ vec<ipa_param_descriptor> descriptors; @@ -470,10 +471,22 @@ ipa_get_ith_polymorhic_call_context (struct ipa_edge_args *args, int i) return &(*args->polymorphic_call_contexts)[i]; } -/* Types of vectors holding the infos. */ +/* Callgraph summary for ipa_node_params. */ +class ipa_node_params_t: public function_summary <ipa_node_params *> +{ +public: + ipa_node_params_t (symbol_table *table): + function_summary<ipa_node_params *> (table) { } -/* Vector where the parameter infos are actually stored. */ -extern vec<ipa_node_params> ipa_node_params_vector; + /* Hook that is called by summary when a node is duplicated. */ + virtual void duplicate (cgraph_node *node, + cgraph_node *node2, + ipa_node_params *data, + ipa_node_params *data2); +}; + +/* Function summary where the parameter infos are actually stored. */ +extern ipa_node_params_t *ipa_node_params_sum; /* Vector of IPA-CP transformation data for each clone. */ extern GTY(()) vec<ipcp_transformation_summary, va_gc> *ipcp_transformations; /* Vector where the parameter infos are actually stored. */ @@ -481,7 +494,7 @@ extern GTY(()) vec<ipa_edge_args, va_gc> *ipa_edge_args_vector; /* Return the associated parameter/argument info corresponding to the given node/edge. */ -#define IPA_NODE_REF(NODE) (&ipa_node_params_vector[(NODE)->uid]) +#define IPA_NODE_REF(NODE) (ipa_node_params_sum->get (NODE)) #define IPA_EDGE_REF(EDGE) (&(*ipa_edge_args_vector)[(EDGE)->uid]) /* This macro checks validity of index returned by ipa_get_param_decl_index function. */ @@ -491,11 +504,11 @@ extern GTY(()) vec<ipa_edge_args, va_gc> *ipa_edge_args_vector; void ipa_create_all_node_params (void); void ipa_create_all_edge_args (void); void ipa_free_edge_args_substructures (struct ipa_edge_args *); -void ipa_free_node_params_substructures (struct ipa_node_params *); void ipa_free_all_node_params (void); void ipa_free_all_edge_args (void); void ipa_free_all_structures_after_ipa_cp (void); void ipa_free_all_structures_after_iinln (void); + void ipa_register_cgraph_hooks (void); int count_formal_params (tree fndecl); @@ -505,11 +518,8 @@ int count_formal_params (tree fndecl); static inline void ipa_check_create_node_params (void) { - if (!ipa_node_params_vector.exists ()) - ipa_node_params_vector.create (symtab->cgraph_max_uid); - - if (ipa_node_params_vector.length () <= (unsigned) symtab->cgraph_max_uid) - ipa_node_params_vector.safe_grow_cleared (symtab->cgraph_max_uid + 1); + if (!ipa_node_params_sum) + ipa_node_params_sum = new ipa_node_params_t (symtab); } /* This function ensures the array of edge arguments infos is big enough to diff --git a/gcc/ipa-split.c b/gcc/ipa-split.c index 276de3c5dfb..2670643f06b 100644 --- a/gcc/ipa-split.c +++ b/gcc/ipa-split.c @@ -109,6 +109,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "gimple-ssa.h" #include "tree-cfg.h" diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c index c158837ba36..2e07f2022b2 100644 --- a/gcc/ipa-utils.c +++ b/gcc/ipa-utils.c @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see #include "langhooks.h" #include "lto-streamer.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" diff --git a/gcc/ipa.c b/gcc/ipa.c index d7ec4978533..aca9498b7ad 100644 --- a/gcc/ipa.c +++ b/gcc/ipa.c @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-iterator.h" #include "ipa-utils.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "tree-inline.h" diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 7f1088fa145..8e158bedef9 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,9 @@ +2014-12-22 Martin Liska <mliska@suse.cz> + + * lto-partition.c: Include of symbol-summary.h is added. + * lto-symtab.c: Likewise. + * lto.c: Likewise. + 2014-12-11 Jan Hubicka <hubicka@ucw.cz> PR ipa/61324 diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c index 809a4937b66..13beafbdb2a 100644 --- a/gcc/lto/lto-partition.c +++ b/gcc/lto/lto-partition.c @@ -45,6 +45,7 @@ along with GCC; see the file COPYING3. If not see #include "timevar.h" #include "params.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "ipa-utils.h" diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c index f5d82a74b08..0366067a75f 100644 --- a/gcc/lto/lto-symtab.c +++ b/gcc/lto/lto-symtab.c @@ -45,6 +45,7 @@ along with GCC; see the file COPYING3. If not see #include "lto-streamer.h" #include "ipa-utils.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "ipa-inline.h" #include "builtins.h" diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 324538a0cb8..7f5233fb559 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see #include "bitmap.h" #include "inchash.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "common.h" #include "debug.h" diff --git a/gcc/omp-low.c b/gcc/omp-low.c index a2e4737915b..a5cc857b02b 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -83,6 +83,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-cfgcleanup.h" #include "pretty-print.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "tree-nested.h" #include "tree-eh.h" diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 59f2dab8d08..b68770013d6 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -74,6 +74,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-ref.h" #include "cgraph.h" #include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "value-prof.h" #include "tree-pass.h" diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index f213c8076e6..4c0aa15bab9 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -115,6 +115,7 @@ along with GCC; see the file COPYING3. If not see #include "plugin-api.h" #include "ipa-ref.h" #include "cgraph.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "statistics.h" #include "params.h" diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 933cf36bc57..062dc681388 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -77,6 +77,7 @@ along with GCC; see the file COPYING3. If not see #include "plugin-api.h" #include "ipa-ref.h" #include "cgraph.h" +#include "symbol-summary.h" #include "ipa-prop.h" #include "tree-ssa-propagate.h" #include "ipa-utils.h" |