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.