aboutsummaryrefslogtreecommitdiff
path: root/gcc/coverage.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2020-01-31 13:10:14 +0100
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 13:09:43 -0300
commitfa2a18ee4ca39931554a23020d4919038a2b744b (patch)
tree13ef3919fbe52badaf6d74216f14c09f42f4405e /gcc/coverage.c
parent25093c16e27be52e52a1e8c387334ece0cd14b4a (diff)
Make TOPN counter dynamically allocated.
gcc/ChangeLog: * coverage.c (get_coverage_counts): Skip sanity check for TOP N counters as they have variable number of counters. * gcov-dump.c (main): Add new option -r. (print_usage): Likewise. (tag_counters): All new raw format. * gcov-io.h (struct gcov_kvp): New. (GCOV_TOPN_VALUES): Remove. (GCOV_TOPN_VALUES_COUNTERS): Likewise. (GCOV_TOPN_MEM_COUNTERS): New. (GCOV_TOPN_DISK_COUNTERS): Likewise. (GCOV_TOPN_MAXIMUM_TRACKED_VALUES): Likewise. * ipa-profile.c (ipa_profile_generate_summary): Use GCOV_TOPN_MAXIMUM_TRACKED_VALUES. (ipa_profile_write_edge_summary): Likewise. (ipa_profile_read_edge_summary): Likewise. (ipa_profile): Remove usage of GCOV_TOPN_VALUES. * profile.c (sort_hist_values): Sort variable number of counters. (compute_value_histograms): Special case for TOP N counters that have dynamic number of key-value pairs. * value-prof.c (dump_histogram_value): Dump variable number of key-value pairs. (stream_in_histogram_value): Stream in variable number of key-value pairs for TOP N counter. (get_nth_most_common_value): Deal with variable number of key-value pairs. (dump_ic_profile): Use GCOV_TOPN_MAXIMUM_TRACKED_VALUES for loop iteration. (gimple_find_values_to_profile): Set GCOV_TOPN_MEM_COUNTERS to n_counters. * doc/gcov-dump.texi: Document new -r option. libgcc/ChangeLog: * libgcov-driver.c (prune_topn_counter): Remove. (prune_counters): Likewise. (merge_one_data): Special case TOP N counters as they have variable length. (write_top_counters): New. (write_one_data): Special case TOP N. (dump_one_gcov): Do not prune TOP N counters. * libgcov-merge.c (merge_topn_values_set): Remove. (__gcov_merge_topn): Use gcov_topn_add_value. * libgcov-profiler.c (__gcov_topn_values_profiler_body): Likewise here. * libgcov.h (gcov_counter_add): New. (gcov_counter_set_if_null): Likewise. (gcov_topn_add_value): New.
Diffstat (limited to 'gcc/coverage.c')
-rw-r--r--gcc/coverage.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 7d82e44c152..1dcda4353cd 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -345,8 +345,11 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
can do about it. */
return NULL;
}
-
- if (entry->cfg_checksum != cfg_checksum || entry->n_counts != n_counts)
+
+ if (entry->cfg_checksum != cfg_checksum
+ || (counter != GCOV_COUNTER_V_INDIR
+ && counter != GCOV_COUNTER_V_TOPN
+ && entry->n_counts != n_counts))
{
static int warned = 0;
bool warning_printed = false;