summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-06-03 19:22:48 +0000
committerLang Hames <lhames@gmail.com>2018-06-03 19:22:48 +0000
commitd6155ff0024262c8d9b37d71474c19f833f5c86a (patch)
treeb781a7d8cc55230202d495cf4cf0b4ea4b6be55a
parentf886b44693f1fdb25e67aef3ebb0c0c435747b47 (diff)
downloadbcm5719-llvm-d6155ff0024262c8d9b37d71474c19f833f5c86a.tar.gz
bcm5719-llvm-d6155ff0024262c8d9b37d71474c19f833f5c86a.zip
[ORC] Add a constructor to create an IRMaterializationUnit from a module and
pre-existing SymbolFlags and SymbolToDefinition maps. This constructor is useful when delegating work from an existing IRMaterialiaztionUnit to a new one, as it avoids the cost of re-computing these maps. llvm-svn: 333852
-rw-r--r--llvm/include/llvm/ExecutionEngine/Orc/Layer.h14
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Layer.cpp6
2 files changed, 19 insertions, 1 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
index ed839b518b7..0010fae99a7 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
@@ -59,11 +59,23 @@ private:
/// their linkage is changed to available-externally.
class IRMaterializationUnit : public MaterializationUnit {
public:
+ using SymbolNameToDefinitionMap = std::map<SymbolStringPtr, GlobalValue *>;
+
+ /// Create an IRMaterializationLayer. Scans the module to build the
+ /// SymbolFlags and SymbolToDefinition maps.
IRMaterializationUnit(ExecutionSession &ES, std::unique_ptr<Module> M);
+ /// Create an IRMaterializationLayer from a module, and pre-existing
+ /// SymbolFlags and SymbolToDefinition maps. The maps must provide
+ /// entries for each definition in M.
+ /// This constructor is useful for delegating work from one
+ /// IRMaterializationUnit to another.
+ IRMaterializationUnit(std::unique_ptr<Module> M, SymbolFlagsMap SymbolFlags,
+ SymbolNameToDefinitionMap SymbolToDefinition);
+
protected:
std::unique_ptr<Module> M;
- std::map<SymbolStringPtr, GlobalValue *> SymbolToDefinition;
+ SymbolNameToDefinitionMap SymbolToDefinition;
private:
void discard(const VSO &V, SymbolStringPtr Name) override;
diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
index 1927bce45d4..cbf1f4c244d 100644
--- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
@@ -51,6 +51,12 @@ IRMaterializationUnit::IRMaterializationUnit(ExecutionSession &ES,
}
}
+IRMaterializationUnit::IRMaterializationUnit(
+ std::unique_ptr<Module> M, SymbolFlagsMap SymbolFlags,
+ SymbolNameToDefinitionMap SymbolToDefinition)
+ : MaterializationUnit(std::move(SymbolFlags)), M(std::move(M)),
+ SymbolToDefinition(std::move(SymbolToDefinition)) {}
+
void IRMaterializationUnit::discard(const VSO &V, SymbolStringPtr Name) {
auto I = SymbolToDefinition.find(Name);
assert(I != SymbolToDefinition.end() &&
OpenPOWER on IntegriCloud