Skip to content

Commit d097070

Browse files
committed
Re-apply "[ORC][JITLink] Add jitlink::Scope::SideEffectsOnly" with fixes.
This reapplies aba6bb0, which was reverted in 28e2a89 due to bot failures. It contains fixes to silence warnings for uncovered switches, and for incorrect initializer-symbol handling on ELF and COFF.
1 parent 9692242 commit d097070

File tree

7 files changed

+23
-16
lines changed

7 files changed

+23
-16
lines changed

llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,10 +393,13 @@ const char *getLinkageName(Linkage L);
393393
/// Defines the scope in which this symbol should be visible:
394394
/// Default -- Visible in the public interface of the linkage unit.
395395
/// Hidden -- Visible within the linkage unit, but not exported from it.
396+
/// SideEffectsOnly -- Like hidden, but symbol can only be looked up once
397+
/// to trigger materialization of the containing graph.
396398
/// Local -- Visible only within the LinkGraph.
397399
enum class Scope : uint8_t {
398400
Default,
399401
Hidden,
402+
SideEffectsOnly,
400403
Local
401404
};
402405

llvm/lib/ExecutionEngine/JITLink/JITLink.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ const char *getScopeName(Scope S) {
8585
return "default";
8686
case Scope::Hidden:
8787
return "hidden";
88+
case Scope::SideEffectsOnly:
89+
return "side-effects-only";
8890
case Scope::Local:
8991
return "local";
9092
}

llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,9 @@ void JITLinkerBase::applyLookupResult(AsyncLookupResult Result) {
253253
}
254254
switch (Sym->getScope()) {
255255
case Scope::Local:
256-
llvm_unreachable("External symbol should not have local linkage");
256+
case Scope::SideEffectsOnly:
257+
llvm_unreachable("External symbol should not have local or "
258+
"side-effects-only linkage");
257259
case Scope::Hidden:
258260
break;
259261
case Scope::Default:

llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -862,9 +862,9 @@ Error COFFPlatform::COFFPlatformPlugin::preserveInitializerSections(
862862
// to the first block.
863863
if (!InitSym) {
864864
auto &B = **InitSection.blocks().begin();
865-
InitSym = &G.addDefinedSymbol(B, 0, *InitSymName, B.getSize(),
866-
jitlink::Linkage::Strong,
867-
jitlink::Scope::Default, false, true);
865+
InitSym = &G.addDefinedSymbol(
866+
B, 0, *InitSymName, B.getSize(), jitlink::Linkage::Strong,
867+
jitlink::Scope::SideEffectsOnly, false, true);
868868
}
869869

870870
// Add keep-alive edges to anonymous symbols in all other init blocks.

llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -894,9 +894,9 @@ Error ELFNixPlatform::ELFNixPlatformPlugin::preserveInitSections(
894894
// to the first block.
895895
if (!InitSym) {
896896
auto &B = **InitSection.blocks().begin();
897-
InitSym = &G.addDefinedSymbol(B, 0, *InitSymName, B.getSize(),
898-
jitlink::Linkage::Strong,
899-
jitlink::Scope::Default, false, true);
897+
InitSym = &G.addDefinedSymbol(
898+
B, 0, *InitSymName, B.getSize(), jitlink::Linkage::Strong,
899+
jitlink::Scope::SideEffectsOnly, false, true);
900900
}
901901

902902
// Add keep-alive edges to anonymous symbols in all other init blocks.

llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,9 +1001,9 @@ Error MachOPlatform::MachOPlatformPlugin::preserveImportantSections(
10011001
// to the first block.
10021002
if (!InitSym) {
10031003
auto &B = **InitSection->blocks().begin();
1004-
InitSym = &G.addDefinedSymbol(B, 0, *InitSymName, B.getSize(),
1005-
jitlink::Linkage::Strong,
1006-
jitlink::Scope::Default, false, true);
1004+
InitSym = &G.addDefinedSymbol(
1005+
B, 0, *InitSymName, B.getSize(), jitlink::Linkage::Strong,
1006+
jitlink::Scope::SideEffectsOnly, false, true);
10071007
}
10081008

10091009
// Add keep-alive edges to anonymous symbols in all other init blocks.

llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ JITSymbolFlags getJITSymbolFlagsForSymbol(Symbol &Sym) {
6565

6666
if (Sym.getScope() == Scope::Default)
6767
Flags |= JITSymbolFlags::Exported;
68+
else if (Sym.getScope() == Scope::SideEffectsOnly)
69+
Flags |= JITSymbolFlags::MaterializationSideEffectsOnly;
6870

6971
if (Sym.isCallable())
7072
Flags |= JITSymbolFlags::Callable;
@@ -236,7 +238,7 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
236238

237239
SymbolMap InternedResult;
238240
for (auto *Sym : G.defined_symbols())
239-
if (Sym->getScope() != Scope::Local) {
241+
if (Sym->getScope() < Scope::SideEffectsOnly) {
240242
auto InternedName = ES.intern(Sym->getName());
241243
auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple());
242244
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
@@ -249,7 +251,7 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
249251
}
250252

251253
for (auto *Sym : G.absolute_symbols())
252-
if (Sym->getScope() != Scope::Local) {
254+
if (Sym->getScope() < Scope::SideEffectsOnly) {
253255
auto InternedName = ES.intern(Sym->getName());
254256
auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple());
255257
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
@@ -281,11 +283,9 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
281283
// If this is a materialization-side-effects only symbol then bump
282284
// the counter and remove in from the result, otherwise make sure that
283285
// it's defined.
284-
if (Flags.hasMaterializationSideEffectsOnly()) {
286+
if (Flags.hasMaterializationSideEffectsOnly())
285287
++NumMaterializationSideEffectsOnlySymbols;
286-
InternedResult.erase(Sym);
287-
continue;
288-
} else if (I == InternedResult.end())
288+
else if (I == InternedResult.end())
289289
MissingSymbols.push_back(Sym);
290290
else if (Layer.OverrideObjectFlags)
291291
I->second.setFlags(Flags);

0 commit comments

Comments
 (0)