[PATCH] D27666: COFF: Use CachedHashStringRef in the symbol table.

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 11 14:21:21 PST 2016


pcc created this revision.
pcc added a reviewer: ruiu.
pcc added a subscriber: llvm-commits.

This resulted in about a 1% perf improvement linking chrome_child.dll.


https://reviews.llvm.org/D27666

Files:
  lld/COFF/SymbolTable.cpp
  lld/COFF/SymbolTable.h


Index: lld/COFF/SymbolTable.h
===================================================================
--- lld/COFF/SymbolTable.h
+++ lld/COFF/SymbolTable.h
@@ -11,6 +11,7 @@
 #define LLD_COFF_SYMBOL_TABLE_H
 
 #include "InputFiles.h"
+#include "llvm/ADT/CachedHashString.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseMapInfo.h"
 #include "llvm/Support/Allocator.h"
@@ -123,7 +124,7 @@
   void addCombinedLTOObject(ObjectFile *Obj);
   std::vector<ObjectFile *> createLTOObjects(llvm::LTOCodeGenerator *CG);
 
-  llvm::DenseMap<StringRef, Symbol *> Symtab;
+  llvm::DenseMap<llvm::CachedHashStringRef, Symbol *> Symtab;
 
   std::vector<BitcodeFile *> BitcodeFiles;
   std::vector<SmallString<0>> Objs;
Index: lld/COFF/SymbolTable.cpp
===================================================================
--- lld/COFF/SymbolTable.cpp
+++ lld/COFF/SymbolTable.cpp
@@ -118,7 +118,7 @@
 }
 
 std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
-  Symbol *&Sym = Symtab[Name];
+  Symbol *&Sym = Symtab[CachedHashStringRef(Name)];
   if (Sym)
     return {Sym, false};
   Sym = make<Symbol>();
@@ -303,7 +303,7 @@
 }
 
 Symbol *SymbolTable::find(StringRef Name) {
-  auto It = Symtab.find(Name);
+  auto It = Symtab.find(CachedHashStringRef(Name));
   if (It == Symtab.end())
     return nullptr;
   return It->second;
@@ -317,7 +317,7 @@
 
 StringRef SymbolTable::findByPrefix(StringRef Prefix) {
   for (auto Pair : Symtab) {
-    StringRef Name = Pair.first;
+    StringRef Name = Pair.first.val();
     if (Name.startswith(Prefix))
       return Name;
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27666.81035.patch
Type: text/x-patch
Size: 1575 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161211/f1959759/attachment.bin>


More information about the llvm-commits mailing list