Legacy.cpp revision 360784
1//===------- Legacy.cpp - Adapters for ExecutionEngine API interop --------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "llvm/ExecutionEngine/Orc/Legacy.h" 10 11namespace llvm { 12namespace orc { 13 14void SymbolResolver::anchor() {} 15 16JITSymbolResolverAdapter::JITSymbolResolverAdapter( 17 ExecutionSession &ES, SymbolResolver &R, MaterializationResponsibility *MR) 18 : ES(ES), R(R), MR(MR) {} 19 20void JITSymbolResolverAdapter::lookup(const LookupSet &Symbols, 21 OnResolvedFunction OnResolved) { 22 SymbolNameSet InternedSymbols; 23 for (auto &S : Symbols) 24 InternedSymbols.insert(ES.intern(S)); 25 26 auto OnResolvedWithUnwrap = [OnResolved = std::move(OnResolved)]( 27 Expected<SymbolMap> InternedResult) mutable { 28 if (!InternedResult) { 29 OnResolved(InternedResult.takeError()); 30 return; 31 } 32 33 LookupResult Result; 34 for (auto &KV : *InternedResult) 35 Result[*KV.first] = std::move(KV.second); 36 OnResolved(Result); 37 }; 38 39 auto Q = std::make_shared<AsynchronousSymbolQuery>( 40 SymbolLookupSet(InternedSymbols), SymbolState::Resolved, 41 std::move(OnResolvedWithUnwrap)); 42 43 auto Unresolved = R.lookup(Q, InternedSymbols); 44 if (Unresolved.empty()) { 45 if (MR) 46 MR->addDependenciesForAll(Q->QueryRegistrations); 47 } else 48 ES.legacyFailQuery(*Q, make_error<SymbolsNotFound>(std::move(Unresolved))); 49} 50 51Expected<JITSymbolResolverAdapter::LookupSet> 52JITSymbolResolverAdapter::getResponsibilitySet(const LookupSet &Symbols) { 53 SymbolNameSet InternedSymbols; 54 for (auto &S : Symbols) 55 InternedSymbols.insert(ES.intern(S)); 56 57 auto InternedResult = R.getResponsibilitySet(InternedSymbols); 58 LookupSet Result; 59 for (auto &S : InternedResult) { 60 ResolvedStrings.insert(S); 61 Result.insert(*S); 62 } 63 64 return Result; 65} 66 67} // End namespace orc. 68} // End namespace llvm. 69