Skip to content

Commit

Permalink
Document legacy pass manager extension points
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D64093

llvm-svn: 365142
  • Loading branch information
Serge Guelton committed Jul 4, 2019
1 parent 5f73e37 commit 85fc597
Showing 2 changed files with 27 additions and 3 deletions.
4 changes: 4 additions & 0 deletions llvm/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
@@ -45,6 +45,10 @@ Non-comprehensive list of changes in this release
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
26 changes: 23 additions & 3 deletions llvm/docs/WritingAnLLVMPass.rst
Original file line number Diff line number Diff line change
@@ -178,16 +178,31 @@ without modifying it then the third argument is set to ``true``; if a pass is
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++

#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

0 comments on commit 85fc597

Please sign in to comment.