diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-22 15:26:35 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-22 15:26:35 +0000 |
| commit | e015f66a73ac8063b41663d339b9b8841351d564 (patch) | |
| tree | 2658208d50bdd98c5d46170bdca943a189d34ed1 /llvm/lib/MC | |
| parent | 0169a45e0471fc204764dde04040db288bc04db2 (diff) | |
| download | bcm5719-llvm-e015f66a73ac8063b41663d339b9b8841351d564.tar.gz bcm5719-llvm-e015f66a73ac8063b41663d339b9b8841351d564.zip | |
Avoid hash lookups when finalizing StringTableBuilder. NFC.
llvm-svn: 251024
Diffstat (limited to 'llvm/lib/MC')
| -rw-r--r-- | llvm/lib/MC/StringTableBuilder.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/llvm/lib/MC/StringTableBuilder.cpp b/llvm/lib/MC/StringTableBuilder.cpp index 86e54471794..e4c3aa22717 100644 --- a/llvm/lib/MC/StringTableBuilder.cpp +++ b/llvm/lib/MC/StringTableBuilder.cpp @@ -15,9 +15,10 @@ using namespace llvm; -static int compareBySuffix(const StringRef *AP, const StringRef *BP) { - StringRef a = *AP; - StringRef b = *BP; +static int compareBySuffix(StringMapEntry<size_t> *const *AP, + StringMapEntry<size_t> *const *BP) { + StringRef a = (*AP)->first(); + StringRef b = (*BP)->first(); size_t sizeA = a.size(); size_t sizeB = b.size(); size_t len = std::min(sizeA, sizeB); @@ -31,11 +32,10 @@ static int compareBySuffix(const StringRef *AP, const StringRef *BP) { } void StringTableBuilder::finalize(Kind kind) { - SmallVector<StringRef, 8> Strings; + std::vector<StringMapEntry<size_t> *> Strings; Strings.reserve(StringIndexMap.size()); - - for (auto i = StringIndexMap.begin(), e = StringIndexMap.end(); i != e; ++i) - Strings.push_back(i->getKey()); + for (StringMapEntry<size_t> &P : StringIndexMap) + Strings.push_back(&P); array_pod_sort(Strings.begin(), Strings.end(), compareBySuffix); @@ -52,16 +52,17 @@ void StringTableBuilder::finalize(Kind kind) { } StringRef Previous; - for (StringRef s : Strings) { + for (StringMapEntry<size_t> *P : Strings) { + StringRef s = P->first(); if (kind == WinCOFF) assert(s.size() > COFF::NameSize && "Short string in COFF string table!"); if (Previous.endswith(s)) { - StringIndexMap[s] = StringTable.size() - 1 - s.size(); + P->second = StringTable.size() - 1 - s.size(); continue; } - StringIndexMap[s] = StringTable.size(); + P->second = StringTable.size(); StringTable += s; StringTable += '\x00'; Previous = s; |

