Rename SINGE_VALUE to TOPN_VALUES counters.

2019-07-03  Martin Liska  <mliska@suse.cz>

	* gcov-counter.def (GCOV_COUNTER_V_SINGLE): Remove.
	(GCOV_COUNTER_V_TOPN): New.
	(GCOV_COUNTER_V_INDIR): Use _topn.
	* gcov-io.h (GCOV_DISK_SINGLE_VALUES): Remove.
	(GCOV_TOPN_VALUES): New.
	(GCOV_SINGLE_VALUE_COUNTERS): Remove.
	(GCOV_TOPN_VALUES_COUNTERS): New.
	* profile.c (instrument_values): Use HIST_TYPE_TOPN_VALUES.
	* tree-profile.c:
	(gimple_init_gcov_profiler): Rename variables from one_value
	to topn_values.
	(gimple_gen_one_value_profiler): Remove.
	(gimple_gen_topn_values_profiler): New function.
	* value-prof.c (dump_histogram_value): Use TOPN_VALUES
	names instead of SINGLE_VALUE.
	(stream_out_histogram_value): Likewise.
	(stream_in_histogram_value): Likewise.
	(get_most_common_single_value): Likewise.
	(gimple_divmod_fixed_value_transform): Likewise.
	(gimple_stringops_transform): Likewise.
	(gimple_divmod_values_to_profile): Likewise.
	(gimple_stringops_values_to_profile): Likewise.
	(gimple_find_values_to_profile): Likewise.
	* value-prof.h (enum hist_type): Rename to TOPN.
	(gimple_gen_one_value_profiler): Remove.
	(gimple_gen_topn_values_profiler): New.
2019-07-03  Martin Liska  <mliska@suse.cz>

	* Makefile.in: Use topn_values instead of one_value names.
	* libgcov-merge.c (__gcov_merge_single): Move to ...
	(__gcov_merge_topn): ... this.
	(merge_single_value_set): Move to ...
	(merge_topn_values_set): ... this.
	* libgcov-profiler.c (__gcov_one_value_profiler_body): Move to
	...
	(__gcov_topn_values_profiler_body): ... this.
	(__gcov_one_value_profiler_v2): Move to ...
	(__gcov_topn_values_profiler): ... this.
	(__gcov_one_value_profiler_v2_atomic): Move to ...
	(__gcov_topn_values_profiler_atomic): ... this.
	(__gcov_indirect_call_profiler_v4): Remove.
	* libgcov-util.c (__gcov_single_counter_op): Move to ...
	(__gcov_topn_counter_op): ... this.
	* libgcov.h (L_gcov_merge_single): Remove.
	(L_gcov_merge_topn): New.
	(__gcov_merge_single): Remove.
	(__gcov_merge_topn): New.
	(__gcov_one_value_profiler_v2): Move to ..
	(__gcov_topn_values_profiler): ... this.
	(__gcov_one_value_profiler_v2_atomic): Move to ...
	(__gcov_topn_values_profiler_atomic): ... this.

From-SVN: r273005
This commit is contained in:
Martin Liska 2019-07-03 14:42:23 +02:00 committed by Martin Liska
parent 1b309ca5ed
commit 596341c741
13 changed files with 135 additions and 89 deletions

View File

@ -1,3 +1,32 @@
2019-07-03 Martin Liska <mliska@suse.cz>
* gcov-counter.def (GCOV_COUNTER_V_SINGLE): Remove.
(GCOV_COUNTER_V_TOPN): New.
(GCOV_COUNTER_V_INDIR): Use _topn.
* gcov-io.h (GCOV_DISK_SINGLE_VALUES): Remove.
(GCOV_TOPN_VALUES): New.
(GCOV_SINGLE_VALUE_COUNTERS): Remove.
(GCOV_TOPN_VALUES_COUNTERS): New.
* profile.c (instrument_values): Use HIST_TYPE_TOPN_VALUES.
* tree-profile.c:
(gimple_init_gcov_profiler): Rename variables from one_value
to topn_values.
(gimple_gen_one_value_profiler): Remove.
(gimple_gen_topn_values_profiler): New function.
* value-prof.c (dump_histogram_value): Use TOPN_VALUES
names instead of SINGLE_VALUE.
(stream_out_histogram_value): Likewise.
(stream_in_histogram_value): Likewise.
(get_most_common_single_value): Likewise.
(gimple_divmod_fixed_value_transform): Likewise.
(gimple_stringops_transform): Likewise.
(gimple_divmod_values_to_profile): Likewise.
(gimple_stringops_values_to_profile): Likewise.
(gimple_find_values_to_profile): Likewise.
* value-prof.h (enum hist_type): Rename to TOPN.
(gimple_gen_one_value_profiler): Remove.
(gimple_gen_topn_values_profiler): New.
2019-07-03 Eric Botcazou <ebotcazou@adacore.com>
* dwarf2out.c (add_scalar_info): Add back refererence to existing DIE

