diff options
author | Lang Hames <lhames@gmail.com> | 2018-04-16 18:05:22 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-04-16 18:05:22 +0000 |
commit | ffeacb7b1aeb8f013a3137915ee5558dcaad4967 (patch) | |
tree | 7d96c17621774dfed89718673aa8ed07954fa56a /llvm/lib/ExecutionEngine/Orc | |
parent | a4fa0b880a63dad30d9ad1ff9fe8c2358c32dd77 (diff) | |
download | bcm5719-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')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Core.cpp | 51 |
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;) { |