[llvm] r333127 - [LKH] Add a new IRCompileLayer.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Wed May 23 14:37:38 PDT 2018
Oops. Workflow fail: I was planning to tidy this up and add some comments
before committing. I'll flesh this out with comments soon, but for the
curious: I'll be adding new thread-safe versions of the existing layers
(building on the work in Orc/Core.h and Orc/Layer.h). The aim is to replace
the existing, non-thread-safe layers with the new ones over the next few
weeks. This will involve some API breaking changes, but they should be
reasonably easy to adapt to. The pay-off will be support for multi-threaded
code and multi-core JITing.
-- Lang.
On Wed, May 23, 2018 at 2:27 PM, Lang Hames via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: lhames
> Date: Wed May 23 14:27:01 2018
> New Revision: 333127
>
> URL: http://llvm.org/viewvc/llvm-project?rev=333127&view=rev
> Log:
> [LKH] Add a new IRCompileLayer.
>
> Added:
> llvm/trunk/lib/ExecutionEngine/Orc/IRCompileLayer.cpp
> Modified:
> llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
> llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt
> llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/ExecutionEngine/Orc/IRCompileLayer.h?rev=333127&
> r1=333126&r2=333127&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h Wed May
> 23 14:27:01 2018
> @@ -16,8 +16,9 @@
>
> #include "llvm/ADT/STLExtras.h"
> #include "llvm/ExecutionEngine/JITSymbol.h"
> -#include "llvm/ExecutionEngine/Orc/Core.h"
> +#include "llvm/ExecutionEngine/Orc/Layer.h"
> #include "llvm/Support/Error.h"
> +#include "llvm/Support/MemoryBuffer.h"
> #include <memory>
> #include <string>
>
> @@ -27,6 +28,29 @@ class Module;
>
> namespace orc {
>
> +class IRCompileLayer2 : public IRLayer {
> +public:
> + using CompileFunction =
> + std::function<Expected<std::unique_ptr<MemoryBuffer>>(Module &)>;
> +
> + using NotifyCompiledFunction =
> + std::function<void(VModuleKey K, std::unique_ptr<Module>)>;
> +
> + IRCompileLayer2(ExecutionSession &ES, ObjectLayer &BaseLayer,
> + CompileFunction Compile);
> +
> + void setNotifyCompiled(NotifyCompiledFunction NotifyCompiled);
> +
> + void emit(MaterializationResponsibility R, VModuleKey K,
> + std::unique_ptr<Module> M) override;
> +
> +private:
> + mutable std::mutex IRLayerMutex;
> + ObjectLayer &BaseLayer;
> + CompileFunction Compile;
> + NotifyCompiledFunction NotifyCompiled = NotifyCompiledFunction();
> +};
> +
> /// Eager IR compiling layer.
> ///
> /// This layer immediately compiles each IR module added via addModule
> to an
>
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> ExecutionEngine/Orc/CMakeLists.txt?rev=333127&r1=
> 333126&r2=333127&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt Wed May 23 14:27:01
> 2018
> @@ -2,6 +2,7 @@ add_llvm_library(LLVMOrcJIT
> Core.cpp
> ExecutionUtils.cpp
> IndirectionUtils.cpp
> + IRCompileLayer.cpp
> Legacy.cpp
> Layer.cpp
> NullResolver.cpp
>
> Added: llvm/trunk/lib/ExecutionEngine/Orc/IRCompileLayer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> ExecutionEngine/Orc/IRCompileLayer.cpp?rev=333127&view=auto
> ============================================================
> ==================
> --- llvm/trunk/lib/ExecutionEngine/Orc/IRCompileLayer.cpp (added)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/IRCompileLayer.cpp Wed May 23
> 14:27:01 2018
> @@ -0,0 +1,44 @@
> +//===--------------- IRCompileLayer.cpp - IR Compiling Layer
> --------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------
> ----------------===//
> +
> +#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
> +
> +namespace llvm {
> +namespace orc {
> +
> +IRCompileLayer2::IRCompileLayer2(ExecutionSession &ES, ObjectLayer
> &BaseLayer,
> + CompileFunction Compile)
> + : IRLayer(ES), BaseLayer(BaseLayer), Compile(std::move(Compile)) {}
> +
> +void IRCompileLayer2::setNotifyCompiled(NotifyCompiledFunction
> NotifyCompiled) {
> + std::lock_guard<std::mutex> Lock(IRLayerMutex);
> + this->NotifyCompiled = std::move(NotifyCompiled);
> +}
> +
> +void IRCompileLayer2::emit(MaterializationResponsibility R, VModuleKey K,
> + std::unique_ptr<Module> M) {
> + assert(M && "Module must not be null");
> +
> + if (auto Obj = Compile(*M)) {
> + {
> + std::lock_guard<std::mutex> Lock(IRLayerMutex);
> + if (NotifyCompiled)
> + NotifyCompiled(K, std::move(M));
> + else
> + M = nullptr;
> + }
> + BaseLayer.emit(std::move(R), std::move(K), std::move(*Obj));
> + } else {
> + R.failMaterialization();
> + getExecutionSession().reportError(Obj.takeError());
> + }
> +}
> +
> +} // End namespace orc.
> +} // End namespace llvm.
>
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp?rev=333127&r1=333126&r2=
> 333127&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp Wed
> May 23 14:27:01 2018
> @@ -22,7 +22,7 @@ RTDyldObjectLinkingLayer2::RTDyldObjectL
> void RTDyldObjectLinkingLayer2::emit(MaterializationResponsibility R,
> VModuleKey K,
> std::unique_ptr<MemoryBuffer> O) {
> - assert(O && "Object has already been materialized");
> + assert(O && "Object must not be null");
>
> auto &ES = getExecutionSession();
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180523/a152e27b/attachment.html>
More information about the llvm-commits
mailing list