View File

@ -36,10 +36,10 @@ DEF_GCOV_COUNTER(GCOV_COUNTER_V_INTERVAL, "interval", _add)
DEF_GCOV_COUNTER(GCOV_COUNTER_V_POW2, "pow2", _add)
/* The most common value of expression. */
DEF_GCOV_COUNTER(GCOV_COUNTER_V_SINGLE, "single", _single)
DEF_GCOV_COUNTER(GCOV_COUNTER_V_TOPN, "topn", _topn)
/* The most common indirect address. */
DEF_GCOV_COUNTER(GCOV_COUNTER_V_INDIR, "indirect_call", _single)
DEF_GCOV_COUNTER(GCOV_COUNTER_V_INDIR, "indirect_call", _topn)
/* Compute average value passed to the counter. */
DEF_GCOV_COUNTER(GCOV_COUNTER_AVERAGE, "average", _add)

View File

@ -266,12 +266,11 @@ GCOV_COUNTERS
#define GCOV_N_VALUE_COUNTERS \
(GCOV_LAST_VALUE_COUNTER - GCOV_FIRST_VALUE_COUNTER + 1)
/* Number of single value histogram values that live
on disk representation. */
#define GCOV_DISK_SINGLE_VALUES 4
/* Number of top N value histogram. */
#define GCOV_TOPN_VALUES 4
/* Total number of single value counters. */
#define GCOV_SINGLE_VALUE_COUNTERS (2 * GCOV_DISK_SINGLE_VALUES + 1)
#define GCOV_TOPN_VALUES_COUNTERS (2 * GCOV_TOPN_VALUES + 1)
/* Convert a counter index to a tag. */
#define GCOV_TAG_FOR_COUNTER(COUNT) \

View File

@ -167,8 +167,8 @@ instrument_values (histogram_values values)
gimple_gen_pow2_profiler (hist, t, 0);
break;
case HIST_TYPE_SINGLE_VALUE:
gimple_gen_one_value_profiler (hist, t, 0);
case HIST_TYPE_TOPN_VALUES:
gimple_gen_topn_values_profiler (hist, t, 0);
break;
case HIST_TYPE_INDIR_CALL:

View File

