summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/StringTableBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/StringTableBuilder.cpp')
-rw-r--r--llvm/lib/MC/StringTableBuilder.cpp55
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';
OpenPOWER on IntegriCloud