aboutsummaryrefslogtreecommitdiff
path: root/libgcc/libgcov-util.c
diff options
context:
space:
mode:
authorRong Xu <xur@gcc.gnu.org>2014-10-07 04:02:31 +0000
committerRong Xu <xur@gcc.gnu.org>2014-10-07 04:02:31 +0000
commitafe0c5ee91ab504daf13f1c07ee5559b2ba5b6e4 (patch)
treed43837c0db3f96bc2d979153fab89e2f3767ac1f /libgcc/libgcov-util.c
parentc5b0abd3ef7a0d1311b63783435ddf15bbe507fa (diff)
downloadgcc-afe0c5ee91ab504daf13f1c07ee5559b2ba5b6e4.zip
gcc-afe0c5ee91ab504daf13f1c07ee5559b2ba5b6e4.tar.gz
gcc-afe0c5ee91ab504daf13f1c07ee5559b2ba5b6e4.tar.bz2
Makefile.in: Fix dependence.
2014-10-06 Rong Xu <xur@google.com> * gcc/Makefile.in: Fix dependence. * gcc/gcov-counter.def (GCOV_COUNTER_ICALL_TOPNV): Add indirect call topn profiler. * gcc/gcov-io.h: Ditto. * libgcc/Makefile.in: Ditto. * libgcc/libgcov-driver.c (gcov_sort_n_vals): New utility function. (gcov_sort_icall_topn_counter): Ditto. (gcov_sort_topn_counter_arrays): Ditto. (dump_one_gcov): Sort indirect_call topn counters. * libgcc/libgcov-merge.c (__gcov_merge_icall_topn): New merge function. * libgcc/libgcov-profiler.c (__gcov_topn_value_profiler_body): New utility function. (__gcov_indirect_call_topn_profiler): New profiler function. * libgcc/libgcov-util.c (__gcov_icall_topn_counter_op): New. * libgcc/libgcov.h: New decls. From-SVN: r215962
Diffstat (limited to 'libgcc/libgcov-util.c')
-rw-r--r--libgcc/libgcov-util.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libgcc/libgcov-util.c b/libgcc/libgcov-util.c
index e46ae06..38d434a 100644
--- a/libgcc/libgcov-util.c
+++ b/libgcc/libgcov-util.c
@@ -746,6 +746,25 @@ __gcov_single_counter_op (gcov_type *counters, unsigned n_counters,
}
}
+/* Performing FN upon indirect-call profile counters. */
+
+static void
+__gcov_icall_topn_counter_op (gcov_type *counters, unsigned n_counters,
+ counter_op_fn fn, void *data1, void *data2)
+{
+ unsigned i;
+
+ gcc_assert (!(n_counters % GCOV_ICALL_TOPN_NCOUNTS));
+ for (i = 0; i < n_counters; i += GCOV_ICALL_TOPN_NCOUNTS)
+ {
+ unsigned j;
+ gcov_type *value_array = &counters[i + 1];
+
+ for (j = 0; j < GCOV_ICALL_TOPN_NCOUNTS - 1; j += 2)
+ value_array[j + 1] = fn (value_array[j + 1], data1, data2);
+ }
+}
+
/* Scaling the counter value V by multiplying *(float*) DATA1. */
static gcov_type