diff --git a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h --- a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h @@ -19,7 +19,6 @@ #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h" #include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h" -#include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h" #include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ThreadPool.h" @@ -29,6 +28,7 @@ class LLJITBuilderState; class LLLazyJITBuilderState; +class ObjectTransformLayer; class TargetProcessControl; /// A pre-fabricated ORC JIT stack that can serve as an alternative to MCJIT. @@ -169,7 +169,7 @@ ObjectLayer &getObjLinkingLayer() { return *ObjLinkingLayer; } /// Returns a reference to the object transform layer. - ObjectTransformLayer &getObjTransformLayer() { return ObjTransformLayer; } + ObjectTransformLayer &getObjTransformLayer() { return *ObjTransformLayer; } /// Returns a reference to the IR transform layer. IRTransformLayer &getIRTransformLayer() { return *TransformLayer; } @@ -209,7 +209,7 @@ std::unique_ptr CompileThreads; std::unique_ptr ObjLinkingLayer; - ObjectTransformLayer ObjTransformLayer; + std::unique_ptr ObjTransformLayer; std::unique_ptr CompileLayer; std::unique_ptr TransformLayer; std::unique_ptr InitHelperTransformLayer; diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp --- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp +++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp @@ -11,6 +11,7 @@ #include "llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h" #include "llvm/ExecutionEngine/Orc/MachOPlatform.h" #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" +#include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h" #include "llvm/ExecutionEngine/Orc/OrcError.h" #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h" #include "llvm/ExecutionEngine/Orc/TargetProcessControl.h" @@ -997,7 +998,7 @@ std::unique_ptr Obj) { assert(Obj && "Can not add null object"); - return ObjTransformLayer.add(std::move(RT), std::move(Obj)); + return ObjTransformLayer->add(std::move(RT), std::move(Obj)); } Error LLJIT::addObjectFile(JITDylib &JD, std::unique_ptr Obj) { @@ -1057,8 +1058,7 @@ LLJIT::LLJIT(LLJITBuilderState &S, Error &Err) : ES(S.ES ? std::move(S.ES) : std::make_unique()), Main(), DL(""), TT(S.JTMB->getTargetTriple()), - ObjLinkingLayer(createObjectLinkingLayer(S, *ES)), - ObjTransformLayer(*this->ES, *ObjLinkingLayer) { + ObjLinkingLayer(createObjectLinkingLayer(S, *ES)) { ErrorAsOutParameter _(&Err); @@ -1078,6 +1078,9 @@ return; } + ObjTransformLayer = + std::make_unique(*ES, *ObjLinkingLayer); + { auto CompileFunction = createCompileFunction(S, std::move(*S.JTMB)); if (!CompileFunction) { @@ -1085,7 +1088,7 @@ return; } CompileLayer = std::make_unique( - *ES, ObjTransformLayer, std::move(*CompileFunction)); + *ES, *ObjTransformLayer, std::move(*CompileFunction)); TransformLayer = std::make_unique(*ES, *CompileLayer); InitHelperTransformLayer = std::make_unique(*ES, *TransformLayer);