Commit 6a73516d by Ilya Enkovich Committed by Ilya Enkovich

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
parent 227eabce
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com> 2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
* 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.
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
PR bootstrap/63995 PR bootstrap/63995
* tree-chkp.c (chkp_make_static_bounds): Share bounds var * tree-chkp.c (chkp_make_static_bounds): Share bounds var
between nodes sharing assembler name. between nodes sharing assembler name.
...@@ -1562,7 +1562,18 @@ input_cgraph_1 (struct lto_file_decl_data *file_data, ...@@ -1562,7 +1562,18 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
cnode->instrumented_version = cgraph_node::get (cnode->orig_decl); cnode->instrumented_version = cgraph_node::get (cnode->orig_decl);
if (cnode->instrumented_version) if (cnode->instrumented_version)
cnode->instrumented_version->instrumented_version = cnode; {
/* We may have multiple nodes for a single function which
will be merged later. To have a proper merge we need
to keep instrumentation_version reference between nodes
consistent: each instrumented_version reference should
have proper reverse reference. Thus don't break existing
instrumented_version reference if it already exists. */
if (cnode->instrumented_version->instrumented_version)
cnode->instrumented_version = NULL;
else
cnode->instrumented_version->instrumented_version = cnode;
}
/* Restore decl names reference. */ /* Restore decl names reference. */
if (IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (cnode->decl)) if (IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (cnode->decl))
......
...@@ -99,6 +99,20 @@ lto_cgraph_replace_node (struct cgraph_node *node, ...@@ -99,6 +99,20 @@ lto_cgraph_replace_node (struct cgraph_node *node,
/* Redirect incomming references. */ /* Redirect incomming references. */
prevailing_node->clone_referring (node); 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); ipa_merge_profiles (prevailing_node, node);
lto_free_function_in_decl_state_for_node (node); lto_free_function_in_decl_state_for_node (node);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment