[llvm] 602e19e - [JITLink] Don't issue lookups for empty symbol sets.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 19 16:10:55 PDT 2021
Author: Lang Hames
Date: 2021-03-19T16:10:47-07:00
New Revision: 602e19ed79b8a15500bf7a683cbaa1ca24c9536d
URL: https://github.com/llvm/llvm-project/commit/602e19ed79b8a15500bf7a683cbaa1ca24c9536d
DIFF: https://github.com/llvm/llvm-project/commit/602e19ed79b8a15500bf7a683cbaa1ca24c9536d.diff
LOG: [JITLink] Don't issue lookups for empty symbol sets.
Issuing a lookup for an empty symbol set is legal, but can actually result in
unrelated work being done if there was a work queue left over from the previous
lookup. We can avoid doing this unrelated work (reducing stack depth and
interleaving of debugging output) by not issuing these no-op lookups in the
first place.
Added:
Modified:
llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
index 2e5b7cbc3745..63f862b96325 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
@@ -66,14 +66,27 @@ void JITLinkerBase::linkPhase1(std::unique_ptr<JITLinkerBase> Self) {
return Ctx->notifyFailed(std::move(Err));
// Notify client that the defined symbols have been assigned addresses.
- LLVM_DEBUG(
- { dbgs() << "Resolving symbols defined in " << G->getName() << "\n"; });
+ LLVM_DEBUG(dbgs() << "Resolving symbols defined in " << G->getName() << "\n");
if (auto Err = Ctx->notifyResolved(*G))
return Ctx->notifyFailed(std::move(Err));
auto ExternalSymbols = getExternalSymbolNames();
+ // If there are no external symbols then proceed immediately with phase 2.
+ if (ExternalSymbols.empty()) {
+ LLVM_DEBUG({
+ dbgs() << "No external symbols for " << G->getName()
+ << ". Proceeding immediately with link phase 2.\n";
+ });
+ // FIXME: Once callee expressions are defined to be sequenced before
+ // argument expressions (c++17) we can simplify this. See below.
+ auto &TmpSelf = *Self;
+ TmpSelf.linkPhase2(std::move(Self), AsyncLookupResult(), std::move(Layout));
+ return;
+ }
+
+ // Otherwise look up the externals.
LLVM_DEBUG({
dbgs() << "Issuing lookup for external symbols for " << G->getName()
<< " (may trigger materialization/linking of other graphs)...\n";
More information about the llvm-commits
mailing list