aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-01-24 12:12:17 +0100
committerJan Hubicka <jh@suse.cz>2020-01-24 12:12:17 +0100
commite3fe0070c189e214d51cfc314591b6ffa526fb2f (patch)
treedcbcdf9230a512673f736800e2787d299f7d3cba /libgcc
parentad8e2415d6e2dc7c6f1206e78d48f999ff6b0bc4 (diff)
downloadgcc-e3fe0070c189e214d51cfc314591b6ffa526fb2f.zip
gcc-e3fe0070c189e214d51cfc314591b6ffa526fb2f.tar.gz
gcc-e3fe0070c189e214d51cfc314591b6ffa526fb2f.tar.bz2
libgcov: Fix merging of topn [PR92924]
PR tree-optimization/92924 * libgcov-merge.c (merge_topn_values_set): Fix merging.
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/libgcov-merge.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/libgcc/libgcov-merge.c b/libgcc/libgcov-merge.c
index b658aec..19b8ee7 100644
--- a/libgcc/libgcov-merge.c
+++ b/libgcc/libgcov-merge.c
@@ -112,9 +112,11 @@ merge_topn_values_set (gcov_type *counters)
for (unsigned i = 0; i < GCOV_TOPN_VALUES; i++)
{
if (read_counters[2 * i + 1] == 0)
- return;
+ continue;
unsigned j;
+ int slot = -1;
+
for (j = 0; j < GCOV_TOPN_VALUES; j++)
{
if (counters[2 * j] == read_counters[2 * i])
@@ -123,18 +125,23 @@ merge_topn_values_set (gcov_type *counters)
break;
}
else if (counters[2 * j + 1] == 0)
- {
- counters[2 * j] += read_counters[2 * i];
- counters[2 * j + 1] += read_counters[2 * i + 1];
- break;
- }
+ slot = j;
}
- /* We haven't found a slot, bail out. */
if (j == GCOV_TOPN_VALUES)
{
- counters[1] = -1;
- return;
+ if (slot > 0)
+ {
+ /* If we found empty slot, add the value. */
+ counters[2 * slot] = read_counters[2 * i];
+ counters[2 * slot + 1] = read_counters[2 * i + 1];
+ }
+ else
+ {
+ /* We haven't found a slot, bail out. */
+ counters[1] = -1;
+ return;
+ }
}
}
}