@ -60,7 +60,7 @@ along with GCC; see the file COPYING3. If not see
static GTY(()) tree gcov_type_node;
static GTY(()) tree tree_interval_profiler_fn;
static GTY(()) tree tree_pow2_profiler_fn;
static GTY(()) tree tree_one_value_profiler_fn;
static GTY(()) tree tree_topn_values_profiler_fn;
static GTY(()) tree tree_indirect_call_profiler_fn;
static GTY(()) tree tree_average_profiler_fn;
static GTY(()) tree tree_ior_profiler_fn;
@ -117,7 +117,7 @@ gimple_init_gcov_profiler (void)
{
tree interval_profiler_fn_type;
tree pow2_profiler_fn_type;
tree one_value_profiler_fn_type;
tree topn_values_profiler_fn_type;
tree gcov_type_ptr;
tree ic_profiler_fn_type;
tree average_profiler_fn_type;
@ -161,18 +161,18 @@ gimple_init_gcov_profiler (void)
DECL_ATTRIBUTES (tree_pow2_profiler_fn));
/* void (*) (gcov_type *, gcov_type) */
one_value_profiler_fn_type
topn_values_profiler_fn_type
= build_function_type_list (void_type_node,
gcov_type_ptr, gcov_type_node,
NULL_TREE);
fn_name = concat ("__gcov_one_value_profiler_v2", fn_suffix, NULL);
tree_one_value_profiler_fn = build_fn_decl (fn_name,
one_value_profiler_fn_type);
fn_name = concat ("__gcov_topn_values_profiler", fn_suffix, NULL);
tree_topn_values_profiler_fn
= build_fn_decl (fn_name, topn_values_profiler_fn_type);
TREE_NOTHROW (tree_one_value_profiler_fn) = 1;
DECL_ATTRIBUTES (tree_one_value_profiler_fn)
TREE_NOTHROW (tree_topn_values_profiler_fn) = 1;
DECL_ATTRIBUTES (tree_topn_values_profiler_fn)
= tree_cons (get_identifier ("leaf"), NULL,
DECL_ATTRIBUTES (tree_one_value_profiler_fn));
DECL_ATTRIBUTES (tree_topn_values_profiler_fn));
init_ic_make_global_vars ();
@ -226,7 +226,7 @@ gimple_init_gcov_profiler (void)
late, we need to initialize them by hand. */
DECL_ASSEMBLER_NAME (tree_interval_profiler_fn);
DECL_ASSEMBLER_NAME (tree_pow2_profiler_fn);
DECL_ASSEMBLER_NAME (tree_one_value_profiler_fn);
DECL_ASSEMBLER_NAME (tree_topn_values_profiler_fn);
DECL_ASSEMBLER_NAME (tree_indirect_call_profiler_fn);
DECL_ASSEMBLER_NAME (tree_average_profiler_fn);
DECL_ASSEMBLER_NAME (tree_ior_profiler_fn);
@ -334,12 +334,13 @@ gimple_gen_pow2_profiler (histogram_value value, unsigned tag, unsigned base)
gsi_insert_before (&gsi, call, GSI_NEW_STMT);
}
/* Output instructions as GIMPLE trees for code to find the most common value.
VALUE is the expression whose value is profiled. TAG is the tag of the
section for counters, BASE is offset of the counter position. */
/* Output instructions as GIMPLE trees for code to find the most N common
values. VALUE is the expression whose value is profiled. TAG is the tag
of the section for counters, BASE is offset of the counter position. */
void
gimple_gen_one_value_profiler (histogram_value value, unsigned tag, unsigned base)
gimple_gen_topn_values_profiler (histogram_value value, unsigned tag,
unsigned base)
{
gimple *stmt = value->hvalue.stmt;
gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
@ -350,7 +351,7 @@ gimple_gen_one_value_profiler (histogram_value value, unsigned tag, unsigned bas
ref_ptr = force_gimple_operand_gsi (&gsi, ref_ptr,
true, NULL_TREE, true, GSI_SAME_STMT);
val = prepare_instrumented_value (&gsi, value);
call = gimple_build_call (tree_one_value_profiler_fn, 2, ref_ptr, val);
call = gimple_build_call (tree_topn_values_profiler_fn, 2, ref_ptr, val);
gsi_insert_before (&gsi, call, GSI_NEW_STMT);
}

View File

@ -257,23 +257,23 @@ dump_histogram_value (FILE *dump_file, histogram_value hist)
(int64_t) hist->hvalue.counters[0]);
break;
case HIST_TYPE_SINGLE_VALUE:
case HIST_TYPE_TOPN_VALUES:
case HIST_TYPE_INDIR_CALL:
if (hist->hvalue.counters)
{
fprintf (dump_file,
(hist->type == HIST_TYPE_SINGLE_VALUE
? "Single value counter " : "Indirect call counter"));
(hist->type == HIST_TYPE_TOPN_VALUES
? "Top N value counter " : "Indirect call counter"));
if (hist->hvalue.counters)
{
fprintf (dump_file, "all: %" PRId64 ", values: ",
(int64_t) hist->hvalue.counters[0]);
for (unsigned i = 0; i < GCOV_DISK_SINGLE_VALUES; i++)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
fprintf (dump_file, "[%" PRId64 ":%" PRId64 "]",
(int64_t) hist->hvalue.counters[2 * i + 1],
(int64_t) hist->hvalue.counters[2 * i + 2]);
if (i != GCOV_DISK_SINGLE_VALUES - 1)
if (i != GCOV_TOPN_VALUES - 1)
fprintf (dump_file, ", ");
}
fprintf (dump_file, ".\n");
@ -331,7 +331,7 @@ stream_out_histogram_value (struct output_block *ob, histogram_value hist)
/* When user uses an unsigned type with a big value, constant converted
to gcov_type (a signed type) can be negative. */
gcov_type value = hist->hvalue.counters[i];
if (hist->type == HIST_TYPE_SINGLE_VALUE && i > 0)
if (hist->type == HIST_TYPE_TOPN_VALUES && i > 0)
;
else
gcc_assert (value >= 0);
@ -374,9 +374,9 @@ stream_in_histogram_value (struct lto_input_block *ib, gimple *stmt)
ncounters = 2;
break;
case HIST_TYPE_SINGLE_VALUE:
case HIST_TYPE_TOPN_VALUES:
case HIST_TYPE_INDIR_CALL:
ncounters = GCOV_SINGLE_VALUE_COUNTERS;
ncounters = GCOV_TOPN_VALUES_COUNTERS;
break;
case HIST_TYPE_IOR:
@ -713,7 +713,7 @@ gimple_divmod_fixed_value (gassign *stmt, tree value, profile_probability prob,
return tmp2;
}
/* Return most common value of SINGLE_VALUE histogram. If
/* Return most common value of TOPN_VALUE histogram. If
there's a unique value, return true and set VALUE and COUNT
arguments. */
@ -731,7 +731,7 @@ get_most_common_single_value (gimple *stmt, const char *counter_type,
gcov_type read_all = hist->hvalue.counters[0];
for (unsigned i = 0; i < GCOV_DISK_SINGLE_VALUES; i++)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
gcov_type v = hist->hvalue.counters[2 * i + 1];
gcov_type c = hist->hvalue.counters[2 * i + 2];
@ -780,7 +780,7 @@ gimple_divmod_fixed_value_transform (gimple_stmt_iterator *si)
return false;
histogram = gimple_histogram_value_of_type (cfun, stmt,
HIST_TYPE_SINGLE_VALUE);
HIST_TYPE_TOPN_VALUES);
if (!histogram)
return false;
@ -1654,7 +1654,7 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi)
return false;
histogram = gimple_histogram_value_of_type (cfun, stmt,
HIST_TYPE_SINGLE_VALUE);
HIST_TYPE_TOPN_VALUES);
if (!histogram)
return false;
@ -1808,7 +1808,7 @@ gimple_divmod_values_to_profile (gimple *stmt, histogram_values *values)
/* Check for the case where the divisor is the same value most
of the time. */
values->quick_push (gimple_alloc_histogram_value (cfun,
HIST_TYPE_SINGLE_VALUE,
HIST_TYPE_TOPN_VALUES,
stmt, divisor));
/* For mod, check whether it is not often a noop (or replaceable by
@ -1887,7 +1887,7 @@ gimple_stringops_values_to_profile (gimple *gs, histogram_values *values)
if (TREE_CODE (blck_size) != INTEGER_CST)
{
values->safe_push (gimple_alloc_histogram_value (cfun,
HIST_TYPE_SINGLE_VALUE,
HIST_TYPE_TOPN_VALUES,
stmt, blck_size));
values->safe_push (gimple_alloc_histogram_value (cfun, HIST_TYPE_AVERAGE,
stmt, blck_size));
@ -1936,12 +1936,9 @@ gimple_find_values_to_profile (histogram_values *values)
hist->n_counters = 2;
break;
case HIST_TYPE_SINGLE_VALUE:
hist->n_counters = GCOV_SINGLE_VALUE_COUNTERS;
break;
case HIST_TYPE_TOPN_VALUES:
case HIST_TYPE_INDIR_CALL:
hist->n_counters = GCOV_SINGLE_VALUE_COUNTERS;
hist->n_counters = GCOV_TOPN_VALUES_COUNTERS;
break;
case HIST_TYPE_TIME_PROFILE:

View File

@ -26,8 +26,7 @@ enum hist_type
HIST_TYPE_INTERVAL, /* Measures histogram of values inside a specified
interval. */
HIST_TYPE_POW2, /* Histogram of power of 2 values. */
HIST_TYPE_SINGLE_VALUE, /* Tries to identify the value that is (almost)
always constant. */
HIST_TYPE_TOPN_VALUES, /* Tries to identify the N most common values. */
HIST_TYPE_INDIR_CALL, /* Tries to identify the function that is (almost)
called in indirect call */
HIST_TYPE_AVERAGE, /* Compute average value (sum of all values). */
@ -101,7 +100,8 @@ extern void gimple_init_gcov_profiler (void);
extern void gimple_gen_edge_profiler (int, edge);
extern void gimple_gen_interval_profiler (histogram_value, unsigned, unsigned);
extern void gimple_gen_pow2_profiler (histogram_value, unsigned, unsigned);
extern void gimple_gen_one_value_profiler (histogram_value, unsigned, unsigned);
extern void gimple_gen_topn_values_profiler (histogram_value, unsigned,
unsigned);
extern void gimple_gen_ic_profiler (histogram_value, unsigned, unsigned);
extern void gimple_gen_ic_func_profiler (void);
extern void gimple_gen_time_profiler (unsigned, unsigned);

