diff options
author | Lang Hames <lhames@gmail.com> | 2018-06-03 19:22:48 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-06-03 19:22:48 +0000 |
commit | d6155ff0024262c8d9b37d71474c19f833f5c86a (patch) | |
tree | b781a7d8cc55230202d495cf4cf0b4ea4b6be55a | |
parent | f886b44693f1fdb25e67aef3ebb0c0c435747b47 (diff) | |
download | bcm5719-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.h | 14 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Layer.cpp | 6 |
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() && |