| //===------- 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 = std::move(OnResolved)]( | |
| Expected<SymbolMap> InternedResult) mutable { | |
| 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>( | |
| SymbolLookupSet(InternedSymbols), SymbolState::Resolved, | |
| std::move(OnResolvedWithUnwrap)); | |
| 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. |