[PATCH] D87970: [ThinLTO] Avoid temporaries when loading global decl attachment metadata

Teresa Johnson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 19 10:30:59 PDT 2020


tejohnson created this revision.
tejohnson added reviewers: mehdi_amini, pcc, evgeny777.
Herald added subscribers: dexonsmith, hiraditya, inglorion, Prazek.
Herald added a project: LLVM.
tejohnson requested review of this revision.

When performing ThinLTO importing, the metadata loader attempts to lazy
load, by building an index. However, module level global decl attachment
metadata was being parsed early while building the index, since the
associated (module level) global values aren't materialized on demand.
This results in the creation of forward reference temporary metadatas,
which are expensive.

Normally, these module level global values don't have much attached
metadata. However, in the case of -fwhole-program-vtables (e.g. for
whole program devirtualization), the vtables may have many attached type
metadatas. This was resulting in very slow performance when performing
ThinLTO importing with the default lazy loading.

This patch restructures the handling of these global decl attachment
records, delaying their parsing until after the lazy loading index has
been built. Then the parser can use the interface that loads from the
index, which resolves forward references immediately instead of creating
expensive temporaries.

For one ThinLTO backend that imports from modules containing huge
numbers of vtables and associated types, I measured the following
compile times for the metadata materialization during function
importing, rounded to nearest second:

No -fwhole-program-vtables:

  Lazy loading on (head):  1s
  Lazy loading off (head): 3s
  Lazy loading on (patch): 1s

With -fwhole-program-vtables:

  Lazy loading on (head):  440s
  Lazy loading off (head): 4s
  Lazy loading on (patch): 1s


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D87970

Files:
  llvm/lib/Bitcode/Reader/MetadataLoader.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87970.292976.patch
Type: text/x-patch
Size: 6860 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200919/249b6a27/attachment.bin>


More information about the llvm-commits mailing list