[PATCH] D57666: [LLD] [COFF] Avoid O(n^2) insertion into PartialSections

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 3 14:07:09 PST 2019


mstorsjo created this revision.
mstorsjo added reviewers: aganea, ruiu, rnk.
Herald added a project: LLVM.

For MinGW, unique partial sections are much more common, e.g. comdat functions get sections named e.g. text$symbol.

A moderate sized example of this contains over 200K Chunks which create 174K unique PartialSections. Prior to SVN r352928 (D57574 <https://reviews.llvm.org/D57574>), linking this took around 1,5 seconds for me, while it afterwards takes around 13 minutes.

The std::find_if in findPartialSection will do a linear scan of the whole container until a match is found. To use something like binary_search or the std::set container's own methods, we'd need to already have a PartialSection*.

Reinstate a proper map instead of having a set with a custom sorting comparator.

A reproduction testcase can be found at https://martin.st/temp/vlc-qt-plugin-repro.zip.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D57666

Files:
  COFF/Writer.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57666.184977.patch
Type: text/x-patch
Size: 3890 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190203/1fb15c80/attachment.bin>


More information about the llvm-commits mailing list