aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-05-27 15:17:13 +0200
committerMartin Liska <marxin@gcc.gnu.org>2015-05-27 13:17:13 +0000
commitfaae53f8ca3766da999534c342e00e5eeadd9f9d (patch)
tree5df24c84558041a7e8f12ac911f7becfb5c8ddfa
parent4d45be537bef92d4222e89c958b26983d4009d2e (diff)
downloadgcc-faae53f8ca3766da999534c342e00e5eeadd9f9d.zip
gcc-faae53f8ca3766da999534c342e00e5eeadd9f9d.tar.gz
gcc-faae53f8ca3766da999534c342e00e5eeadd9f9d.tar.bz2
LTO balanced map: add stats about insns and symbols.
* 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
-rw-r--r--gcc/lto/ChangeLog9
-rw-r--r--gcc/lto/lto-partition.c25
-rw-r--r--gcc/lto/lto-partition.h1
3 files changed, 34 insertions, 1 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 5fda100..6e27922 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -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
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 235b735..8c72d9e 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -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
diff --git a/gcc/lto/lto-partition.h b/gcc/lto/lto-partition.h
index 10065f9..a44e8e7 100644
--- a/gcc/lto/lto-partition.h
+++ b/gcc/lto/lto-partition.h
@@ -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;
};