From: Jan Hubicka Date: Mon, 17 Dec 2018 13:21:52 +0000 (+0100) Subject: coverage.c (struct conts_entry): Add n_counts. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0418f237b2143b16fd344fedcebafaf73faab571;p=gcc.git coverage.c (struct conts_entry): Add n_counts. * coverage.c (struct conts_entry): Add n_counts. (remap_counts_file): Record number of ocunts. (get_coverage_counts): Verify that counts match. * coverage.h (get_coverage_counts): Update prototype. * profile.c (get_exec_counts. compute_value_histograms): Add n_counts parametrs. From-SVN: r267200 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e63c4c9b50b..17b32f52c8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-12-15 Jan Hubicka + + * coverage.c (struct conts_entry): Add n_counts. + (remap_counts_file): Record number of ocunts. + (get_coverage_counts): Verify that counts match. + * coverage.h (get_coverage_counts): Update prototype. + * profile.c (get_exec_counts. compute_value_histograms): Add + n_counts parametrs. + 2018-12-17 Senthil Kumar Selvaraj PR rtl-optimization/88253 diff --git a/gcc/coverage.c b/gcc/coverage.c index 9dc1cae28b1..f3ffac5f11e 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -74,6 +74,7 @@ struct counts_entry : pointer_hash unsigned lineno_checksum; unsigned cfg_checksum; gcov_type *counts; + unsigned n_counts; /* hash_table support. */ static inline hashval_t hash (const counts_entry *); @@ -260,6 +261,7 @@ read_counts_file (void) entry->lineno_checksum = lineno_checksum; entry->cfg_checksum = cfg_checksum; entry->counts = XCNEWVEC (gcov_type, n_counts); + entry->n_counts = n_counts; } else if (entry->lineno_checksum != lineno_checksum || entry->cfg_checksum != cfg_checksum) @@ -295,7 +297,7 @@ read_counts_file (void) gcov_type * get_coverage_counts (unsigned counter, unsigned cfg_checksum, - unsigned lineno_checksum) + unsigned lineno_checksum, unsigned int n_counts) { counts_entry *entry, elt; @@ -344,17 +346,27 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum, return NULL; } - if (entry->cfg_checksum != cfg_checksum) + if (entry->cfg_checksum != cfg_checksum || entry->n_counts != n_counts) { static int warned = 0; bool warning_printed = false; - warning_printed = - warning_at (DECL_SOURCE_LOCATION (current_function_decl), - OPT_Wcoverage_mismatch, - "the control flow of function %qD does not match " - "its profile data (counter %qs)", current_function_decl, - ctr_names[counter]); + if (entry->n_counts != n_counts) + warning_printed = + warning_at (DECL_SOURCE_LOCATION (current_function_decl), + OPT_Wcoverage_mismatch, + "number of counters in profile data for function %qD " + "does not match " + "its profile data (counter %qs, expected %i and have %i)", + current_function_decl, + ctr_names[counter], entry->n_counts, n_counts); + else + warning_printed = + warning_at (DECL_SOURCE_LOCATION (current_function_decl), + OPT_Wcoverage_mismatch, + "the control flow of function %qD does not match " + "its profile data (counter %qs)", current_function_decl, + ctr_names[counter]); if (warning_printed && dump_enabled_p ()) { dump_user_location_t loc diff --git a/gcc/coverage.h b/gcc/coverage.h index d612c38d159..f2a8c2939ac 100644 --- a/gcc/coverage.h +++ b/gcc/coverage.h @@ -52,7 +52,8 @@ extern tree tree_coverage_counter_addr (unsigned /*counter*/, unsigned/*num*/); /* Get all the counters for the current function. */ extern gcov_type *get_coverage_counts (unsigned /*counter*/, unsigned /*cfg_checksum*/, - unsigned /*lineno_checksum*/); + unsigned /*lineno_checksum*/, + unsigned /*n_counts*/); extern tree get_gcov_type (void); extern bool coverage_node_map_initialized_p (void); diff --git a/gcc/profile.c b/gcc/profile.c index ded0958f0aa..3c2ac33da55 100644 --- a/gcc/profile.c +++ b/gcc/profile.c @@ -218,7 +218,7 @@ get_exec_counts (unsigned cfg_checksum, unsigned lineno_checksum) } counts = get_coverage_counts (GCOV_COUNTER_ARCS, cfg_checksum, - lineno_checksum); + lineno_checksum, num_edges); if (!counts) return NULL; @@ -780,7 +780,8 @@ compute_value_histograms (histogram_values values, unsigned cfg_checksum, histogram_counts[t] = get_coverage_counts (COUNTER_FOR_HIST_TYPE (t), cfg_checksum, - lineno_checksum); + lineno_checksum, + n_histogram_counters[t]); if (histogram_counts[t]) any = 1; act_count[t] = histogram_counts[t];