Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lld/COFF
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2015-06-27 05:05:40 +0300
committerChandler Carruth <chandlerc@gmail.com>2015-06-27 05:05:40 +0300
commit2eb15fff9422f31bd535072ae45ca326f323fdc4 (patch)
treea32ff782b4c1d29c0f93b0a47302be408682ec2a /lld/COFF
parent3294670f6c30c821d8613a7a6d7a1b8833c87778 (diff)
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
Diffstat (limited to 'lld/COFF')
-rw-r--r--lld/COFF/SymbolTable.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h
index d7eed04eea0b..a1cf3408271f 100644
--- a/lld/COFF/SymbolTable.h
+++ b/lld/COFF/SymbolTable.h
@@ -11,9 +11,10 @@
#define LLD_COFF_SYMBOL_TABLE_H
#include "InputFiles.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/raw_ostream.h"
-#include <unordered_map>
namespace llvm {
struct LTOCodeGenerator;
@@ -90,7 +91,7 @@ private:
std::error_code addMemberFile(Lazy *Body);
ErrorOr<ObjectFile *> createLTOObject(llvm::LTOCodeGenerator *CG);
- std::unordered_map<StringRef, Symbol *> Symtab;
+ llvm::DenseMap<StringRef, Symbol *> Symtab;
std::vector<std::unique_ptr<InputFile>> Files;
size_t FileIdx = 0;
std::vector<ArchiveFile *> ArchiveFiles;