https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92924
Jan Hubicka <hubicka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-12-13 Ever confirmed|0 |1 --- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> --- I hacked libgcov to make merging no longer reproducible Index: libgcov-merge.c =================================================================== --- libgcov-merge.c (revision 279167) +++ libgcov-merge.c (working copy) @@ -130,12 +130,27 @@ merge_topn_values_set (gcov_type *counte } } + if (j == GCOV_TOPN_VALUES) + { + int min = 0; + for (j = 1; j < GCOV_TOPN_VALUES; j++) + if (counters[2 * j + 1] < counters[2 * min + 1]) + min = j; + if (counters[2 * min + 1] < read_counters[2 * i + 1]) + { + counters[2 * min] = read_counters[2 * i]; + counters[2 * min + 1] = read_counters[2 * i + 1]; + } + } + +#if 0 /* We haven't found a slot, bail out. */ if (j == GCOV_TOPN_VALUES) { counters[1] = -1; return; } +#endif } } with this I now get: Trying transformations on stmt ok_20 = getter_18 (cx_131(D), D.1007269, self_129, D.1007259); Indirect call counterall: 140964179, values: [939751711:140005207], [2105057161:149880], [708289787:100001], [484692916:60283], [1777186207:44445], [245854587:38900], [1967741779:28458], [1785108787:23272], [429856732:17057], [401533446:13488], [1203869319:10772], [183365365:9606], [401302964:7243], [824316005:3379], [758688187:2121], [1528155396:1983]. /aux/hubicka/firefox-2019-2/dom/bindings/BindingUtils.cpp:3035:19: missed: Indirect call -> direct call from other module getter_18=> 939751711 (will resolve only with LTO) So the histogram of destinations is indeed greatly dominated by one estination but there are very many others (not all are listed since I started dropping them). One way to make reproducible merging better is to drop destinations with small trip counts before merging, but I am not sure it would help everywhere.