| //===------- Legacy.cpp - Adapters for ExecutionEngine API interop --------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ExecutionEngine/Orc/Legacy.h" |
| |
| namespace llvm { |
| namespace orc { |
| |
| void SymbolResolver::anchor() {} |
| |
| JITSymbolResolverAdapter::JITSymbolResolverAdapter( |
| ExecutionSession &ES, SymbolResolver &R, MaterializationResponsibility *MR) |
| : ES(ES), R(R), MR(MR) {} |
| |
| void JITSymbolResolverAdapter::lookup(const LookupSet &Symbols, |
| OnResolvedFunction OnResolved) { |
| SymbolNameSet InternedSymbols; |
| for (auto &S : Symbols) |
| InternedSymbols.insert(ES.intern(S)); |
| |
| auto OnResolvedWithUnwrap = [OnResolved](Expected<SymbolMap> InternedResult) { |
| if (!InternedResult) { |
| OnResolved(InternedResult.takeError()); |
| return; |
| } |
| |
| LookupResult Result; |
| for (auto &KV : *InternedResult) |
| Result[*KV.first] = std::move(KV.second); |
| OnResolved(Result); |
| }; |
| |
| auto Q = std::make_shared<AsynchronousSymbolQuery>( |
| InternedSymbols, OnResolvedWithUnwrap, |
| [this](Error Err) { ES.reportError(std::move(Err)); }); |
| |
| auto Unresolved = R.lookup(Q, InternedSymbols); |
| if (Unresolved.empty()) { |
| if (MR) |
| MR->addDependenciesForAll(Q->QueryRegistrations); |
| } else |
| ES.legacyFailQuery(*Q, make_error<SymbolsNotFound>(std::move(Unresolved))); |
| } |
| |
| Expected<JITSymbolResolverAdapter::LookupSet> |
| JITSymbolResolverAdapter::getResponsibilitySet(const LookupSet &Symbols) { |
| SymbolNameSet InternedSymbols; |
| for (auto &S : Symbols) |
| InternedSymbols.insert(ES.intern(S)); |
| |
| auto InternedResult = R.getResponsibilitySet(InternedSymbols); |
| LookupSet Result; |
| for (auto &S : InternedResult) { |
| ResolvedStrings.insert(S); |
| Result.insert(*S); |
| } |
| |
| return Result; |
| } |
| |
| } // End namespace orc. |
| } // End namespace llvm. |