aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2018-12-17 14:21:52 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2018-12-17 13:21:52 +0000
commit0418f237b2143b16fd344fedcebafaf73faab571 (patch)
treea51c791c9e0adbc06a8714b2da504ae64680f193
parentd7c00826362598d636ef1eb92a1b194d46b41473 (diff)
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/coverage.c28
-rw-r--r--gcc/coverage.h3
-rw-r--r--gcc/profile.c5
4 files changed, 34 insertions, 11 deletions
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 <hubicka@ucw.cz>
+
+ * 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 <senthilkumar.selvaraj@microchip.com>
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 <counts_entry>
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];