ipa-utils.c (ipa_merge_profiles): Merge profile_id.
authorJan Hubicka <hubicka@ucw.cz>
Mon, 14 Apr 2014 17:18:54 +0000 (19:18 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 14 Apr 2014 17:18:54 +0000 (17:18 +0000)
* ipa-utils.c (ipa_merge_profiles): Merge profile_id.
* coverage.c (coverage_compute_profile_id): Handle externally visible
symbols.

* lto/lto-symtab.c (lto_cgraph_replace_node): Don't re-merge
tp_first_run.

From-SVN: r209387

gcc/ChangeLog
gcc/coverage.c
gcc/ipa-utils.c
gcc/lto/ChangeLog
gcc/lto/lto-symtab.c

index e641c6e..26d8d33 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-utils.c (ipa_merge_profiles): Merge profile_id.
+       * coverage.c (coverage_compute_profile_id): Handle externally visible
+       symbols.
+
 2014-04-14  Martin Jambor  <mjambor@suse.cz>
 
        * tree-sra.c (ipa_sra_preliminary_function_checks): Skip
index 4c06fa4..ff1e67d 100644 (file)
@@ -555,18 +555,29 @@ coverage_compute_lineno_checksum (void)
 unsigned
 coverage_compute_profile_id (struct cgraph_node *n)
 {
-  expanded_location xloc
-    = expand_location (DECL_SOURCE_LOCATION (n->decl));
-  unsigned chksum = xloc.line;
+  unsigned chksum;
 
-  chksum = coverage_checksum_string (chksum, xloc.file);
-  chksum = coverage_checksum_string
-    (chksum, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (n->decl)));
-  if (first_global_object_name)
-    chksum = coverage_checksum_string
-      (chksum, first_global_object_name);
-  chksum = coverage_checksum_string
-    (chksum, aux_base_name);
+  /* Externally visible symbols have unique name.  */
+  if (TREE_PUBLIC (n->decl) || DECL_EXTERNAL (n->decl))
+    {
+      chksum = coverage_checksum_string
+       (0, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (n->decl)));
+    }
+  else
+    {
+      expanded_location xloc
+       = expand_location (DECL_SOURCE_LOCATION (n->decl));
+
+      chksum = xloc.line;
+      chksum = coverage_checksum_string (chksum, xloc.file);
+      chksum = coverage_checksum_string
+       (chksum, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (n->decl)));
+      if (first_global_object_name)
+       chksum = coverage_checksum_string
+         (chksum, first_global_object_name);
+      chksum = coverage_checksum_string
+       (chksum, aux_base_name);
+    }
 
   /* Non-negative integers are hopefully small enough to fit in all targets.  */
   return chksum & 0x7fffffff;
index dccecb1..8e7c7cb 100644 (file)
@@ -660,6 +660,14 @@ ipa_merge_profiles (struct cgraph_node *dst,
   if (dst->tp_first_run > src->tp_first_run && src->tp_first_run)
     dst->tp_first_run = src->tp_first_run;
 
+  if (src->profile_id)
+    {
+      if (!dst->profile_id)
+       dst->profile_id = src->profile_id;
+      else
+       gcc_assert (src->profile_id == dst->profile_id);
+    }
+
   if (!dst->count)
     return;
   if (cgraph_dump_file)
index 2a7d863..4200a47 100644 (file)
@@ -1,3 +1,8 @@
+2014-04-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * lto/lto-symtab.c (lto_cgraph_replace_node): Don't re-merge
+       tp_first_run.
+
 2014-03-19  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto.c: Include ipa-inline.h
index 71242c8..8c83d3c 100644 (file)
@@ -91,12 +91,6 @@ lto_cgraph_replace_node (struct cgraph_node *node,
   if (node->decl != prevailing_node->decl)
     cgraph_release_function_body (node);
 
-  /* Time profile merging */
-  if (node->tp_first_run)
-    prevailing_node->tp_first_run = prevailing_node->tp_first_run ?
-      MIN (prevailing_node->tp_first_run, node->tp_first_run) :
-      node->tp_first_run;
-
   /* Finally remove the replaced node.  */
   cgraph_remove_node (node);
 }