diff options
author | Martin Liska <mliska@suse.cz> | 2018-11-05 14:36:29 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-11-05 13:36:29 +0000 |
commit | 40ce7fa6dd38f8ac26d576c84f5dbe4362aa902b (patch) | |
tree | 94fa1f477283ce96ec503e9878181a2db6833334 /gcc/tree.c | |
parent | 00e6775a5faa43702e96e315e7a1c22297983f2a (diff) | |
download | gcc-40ce7fa6dd38f8ac26d576c84f5dbe4362aa902b.zip gcc-40ce7fa6dd38f8ac26d576c84f5dbe4362aa902b.tar.gz gcc-40ce7fa6dd38f8ac26d576c84f5dbe4362aa902b.tar.bz2 |
Come up with SIZE_AMOUNT and use it in memory statistics and sort stats.
2018-11-05 Martin Liska <mliska@suse.cz>
* alloc-pool.h (struct pool_usage): Use SIZE_AMOUNT.
* bitmap.h (struct bitmap_usage): Likewise.
* ggc-common.c (SCALE): Remove.
(LABEL): Likewise.
(struct ggc_usage): Use SIZE_AMOUNT. And update
compare method.
* ggc-page.c (SCALE): Remove.
(STAT_LABEL): Remove.
(ggc_print_statistics): Use SIZE_AMOUNT.
* gimple.h (SCALE): Remove.
(LABEL): Likewise.
* input.c (ONE_K): Remove.
(ONE_M): Likewise.
(SCALE): Likewise.
(STAT_LABEL): Likewise.
(FORMAT_AMOUNT): Likewise.
(dump_line_table_statistics): Use SIZE_AMOUNT.
* mem-stats.h (struct mem_usage): Likewise.
* rtl.c (dump_rtx_statistics): Likewise.
(rtx_alloc_counts): Change type to size_t.
(rtx_alloc_sizes): Likewise.
(rtx_count_cmp): New.
(dump_rtx_statistics): Sort first based on counts.
* tree.c (tree_nodes_cmp): New.
(tree_codes_cmp): New.
(dump_tree_statistics): Sort first based on counts.
* system.h (ONE_K): New.
(ONE_M): Likewise.
(SIZE_SCALE): Likewise.
(SIZE_LABEL): Likewise.
(SIZE_AMOUNT): Likewise.
* tree-cfg.c (dump_cfg_stats): Use SIZE_AMOUNT.
* tree-dfa.c (dump_dfa_stats): Likewise.
* tree-phinodes.c (phinodes_print_statistics): Likewise.
* tree-ssanames.c (ssanames_print_statistics): Likewise.
* tree.c (dump_tree_statistics): Likewise.
* vec.c (struct vec_usage): Likewise.
* trans-mem.c (tm_mangle): Enlarge buffer in order to not
trigger a -Werror=format-overflow with
--enable-gather-detailed-stats.
From-SVN: r265800
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 91 |
1 files changed, 67 insertions, 24 deletions
@@ -9226,6 +9226,28 @@ get_call_combined_fn (const_tree call) return CFN_LAST; } +/* Comparator of indices based on tree_node_counts. */ + +static int +tree_nodes_cmp (const void *p1, const void *p2) +{ + const unsigned *n1 = (const unsigned *)p1; + const unsigned *n2 = (const unsigned *)p2; + + return tree_node_counts[*n1] - tree_node_counts[*n2]; +} + +/* Comparator of indices based on tree_code_counts. */ + +static int +tree_codes_cmp (const void *p1, const void *p2) +{ + const unsigned *n1 = (const unsigned *)p1; + const unsigned *n2 = (const unsigned *)p2; + + return tree_code_counts[*n1] - tree_code_counts[*n2]; +} + #define TREE_MEM_USAGE_SPACES 40 /* Print debugging information about tree nodes generated during the compile, @@ -9236,34 +9258,55 @@ dump_tree_statistics (void) { if (GATHER_STATISTICS) { - int i; uint64_t total_nodes, total_bytes; fprintf (stderr, "\nKind Nodes Bytes\n"); mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); total_nodes = total_bytes = 0; - for (i = 0; i < (int) all_kinds; i++) - { - fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", - tree_node_kind_names[i], tree_node_counts[i], - tree_node_sizes[i]); - total_nodes += tree_node_counts[i]; - total_bytes += tree_node_sizes[i]; - } - mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); - fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", "Total", - total_nodes, total_bytes); - mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); - fprintf (stderr, "Code Nodes\n"); - mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); - for (i = 0; i < (int) MAX_TREE_CODES; i++) - fprintf (stderr, "%-32s %7" PRIu64 "\n", - get_tree_code_name ((enum tree_code) i), tree_code_counts[i]); - mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); - fprintf (stderr, "\n"); - ssanames_print_statistics (); - fprintf (stderr, "\n"); - phinodes_print_statistics (); - fprintf (stderr, "\n"); + + { + auto_vec<unsigned> indices (all_kinds); + for (unsigned i = 0; i < all_kinds; i++) + indices.quick_push (i); + indices.qsort (tree_nodes_cmp); + + for (unsigned i = 0; i < (int) all_kinds; i++) + { + unsigned j = indices[i]; + fprintf (stderr, "%-20s %6" PRIu64 "%c %9" PRIu64 "%c\n", + tree_node_kind_names[i], SIZE_AMOUNT (tree_node_counts[j]), + SIZE_AMOUNT (tree_node_sizes[j])); + total_nodes += tree_node_counts[j]; + total_bytes += tree_node_sizes[j]; + } + mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); + fprintf (stderr, "%-20s %6" PRIu64 "%c %9" PRIu64 "%c\n", "Total", + SIZE_AMOUNT (total_nodes), SIZE_AMOUNT (total_bytes)); + mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); + } + + { + fprintf (stderr, "Code Nodes\n"); + mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); + + auto_vec<unsigned> indices (MAX_TREE_CODES); + for (unsigned i = 0; i < MAX_TREE_CODES; i++) + indices.quick_push (i); + indices.qsort (tree_codes_cmp); + + for (unsigned i = 0; i < MAX_TREE_CODES; i++) + { + unsigned j = indices[i]; + fprintf (stderr, "%-32s %6" PRIu64 "%c\n", + get_tree_code_name ((enum tree_code) j), + SIZE_AMOUNT (tree_code_counts[j])); + } + mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); + fprintf (stderr, "\n"); + ssanames_print_statistics (); + fprintf (stderr, "\n"); + phinodes_print_statistics (); + fprintf (stderr, "\n"); + } } else fprintf (stderr, "(No per-node statistics)\n"); |