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.

Reply via email to