[llvm] r233579 - [Orc] Separate callback manager selection from callback manager construction for
Lang Hames
lhames at gmail.com
Mon Mar 30 11:37:02 PDT 2015
Author: lhames
Date: Mon Mar 30 13:37:01 2015
New Revision: 233579
URL: http://llvm.org/viewvc/llvm-project?rev=233579&view=rev
Log:
[Orc] Separate callback manager selection from callback manager construction for
OrcLazyJIT in lli.
Separating these concerns enables more natural error handling.
Modified:
llvm/trunk/tools/lli/OrcLazyJIT.cpp
llvm/trunk/tools/lli/OrcLazyJIT.h
Modified: llvm/trunk/tools/lli/OrcLazyJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.cpp?rev=233579&r1=233578&r2=233579&view=diff
==============================================================================
--- llvm/trunk/tools/lli/OrcLazyJIT.cpp (original)
+++ llvm/trunk/tools/lli/OrcLazyJIT.cpp Mon Mar 30 13:37:01 2015
@@ -12,31 +12,36 @@
using namespace llvm;
-std::unique_ptr<OrcLazyJIT::CompileCallbackMgr>
-OrcLazyJIT::createCallbackMgr(Triple T, LLVMContext &Context) {
+OrcLazyJIT::CallbackManagerBuilder
+OrcLazyJIT::createCallbackManagerBuilder(Triple T) {
switch (T.getArch()) {
- default:
- // Flag error.
- Error = true;
- return nullptr;
+ default: return nullptr;
case Triple::x86_64: {
typedef orc::JITCompileCallbackManager<CompileLayerT,
orc::OrcX86_64> CCMgrT;
- return make_unique<CCMgrT>(CompileLayer, CCMgrMemMgr, Context, 0, 64);
+ return [](CompileLayerT &CompileLayer, RuntimeDyld::MemoryManager &MemMgr,
+ LLVMContext &Context) {
+ return make_unique<CCMgrT>(CompileLayer, MemMgr, Context, 0, 64);
+ };
}
}
}
int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
- OrcLazyJIT J(std::unique_ptr<TargetMachine>(EngineBuilder().selectTarget()),
- getGlobalContext());
-
- if (!J.Ok()) {
- errs() << "Could not construct JIT.\n";
+ auto TM = std::unique_ptr<TargetMachine>(EngineBuilder().selectTarget());
+ auto &Context = getGlobalContext();
+ auto CallbackMgrBuilder =
+ OrcLazyJIT::createCallbackManagerBuilder(Triple(TM->getTargetTriple()));
+
+ if (!CallbackMgrBuilder) {
+ errs() << "No callback manager available for target '"
+ << TM->getTargetTriple() << "'.\n";
return 1;
}
+ OrcLazyJIT J(std::move(TM), Context, CallbackMgrBuilder);
+
auto MainHandle = J.addModule(std::move(M));
auto MainSym = J.findSymbolIn(MainHandle, "main");
Modified: llvm/trunk/tools/lli/OrcLazyJIT.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.h?rev=233579&r1=233578&r2=233579&view=diff
==============================================================================
--- llvm/trunk/tools/lli/OrcLazyJIT.h (original)
+++ llvm/trunk/tools/lli/OrcLazyJIT.h Mon Mar 30 13:37:01 2015
@@ -36,17 +36,24 @@ public:
CompileCallbackMgr> CODLayerT;
typedef CODLayerT::ModuleSetHandleT ModuleHandleT;
- OrcLazyJIT(std::unique_ptr<TargetMachine> TM, LLVMContext &Context)
- : Error(false), TM(std::move(TM)),
+ typedef std::function<
+ std::unique_ptr<CompileCallbackMgr>(CompileLayerT&,
+ RuntimeDyld::MemoryManager&,
+ LLVMContext&)>
+ CallbackManagerBuilder;
+
+ static CallbackManagerBuilder createCallbackManagerBuilder(Triple T);
+
+ OrcLazyJIT(std::unique_ptr<TargetMachine> TM, LLVMContext &Context,
+ CallbackManagerBuilder &BuildCallbackMgr)
+ : TM(std::move(TM)),
Mang(this->TM->getDataLayout()),
ObjectLayer(),
CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)),
LazyEmitLayer(CompileLayer),
- CCMgr(createCallbackMgr(Triple(this->TM->getTargetTriple()), Context)),
+ CCMgr(BuildCallbackMgr(CompileLayer, CCMgrMemMgr, Context)),
CODLayer(LazyEmitLayer, *CCMgr) { }
- bool Ok() const { return !Error; }
-
ModuleHandleT addModule(std::unique_ptr<Module> M) {
// Attach a data-layout if one isn't already present.
if (M->getDataLayout().isDefault())
@@ -67,9 +74,6 @@ public:
private:
- std::unique_ptr<CompileCallbackMgr>
- createCallbackMgr(Triple T, LLVMContext &Context);
-
std::string mangle(const std::string &Name) {
std::string MangledName;
{
@@ -79,7 +83,6 @@ private:
return MangledName;
}
- bool Error;
std::unique_ptr<TargetMachine> TM;
Mangler Mang;
SectionMemoryManager CCMgrMemMgr;
More information about the llvm-commits
mailing list