diff options
author | Jan Hubicka <jh@suse.cz> | 2010-05-11 10:12:07 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-05-11 08:12:07 +0000 |
commit | a940b4d9ab2566bce05dd5abb9b90467684a43e8 (patch) | |
tree | f130064a1afb004534493bef2e1ee78ef7e2723b /gcc/cgraph.c | |
parent | 57762e976d599914956203d04f706744bec54ef1 (diff) | |
download | gcc-a940b4d9ab2566bce05dd5abb9b90467684a43e8.zip gcc-a940b4d9ab2566bce05dd5abb9b90467684a43e8.tar.gz gcc-a940b4d9ab2566bce05dd5abb9b90467684a43e8.tar.bz2 |
cgraph.c: Include ipa-utils.h
* cgraph.c: Include ipa-utils.h
(cgraph_create_virtual_clone): Update references.
* Makefile.in (cgraph.o): Add dependency at ipa-utils.h
From-SVN: r159258
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 64a9c65..5f609aa 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) |