Switch the new COFF linker's symbol table to use a DenseMap of
authorChandler Carruth <chandlerc@gmail.com>
Sat, 27 Jun 2015 02:05:40 +0000 (02:05 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 27 Jun 2015 02:05:40 +0000 (02:05 +0000)
commit2eb15fff9422f31bd535072ae45ca326f323fdc4
treea32ff782b4c1d29c0f93b0a47302be408682ec2a
parent3294670f6c30c821d8613a7a6d7a1b8833c87778
Switch the new COFF linker's symbol table to use a DenseMap of
StringRefs. This uses the LLVM hashing rather than the standard library
and a closed addressed hash table rather than chaining.

This improves the Windows self-link of LLD by 4.4% (averaged over 10
runs, with well under 1% of variance on each).

There is still some room to improve here. Two things I clearly see in
the profile:

1) This is one of the biggest stress tests for the LLVM hashing code. It
   actually consumes something like 3-4% of the link time after the
   change.
2) The way that StringRef keys are handled in the DenseMap interface is
   pretty suboptimal. We pay the price of checking for empty and
   tombstone keys when we could only possibly be looking for a normal
   key. But fixing this requires invasive API changes.

So there is still some headroom here.

Differential Revision: http://reviews.llvm.org/D10684

llvm-svn: 240871
lld/COFF/SymbolTable.h