diff options
Diffstat (limited to 'llvm/lib/MC/StringTableBuilder.cpp')
-rw-r--r-- | llvm/lib/MC/StringTableBuilder.cpp | 55 |
1 files changed, 8 insertions, 47 deletions
diff --git a/llvm/lib/MC/StringTableBuilder.cpp b/llvm/lib/MC/StringTableBuilder.cpp index f50e098e6e4..80e552287b3 100644 --- a/llvm/lib/MC/StringTableBuilder.cpp +++ b/llvm/lib/MC/StringTableBuilder.cpp @@ -16,22 +16,7 @@ using namespace llvm; -StringTableBuilder::StringTableBuilder(Kind K) : K(K) { - // Account for leading bytes in table so that offsets returned from add are - // correct. - switch (K) { - case RAW: - Size = 0; - break; - case MachO: - case ELF: - Size = 1; - break; - case WinCOFF: - Size = 4; - break; - } -} +StringTableBuilder::StringTableBuilder(Kind K) : K(K) {} typedef std::pair<StringRef, size_t> StringPair; @@ -77,32 +62,13 @@ tailcall: } void StringTableBuilder::finalize() { - finalizeStringTable(/*Optimize=*/true); -} - -void StringTableBuilder::finalizeInOrder() { - finalizeStringTable(/*Optimize=*/false); -} - -void StringTableBuilder::finalizeStringTable(bool Optimize) { - typedef std::pair<StringRef, size_t> StringOffsetPair; - std::vector<StringOffsetPair *> Strings; + std::vector<std::pair<StringRef, size_t> *> Strings; Strings.reserve(StringIndexMap.size()); - for (StringOffsetPair &P : StringIndexMap) + for (std::pair<StringRef, size_t> &P : StringIndexMap) Strings.push_back(&P); - if (!Strings.empty()) { - // If we're optimizing, sort by name. If not, sort by previously assigned - // offset. - if (Optimize) { - multikey_qsort(&Strings[0], &Strings[0] + Strings.size(), 0); - } else { - std::sort(Strings.begin(), Strings.end(), - [](const StringOffsetPair *LHS, const StringOffsetPair *RHS) { - return LHS->second < RHS->second; - }); - } - } + if (!Strings.empty()) + multikey_qsort(&Strings[0], &Strings[0] + Strings.size(), 0); switch (K) { case RAW: @@ -119,22 +85,17 @@ void StringTableBuilder::finalizeStringTable(bool Optimize) { } StringRef Previous; - for (StringOffsetPair *P : Strings) { + for (std::pair<StringRef, size_t> *P : Strings) { StringRef S = P->first; if (K == WinCOFF) assert(S.size() > COFF::NameSize && "Short string in COFF string table!"); - if (Optimize && Previous.endswith(S)) { + if (Previous.endswith(S)) { P->second = StringTable.size() - S.size() - (K != RAW); continue; } - if (Optimize) - P->second = StringTable.size(); - else - assert(P->second == StringTable.size() && - "different strtab offset after finalization"); - + P->second = StringTable.size(); StringTable += S; if (K != RAW) StringTable += '\x00'; |