summaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2014-12-09 07:56:26 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2014-12-09 07:56:26 +0000
commit6a73516d838ce30e52f576df0dee882e410038b3 (patch)
tree5ece19a9325a63309c49cb7f1c6ea6047a1b7aa4 /gcc/lto
parent227eabce47178c49601a13b801cca57d41494b8f (diff)
downloadgcc-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.c14
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);