Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 6979160

Browse files
committed
[ORC] Add an initial implementation of a replacement CompileOnDemandLayer.
CompileOnDemandLayer2 is a replacement for CompileOnDemandLayer built on the ORC Core APIs. Functions in added modules are extracted and compiled lazily. CompileOnDemandLayer2 supports multithreaded JIT'd code, and compilation on multiple threads. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@334967 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent dcd570f commit 6979160

File tree

5 files changed

+408
-3
lines changed

5 files changed

+408
-3
lines changed

include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include "llvm/ADT/StringRef.h"
2121
#include "llvm/ADT/Twine.h"
2222
#include "llvm/ExecutionEngine/JITSymbol.h"
23-
#include "llvm/ExecutionEngine/Orc/Core.h"
2423
#include "llvm/ExecutionEngine/Orc/IndirectionUtils.h"
2524
#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"
25+
#include "llvm/ExecutionEngine/Orc/Layer.h"
2626
#include "llvm/ExecutionEngine/Orc/OrcError.h"
2727
#include "llvm/ExecutionEngine/RuntimeDyld.h"
2828
#include "llvm/IR/Attributes.h"
@@ -57,6 +57,66 @@ class Value;
5757

5858
namespace orc {
5959

60+
class ExtractingIRMaterializationUnit;
61+
62+
class CompileOnDemandLayer2 : public IRLayer {
63+
friend class ExtractingIRMaterializationUnit;
64+
65+
public:
66+
/// Builder for IndirectStubsManagers.
67+
using IndirectStubsManagerBuilder =
68+
std::function<std::unique_ptr<IndirectStubsManager>()>;
69+
70+
/// Retrieve symbol resolver for the given VModuleKey.
71+
using GetSymbolResolverFunction =
72+
std::function<std::shared_ptr<SymbolResolver>(VModuleKey K)>;
73+
74+
/// Set the symbol resolver for the given VModuleKey.
75+
using SetSymbolResolverFunction =
76+
std::function<void(VModuleKey K, std::shared_ptr<SymbolResolver> R)>;
77+
78+
using GetAvailableContextFunction = std::function<LLVMContext &()>;
79+
80+
CompileOnDemandLayer2(ExecutionSession &ES, IRLayer &BaseLayer,
81+
JITCompileCallbackManager &CCMgr,
82+
IndirectStubsManagerBuilder BuildIndirectStubsManager,
83+
GetSymbolResolverFunction GetSymbolResolver,
84+
SetSymbolResolverFunction SetSymbolResolver,
85+
GetAvailableContextFunction GetAvailableContext);
86+
87+
Error add(VSO &V, VModuleKey K, std::unique_ptr<Module> M) override;
88+
89+
void emit(MaterializationResponsibility R, VModuleKey K,
90+
std::unique_ptr<Module> M) override;
91+
92+
private:
93+
using StubManagersMap =
94+
std::map<const VSO *, std::unique_ptr<IndirectStubsManager>>;
95+
96+
using SymbolNameToDefinitionMap =
97+
IRMaterializationUnit::SymbolNameToDefinitionMap;
98+
99+
IndirectStubsManager &getStubsManager(const VSO &V);
100+
101+
std::unique_ptr<Module>
102+
extractFunctions(Module &M, const SymbolNameSet &SymbolNames,
103+
const SymbolNameToDefinitionMap &SymbolToDefiniton);
104+
105+
void emitExtractedFunctionsModule(MaterializationResponsibility R,
106+
std::unique_ptr<Module> M,
107+
std::shared_ptr<SymbolResolver> Resolver);
108+
109+
mutable std::mutex CODLayerMutex;
110+
111+
IRLayer &BaseLayer;
112+
JITCompileCallbackManager &CCMgr;
113+
IndirectStubsManagerBuilder BuildIndirectStubsManager;
114+
StubManagersMap StubsMgrs;
115+
GetSymbolResolverFunction GetSymbolResolver;
116+
SetSymbolResolverFunction SetSymbolResolver;
117+
GetAvailableContextFunction GetAvailableContext;
118+
};
119+
60120
/// Compile-on-demand layer.
61121
///
62122
/// When a module is added to this layer a stub is created for each of its

include/llvm/ExecutionEngine/Orc/Core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class MaterializationResponsibility {
115115

116116
/// Returns the target VSO that these symbols are being materialized
117117
/// into.
118-
const VSO &getTargetVSO() const { return V; }
118+
VSO &getTargetVSO() const { return V; }
119119

120120
/// Returns the names of any symbols covered by this
121121
/// MaterializationResponsibility object that have queries pending. This

lib/ExecutionEngine/Orc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
add_llvm_library(LLVMOrcJIT
2+
CompileOnDemandLayer.cpp
23
Core.cpp
34
ExecutionUtils.cpp
45
IndirectionUtils.cpp

0 commit comments

Comments
 (0)