summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-05-22 16:15:38 +0000
committerLang Hames <lhames@gmail.com>2018-05-22 16:15:38 +0000
commit5261aa9f919a04f6ada09040ab060606d37ea816 (patch)
tree9edfa9d894b3cb9195b11ff24b9ff66060626fef /llvm/lib/ExecutionEngine
parentdd5fb8f03fbd68b2e948d9f4672b471a82117b0e (diff)
downloadbcm5719-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.cpp26
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() {}
OpenPOWER on IntegriCloud