diff options
author | Lang Hames <lhames@gmail.com> | 2018-01-21 03:20:39 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-01-21 03:20:39 +0000 |
commit | 5ff5a30beecc65cb72b50047990dd684977f3001 (patch) | |
tree | d0ae3bc8734aec12449f1a9a79ce048ee0e6e691 /llvm/lib/ExecutionEngine/Orc | |
parent | 86edf536646b79a8892d994b87b7ce482b9e7248 (diff) | |
download | bcm5719-llvm-5ff5a30beecc65cb72b50047990dd684977f3001.tar.gz bcm5719-llvm-5ff5a30beecc65cb72b50047990dd684977f3001.zip |
[ORC] Add a lookupFlags method to VSO.
lookupFlags returns a SymbolFlagsMap for the requested symbols, along with a
set containing the SymbolStringPtr for any symbol not found in the VSO.
The JITSymbolFlags for each symbol will have been stripped of its transient
JIT-state flags (i.e. NotMaterialized, Materializing).
Calling lookupFlags does not trigger symbol materialization.
llvm-svn: 323060
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Core.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp index c99c8ec120f..232c880b9dd 100644 --- a/llvm/lib/ExecutionEngine/Orc/Core.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp @@ -287,6 +287,26 @@ void VSO::finalize(SymbolNameSet SymbolsToFinalize) { } } +VSO::LookupFlagsResult VSO::lookupFlags(SymbolNameSet Names) { + SymbolFlagsMap FlagsFound; + + for (SymbolNameSet::iterator I = Names.begin(), E = Names.end(); I != E;) { + auto Tmp = I++; + auto SymI = Symbols.find(*Tmp); + + // If the symbol isn't in this dylib then just continue. + if (SymI == Symbols.end()) + continue; + + Names.erase(Tmp); + + FlagsFound[SymI->first] = + JITSymbolFlags::stripTransientFlags(SymI->second.getFlags()); + } + + return {std::move(FlagsFound), std::move(Names)}; +} + VSO::LookupResult VSO::lookup(AsynchronousSymbolQuery &Query, SymbolNameSet Names) { SourceWorkMap MaterializationWork; |