diff options
author | Lang Hames <lhames@gmail.com> | 2018-05-22 16:15:38 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-05-22 16:15:38 +0000 |
commit | 5261aa9f919a04f6ada09040ab060606d37ea816 (patch) | |
tree | 9edfa9d894b3cb9195b11ff24b9ff66060626fef /llvm/lib/ExecutionEngine | |
parent | dd5fb8f03fbd68b2e948d9f4672b471a82117b0e (diff) | |
download | bcm5719-llvm-5261aa9f919a04f6ada09040ab060606d37ea816.tar.gz bcm5719-llvm-5261aa9f919a04f6ada09040ab060606d37ea816.zip |
[ORC] Move symbol-scanning and discard from BasicIRLayerMaterializationUnit in
to a base class (IRMaterializationUnit).
The new class, IRMaterializationUnit, provides a convenient base for any client
that wants to write a materializer for LLVM IR.
llvm-svn: 332993
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Layer.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp index 2bb7b907fed..346dde4f7a8 100644 --- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp @@ -35,12 +35,10 @@ Error IRLayer::add(VSO &V, VModuleKey K, std::unique_ptr<Module> M) { *this, std::move(K), std::move(M))); } -BasicIRLayerMaterializationUnit::BasicIRLayerMaterializationUnit( - IRLayer &L, VModuleKey K, std::unique_ptr<Module> M) - : MaterializationUnit(SymbolFlagsMap()), L(L), K(std::move(K)), - M(std::move(M)) { +IRMaterializationUnit::IRMaterializationUnit(ExecutionSession &ES, + std::unique_ptr<Module> M) + : MaterializationUnit(SymbolFlagsMap()), M(std::move(M)) { - auto &ES = L.getExecutionSession(); MangleAndInterner Mangle(ES, this->M->getDataLayout()); for (auto &G : this->M->global_values()) { if (G.hasName() && !G.isDeclaration() && @@ -53,13 +51,7 @@ BasicIRLayerMaterializationUnit::BasicIRLayerMaterializationUnit( } } -void BasicIRLayerMaterializationUnit::materialize( - MaterializationResponsibility R) { - L.emit(std::move(R), std::move(K), std::move(M)); -} - -void BasicIRLayerMaterializationUnit::discard(const VSO &V, - SymbolStringPtr Name) { +void IRMaterializationUnit::discard(const VSO &V, SymbolStringPtr Name) { auto I = Discardable.find(Name); assert(I != Discardable.end() && "Symbol not provided by this MU, or previously discarded"); @@ -67,6 +59,16 @@ void BasicIRLayerMaterializationUnit::discard(const VSO &V, Discardable.erase(I); } +BasicIRLayerMaterializationUnit::BasicIRLayerMaterializationUnit( + IRLayer &L, VModuleKey K, std::unique_ptr<Module> M) + : IRMaterializationUnit(L.getExecutionSession(), std::move(M)), + L(L), K(std::move(K)) {} + +void BasicIRLayerMaterializationUnit::materialize( + MaterializationResponsibility R) { + L.emit(std::move(R), std::move(K), std::move(M)); +} + ObjectLayer::ObjectLayer(ExecutionSession &ES) : ES(ES) {} ObjectLayer::~ObjectLayer() {} |