View File

@ -1,3 +1,29 @@
2019-07-03 Martin Liska <mliska@suse.cz>
* Makefile.in: Use topn_values instead of one_value names.
* libgcov-merge.c (__gcov_merge_single): Move to ...
(__gcov_merge_topn): ... this.
(merge_single_value_set): Move to ...
(merge_topn_values_set): ... this.
* libgcov-profiler.c (__gcov_one_value_profiler_body): Move to
...
(__gcov_topn_values_profiler_body): ... this.
(__gcov_one_value_profiler_v2): Move to ...
(__gcov_topn_values_profiler): ... this.
(__gcov_one_value_profiler_v2_atomic): Move to ...
(__gcov_topn_values_profiler_atomic): ... this.
(__gcov_indirect_call_profiler_v4): Remove.
* libgcov-util.c (__gcov_single_counter_op): Move to ...
(__gcov_topn_counter_op): ... this.
* libgcov.h (L_gcov_merge_single): Remove.
(L_gcov_merge_topn): New.
(__gcov_merge_single): Remove.
(__gcov_merge_topn): New.
(__gcov_one_value_profiler_v2): Move to ..
(__gcov_topn_values_profiler): ... this.
(__gcov_one_value_profiler_v2_atomic): Move to ...
(__gcov_topn_values_profiler_atomic): ... this.
2019-07-03 Martin Liska <mliska@suse.cz>
* libgcov-merge.c (merge_single_value_set): Support N values.

