mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-02 10:16:06 +00:00
Document legacy pass manager extension points
Differential Revision: https://reviews.llvm.org/D64093 llvm-svn: 365142
This commit is contained in:
parent
5f73e37af8
commit
85fc597f26
@ -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
|
||||
|
@ -178,6 +178,18 @@ 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++
|
||||
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user