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 {
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 {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits