From: hubicka Date: Tue, 11 May 2010 08:12:07 +0000 (+0000) Subject: * cgraph.c: Include ipa-utils.h X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=331339a195cccb92726d673b118fbb79f11b611e * cgraph.c: Include ipa-utils.h (cgraph_create_virtual_clone): Update references. * Makefile.in (cgraph.o): Add dependency at ipa-utils.h git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159258 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ade883db3a..3727c6b0a85 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-11 Jan Hubicka + + * cgraph.c: Include ipa-utils.h + (cgraph_create_virtual_clone): Update references. + * Makefile.in (cgraph.o): Add dependency at ipa-utils.h + 2010-05-11 Christian Borntraeger * tree-ssa-loop-prefetch.c (prune_ref_by_group_reuse): Reset diff --git a/gcc/Makefile.in b/gcc/Makefile.in index d919261f59a..1e6749a47bc 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2883,7 +2883,7 @@ cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ langhooks.h $(TOPLEV_H) $(FLAGS_H) $(GGC_H) $(TARGET_H) $(CGRAPH_H) \ gt-cgraph.h output.h intl.h $(BASIC_BLOCK_H) debug.h $(HASHTAB_H) \ $(TREE_INLINE_H) $(TREE_DUMP_H) $(TREE_FLOW_H) cif-code.def \ - value-prof.h $(EXCEPT_H) + value-prof.h $(EXCEPT_H) $(IPA_UTILS_H) cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) langhooks.h $(TREE_INLINE_H) $(TOPLEV_H) $(FLAGS_H) $(GGC_H) \ $(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(GIMPLE_H) \ diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 64a9c6559cc..5f609aaf434 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -96,6 +96,7 @@ The callgraph: #include "except.h" #include "diagnostic.h" #include "rtl.h" +#include "ipa-utils.h" static void cgraph_node_remove_callers (struct cgraph_node *node); static inline void cgraph_edge_remove_caller (struct cgraph_edge *e); @@ -2139,6 +2140,8 @@ cgraph_create_virtual_clone (struct cgraph_node *old_node, struct cgraph_node *new_node = NULL; tree new_decl; struct cgraph_node key, **slot; + size_t i; + struct ipa_replace_map *map; gcc_assert (tree_versionable_function_p (old_decl)); @@ -2170,6 +2173,26 @@ cgraph_create_virtual_clone (struct cgraph_node *old_node, DECL_WEAK (new_node->decl) = 0; new_node->clone.tree_map = tree_map; new_node->clone.args_to_skip = args_to_skip; + for (i = 0; VEC_iterate (ipa_replace_map_p, tree_map, i, map); i++) + { + tree var = map->new_tree; + + STRIP_NOPS (var); + if (TREE_CODE (var) != ADDR_EXPR) + continue; + var = get_base_var (var); + if (!var) + continue; + + /* Record references of the future statement initializing the constant + argument. */ + if (TREE_CODE (var) == FUNCTION_DECL) + ipa_record_reference (new_node, NULL, cgraph_node (var), + NULL, IPA_REF_ADDR, NULL); + else if (TREE_CODE (var) == VAR_DECL) + ipa_record_reference (new_node, NULL, NULL, varpool_node (var), + IPA_REF_ADDR, NULL); + } if (!args_to_skip) new_node->clone.combined_args_to_skip = old_node->clone.combined_args_to_skip; else if (old_node->clone.combined_args_to_skip)