https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92924

            Bug ID: 92924
           Summary: [10 regression] reproducible indirect call profile
                    merging causes 80% slowdown in Firefox
                    pref-reftest-singletons id-getter microbenchmarks
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hubicka at gcc dot gnu.org
  Target Milestone: ---

During the train run, in firefox2019-release-9test/dom/bindings function
;; Function
mozilla::dom::binding_detail::GenericGetter<mozilla::dom::binding_detail::NormalThisPolicy,
mozilla::dom::binding_detail::ThrowExceptions>
(_ZN7mozilla3dom14binding_detail13GenericGetterINS1_16NormalThisPolicyENS1_15ThrowExceptionsEEEbP9JSContextjPN2JS5ValueE,
funcdef_no=39965, decl_uid=943222, cgraph_uid=24044, symbol_order=25045)

calls function get_id most of time.  With GCC 9 we get:

Indirect call value:939751711 match:139135227 all:140993325.                    
Indirect call -> direct call from other modulegetter_18=> 939751711 (will
resolve only with LTO)

With GCC 10 we get:

Trying transformations on stmt ok_20 = getter_18 (cx_131(D), D.1007269,
self_129, D.1007259);
Indirect call counterall: 140957778, values: [2135000278:-1], [401302964:3804],
[1203869319:12375], [429856732:6018].

So the profile omits completely get_id and we fail to inline. This has quite
large performance impact of Firefox in general since it seems to affect DOM
tree manipulation quite badly.

Reply via email to