summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-07-09 20:54:36 +0000
committerLang Hames <lhames@gmail.com>2018-07-09 20:54:36 +0000
commitf07dad3d8f8dd854131751eb5fb0fb97a478d85a (patch)
tree25a4e1bee64d6c720a5c9daedeffabd0b52cbc13 /llvm/lib/ExecutionEngine
parent017c68c12208372c8f5ef7ac2fe92a4512bca1c0 (diff)
downloadbcm5719-llvm-f07dad3d8f8dd854131751eb5fb0fb97a478d85a.tar.gz
bcm5719-llvm-f07dad3d8f8dd854131751eb5fb0fb97a478d85a.zip
[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
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp4
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp19
2 files changed, 20 insertions, 3 deletions
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<Module>
@@ -199,7 +199,7 @@ private:
DelegatedSymbolToDefinition.size() &&
"SymbolFlags and SymbolToDefinition should have the same number "
"of entries");
- R.delegate(llvm::make_unique<ExtractingIRMaterializationUnit>(
+ R.replace(llvm::make_unique<ExtractingIRMaterializationUnit>(
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<MaterializationUnit> 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);
OpenPOWER on IntegriCloud