diff options
-rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/Core.h | 7 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Core.cpp | 51 | ||||
-rw-r--r-- | llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp | 4 |
3 files changed, 20 insertions, 42 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Core.h b/llvm/include/llvm/ExecutionEngine/Orc/Core.h index 6d58d10a3d1..774084e841d 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/Core.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/Core.h @@ -291,14 +291,11 @@ public: /// mark the symbols as finalized yet. void resolve(const SymbolMap &SymbolValues); - /// @brief Notify the VSO that the given symbols failed to finalize. - void notifyResolutionFailed(const SymbolNameSet &Names); - /// @brief Finalize the given symbols. void finalize(const SymbolNameSet &SymbolsToFinalize); - /// @brief Notify the VSO that the given symbols failed to finalize. - void notifyFinalizationFailed(const SymbolNameSet &Names); + /// @brief Notify the VSO that the given symbols failed to materialized. + void notifyMaterializationFailed(const SymbolNameSet &Names); /// @brief Look up the flags for the given symbols. /// 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;) { diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp index 0a87ed08edf..a2d815a53e3 100644 --- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp @@ -323,7 +323,7 @@ TEST(CoreAPIsTest, FailResolution) { {{Foo, JITSymbolFlags::Weak}, {Bar, JITSymbolFlags::Weak}}); }, [&](VSO &V) -> Error { - V.notifyResolutionFailed(Names); + V.notifyMaterializationFailed(Names); return Error::success(); }, [&](VSO &V, SymbolStringPtr Name) { @@ -384,7 +384,7 @@ TEST(CoreAPIsTest, FailFinalization) { auto FooSym = JITEvaluatedSymbol(FakeFooAddr, JITSymbolFlags::Exported); auto BarSym = JITEvaluatedSymbol(FakeBarAddr, JITSymbolFlags::Exported); V.resolve(SymbolMap({{Foo, FooSym}, {Bar, BarSym}})); - V.notifyFinalizationFailed(Names); + V.notifyMaterializationFailed(Names); return Error::success(); }, [&](VSO &V, SymbolStringPtr Name) { |