diff options
author | Ilya Enkovich <ilya.enkovich@intel.com> | 2014-12-09 07:56:26 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2014-12-09 07:56:26 +0000 |
commit | 6a73516d838ce30e52f576df0dee882e410038b3 (patch) | |
tree | 5ece19a9325a63309c49cb7f1c6ea6047a1b7aa4 /gcc/lto | |
parent | 227eabce47178c49601a13b801cca57d41494b8f (diff) | |
download | gcc-6a73516d838ce30e52f576df0dee882e410038b3.tar.gz |
lto-cgraph.c (input_cgraph_1): Don't break existing instrumentation clone references.
* lto-cgraph.c (input_cgraph_1): Don't break existing
instrumentation clone references.
* lto/lto-symtab.c (lto_cgraph_replace_node): Redirect
instrumented_version references appropriately.
From-SVN: r218507
Diffstat (limited to 'gcc/lto')
-rw-r--r-- | gcc/lto/lto-symtab.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c index 4c4e48af334..f5d82a74b08 100644 --- a/gcc/lto/lto-symtab.c +++ b/gcc/lto/lto-symtab.c @@ -99,6 +99,20 @@ lto_cgraph_replace_node (struct cgraph_node *node, /* Redirect incomming references. */ prevailing_node->clone_referring (node); + /* Fix instrumentation references. */ + if (node->instrumented_version) + { + gcc_assert (node->instrumentation_clone + == prevailing_node->instrumentation_clone); + node->instrumented_version->instrumented_version = prevailing_node; + if (!prevailing_node->instrumented_version) + prevailing_node->instrumented_version = node->instrumented_version; + /* Need to reset node->instrumented_version to NULL, + otherwise node removal code would reset + node->instrumented_version->instrumented_version. */ + node->instrumented_version = NULL; + } + ipa_merge_profiles (prevailing_node, node); lto_free_function_in_decl_state_for_node (node); |