LTO balanced map: add stats about insns and symbols.
authorMartin Liska <mliska@suse.cz>
Wed, 27 May 2015 13:17:13 +0000 (15:17 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 27 May 2015 13:17:13 +0000 (13:17 +0000)
* lto-partition.c (new_partition): Reset number of symbols.
(add_symbol_to_partition_1): Increment number of symbols.
(undo_partition): Decrement number of symbols.
(lto_balanced_map): Dump number of symbols and insns that
belong to a partition.
* lto-partition.h (struct ltrans_partition_def): Add symbol counter.

From-SVN: r223750

gcc/lto/ChangeLog
gcc/lto/lto-partition.c
gcc/lto/lto-partition.h

index 5fda10033a8a85fc079d8ccad9b35ab8ea34e6b1..6e27922f6eec1e14b4e5534bbd3f4f01d5d1c51c 100644 (file)
@@ -1,3 +1,12 @@
+2015-05-27  Martin Liska  <mliska@suse.cz>
+
+       * lto-partition.c (new_partition): Reset number of symbols.
+       (add_symbol_to_partition_1): Increment number of symbols.
+       (undo_partition): Decrement number of symbols.
+       (lto_balanced_map): Dump number of symbols and insns that
+       belong to a partition.
+       * lto-partition.h (struct ltrans_partition_def): Add symbol counter.
+
 2015-05-22  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto.c (hash_canonical_type): Be sure we hash only types that
index 235b735a8fdb2c1b3cf527ad2d9f176ee5658cb0..8c72d9e9a41607ef0080f93210e1e38749566e9f 100644 (file)
@@ -73,6 +73,7 @@ new_partition (const char *name)
   part->encoder = lto_symtab_encoder_new (false);
   part->name = name;
   part->insns = 0;
+  part->symbols = 0;
   ltrans_partitions.safe_push (part);
   return part;
 }
@@ -157,6 +158,8 @@ add_symbol_to_partition_1 (ltrans_partition part, symtab_node *node)
   gcc_assert (c != SYMBOL_EXTERNAL
              && (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node)));
 
+  part->symbols++;
+
   lto_set_symtab_encoder_in_partition (part->encoder, node);
 
   if (symbol_partitioned_p (node))
@@ -274,6 +277,7 @@ undo_partition (ltrans_partition partition, unsigned int n_nodes)
     {
       symtab_node *node = lto_symtab_encoder_deref (partition->encoder,
                                                   n_nodes);
+      partition->symbols--;
       cgraph_node *cnode;
 
       /* After UNDO we no longer know what was visited.  */
@@ -462,7 +466,7 @@ lto_balanced_map (int n_lto_partitions)
   auto_vec<varpool_node *> varpool_order;
   int i;
   struct cgraph_node *node;
-  int total_size = 0, best_total_size = 0;
+  int original_total_size, total_size = 0, best_total_size = 0;
   int partition_size;
   ltrans_partition partition;
   int last_visited_node = 0;
@@ -488,6 +492,8 @@ lto_balanced_map (int n_lto_partitions)
          total_size += inline_summaries->get (node)->size;
       }
 
+  original_total_size = total_size;
+
   /* Streaming works best when the source units do not cross partition
      boundaries much.  This is because importing function from a source
      unit tends to import a lot of global trees defined there.  We should
@@ -782,6 +788,23 @@ lto_balanced_map (int n_lto_partitions)
   add_sorted_nodes (next_nodes, partition);
 
   free (order);
+
+  if (symtab->dump_file)
+    {
+      fprintf (symtab->dump_file, "\nPartition sizes:\n");
+      unsigned partitions = ltrans_partitions.length ();
+
+      for (unsigned i = 0; i < partitions ; i++)
+       {
+         ltrans_partition p = ltrans_partitions[i];
+         fprintf (symtab->dump_file, "partition %d contains %d (%2.2f%%)"
+                  " symbols and %d (%2.2f%%) insns\n", i, p->symbols,
+                  100.0 * p->symbols / n_nodes, p->insns,
+                  100.0 * p->insns / original_total_size);
+       }
+
+      fprintf (symtab->dump_file, "\n");
+    }
 }
 
 /* Return true if we must not change the name of the NODE.  The name as
index 10065f9039fd65029ab169b74be507bbc199cd63..a44e8e703c6f64887aae8ac5a4aabbf7d8e69487 100644 (file)
@@ -26,6 +26,7 @@ struct ltrans_partition_def
   lto_symtab_encoder_t encoder;
   const char * name;
   int insns;
+  int symbols;
   hash_set<symtab_node *> *initializers_visited;
 };