summaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/Orc
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-07-20 18:31:52 +0000
committerLang Hames <lhames@gmail.com>2018-07-20 18:31:52 +0000
commitec3e95710f450d533dbd3ab1feca28d1bbf9c259 (patch)
tree1dbd962ec0828077e5771e31c4de2a9ce008262b /lib/ExecutionEngine/Orc
parentcea401e58a5887201de799c8d78ef50713d87b98 (diff)
[ORC] Simplify VSO::lookupFlags to return the flags map.
This discards the unresolved symbols set and returns the flags map directly (rather than mutating it via the first argument). The unresolved symbols result made it easy to chain lookupFlags calls, but such chaining should be rare to non-existant (especially now that symbol resolvers are being deprecated) so the simpler method signature is preferable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337594 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/Orc')
-rw-r--r--lib/ExecutionEngine/Orc/Core.cpp21
-rw-r--r--lib/ExecutionEngine/Orc/Legacy.cpp3
-rw-r--r--lib/ExecutionEngine/Orc/NullResolver.cpp5
-rw-r--r--lib/ExecutionEngine/Orc/OrcCBindingsStack.h13
-rw-r--r--lib/ExecutionEngine/Orc/OrcMCJITReplacement.h14
-rw-r--r--lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp2
6 files changed, 27 insertions, 31 deletions
diff --git a/lib/ExecutionEngine/Orc/Core.cpp b/lib/ExecutionEngine/Orc/Core.cpp
index 9275bb84d01..65f11782288 100644
--- a/lib/ExecutionEngine/Orc/Core.cpp
+++ b/lib/ExecutionEngine/Orc/Core.cpp
@@ -522,11 +522,14 @@ ReExportsMaterializationUnit::extractFlags(const SymbolAliasMap &Aliases) {
Expected<SymbolAliasMap>
buildSimpleReexportsAliasMap(VSO &SourceV, const SymbolNameSet &Symbols) {
- SymbolFlagsMap Flags;
- auto Unresolved = SourceV.lookupFlags(Flags, Symbols);
+ auto Flags = SourceV.lookupFlags(Symbols);
- if (!Unresolved.empty())
+ if (Flags.size() != Symbols.size()) {
+ SymbolNameSet Unresolved = Symbols;
+ for (auto &KV : Flags)
+ Unresolved.erase(KV.first);
return make_error<SymbolsNotFound>(std::move(Unresolved));
+ }
SymbolAliasMap Result;
for (auto &Name : Symbols) {
@@ -900,22 +903,20 @@ void VSO::removeFromSearchOrder(VSO &V) {
});
}
-SymbolNameSet VSO::lookupFlags(SymbolFlagsMap &Flags,
- const SymbolNameSet &Names) {
+SymbolFlagsMap VSO::lookupFlags(const SymbolNameSet &Names) {
return ES.runSessionLocked([&, this]() {
- auto Unresolved = lookupFlagsImpl(Flags, Names);
+ SymbolFlagsMap Result;
+ auto Unresolved = lookupFlagsImpl(Result, Names);
if (FallbackDefinitionGenerator && !Unresolved.empty()) {
auto FallbackDefs = FallbackDefinitionGenerator(*this, Unresolved);
if (!FallbackDefs.empty()) {
- auto Unresolved2 = lookupFlagsImpl(Flags, FallbackDefs);
+ auto Unresolved2 = lookupFlagsImpl(Result, FallbackDefs);
(void)Unresolved2;
assert(Unresolved2.empty() &&
"All fallback defs should have been found by lookupFlagsImpl");
- for (auto &D : FallbackDefs)
- Unresolved.erase(D);
}
};
- return Unresolved;
+ return Result;
});
}
diff --git a/lib/ExecutionEngine/Orc/Legacy.cpp b/lib/ExecutionEngine/Orc/Legacy.cpp
index 79525baf92e..6fde6898a16 100644
--- a/lib/ExecutionEngine/Orc/Legacy.cpp
+++ b/lib/ExecutionEngine/Orc/Legacy.cpp
@@ -48,8 +48,7 @@ JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) {
for (auto &S : Symbols)
InternedSymbols.insert(ES.getSymbolStringPool().intern(S));
- SymbolFlagsMap SymbolFlags;
- R.lookupFlags(SymbolFlags, InternedSymbols);
+ SymbolFlagsMap SymbolFlags = R.lookupFlags(InternedSymbols);
LookupFlagsResult Result;
for (auto &KV : SymbolFlags) {
ResolvedStrings.insert(KV.first);
diff --git a/lib/ExecutionEngine/Orc/NullResolver.cpp b/lib/ExecutionEngine/Orc/NullResolver.cpp
index 872efea5fc8..3796e3d37bc 100644
--- a/lib/ExecutionEngine/Orc/NullResolver.cpp
+++ b/lib/ExecutionEngine/Orc/NullResolver.cpp
@@ -14,9 +14,8 @@
namespace llvm {
namespace orc {
-SymbolNameSet NullResolver::lookupFlags(SymbolFlagsMap &Flags,
- const SymbolNameSet &Symbols) {
- return Symbols;
+SymbolFlagsMap NullResolver::lookupFlags(const SymbolNameSet &Symbols) {
+ return SymbolFlagsMap();
}
SymbolNameSet
diff --git a/lib/ExecutionEngine/Orc/OrcCBindingsStack.h b/lib/ExecutionEngine/Orc/OrcCBindingsStack.h
index aa63957236e..6c44f4367ec 100644
--- a/lib/ExecutionEngine/Orc/OrcCBindingsStack.h
+++ b/lib/ExecutionEngine/Orc/OrcCBindingsStack.h
@@ -129,21 +129,20 @@ private:
: Stack(Stack), ExternalResolver(std::move(ExternalResolver)),
ExternalResolverCtx(std::move(ExternalResolverCtx)) {}
- orc::SymbolNameSet lookupFlags(orc::SymbolFlagsMap &SymbolFlags,
- const orc::SymbolNameSet &Symbols) override {
- orc::SymbolNameSet SymbolsNotFound;
+ orc::SymbolFlagsMap
+ lookupFlags(const orc::SymbolNameSet &Symbols) override {
+ orc::SymbolFlagsMap SymbolFlags;
for (auto &S : Symbols) {
if (auto Sym = findSymbol(*S))
SymbolFlags[S] = Sym.getFlags();
else if (auto Err = Sym.takeError()) {
Stack.reportError(std::move(Err));
- return orc::SymbolNameSet();
- } else
- SymbolsNotFound.insert(S);
+ return orc::SymbolFlagsMap();
+ }
}
- return SymbolsNotFound;
+ return SymbolFlags;
}
orc::SymbolNameSet
diff --git a/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h b/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
index 922ec476204..ded53ac3106 100644
--- a/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
+++ b/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
@@ -144,28 +144,26 @@ class OrcMCJITReplacement : public ExecutionEngine {
public:
LinkingORCResolver(OrcMCJITReplacement &M) : M(M) {}
- SymbolNameSet lookupFlags(SymbolFlagsMap &SymbolFlags,
- const SymbolNameSet &Symbols) override {
- SymbolNameSet UnresolvedSymbols;
+ SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) override {
+ SymbolFlagsMap SymbolFlags;
for (auto &S : Symbols) {
if (auto Sym = M.findMangledSymbol(*S)) {
SymbolFlags[S] = Sym.getFlags();
} else if (auto Err = Sym.takeError()) {
M.reportError(std::move(Err));
- return SymbolNameSet();
+ return SymbolFlagsMap();
} else {
if (auto Sym2 = M.ClientResolver->findSymbolInLogicalDylib(*S)) {
SymbolFlags[S] = Sym2.getFlags();
} else if (auto Err = Sym2.takeError()) {
M.reportError(std::move(Err));
- return SymbolNameSet();
- } else
- UnresolvedSymbols.insert(S);
+ return SymbolFlagsMap();
+ }
}
}
- return UnresolvedSymbols;
+ return SymbolFlags;
}
SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
diff --git a/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp b/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
index 8c53b4f58de..7cdc6b352d1 100644
--- a/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
+++ b/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
@@ -64,7 +64,7 @@ public:
return;
assert(VSOs.front() && "VSOList entry can not be null");
- VSOs.front()->lookupFlags(InternedResult, InternedSymbols);
+ InternedResult = VSOs.front()->lookupFlags(InternedSymbols);
});
LookupFlagsResult Result;