Parallelize GdbIndexSection's symbol table creation.
authorRui Ueyama <ruiu@google.com>
Wed, 11 Jul 2018 11:37:10 +0000 (11:37 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 11 Jul 2018 11:37:10 +0000 (11:37 +0000)
commitd29c0391194b63c87e877dbf4e708a17f469c5ac
tree1bfac72a6f6932b8c4f2a244b4f0864b03c023e4
parentea45a89e5c4472f492da059782500551649e32c6
Parallelize GdbIndexSection's symbol table creation.

Since .gdb_index sections contain all known symbols, they can be very large.
One of my executables has a .gdb_index section of 1350 GiB. Uniquifying
symbols by name takes 3.77 seconds on my machine. This patch parallelize it.

  Time to call createSymbols() with 8.4 million unique symbols:

  Without this patch: 3773 ms
  Parallelism = 1:    4374 ms
  Parallelism = 2:    2628 ms
  Parallelism = 16:    837 ms

As you can see above, this algorithm is a bit more inefficient
than the non-parallelized version, but even with dual-core, it is
faster than that, so I think it is overall a win.

Differential Revision: https://reviews.llvm.org/D49164

llvm-svn: 336790
lld/ELF/SyntheticSections.cpp
lld/test/ELF/gdb-index.s