aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2021-12-08 08:10:41 +1100
committerLang Hames <lhames@gmail.com>2021-12-08 13:41:15 +1100
commitae73f3fdd6340a7cc20ba3ad878b5a5b6502968f (patch)
treeec9dc74fcfa997b6cfb1a1582e2b9abcb30139e9 /llvm/lib/ExecutionEngine
parentc16c99ab03c6b7b4effb074acbaecda083b18b03 (diff)
downloadllvm-ae73f3fdd6340a7cc20ba3ad878b5a5b6502968f.zip
llvm-ae73f3fdd6340a7cc20ba3ad878b5a5b6502968f.tar.gz
llvm-ae73f3fdd6340a7cc20ba3ad878b5a5b6502968f.tar.bz2
[ORC] Add a MaterializationUnit::Interface struct.
MaterializationUnit::Interface holds the values that make up the interface (for ORC's purposes) of a materialization unit: the symbol flags map and initializer symbol. Having a type for this will make functions that build materializer interfaces more readable and maintainable.
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp11
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp13
-rw-r--r--llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp13
-rw-r--r--llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp4
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Layer.cpp31
-rw-r--r--llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp6
-rw-r--r--llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp12
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Mangling.cpp18
-rw-r--r--llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp18
-rw-r--r--llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp4
10 files changed, 60 insertions, 70 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
index 9ff6cec..e2a0cad 100644
--- a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
@@ -78,11 +78,10 @@ public:
: IRMaterializationUnit(ES, MO, std::move(TSM)), Parent(Parent) {}
PartitioningIRMaterializationUnit(
- ThreadSafeModule TSM, SymbolFlagsMap SymbolFlags,
- SymbolStringPtr InitSymbol, SymbolNameToDefinitionMap SymbolToDefinition,
+ ThreadSafeModule TSM, Interface I,
+ SymbolNameToDefinitionMap SymbolToDefinition,
CompileOnDemandLayer &Parent)
- : IRMaterializationUnit(std::move(TSM), std::move(SymbolFlags),
- std::move(InitSymbol),
+ : IRMaterializationUnit(std::move(TSM), std::move(I),
std::move(SymbolToDefinition)),
Parent(Parent) {}
@@ -298,7 +297,9 @@ void CompileOnDemandLayer::emitPartition(
if (GVsToExtract->empty()) {
if (auto Err =
R->replace(std::make_unique<PartitioningIRMaterializationUnit>(
- std::move(TSM), R->getSymbols(), R->getInitializerSymbol(),
+ std::move(TSM),
+ MaterializationUnit::Interface(R->getSymbols(),
+ R->getInitializerSymbol()),
std::move(Defs), *this))) {
getExecutionSession().reportError(std::move(Err));
R->failMaterialization();
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index 56a97f8..b06dff1 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -243,8 +243,7 @@ void AsynchronousSymbolQuery::detach() {
AbsoluteSymbolsMaterializationUnit::AbsoluteSymbolsMaterializationUnit(
SymbolMap Symbols)
- : MaterializationUnit(extractFlags(Symbols), nullptr),
- Symbols(std::move(Symbols)) {}
+ : MaterializationUnit(extractFlags(Symbols)), Symbols(std::move(Symbols)) {}
StringRef AbsoluteSymbolsMaterializationUnit::getName() const {
return "<Absolute Symbols>";
@@ -263,18 +262,18 @@ void AbsoluteSymbolsMaterializationUnit::discard(const JITDylib &JD,
Symbols.erase(Name);
}
-SymbolFlagsMap
+MaterializationUnit::Interface
AbsoluteSymbolsMaterializationUnit::extractFlags(const SymbolMap &Symbols) {
SymbolFlagsMap Flags;
for (const auto &KV : Symbols)
Flags[KV.first] = KV.second.getFlags();
- return Flags;
+ return MaterializationUnit::Interface(std::move(Flags), nullptr);
}
ReExportsMaterializationUnit::ReExportsMaterializationUnit(
JITDylib *SourceJD, JITDylibLookupFlags SourceJDLookupFlags,
SymbolAliasMap Aliases)
- : MaterializationUnit(extractFlags(Aliases), nullptr), SourceJD(SourceJD),
+ : MaterializationUnit(extractFlags(Aliases)), SourceJD(SourceJD),
SourceJDLookupFlags(SourceJDLookupFlags), Aliases(std::move(Aliases)) {}
StringRef ReExportsMaterializationUnit::getName() const {
@@ -456,13 +455,13 @@ void ReExportsMaterializationUnit::discard(const JITDylib &JD,
Aliases.erase(Name);
}
-SymbolFlagsMap
+MaterializationUnit::Interface
ReExportsMaterializationUnit::extractFlags(const SymbolAliasMap &Aliases) {
SymbolFlagsMap SymbolFlags;
for (auto &KV : Aliases)
SymbolFlags[KV.first] = KV.second.AliasFlags;
- return SymbolFlags;
+ return MaterializationUnit::Interface(std::move(SymbolFlags), nullptr);
}
Expected<SymbolAliasMap> buildSimpleReexportsAliasMap(JITDylib &SourceJD,
diff --git a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
index b17d196..eded54f 100644
--- a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
@@ -28,8 +28,8 @@ class DSOHandleMaterializationUnit : public MaterializationUnit {
public:
DSOHandleMaterializationUnit(ELFNixPlatform &ENP,
const SymbolStringPtr &DSOHandleSymbol)
- : MaterializationUnit(createDSOHandleSectionSymbols(ENP, DSOHandleSymbol),
- DSOHandleSymbol),
+ : MaterializationUnit(
+ createDSOHandleSectionInterface(ENP, DSOHandleSymbol)),
ENP(ENP) {}
StringRef getName() const override { return "DSOHandleMU"; }
@@ -70,12 +70,13 @@ public:
void discard(const JITDylib &JD, const SymbolStringPtr &Sym) override {}
private:
- static SymbolFlagsMap
- createDSOHandleSectionSymbols(ELFNixPlatform &ENP,
- const SymbolStringPtr &DSOHandleSymbol) {
+ static MaterializationUnit::Interface
+ createDSOHandleSectionInterface(ELFNixPlatform &ENP,
+ const SymbolStringPtr &DSOHandleSymbol) {
SymbolFlagsMap SymbolFlags;
SymbolFlags[DSOHandleSymbol] = JITSymbolFlags::Exported;
- return SymbolFlags;
+ return MaterializationUnit::Interface(std::move(SymbolFlags),
+ DSOHandleSymbol);
}
ArrayRef<char> getDSOHandleContent(size_t PointerSize) {
diff --git a/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
index ee1630a..f427271 100644
--- a/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
@@ -31,8 +31,8 @@ public:
CompileCallbackMaterializationUnit(SymbolStringPtr Name,
CompileFunction Compile)
- : MaterializationUnit(SymbolFlagsMap({{Name, JITSymbolFlags::Exported}}),
- nullptr),
+ : MaterializationUnit(Interface(
+ SymbolFlagsMap({{Name, JITSymbolFlags::Exported}}), nullptr)),
Name(std::move(Name)), Compile(std::move(Compile)) {}
StringRef getName() const override { return "<Compile Callbacks>"; }
diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
index 20dfba2..9ec2db6 100644
--- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
@@ -33,7 +33,7 @@ Error IRLayer::add(ResourceTrackerSP RT, ThreadSafeModule TSM) {
IRMaterializationUnit::IRMaterializationUnit(
ExecutionSession &ES, const IRSymbolMapper::ManglingOptions &MO,
ThreadSafeModule TSM)
- : MaterializationUnit(SymbolFlagsMap(), nullptr), TSM(std::move(TSM)) {
+ : MaterializationUnit(Interface()), TSM(std::move(TSM)) {
assert(this->TSM && "Module must not be null");
@@ -98,10 +98,10 @@ IRMaterializationUnit::IRMaterializationUnit(
}
IRMaterializationUnit::IRMaterializationUnit(
- ThreadSafeModule TSM, SymbolFlagsMap SymbolFlags,
- SymbolStringPtr InitSymbol, SymbolNameToDefinitionMap SymbolToDefinition)
- : MaterializationUnit(std::move(SymbolFlags), std::move(InitSymbol)),
- TSM(std::move(TSM)), SymbolToDefinition(std::move(SymbolToDefinition)) {}
+ ThreadSafeModule TSM, Interface I,
+ SymbolNameToDefinitionMap SymbolToDefinition)
+ : MaterializationUnit(std::move(I)), TSM(std::move(TSM)),
+ SymbolToDefinition(std::move(SymbolToDefinition)) {}
StringRef IRMaterializationUnit::getName() const {
if (TSM)
@@ -173,25 +173,20 @@ Error ObjectLayer::add(ResourceTrackerSP RT, std::unique_ptr<MemoryBuffer> O) {
Expected<std::unique_ptr<BasicObjectLayerMaterializationUnit>>
BasicObjectLayerMaterializationUnit::Create(ObjectLayer &L,
std::unique_ptr<MemoryBuffer> O) {
- auto ObjSymInfo =
- getObjectSymbolInfo(L.getExecutionSession(), O->getMemBufferRef());
+ auto ObjInterface =
+ getObjectInterface(L.getExecutionSession(), O->getMemBufferRef());
- if (!ObjSymInfo)
- return ObjSymInfo.takeError();
-
- auto &SymbolFlags = ObjSymInfo->first;
- auto &InitSymbol = ObjSymInfo->second;
+ if (!ObjInterface)
+ return ObjInterface.takeError();
return std::unique_ptr<BasicObjectLayerMaterializationUnit>(
- new BasicObjectLayerMaterializationUnit(
- L, std::move(O), std::move(SymbolFlags), std::move(InitSymbol)));
+ new BasicObjectLayerMaterializationUnit(L, std::move(O),
+ std::move(*ObjInterface)));
}
BasicObjectLayerMaterializationUnit::BasicObjectLayerMaterializationUnit(
- ObjectLayer &L, std::unique_ptr<MemoryBuffer> O, SymbolFlagsMap SymbolFlags,
- SymbolStringPtr InitSymbol)
- : MaterializationUnit(std::move(SymbolFlags), std::move(InitSymbol)), L(L),
- O(std::move(O)) {}
+ ObjectLayer &L, std::unique_ptr<MemoryBuffer> O, Interface I)
+ : MaterializationUnit(std::move(I)), L(L), O(std::move(O)) {}
StringRef BasicObjectLayerMaterializationUnit::getName() const {
if (O)
diff --git a/llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp b/llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp
index e1f4944..66453e6 100644
--- a/llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp
@@ -144,7 +144,7 @@ createLocalLazyCallThroughManager(const Triple &T, ExecutionSession &ES,
LazyReexportsMaterializationUnit::LazyReexportsMaterializationUnit(
LazyCallThroughManager &LCTManager, IndirectStubsManager &ISManager,
JITDylib &SourceJD, SymbolAliasMap CallableAliases, ImplSymbolMap *SrcJDLoc)
- : MaterializationUnit(extractFlags(CallableAliases), nullptr),
+ : MaterializationUnit(extractFlags(CallableAliases)),
LCTManager(LCTManager), ISManager(ISManager), SourceJD(SourceJD),
CallableAliases(std::move(CallableAliases)), AliaseeTable(SrcJDLoc) {}
@@ -219,7 +219,7 @@ void LazyReexportsMaterializationUnit::discard(const JITDylib &JD,
CallableAliases.erase(Name);
}
-SymbolFlagsMap
+MaterializationUnit::Interface
LazyReexportsMaterializationUnit::extractFlags(const SymbolAliasMap &Aliases) {
SymbolFlagsMap SymbolFlags;
for (auto &KV : Aliases) {
@@ -227,7 +227,7 @@ LazyReexportsMaterializationUnit::extractFlags(const SymbolAliasMap &Aliases) {
"Lazy re-exports must be callable symbols");
SymbolFlags[KV.first] = KV.second.AliasFlags;
}
- return SymbolFlags;
+ return MaterializationUnit::Interface(std::move(SymbolFlags), nullptr);
}
} // End namespace orc.
diff --git a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
index 46c915d..fb2e90e 100644
--- a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
@@ -28,8 +28,7 @@ class MachOHeaderMaterializationUnit : public MaterializationUnit {
public:
MachOHeaderMaterializationUnit(MachOPlatform &MOP,
const SymbolStringPtr &HeaderStartSymbol)
- : MaterializationUnit(createHeaderSymbols(MOP, HeaderStartSymbol),
- HeaderStartSymbol),
+ : MaterializationUnit(createHeaderInterface(MOP, HeaderStartSymbol)),
MOP(MOP) {}
StringRef getName() const override { return "MachOHeaderMU"; }
@@ -110,9 +109,9 @@ private:
return G.createContentBlock(HeaderSection, HeaderContent, 0, 8, 0);
}
- static SymbolFlagsMap
- createHeaderSymbols(MachOPlatform &MOP,
- const SymbolStringPtr &HeaderStartSymbol) {
+ static MaterializationUnit::Interface
+ createHeaderInterface(MachOPlatform &MOP,
+ const SymbolStringPtr &HeaderStartSymbol) {
SymbolFlagsMap HeaderSymbolFlags;
HeaderSymbolFlags[HeaderStartSymbol] = JITSymbolFlags::Exported;
@@ -120,7 +119,8 @@ private:
HeaderSymbolFlags[MOP.getExecutionSession().intern(HS.Name)] =
JITSymbolFlags::Exported;
- return HeaderSymbolFlags;
+ return MaterializationUnit::Interface(std::move(HeaderSymbolFlags),
+ HeaderStartSymbol);
}
MachOPlatform &MOP;
diff --git a/llvm/lib/ExecutionEngine/Orc/Mangling.cpp b/llvm/lib/ExecutionEngine/Orc/Mangling.cpp
index 7b21e6a..3639370 100644
--- a/llvm/lib/ExecutionEngine/Orc/Mangling.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Mangling.cpp
@@ -102,7 +102,7 @@ static SymbolStringPtr addInitSymbol(SymbolFlagsMap &SymbolFlags,
return InitSymbol;
}
-static Expected<std::pair<SymbolFlagsMap, SymbolStringPtr>>
+static Expected<MaterializationUnit::Interface>
getMachOObjectFileSymbolInfo(ExecutionSession &ES,
const object::MachOObjectFile &Obj) {
SymbolFlagsMap SymbolFlags;
@@ -158,10 +158,11 @@ getMachOObjectFileSymbolInfo(ExecutionSession &ES,
}
}
- return std::make_pair(std::move(SymbolFlags), std::move(InitSymbol));
+ return MaterializationUnit::Interface(std::move(SymbolFlags),
+ std::move(InitSymbol));
}
-static Expected<std::pair<SymbolFlagsMap, SymbolStringPtr>>
+static Expected<MaterializationUnit::Interface>
getELFObjectFileSymbolInfo(ExecutionSession &ES,
const object::ELFObjectFileBase &Obj) {
SymbolFlagsMap SymbolFlags;
@@ -211,10 +212,11 @@ getELFObjectFileSymbolInfo(ExecutionSession &ES,
}
}
- return std::make_pair(std::move(SymbolFlags), InitSymbol);
+ return MaterializationUnit::Interface(std::move(SymbolFlags),
+ std::move(InitSymbol));
}
-Expected<std::pair<SymbolFlagsMap, SymbolStringPtr>>
+Expected<MaterializationUnit::Interface>
getGenericObjectFileSymbolInfo(ExecutionSession &ES,
const object::ObjectFile &Obj) {
SymbolFlagsMap SymbolFlags;
@@ -250,11 +252,11 @@ getGenericObjectFileSymbolInfo(ExecutionSession &ES,
SymbolFlags[InternedName] = std::move(*SymFlags);
}
- return std::make_pair(std::move(SymbolFlags), nullptr);
+ return MaterializationUnit::Interface(std::move(SymbolFlags), nullptr);
}
-Expected<std::pair<SymbolFlagsMap, SymbolStringPtr>>
-getObjectSymbolInfo(ExecutionSession &ES, MemoryBufferRef ObjBuffer) {
+Expected<MaterializationUnit::Interface>
+getObjectInterface(ExecutionSession &ES, MemoryBufferRef ObjBuffer) {
auto Obj = object::ObjectFile::createObjectFile(ObjBuffer);
if (!Obj)
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index 6f840a0..a6d3ca7 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
@@ -23,12 +23,6 @@ using namespace llvm::orc;
namespace {
class LinkGraphMaterializationUnit : public MaterializationUnit {
-private:
- struct LinkGraphInterface {
- SymbolFlagsMap SymbolFlags;
- SymbolStringPtr InitSymbol;
- };
-
public:
static std::unique_ptr<LinkGraphMaterializationUnit>
Create(ObjectLinkingLayer &ObjLinkingLayer, std::unique_ptr<LinkGraph> G) {
@@ -44,9 +38,9 @@ public:
}
private:
- static LinkGraphInterface scanLinkGraph(ExecutionSession &ES, LinkGraph &G) {
+ static Interface scanLinkGraph(ExecutionSession &ES, LinkGraph &G) {
- LinkGraphInterface LGI;
+ Interface LGI;
for (auto *Sym : G.defined_symbols()) {
// Skip local symbols.
@@ -98,11 +92,9 @@ private:
}
LinkGraphMaterializationUnit(ObjectLinkingLayer &ObjLinkingLayer,
- std::unique_ptr<LinkGraph> G,
- LinkGraphInterface LGI)
- : MaterializationUnit(std::move(LGI.SymbolFlags),
- std::move(LGI.InitSymbol)),
- ObjLinkingLayer(ObjLinkingLayer), G(std::move(G)) {}
+ std::unique_ptr<LinkGraph> G, Interface LGI)
+ : MaterializationUnit(std::move(LGI)), ObjLinkingLayer(ObjLinkingLayer),
+ G(std::move(G)) {}
void discard(const JITDylib &JD, const SymbolStringPtr &Name) override {
for (auto *Sym : G->defined_symbols())
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
index 673f739..77a8f5a 100644
--- a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
@@ -192,8 +192,8 @@ public:
LLVMOrcMaterializationUnitMaterializeFunction Materialize,
LLVMOrcMaterializationUnitDiscardFunction Discard,
LLVMOrcMaterializationUnitDestroyFunction Destroy)
- : llvm::orc::MaterializationUnit(std::move(InitialSymbolFlags),
- std::move(InitSymbol)),
+ : llvm::orc::MaterializationUnit(
+ Interface(std::move(InitialSymbolFlags), std::move(InitSymbol))),
Name(std::move(Name)), Ctx(Ctx), Materialize(Materialize),
Discard(Discard), Destroy(Destroy) {}