[clang] [llvm] [LTO] Reduce memory usage for import lists (PR #106772)
Jan Voung via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 30 12:59:36 PDT 2024
================
@@ -174,51 +174,33 @@ std::string llvm::computeLTOCacheKey(
for (auto GUID : ExportsGUID)
Hasher.update(ArrayRef<uint8_t>((uint8_t *)&GUID, sizeof(GUID)));
- // Include the hash for every module we import functions from. The set of
- // imported symbols for each module may affect code generation and is
- // sensitive to link order, so include that as well.
- using ImportMapIteratorTy =
- FunctionImporter::ImportMapTy::ImportMapTyImpl::const_iterator;
- struct ImportModule {
- ImportMapIteratorTy ModIt;
- const ModuleSummaryIndex::ModuleInfo *ModInfo;
-
- StringRef getIdentifier() const { return ModIt->getFirst(); }
- const FunctionImporter::FunctionsToImportTy &getFunctions() const {
- return ModIt->second;
- }
-
- const ModuleHash &getHash() const { return ModInfo->second; }
- };
-
- std::vector<ImportModule> ImportModulesVector;
- ImportModulesVector.reserve(ImportList.getImportMap().size());
-
- for (ImportMapIteratorTy It = ImportList.getImportMap().begin();
- It != ImportList.getImportMap().end(); ++It) {
- ImportModulesVector.push_back({It, Index.getModule(It->getFirst())});
- }
// Order using module hash, to be both independent of module name and
// module order.
- llvm::sort(ImportModulesVector,
- [](const ImportModule &Lhs, const ImportModule &Rhs) -> bool {
- return Lhs.getHash() < Rhs.getHash();
- });
- std::vector<std::pair<uint64_t, uint8_t>> ImportedGUIDs;
- for (const ImportModule &Entry : ImportModulesVector) {
- auto ModHash = Entry.getHash();
- Hasher.update(ArrayRef<uint8_t>((uint8_t *)&ModHash[0], sizeof(ModHash)));
-
- AddUint64(Entry.getFunctions().size());
-
- ImportedGUIDs.clear();
- for (auto &[Fn, ImportType] : Entry.getFunctions())
- ImportedGUIDs.push_back(std::make_pair(Fn, ImportType));
- llvm::sort(ImportedGUIDs);
- for (auto &[GUID, Type] : ImportedGUIDs) {
- AddUint64(GUID);
- AddUint8(Type);
+ auto Comp = [&](const std::pair<StringRef, GlobalValue::GUID> &L,
+ const std::pair<StringRef, GlobalValue::GUID> &R) {
+ return std::make_pair(Index.getModule(L.first)->second, L.second) <
----------------
jvoung wrote:
It seems like there are more Index.getModule() lookups, but maybe that is fast enough.
https://github.com/llvm/llvm-project/pull/106772
More information about the cfe-commits
mailing list