[llvm] r365142 - Document legacy pass manager extension points

Serge Guelton via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 4 07:03:11 PDT 2019


Author: serge_sans_paille
Date: Thu Jul  4 07:03:11 2019
New Revision: 365142

URL: http://llvm.org/viewvc/llvm-project?rev=365142&view=rev
Log:
Document legacy pass manager extension points

Differential Revision: https://reviews.llvm.org/D64093

Modified:
    llvm/trunk/docs/ReleaseNotes.rst
    llvm/trunk/docs/WritingAnLLVMPass.rst

Modified: llvm/trunk/docs/ReleaseNotes.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ReleaseNotes.rst?rev=365142&r1=365141&r2=365142&view=diff
==============================================================================
--- llvm/trunk/docs/ReleaseNotes.rst (original)
+++ llvm/trunk/docs/ReleaseNotes.rst Thu Jul  4 07:03:11 2019
@@ -45,6 +45,10 @@ Non-comprehensive list of changes in thi
   the platform's libc) without specifying ``-ffreestanding`` may need to either
   pass ``-fno-builtin-bcmp``, or provide a ``bcmp`` function.
 
+* Two new extension points, namely ``EP_FullLinkTimeOptimizationEarly`` and
+  ``EP_FullLinkTimeOptimizationLast`` are available for plugins to specialize
+  the legacy pass manager full LTO pipeline.
+
 .. NOTE
    If you would like to document a larger change, then you can add a
    subsection about it right here. You can copy the following boilerplate

Modified: llvm/trunk/docs/WritingAnLLVMPass.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/WritingAnLLVMPass.rst?rev=365142&r1=365141&r2=365142&view=diff
==============================================================================
--- llvm/trunk/docs/WritingAnLLVMPass.rst (original)
+++ llvm/trunk/docs/WritingAnLLVMPass.rst Thu Jul  4 07:03:11 2019
@@ -178,6 +178,18 @@ without modifying it then the third argu
 an analysis pass, for example dominator tree pass, then ``true`` is supplied as
 the fourth argument.
 
+If we want to register the pass as a step of an existing pipeline, some extension
+points are provided, e.g. ``PassManagerBuilder::EP_EarlyAsPossible`` to apply our
+pass before any optimization, or ``PassManagerBuilder::EP_FullLinkTimeOptimizationLast``
+to apply it after Link Time Optimizations.
+
+.. code-block:: c++
+
+    static llvm::RegisterStandardPasses Y(
+        llvm::PassManagerBuilder::EP_EarlyAsPossible,
+        [](const llvm::PassManagerBuilder &Builder,
+           llvm::legacy::PassManagerBase &PM) { PM.add(new Hello()); });
+
 As a whole, the ``.cpp`` file looks like:
 
 .. code-block:: c++
@@ -185,9 +197,12 @@ As a whole, the ``.cpp`` file looks like
   #include "llvm/Pass.h"
   #include "llvm/IR/Function.h"
   #include "llvm/Support/raw_ostream.h"
-  
+
+  #include "llvm/IR/LegacyPassManager.h"
+  #include "llvm/Transforms/IPO/PassManagerBuilder.h"
+
   using namespace llvm;
-  
+
   namespace {
   struct Hello : public FunctionPass {
     static char ID;
@@ -200,12 +215,17 @@ As a whole, the ``.cpp`` file looks like
     }
   }; // end of struct Hello
   }  // end of anonymous namespace
-  
+
   char Hello::ID = 0;
   static RegisterPass<Hello> X("hello", "Hello World Pass",
                                false /* Only looks at CFG */,
                                false /* Analysis Pass */);
 
+  static RegisterStandardPasses Y(
+      PassManagerBuilder::EP_EarlyAsPossible,
+      [](const PassManagerBuilder &Builder,
+         legacy::PassManagerBase &PM) { PM.add(new Hello()); });
+
 Now that it's all together, compile the file with a simple "``gmake``" command
 from the top level of your build directory and you should get a new file
 "``lib/LLVMHello.so``".  Note that everything in this file is




More information about the llvm-commits mailing list