From e3fe0070c189e214d51cfc314591b6ffa526fb2f Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 24 Jan 2020 12:12:17 +0100 Subject: [PATCH] libgcov: Fix merging of topn [PR92924] PR tree-optimization/92924 * libgcov-merge.c (merge_topn_values_set): Fix merging. --- libgcc/libgcov-merge.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/libgcc/libgcov-merge.c b/libgcc/libgcov-merge.c index b658aec46c6..19b8ee72ae9 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; + } } } } -- 2.30.2