summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc/Core.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-04-16 18:05:22 +0000
committerLang Hames <lhames@gmail.com>2018-04-16 18:05:22 +0000
commitffeacb7b1aeb8f013a3137915ee5558dcaad4967 (patch)
tree7d96c17621774dfed89718673aa8ed07954fa56a /llvm/lib/ExecutionEngine/Orc/Core.cpp
parenta4fa0b880a63dad30d9ad1ff9fe8c2358c32dd77 (diff)
downloadbcm5719-llvm-ffeacb7b1aeb8f013a3137915ee5558dcaad4967.tar.gz
bcm5719-llvm-ffeacb7b1aeb8f013a3137915ee5558dcaad4967.zip
[ORC] Merge VSO notifyResolutionFailed and notifyFinalizationFailed in to
notifyMaterializationFailed. The notifyMaterializationFailed method can determine which error to raise by looking at which queue the pending queries are in (resolution or finalization). llvm-svn: 330141
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/Core.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp51
1 files changed, 16 insertions, 35 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index c9f0a14abe5..3d7ef7d7c4e 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -390,11 +390,13 @@ void VSO::resolve(const SymbolMap &SymbolValues) {
}
}
-void VSO::notifyResolutionFailed(const SymbolNameSet &Names) {
- assert(!Names.empty() && "Failed to resolve empty set?");
+void VSO::notifyMaterializationFailed(const SymbolNameSet &Names) {
+ assert(!Names.empty() && "Failed to materialize empty set?");
std::map<std::shared_ptr<AsynchronousSymbolQuery>, SymbolNameSet>
- QueriesToFail;
+ ResolutionFailures;
+ std::map<std::shared_ptr<AsynchronousSymbolQuery>, SymbolNameSet>
+ FinalizationFailures;
for (auto &S : Names) {
auto I = Symbols.find(S);
@@ -402,17 +404,23 @@ void VSO::notifyResolutionFailed(const SymbolNameSet &Names) {
auto J = MaterializingInfos.find(S);
if (J != MaterializingInfos.end()) {
- assert(J->second.PendingFinalization.empty() &&
- "Failed during resolution, but queries pending finalization?");
- for (auto &Q : J->second.PendingResolution)
- QueriesToFail[Q].insert(S);
+ if (J->second.PendingFinalization.empty()) {
+ for (auto &Q : J->second.PendingResolution)
+ ResolutionFailures[Q].insert(S);
+ } else {
+ for (auto &Q : J->second.PendingFinalization)
+ FinalizationFailures[Q].insert(S);
+ }
MaterializingInfos.erase(J);
}
Symbols.erase(I);
}
- for (auto &KV : QueriesToFail)
+ for (auto &KV : ResolutionFailures)
KV.first->notifyFailed(make_error<FailedToResolve>(std::move(KV.second)));
+
+ for (auto &KV : FinalizationFailures)
+ KV.first->notifyFailed(make_error<FailedToFinalize>(std::move(KV.second)));
}
void VSO::finalize(const SymbolNameSet &SymbolsToFinalize) {
@@ -432,33 +440,6 @@ void VSO::finalize(const SymbolNameSet &SymbolsToFinalize) {
}
}
-void VSO::notifyFinalizationFailed(const SymbolNameSet &Names) {
- assert(!Names.empty() && "Failed to finalize empty set?");
-
- std::map<std::shared_ptr<AsynchronousSymbolQuery>, SymbolNameSet>
- QueriesToFail;
-
- for (auto &S : Names) {
- auto I = Symbols.find(S);
- assert(I != Symbols.end() && "Symbol not present in this VSO");
- assert((I->second.Flags & JITSymbolFlags::Materializing) &&
- "Failed to finalize symbol that was not materializing");
-
- auto J = MaterializingInfos.find(S);
- if (J != MaterializingInfos.end()) {
- assert(J->second.PendingResolution.empty() &&
- "Failed during finalization, but queries pending resolution?");
- for (auto &Q : J->second.PendingFinalization)
- QueriesToFail[Q].insert(S);
- MaterializingInfos.erase(J);
- }
- Symbols.erase(I);
- }
-
- for (auto &KV : QueriesToFail)
- KV.first->notifyFailed(make_error<FailedToFinalize>(std::move(KV.second)));
-}
-
SymbolNameSet VSO::lookupFlags(SymbolFlagsMap &Flags, SymbolNameSet Names) {
for (SymbolNameSet::iterator I = Names.begin(), E = Names.end(); I != E;) {
OpenPOWER on IntegriCloud