OSDN Git Service

[ORC] Add a constructor to create an IRMaterializationUnit from a module and
authorLang Hames <lhames@gmail.com>
Sun, 3 Jun 2018 19:22:48 +0000 (19:22 +0000)
committerLang Hames <lhames@gmail.com>
Sun, 3 Jun 2018 19:22:48 +0000 (19:22 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333852 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ExecutionEngine/Orc/Layer.h
lib/ExecutionEngine/Orc/Layer.cpp

index ed839b5..0010fae 100644 (file)
@@ -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;
index 1927bce..cbf1f4c 100644 (file)
@@ -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() &&