diff options
author | Jan Hubicka <jh@suse.cz> | 2020-01-24 12:12:17 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-01-24 12:12:17 +0100 |
commit | e3fe0070c189e214d51cfc314591b6ffa526fb2f (patch) | |
tree | dcbcdf9230a512673f736800e2787d299f7d3cba /libgcc | |
parent | ad8e2415d6e2dc7c6f1206e78d48f999ff6b0bc4 (diff) | |
download | gcc-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.c | 25 |
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; + } } } } |