[PATCH] D124240: [clangd][NFC] Reduce memory usage while building dex
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 22 02:22:52 PDT 2022
kadircet updated this revision to Diff 424417.
kadircet added a comment.
Get rid of shrink_to_fit as PostingList representation doesn't really make a copy of the vector, but rather build a new representation.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124240/new/
https://reviews.llvm.org/D124240
Files:
clang-tools-extra/clangd/index/dex/Dex.cpp
Index: clang-tools-extra/clangd/index/dex/Dex.cpp
===================================================================
--- clang-tools-extra/clangd/index/dex/Dex.cpp
+++ clang-tools-extra/clangd/index/dex/Dex.cpp
@@ -21,6 +21,7 @@
#include "llvm/Support/ScopedPrinter.h"
#include <algorithm>
#include <queue>
+#include <utility>
namespace clang {
namespace clangd {
@@ -76,23 +77,32 @@
}
// Assemble the final compressed posting lists for the added symbols.
- llvm::DenseMap<Token, PostingList> build() {
+ llvm::DenseMap<Token, PostingList> build() && {
llvm::DenseMap<Token, PostingList> Result(/*InitialReserve=*/
TrigramDocs.size() +
RestrictedCCDocs.size() +
TypeDocs.size() +
ScopeDocs.size() +
ProximityDocs.size());
- for (const auto &E : TrigramDocs)
- Result.try_emplace(Token(Token::Kind::Trigram, E.first.str()), E.second);
- for (const auto &E : TypeDocs)
- Result.try_emplace(Token(Token::Kind::Type, E.first()), E.second);
- for (const auto &E : ScopeDocs)
- Result.try_emplace(Token(Token::Kind::Scope, E.first()), E.second);
- for (const auto &E : ProximityDocs)
- Result.try_emplace(Token(Token::Kind::ProximityURI, E.first()), E.second);
+ for (auto &E : TrigramDocs)
+ Result.try_emplace(Token(Token::Kind::Trigram, E.first.str()),
+ std::move(E.second));
+ TrigramDocs.clear();
+ for (auto &E : TypeDocs)
+ Result.try_emplace(Token(Token::Kind::Type, E.first()),
+ std::move(E.second));
+ TypeDocs.clear();
+ for (auto &E : ScopeDocs)
+ Result.try_emplace(Token(Token::Kind::Scope, E.first()),
+ std::move(E.second));
+ ScopeDocs.clear();
+ for (auto &E : ProximityDocs)
+ Result.try_emplace(Token(Token::Kind::ProximityURI, E.first()),
+ std::move(E.second));
+ ProximityDocs.clear();
if (!RestrictedCCDocs.empty())
- Result.try_emplace(RestrictedForCodeCompletion, RestrictedCCDocs);
+ Result.try_emplace(RestrictedForCodeCompletion,
+ std::move(RestrictedCCDocs));
return Result;
}
};
@@ -125,7 +135,7 @@
IndexBuilder Builder;
for (DocID SymbolRank = 0; SymbolRank < Symbols.size(); ++SymbolRank)
Builder.add(*Symbols[SymbolRank], SymbolRank);
- InvertedIndex = Builder.build();
+ InvertedIndex = std::move(Builder).build();
}
std::unique_ptr<Iterator> Dex::iterator(const Token &Tok) const {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124240.424417.patch
Type: text/x-patch
Size: 2710 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220422/a6217989/attachment.bin>
More information about the cfe-commits
mailing list