diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-05-25 21:53:02 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-05-25 21:53:02 +0000 |
commit | 1c2baad6ddf8a4a4ebc77a986d65f0f7c09b585b (patch) | |
tree | 50af2160f76bbd36d22cde0a21ab395dd9461369 | |
parent | d4039f728302918b5106bd76d7a56cf701f69788 (diff) | |
download | bcm5719-llvm-1c2baad6ddf8a4a4ebc77a986d65f0f7c09b585b.tar.gz bcm5719-llvm-1c2baad6ddf8a4a4ebc77a986d65f0f7c09b585b.zip |
Revert "Simplify a variable type by using StringRef instead of CachedHashStringRef."
This reverts commit r303787.
It caused a slowdown in fast links. That is, links with no debug info
or optimizations.
llvm-svn: 303925
-rw-r--r-- | lld/ELF/InputFiles.cpp | 21 | ||||
-rw-r--r-- | lld/ELF/InputFiles.h | 9 | ||||
-rw-r--r-- | lld/ELF/SymbolTable.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/SymbolTable.h | 2 |
4 files changed, 20 insertions, 14 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 05140d49d27..fe036a644f4 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -192,7 +192,7 @@ ArrayRef<SymbolBody *> elf::ObjectFile<ELFT>::getSymbols() { } template <class ELFT> -void elf::ObjectFile<ELFT>::parse(DenseSet<StringRef> &ComdatGroups) { +void elf::ObjectFile<ELFT>::parse(DenseSet<CachedHashStringRef> &ComdatGroups) { // Read section and symbol tables. initializeSections(ComdatGroups); initializeSymbols(); @@ -280,7 +280,7 @@ bool elf::ObjectFile<ELFT>::shouldMerge(const Elf_Shdr &Sec) { template <class ELFT> void elf::ObjectFile<ELFT>::initializeSections( - DenseSet<StringRef> &ComdatGroups) { + DenseSet<CachedHashStringRef> &ComdatGroups) { ArrayRef<Elf_Shdr> ObjSections = check(this->getObj().sections(), toString(this)); const ELFFile<ELFT> &Obj = this->getObj(); @@ -305,7 +305,10 @@ void elf::ObjectFile<ELFT>::initializeSections( switch (Sec.sh_type) { case SHT_GROUP: this->Sections[I] = &InputSection::Discarded; - if (ComdatGroups.insert(getShtGroupSignature(ObjSections, Sec)).second) + if (ComdatGroups + .insert( + CachedHashStringRef(getShtGroupSignature(ObjSections, Sec))) + .second) continue; for (uint32_t SecIndex : getShtGroupEntries(Sec)) { if (SecIndex >= Size) @@ -873,10 +876,10 @@ static Symbol *createBitcodeSymbol(const std::vector<bool> &KeptComdats, } template <class ELFT> -void BitcodeFile::parse(DenseSet<StringRef> &ComdatGroups) { +void BitcodeFile::parse(DenseSet<CachedHashStringRef> &ComdatGroups) { std::vector<bool> KeptComdats; for (StringRef S : Obj->getComdatTable()) - KeptComdats.push_back(ComdatGroups.insert(StringRef(S)).second); + KeptComdats.push_back(ComdatGroups.insert(CachedHashStringRef(S)).second); for (const lto::InputFile::Symbol &ObjSym : Obj->symbols()) Symbols.push_back(createBitcodeSymbol<ELFT>(KeptComdats, ObjSym, this)); @@ -1045,10 +1048,10 @@ template void ArchiveFile::parse<ELF32BE>(); template void ArchiveFile::parse<ELF64LE>(); template void ArchiveFile::parse<ELF64BE>(); -template void BitcodeFile::parse<ELF32LE>(DenseSet<StringRef> &); -template void BitcodeFile::parse<ELF32BE>(DenseSet<StringRef> &); -template void BitcodeFile::parse<ELF64LE>(DenseSet<StringRef> &); -template void BitcodeFile::parse<ELF64BE>(DenseSet<StringRef> &); +template void BitcodeFile::parse<ELF32LE>(DenseSet<CachedHashStringRef> &); +template void BitcodeFile::parse<ELF32BE>(DenseSet<CachedHashStringRef> &); +template void BitcodeFile::parse<ELF64LE>(DenseSet<CachedHashStringRef> &); +template void BitcodeFile::parse<ELF64BE>(DenseSet<CachedHashStringRef> &); template void LazyObjectFile::parse<ELF32LE>(); template void LazyObjectFile::parse<ELF32BE>(); diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h index 8b0e2e3f0bc..6daf2664985 100644 --- a/lld/ELF/InputFiles.h +++ b/lld/ELF/InputFiles.h @@ -17,6 +17,7 @@ #include "lld/Core/LLVM.h" #include "lld/Core/Reproduce.h" +#include "llvm/ADT/CachedHashString.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/STLExtras.h" #include "llvm/IR/Comdat.h" @@ -156,7 +157,7 @@ public: ArrayRef<SymbolBody *> getLocalSymbols(); ObjectFile(MemoryBufferRef M, StringRef ArchiveName); - void parse(llvm::DenseSet<StringRef> &ComdatGroups); + void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups); InputSectionBase *getSection(const Elf_Sym &Sym) const; @@ -188,7 +189,8 @@ public: StringRef SourceFile; private: - void initializeSections(llvm::DenseSet<StringRef> &ComdatGroups); + void + initializeSections(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups); void initializeSymbols(); void initializeDwarfLine(); InputSectionBase *getRelocTarget(const Elf_Shdr &Sec); @@ -263,7 +265,8 @@ public: BitcodeFile(MemoryBufferRef M, StringRef ArchiveName, uint64_t OffsetInArchive); static bool classof(const InputFile *F) { return F->kind() == BitcodeKind; } - template <class ELFT> void parse(llvm::DenseSet<StringRef> &ComdatGroups); + template <class ELFT> + void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups); ArrayRef<Symbol *> getSymbols() { return Symbols; } std::unique_ptr<llvm::lto::InputFile> Obj; diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index dae294fca6e..ed8a790c959 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -122,7 +122,7 @@ template <class ELFT> void SymbolTable<ELFT>::addCombinedLTOObject() { for (InputFile *File : LTO->compile()) { ObjectFile<ELFT> *Obj = cast<ObjectFile<ELFT>>(File); - DenseSet<StringRef> DummyGroups; + DenseSet<CachedHashStringRef> DummyGroups; Obj->parse(DummyGroups); ObjectFiles.push_back(Obj); } diff --git a/lld/ELF/SymbolTable.h b/lld/ELF/SymbolTable.h index 2f39e98e4a6..1a745f9deea 100644 --- a/lld/ELF/SymbolTable.h +++ b/lld/ELF/SymbolTable.h @@ -117,7 +117,7 @@ private: // Comdat groups define "link once" sections. If two comdat groups have the // same name, only one of them is linked, and the other is ignored. This set // is used to uniquify them. - llvm::DenseSet<StringRef> ComdatGroups; + llvm::DenseSet<llvm::CachedHashStringRef> ComdatGroups; std::vector<ObjectFile<ELFT> *> ObjectFiles; std::vector<SharedFile<ELFT> *> SharedFiles; |