[PATCH] D72406: [Orc][LLJIT] Add optimizer support to LLJIT

Don Hinton via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 8 11:18:06 PST 2020


hintonda created this revision.
hintonda added reviewers: lhames, beanz, alexr.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.

Add ability to optimize LLJIT modules by moving the TransformLayer
from LLLazyJIT up to LLJIT so it can be used by both.  The LLLazyJIT
interface and functionality remains unchanged.

This is a minimal patch that reuses TransformLayer for both LLJIT and
LLLazyJIT.  This shouldn't be a problem, since LLLazyJIT functionality
remains unchanged.  However, an alternative would be to add a module
specific TransformLayer.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D72406

Files:
  llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
  llvm/lib/ExecutionEngine/Orc/LLJIT.cpp


Index: llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
===================================================================
--- llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
+++ llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
@@ -67,7 +67,7 @@
           TSM.withModuleDo([&](Module &M) { return applyDataLayout(M); }))
     return Err;
 
-  return CompileLayer->add(JD, std::move(TSM), ES->allocateVModule());
+  return TransformLayer->add(JD, std::move(TSM), ES->allocateVModule());
 }
 
 Error LLJIT::addObjectFile(JITDylib &JD, std::unique_ptr<MemoryBuffer> Obj) {
@@ -149,10 +149,13 @@
     }
     CompileLayer = std::make_unique<IRCompileLayer>(
         *ES, ObjTransformLayer, std::move(*CompileFunction));
+
+    // Create the transform layer.
+    TransformLayer = std::make_unique<IRTransformLayer>(*ES, *CompileLayer);
   }
 
   if (S.NumCompileThreads > 0) {
-    CompileLayer->setCloneToNewContextOnEmit(true);
+    TransformLayer->setCloneToNewContextOnEmit(true);
     CompileThreads = std::make_unique<ThreadPool>(S.NumCompileThreads);
     ES->setDispatchMaterialization(
         [this](JITDylib &JD, std::unique_ptr<MaterializationUnit> MU) {
@@ -249,9 +252,6 @@
     return;
   }
 
-  // Create the transform layer.
-  TransformLayer = std::make_unique<IRTransformLayer>(*ES, *CompileLayer);
-
   // Create the COD layer.
   CODLayer = std::make_unique<CompileOnDemandLayer>(
       *ES, *TransformLayer, *LCTMgr, std::move(ISMBuilder));
Index: llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
===================================================================
--- llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
+++ llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
@@ -42,6 +42,12 @@
   /// compile threads to complete.
   ~LLJIT();
 
+  /// Set an IR transform (e.g. pass manager pipeline) to run when it is
+  /// compiled.
+  void setCompileTransform(IRTransformLayer::TransformFunction Transform) {
+    TransformLayer->setTransform(std::move(Transform));
+  }
+
   /// Returns the ExecutionSession for this instance.
   ExecutionSession &getExecutionSession() { return *ES; }
 
@@ -145,6 +151,7 @@
   std::unique_ptr<ObjectLayer> ObjLinkingLayer;
   ObjectTransformLayer ObjTransformLayer;
   std::unique_ptr<IRCompileLayer> CompileLayer;
+  std::unique_ptr<IRTransformLayer> TransformLayer;
 
   CtorDtorRunner CtorRunner, DtorRunner;
 };
@@ -182,7 +189,6 @@
   LLLazyJIT(LLLazyJITBuilderState &S, Error &Err);
 
   std::unique_ptr<LazyCallThroughManager> LCTMgr;
-  std::unique_ptr<IRTransformLayer> TransformLayer;
   std::unique_ptr<CompileOnDemandLayer> CODLayer;
 };
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72406.236870.patch
Type: text/x-patch
Size: 2569 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200108/06f26b77/attachment.bin>


More information about the llvm-commits mailing list