Home | History | Annotate | Download | only in Orc
      1 //===------- Legacy.cpp - Adapters for ExecutionEngine API interop --------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "llvm/ExecutionEngine/Orc/Legacy.h"
     11 
     12 namespace llvm {
     13 namespace orc {
     14 
     15 void SymbolResolver::anchor() {}
     16 
     17 JITSymbolResolverAdapter::JITSymbolResolverAdapter(
     18     ExecutionSession &ES, SymbolResolver &R, MaterializationResponsibility *MR)
     19     : ES(ES), R(R), MR(MR) {}
     20 
     21 Expected<JITSymbolResolverAdapter::LookupResult>
     22 JITSymbolResolverAdapter::lookup(const LookupSet &Symbols) {
     23   SymbolNameSet InternedSymbols;
     24   for (auto &S : Symbols)
     25     InternedSymbols.insert(ES.getSymbolStringPool().intern(S));
     26 
     27   auto LookupFn = [&, this](std::shared_ptr<AsynchronousSymbolQuery> Q,
     28                             SymbolNameSet Unresolved) {
     29     return R.lookup(std::move(Q), std::move(Unresolved));
     30   };
     31 
     32   auto RegisterDependencies = [&](const SymbolDependenceMap &Deps) {
     33     if (MR)
     34       MR->addDependenciesForAll(Deps);
     35   };
     36 
     37   auto InternedResult =
     38       ES.legacyLookup(ES, std::move(LookupFn), std::move(InternedSymbols),
     39                       false, RegisterDependencies);
     40 
     41   if (!InternedResult)
     42     return InternedResult.takeError();
     43 
     44   JITSymbolResolver::LookupResult Result;
     45   for (auto &KV : *InternedResult)
     46     Result[*KV.first] = KV.second;
     47 
     48   return Result;
     49 }
     50 
     51 Expected<JITSymbolResolverAdapter::LookupFlagsResult>
     52 JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) {
     53   SymbolNameSet InternedSymbols;
     54   for (auto &S : Symbols)
     55     InternedSymbols.insert(ES.getSymbolStringPool().intern(S));
     56 
     57   SymbolFlagsMap SymbolFlags = R.lookupFlags(InternedSymbols);
     58   LookupFlagsResult Result;
     59   for (auto &KV : SymbolFlags) {
     60     ResolvedStrings.insert(KV.first);
     61     Result[*KV.first] = KV.second;
     62   }
     63 
     64   return Result;
     65 }
     66 
     67 } // End namespace orc.
     68 } // End namespace llvm.
     69