summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2014-12-22 09:19:09 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2014-12-22 09:19:09 +0000
commit2cc80ac37074949b269d06bd7b3b8e61932eb0be (patch)
tree844d04e2bcaef55647fafa93f6a03d340b1f3412 /gcc
parenta5d83f7dfcdca9b77d234661d447ad5874597f81 (diff)
downloadgcc-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/ChangeLog43
-rw-r--r--gcc/auto-profile.c1
-rw-r--r--gcc/cgraph.c1
-rw-r--r--gcc/cgraphbuild.c1
-rw-r--r--gcc/cgraphclones.c1
-rw-r--r--gcc/cgraphunit.c1
-rw-r--r--gcc/ipa-cp.c1
-rw-r--r--gcc/ipa-devirt.c1
-rw-r--r--gcc/ipa-icf.c1
-rw-r--r--gcc/ipa-inline-analysis.c13
-rw-r--r--gcc/ipa-inline-transform.c1
-rw-r--r--gcc/ipa-inline.c3
-rw-r--r--gcc/ipa-polymorphic-call.c1
-rw-r--r--gcc/ipa-profile.c1
-rw-r--r--gcc/ipa-prop.c103
-rw-r--r--gcc/ipa-prop.h32
-rw-r--r--gcc/ipa-split.c1
-rw-r--r--gcc/ipa-utils.c1
-rw-r--r--gcc/ipa.c1
-rw-r--r--gcc/lto/ChangeLog6
-rw-r--r--gcc/lto/lto-partition.c1
-rw-r--r--gcc/lto/lto-symtab.c1
-rw-r--r--gcc/lto/lto.c1
-rw-r--r--gcc/omp-low.c1
-rw-r--r--gcc/tree-inline.c1
-rw-r--r--gcc/tree-sra.c1
-rw-r--r--gcc/tree-ssa-pre.c1
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"