[llvm] r333129 - [LKH] Add a new IRTransformLayer.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Wed May 23 14:27:07 PDT 2018


Author: lhames
Date: Wed May 23 14:27:07 2018
New Revision: 333129

URL: http://llvm.org/viewvc/llvm-project?rev=333129&view=rev
Log:
[LKH] Add a new IRTransformLayer.

Added:
    llvm/trunk/lib/ExecutionEngine/Orc/IRTransformLayer.cpp
Modified:
    llvm/trunk/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
    llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt

Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h?rev=333129&r1=333128&r2=333129&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h Wed May 23 14:27:07 2018
@@ -15,7 +15,7 @@
 #define LLVM_EXECUTIONENGINE_ORC_IRTRANSFORMLAYER_H
 
 #include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
 #include <memory>
 #include <string>
 
@@ -23,6 +23,24 @@ namespace llvm {
 class Module;
 namespace orc {
 
+class IRTransformLayer2 : public IRLayer {
+public:
+
+  using TransformFunction =
+    std::function<Expected<std::unique_ptr<Module>>(std::unique_ptr<Module>)>;
+
+  IRTransformLayer2(ExecutionSession &ES,
+                    IRLayer &BaseLayer,
+                    TransformFunction Transform);
+
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<Module> M) override;
+
+private:
+  IRLayer &BaseLayer;
+  TransformFunction Transform;
+};
+
 /// IR mutating layer.
 ///
 ///   This layer applies a user supplied transform to each module that is added,

Modified: llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt?rev=333129&r1=333128&r2=333129&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt (original)
+++ llvm/trunk/lib/ExecutionEngine/Orc/CMakeLists.txt Wed May 23 14:27:07 2018
@@ -3,6 +3,7 @@ add_llvm_library(LLVMOrcJIT
   ExecutionUtils.cpp
   IndirectionUtils.cpp
   IRCompileLayer.cpp
+  IRTransformLayer.cpp
   Legacy.cpp
   Layer.cpp
   NullResolver.cpp

Added: llvm/trunk/lib/ExecutionEngine/Orc/IRTransformLayer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/IRTransformLayer.cpp?rev=333129&view=auto
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Orc/IRTransformLayer.cpp (added)
+++ llvm/trunk/lib/ExecutionEngine/Orc/IRTransformLayer.cpp Wed May 23 14:27:07 2018
@@ -0,0 +1,34 @@
+//===-------------- IRTransformLayer.cpp - IR Transform 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/IRTransformLayer.h"
+#include "llvm/Support/MemoryBuffer.h"
+
+namespace llvm {
+namespace orc {
+
+IRTransformLayer2::IRTransformLayer2(ExecutionSession &ES,
+                                     IRLayer &BaseLayer,
+                                     TransformFunction Transform)
+    : IRLayer(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {}
+
+void IRTransformLayer2::emit(MaterializationResponsibility R, VModuleKey K,
+                             std::unique_ptr<Module> M) {
+  assert(M && "Module must not be null");
+
+  if (auto TransformedMod = Transform(std::move(M)))
+    BaseLayer.emit(std::move(R), std::move(K), std::move(*TransformedMod));
+  else {
+    R.failMaterialization();
+    getExecutionSession().reportError(TransformedMod.takeError());
+  }
+}
+
+} // End namespace orc.
+} // End namespace llvm.




More information about the llvm-commits mailing list