diff options
author | Rui Ueyama <ruiu@google.com> | 2016-05-06 00:51:58 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2016-05-06 00:51:58 +0000 |
commit | 02d71ade063d1acbd9fe22c96671760ddf746219 (patch) | |
tree | 04e1ad0ec807fc3ed66d38e2ed8769f52b209ce7 /llvm/lib/MC/StringTableBuilder.cpp | |
parent | 2a42da996d9b9327a7935fb330f63ff44a87e57a (diff) | |
download | bcm5719-llvm-02d71ade063d1acbd9fe22c96671760ddf746219.tar.gz bcm5719-llvm-02d71ade063d1acbd9fe22c96671760ddf746219.zip |
Make StringTableBuilder to cache hash values.
This change seems to speed up LLD a bit if it has a lot of mergeable
sections. The number is below. It's not too bad for a small patch.
Time to link Clang (debug build):
w/o patch 6.3696 seconds
w/patch 6.2746 seconds (-1.5%)
Differential Revision: http://reviews.llvm.org/D19933
llvm-svn: 268698
Diffstat (limited to 'llvm/lib/MC/StringTableBuilder.cpp')
-rw-r--r-- | llvm/lib/MC/StringTableBuilder.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/MC/StringTableBuilder.cpp b/llvm/lib/MC/StringTableBuilder.cpp index 6118b17f248..9d95952a6d3 100644 --- a/llvm/lib/MC/StringTableBuilder.cpp +++ b/llvm/lib/MC/StringTableBuilder.cpp @@ -34,11 +34,11 @@ StringTableBuilder::StringTableBuilder(Kind K, unsigned Alignment) } } -typedef std::pair<StringRef, size_t> StringPair; +typedef std::pair<CachedHash<StringRef>, size_t> StringPair; // Returns the character at Pos from end of a string. static int charTailAt(StringPair *P, size_t Pos) { - StringRef S = P->first; + StringRef S = P->first.Val; if (Pos >= S.size()) return -1; return (unsigned char)S[S.size() - Pos - 1]; @@ -86,7 +86,7 @@ void StringTableBuilder::finalizeInOrder() { } void StringTableBuilder::finalizeStringTable(bool Optimize) { - typedef std::pair<StringRef, size_t> StringOffsetPair; + typedef std::pair<CachedHash<StringRef>, size_t> StringOffsetPair; std::vector<StringOffsetPair *> Strings; Strings.reserve(StringIndexMap.size()); for (StringOffsetPair &P : StringIndexMap) @@ -121,7 +121,7 @@ void StringTableBuilder::finalizeStringTable(bool Optimize) { StringRef Previous; for (StringOffsetPair *P : Strings) { - StringRef S = P->first; + StringRef S = P->first.Val; if (K == WinCOFF) assert(S.size() > COFF::NameSize && "Short string in COFF string table!"); |