summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc/Core.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-02-14 22:12:56 +0000
committerLang Hames <lhames@gmail.com>2018-02-14 22:12:56 +0000
commite833fe8ec31e1bc51d59c84af158ac44ed423153 (patch)
treeea435346f88da72eacfc97b0560dc294ccd2082e /llvm/lib/ExecutionEngine/Orc/Core.cpp
parent675752166de3746ebe0f8198e9c72989a4dccbc3 (diff)
downloadbcm5719-llvm-e833fe8ec31e1bc51d59c84af158ac44ed423153.tar.gz
bcm5719-llvm-e833fe8ec31e1bc51d59c84af158ac44ed423153.zip
[ORC] Switch to shared_ptr ownership for AsynchronousSymbolQueries.
Queries need to stay alive until each owner has set the values they are responsible for. llvm-svn: 325179
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/Core.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index 886bd7e7915..37133b7aa85 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -64,9 +64,9 @@ void AsynchronousSymbolQuery::notifySymbolFinalized() {
NotifySymbolsReady(Error::success());
}
-VSO::MaterializationInfo::MaterializationInfo(JITSymbolFlags Flags,
- AsynchronousSymbolQuery &Query)
- : Flags(std::move(Flags)), PendingResolution({&Query}) {}
+VSO::MaterializationInfo::MaterializationInfo(
+ JITSymbolFlags Flags, std::shared_ptr<AsynchronousSymbolQuery> Query)
+ : Flags(std::move(Flags)), PendingResolution({std::move(Query)}) {}
JITSymbolFlags VSO::MaterializationInfo::getFlags() const { return Flags; }
@@ -74,13 +74,13 @@ JITTargetAddress VSO::MaterializationInfo::getAddress() const {
return Address;
}
-void VSO::MaterializationInfo::query(SymbolStringPtr Name,
- AsynchronousSymbolQuery &Query) {
+void VSO::MaterializationInfo::query(
+ SymbolStringPtr Name, std::shared_ptr<AsynchronousSymbolQuery> Query) {
if (Address != 0) {
- Query.setDefinition(Name, JITEvaluatedSymbol(Address, Flags));
- PendingFinalization.push_back(&Query);
+ Query->setDefinition(Name, JITEvaluatedSymbol(Address, Flags));
+ PendingFinalization.push_back(std::move(Query));
} else
- PendingResolution.push_back(&Query);
+ PendingResolution.push_back(std::move(Query));
}
void VSO::MaterializationInfo::resolve(SymbolStringPtr Name,
@@ -88,15 +88,15 @@ void VSO::MaterializationInfo::resolve(SymbolStringPtr Name,
// FIXME: Sanity check flags?
Flags = Sym.getFlags();
Address = Sym.getAddress();
- for (auto *Query : PendingResolution) {
+ for (auto &Query : PendingResolution) {
Query->setDefinition(Name, std::move(Sym));
- PendingFinalization.push_back(Query);
+ PendingFinalization.push_back(std::move(Query));
}
PendingResolution = {};
}
void VSO::MaterializationInfo::finalize() {
- for (auto *Query : PendingFinalization)
+ for (auto &Query : PendingFinalization)
Query->notifySymbolFinalized();
PendingFinalization = {};
}
@@ -140,19 +140,20 @@ void VSO::SymbolTableEntry::replaceWithSource(VSO &V, SymbolStringPtr Name,
this->Source = &NewSource;
}
-SymbolSource *VSO::SymbolTableEntry::query(SymbolStringPtr Name,
- AsynchronousSymbolQuery &Query) {
+SymbolSource *
+VSO::SymbolTableEntry::query(SymbolStringPtr Name,
+ std::shared_ptr<AsynchronousSymbolQuery> Query) {
if (Flags.isMaterializing()) {
- MatInfo->query(std::move(Name), Query);
+ MatInfo->query(std::move(Name), std::move(Query));
return nullptr;
} else if (Flags.isMaterialized()) {
- Query.setDefinition(std::move(Name), JITEvaluatedSymbol(Address, Flags));
- Query.notifySymbolFinalized();
+ Query->setDefinition(std::move(Name), JITEvaluatedSymbol(Address, Flags));
+ Query->notifySymbolFinalized();
return nullptr;
}
SymbolSource *S = Source;
new (&MatInfo) std::unique_ptr<MaterializationInfo>(
- llvm::make_unique<MaterializationInfo>(Flags, Query));
+ llvm::make_unique<MaterializationInfo>(Flags, std::move(Query)));
Flags |= JITSymbolFlags::Materializing;
return S;
}
@@ -307,7 +308,7 @@ SymbolNameSet VSO::lookupFlags(SymbolFlagsMap &Flags, SymbolNameSet Names) {
return Names;
}
-VSO::LookupResult VSO::lookup(AsynchronousSymbolQuery &Query,
+VSO::LookupResult VSO::lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
SymbolNameSet Names) {
SourceWorkMap MaterializationWork;
OpenPOWER on IntegriCloud