View File

@ -889,14 +889,14 @@ include $(iterator)
# Build libgcov components.
LIBGCOV_MERGE = _gcov_merge_add _gcov_merge_single \
LIBGCOV_MERGE = _gcov_merge_add _gcov_merge_topn \
_gcov_merge_ior _gcov_merge_time_profile
LIBGCOV_PROFILER = _gcov_interval_profiler \
_gcov_interval_profiler_atomic \
_gcov_pow2_profiler \
_gcov_pow2_profiler_atomic \
_gcov_one_value_profiler_v2 \
_gcov_one_value_profiler_v2_atomic \
_gcov_topn_values_profiler \
_gcov_topn_values_profiler_atomic \
_gcov_average_profiler \
_gcov_average_profiler_atomic \
_gcov_ior_profiler \

View File

@ -33,9 +33,9 @@ void __gcov_merge_add (gcov_type *counters __attribute__ ((unused)),
unsigned n_counters __attribute__ ((unused))) {}
#endif
#ifdef L_gcov_merge_single
void __gcov_merge_single (gcov_type *counters __attribute__ ((unused)),
unsigned n_counters __attribute__ ((unused))) {}
#ifdef L_gcov_merge_topn
void __gcov_merge_topn (gcov_type *counters __attribute__ ((unused)),
unsigned n_counters __attribute__ ((unused))) {}
#endif
#else
@ -84,10 +84,10 @@ __gcov_merge_time_profile (gcov_type *counters, unsigned n_counters)
}
#endif /* L_gcov_merge_time_profile */
#ifdef L_gcov_merge_single
#ifdef L_gcov_merge_topn
static void
merge_single_value_set (gcov_type *counters)
merge_topn_values_set (gcov_type *counters)
{
/* First value is number of total executions of the profiler. */
gcov_type all = gcov_get_counter_ignore_scaling (-1);
@ -95,9 +95,9 @@ merge_single_value_set (gcov_type *counters)
++counters;
/* Read all part values. */
gcov_type read_counters[2 * GCOV_DISK_SINGLE_VALUES];
gcov_type read_counters[2 * GCOV_TOPN_VALUES];
for (unsigned i = 0; i < GCOV_DISK_SINGLE_VALUES; i++)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
read_counters[2 * i] = gcov_get_counter_target ();
read_counters[2 * i + 1] = gcov_get_counter_ignore_scaling (-1);
@ -109,13 +109,13 @@ merge_single_value_set (gcov_type *counters)
return;
}
for (unsigned i = 0; i < GCOV_DISK_SINGLE_VALUES; i++)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
if (read_counters[2 * i + 1] == 0)
return;
unsigned j;
for (j = 0; j < GCOV_DISK_SINGLE_VALUES; j++)
for (j = 0; j < GCOV_TOPN_VALUES; j++)
{
if (counters[2 * j] == read_counters[2 * i])
{
@ -131,7 +131,7 @@ merge_single_value_set (gcov_type *counters)
}
/* We haven't found a slot, bail out. */
if (j == GCOV_DISK_SINGLE_VALUES)
if (j == GCOV_TOPN_VALUES)
{
counters[1] = -1;
return;
@ -149,13 +149,13 @@ merge_single_value_set (gcov_type *counters)
-- counter
*/
void
__gcov_merge_single (gcov_type *counters, unsigned n_counters)
__gcov_merge_topn (gcov_type *counters, unsigned n_counters)
{
gcc_assert (!(n_counters % GCOV_SINGLE_VALUE_COUNTERS));
gcc_assert (!(n_counters % GCOV_TOPN_VALUES_COUNTERS));
for (unsigned i = 0; i < (n_counters / GCOV_SINGLE_VALUE_COUNTERS); i++)
merge_single_value_set (counters + (i * GCOV_SINGLE_VALUE_COUNTERS));
for (unsigned i = 0; i < (n_counters / GCOV_TOPN_VALUES_COUNTERS); i++)
merge_topn_values_set (counters + (i * GCOV_TOPN_VALUES_COUNTERS));
}
#endif /* L_gcov_merge_single */
#endif /* L_gcov_merge_topn */
#endif /* inhibit_libc */

View File

@ -106,17 +106,11 @@ __gcov_pow2_profiler_atomic (gcov_type *counters, gcov_type value)
#endif
/* Tries to determine the most common value among its inputs. Checks if the
value stored in COUNTERS[0] matches VALUE. If this is the case, COUNTERS[1]
is incremented. If this is not the case and COUNTERS[1] is not zero,
COUNTERS[1] is decremented. Otherwise COUNTERS[1] is set to one and
VALUE is stored to COUNTERS[0]. This algorithm guarantees that if this
function is called more than 50% of the time with one value, this value
will be in COUNTERS[0] in the end. */
/* Tries to determine N most commons value among its inputs. */
static inline void
__gcov_one_value_profiler_body (gcov_type *counters, gcov_type value,
int use_atomic)
__gcov_topn_values_profiler_body (gcov_type *counters, gcov_type value,
int use_atomic)
{
if (use_atomic)
__atomic_fetch_add (&counters[0], 1, __ATOMIC_RELAXED);
@ -125,11 +119,11 @@ __gcov_one_value_profiler_body (gcov_type *counters, gcov_type value,
++counters;
/* We have GCOV_DISK_SINGLE_VALUES as we can keep multiple values
/* We have GCOV_TOPN_VALUES as we can keep multiple values
next to each other. */
unsigned sindex = 0;
for (unsigned i = 0; i < GCOV_DISK_SINGLE_VALUES; i++)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
if (value == counters[2 * i])
{
@ -158,15 +152,15 @@ __gcov_one_value_profiler_body (gcov_type *counters, gcov_type value,
counters[2 * sindex + 1]--;
}
#ifdef L_gcov_one_value_profiler_v2
#ifdef L_gcov_topn_values_profiler
void
__gcov_one_value_profiler_v2 (gcov_type *counters, gcov_type value)
__gcov_topn_values_profiler (gcov_type *counters, gcov_type value)
{
__gcov_one_value_profiler_body (counters, value, 0);
__gcov_topn_values_profiler_body (counters, value, 0);
}
#endif
#if defined(L_gcov_one_value_profiler_v2_atomic) && GCOV_SUPPORTS_ATOMIC
#if defined(L_gcov_topn_values_profiler_atomic) && GCOV_SUPPORTS_ATOMIC
/* Update one value profilers (COUNTERS) for a given VALUE.
@ -178,9 +172,9 @@ __gcov_one_value_profiler_v2 (gcov_type *counters, gcov_type value)
https://gcc.gnu.org/ml/gcc-patches/2016-08/msg00024.html. */
void
__gcov_one_value_profiler_v2_atomic (gcov_type *counters, gcov_type value)
__gcov_topn_values_profiler_atomic (gcov_type *counters, gcov_type value)
{
__gcov_one_value_profiler_body (counters, value, 1);
__gcov_topn_values_profiler_body (counters, value, 1);
}
#endif
@ -214,7 +208,7 @@ __gcov_indirect_call_profiler_v4 (gcov_type value, void* cur_func)
if (cur_func == __gcov_indirect_call.callee
|| (__LIBGCC_VTABLE_USES_DESCRIPTORS__
&& *(void **) cur_func == *(void **) __gcov_indirect_call.callee))
__gcov_one_value_profiler_body (__gcov_indirect_call.counters, value, 0);
__gcov_topn_values_profiler_body (__gcov_indirect_call.counters, value, 0);
__gcov_indirect_call.callee = NULL;
}

View File

@ -725,11 +725,11 @@ __gcov_time_profile_counter_op (gcov_type *counters ATTRIBUTE_UNUSED,
/* Do nothing. */
}
/* Performing FN upon single counters. */
/* Performing FN upon TOP N counters. */
static void
__gcov_single_counter_op (gcov_type *counters, unsigned n_counters,
counter_op_fn fn, void *data1, void *data2)
__gcov_topn_counter_op (gcov_type *counters, unsigned n_counters,
counter_op_fn fn, void *data1, void *data2)
{
unsigned i, n_measures;

View File

@ -126,7 +126,7 @@ typedef unsigned gcov_position_t;
#define L_gcov 1
#define L_gcov_merge_add 1
#define L_gcov_merge_single 1
#define L_gcov_merge_topn 1
#define L_gcov_merge_ior 1
#define L_gcov_merge_time_profile 1
@ -259,8 +259,8 @@ extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
/* The merge function to select the minimum valid counter value. */
extern void __gcov_merge_time_profile (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
/* The merge function to choose the most common value. */
extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
/* The merge function to choose the most common N values. */
extern void __gcov_merge_topn (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
/* The merge function that just ors the counters together. */
extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
@ -271,8 +271,8 @@ extern void __gcov_interval_profiler_atomic (gcov_type *, gcov_type, int,
unsigned);
extern void __gcov_pow2_profiler (gcov_type *, gcov_type);
extern void __gcov_pow2_profiler_atomic (gcov_type *, gcov_type);
extern void __gcov_one_value_profiler_v2 (gcov_type *, gcov_type);
extern void __gcov_one_value_profiler_v2_atomic (gcov_type *, gcov_type);
extern void __gcov_topn_values_profiler (gcov_type *, gcov_type);
extern void __gcov_topn_values_profiler_atomic (gcov_type *, gcov_type);
extern void __gcov_indirect_call_profiler_v4 (gcov_type, void *);
extern void __gcov_time_profiler (gcov_type *);
extern void __gcov_time_profiler_atomic (gcov_type *);