From f07dad3d8f8dd854131751eb5fb0fb97a478d85a Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Mon, 9 Jul 2018 20:54:36 +0000 Subject: [ORC] Rename MaterializationResponsibility::delegate to replace and add a new delegate method (and unit test). The name 'replace' better captures what the old delegate method did: it returned materialization responsibility for a set of symbols to the VSO. The new delegate method delegates responsibility for a set of symbols to a new MaterializationResponsibility instance. This can be used to split responsibility between multiple threads, or multiple materialization methods. llvm-svn: 336603 --- llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp | 4 ++-- llvm/lib/ExecutionEngine/Orc/Core.cpp | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'llvm/lib/ExecutionEngine') diff --git a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp index e8d24f99fae..ebd8d43e710 100644 --- a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp @@ -68,7 +68,7 @@ static void extractAliases(MaterializationResponsibility &R, Module &M, } } - R.delegate(symbolAliases(std::move(Aliases))); + R.replace(symbolAliases(std::move(Aliases))); } static std::unique_ptr @@ -199,7 +199,7 @@ private: DelegatedSymbolToDefinition.size() && "SymbolFlags and SymbolToDefinition should have the same number " "of entries"); - R.delegate(llvm::make_unique( + R.replace(llvm::make_unique( std::move(M), std::move(DelegatedSymbolFlags), std::move(DelegatedSymbolToDefinition), Parent, BackingResolver)); } diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp index 717f2f085fe..820eb10840e 100644 --- a/llvm/lib/ExecutionEngine/Orc/Core.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp @@ -309,7 +309,7 @@ void MaterializationResponsibility::failMaterialization() { SymbolFlags.clear(); } -void MaterializationResponsibility::delegate( +void MaterializationResponsibility::replace( std::unique_ptr MU) { for (auto &KV : MU->getSymbols()) SymbolFlags.erase(KV.first); @@ -317,6 +317,23 @@ void MaterializationResponsibility::delegate( V.replace(std::move(MU)); } +MaterializationResponsibility +MaterializationResponsibility::delegate(const SymbolNameSet &Symbols) { + SymbolFlagsMap DelegatedFlags; + + for (auto &Name : Symbols) { + auto I = SymbolFlags.find(Name); + assert(I != SymbolFlags.end() && + "Symbol is not tracked by this MaterializationResponsibility " + "instance"); + + DelegatedFlags[Name] = std::move(I->second); + SymbolFlags.erase(I); + } + + return MaterializationResponsibility(V, std::move(DelegatedFlags)); +} + void MaterializationResponsibility::addDependencies( const SymbolDependenceMap &Dependencies) { V.addDependencies(SymbolFlags, Dependencies); -- cgit v1.2.3