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.