[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / docs / WritingAnLLVMPass.rst
blobb644def6cbeb5cf18909938d8bbd4d517988332e
1 ====================
2 Writing an LLVM Pass
3 ====================
5 .. program:: opt
7 .. contents::
8     :local:
10 Introduction --- What is a pass?
11 ================================
13 The LLVM Pass Framework is an important part of the LLVM system, because LLVM
14 passes are where most of the interesting parts of the compiler exist.  Passes
15 perform the transformations and optimizations that make up the compiler, they
16 build the analysis results that are used by these transformations, and they
17 are, above all, a structuring technique for compiler code.
19 All LLVM passes are subclasses of the `Pass
20 <https://llvm.org/doxygen/classllvm_1_1Pass.html>`_ class, which implement
21 functionality by overriding virtual methods inherited from ``Pass``.  Depending
22 on how your pass works, you should inherit from the :ref:`ModulePass
23 <writing-an-llvm-pass-ModulePass>` , :ref:`CallGraphSCCPass
24 <writing-an-llvm-pass-CallGraphSCCPass>`, :ref:`FunctionPass
25 <writing-an-llvm-pass-FunctionPass>` , or :ref:`LoopPass
26 <writing-an-llvm-pass-LoopPass>`, or :ref:`RegionPass
27 <writing-an-llvm-pass-RegionPass>` classes, which gives the system more
28 information about what your pass does, and how it can be combined with other
29 passes.  One of the main features of the LLVM Pass Framework is that it
30 schedules passes to run in an efficient way based on the constraints that your
31 pass meets (which are indicated by which class they derive from).
33 We start by showing you how to construct a pass, everything from setting up the
34 code, to compiling, loading, and executing it.  After the basics are down, more
35 advanced features are discussed.
37 .. warning::
38   This document deals with the legacy pass manager. LLVM uses the new pass
39   manager by default for the optimization pipeline (the codegen pipeline is
40   still using the legacy pass manager), which has its own way of defining
41   passes. For more details, see :doc:`WritingAnLLVMNewPMPass` and
42   :doc:`NewPassManager`. To use the legacy pass manager with ``opt``, pass
43   the ``-enable-new-pm=0`` flag to all ``opt`` invocations.
45 Quick Start --- Writing hello world
46 ===================================
48 Here we describe how to write the "hello world" of passes.  The "Hello" pass is
49 designed to simply print out the name of non-external functions that exist in
50 the program being compiled.  It does not modify the program at all, it just
51 inspects it.  The source code and files for this pass are available in the LLVM
52 source tree in the ``lib/Transforms/Hello`` directory.
54 .. _writing-an-llvm-pass-makefile:
56 Setting up the build environment
57 --------------------------------
59 First, configure and build LLVM.  Next, you need to create a new directory
60 somewhere in the LLVM source base.  For this example, we'll assume that you
61 made ``lib/Transforms/Hello``.  Finally, you must set up a build script
62 that will compile the source code for the new pass.  To do this,
63 copy the following into ``CMakeLists.txt``:
65 .. code-block:: cmake
67   add_llvm_library( LLVMHello MODULE
68     Hello.cpp
70     PLUGIN_TOOL
71     opt
72     )
74 and the following line into ``lib/Transforms/CMakeLists.txt``:
76 .. code-block:: cmake
78   add_subdirectory(Hello)
80 (Note that there is already a directory named ``Hello`` with a sample "Hello"
81 pass; you may play with it -- in which case you don't need to modify any
82 ``CMakeLists.txt`` files -- or, if you want to create everything from scratch,
83 use another name.)
85 This build script specifies that ``Hello.cpp`` file in the current directory
86 is to be compiled and linked into a shared object ``$(LEVEL)/lib/LLVMHello.so`` that
87 can be dynamically loaded by the :program:`opt` tool via its :option:`-load`
88 option. If your operating system uses a suffix other than ``.so`` (such as
89 Windows or macOS), the appropriate extension will be used.
91 Now that we have the build scripts set up, we just need to write the code for
92 the pass itself.
94 .. _writing-an-llvm-pass-basiccode:
96 Basic code required
97 -------------------
99 Now that we have a way to compile our new pass, we just have to write it.
100 Start out with:
102 .. code-block:: c++
104   #include "llvm/Pass.h"
105   #include "llvm/IR/Function.h"
106   #include "llvm/Support/raw_ostream.h"
108 Which are needed because we are writing a `Pass
109 <https://llvm.org/doxygen/classllvm_1_1Pass.html>`_, we are operating on
110 `Function <https://llvm.org/doxygen/classllvm_1_1Function.html>`_\ s, and we will
111 be doing some printing.
113 Next we have:
115 .. code-block:: c++
117   using namespace llvm;
119 ... which is required because the functions from the include files live in the
120 llvm namespace.
122 Next we have:
124 .. code-block:: c++
126   namespace {
128 ... which starts out an anonymous namespace.  Anonymous namespaces are to C++
129 what the "``static``" keyword is to C (at global scope).  It makes the things
130 declared inside of the anonymous namespace visible only to the current file.
131 If you're not familiar with them, consult a decent C++ book for more
132 information.
134 Next, we declare our pass itself:
136 .. code-block:: c++
138   struct Hello : public FunctionPass {
140 This declares a "``Hello``" class that is a subclass of :ref:`FunctionPass
141 <writing-an-llvm-pass-FunctionPass>`.  The different builtin pass subclasses
142 are described in detail :ref:`later <writing-an-llvm-pass-pass-classes>`, but
143 for now, know that ``FunctionPass`` operates on a function at a time.
145 .. code-block:: c++
147     static char ID;
148     Hello() : FunctionPass(ID) {}
150 This declares pass identifier used by LLVM to identify pass.  This allows LLVM
151 to avoid using expensive C++ runtime information.
153 .. code-block:: c++
155     bool runOnFunction(Function &F) override {
156       errs() << "Hello: ";
157       errs().write_escaped(F.getName()) << '\n';
158       return false;
159     }
160   }; // end of struct Hello
161   }  // end of anonymous namespace
163 We declare a :ref:`runOnFunction <writing-an-llvm-pass-runOnFunction>` method,
164 which overrides an abstract virtual method inherited from :ref:`FunctionPass
165 <writing-an-llvm-pass-FunctionPass>`.  This is where we are supposed to do our
166 thing, so we just print out our message with the name of each function.
168 .. code-block:: c++
170   char Hello::ID = 0;
172 We initialize pass ID here.  LLVM uses ID's address to identify a pass, so
173 initialization value is not important.
175 .. code-block:: c++
177   static RegisterPass<Hello> X("hello", "Hello World Pass",
178                                false /* Only looks at CFG */,
179                                false /* Analysis Pass */);
181 Lastly, we :ref:`register our class <writing-an-llvm-pass-registration>`
182 ``Hello``, giving it a command line argument "``hello``", and a name "Hello
183 World Pass".  The last two arguments describe its behavior: if a pass walks CFG
184 without modifying it then the third argument is set to ``true``; if a pass is
185 an analysis pass, for example dominator tree pass, then ``true`` is supplied as
186 the fourth argument.
188 If we want to register the pass as a step of an existing pipeline, some extension
189 points are provided, e.g. ``PassManagerBuilder::EP_EarlyAsPossible`` to apply our
190 pass before any optimization, or ``PassManagerBuilder::EP_FullLinkTimeOptimizationLast``
191 to apply it after Link Time Optimizations.
193 .. code-block:: c++
195     static llvm::RegisterStandardPasses Y(
196         llvm::PassManagerBuilder::EP_EarlyAsPossible,
197         [](const llvm::PassManagerBuilder &Builder,
198            llvm::legacy::PassManagerBase &PM) { PM.add(new Hello()); });
200 As a whole, the ``.cpp`` file looks like:
202 .. code-block:: c++
204   #include "llvm/Pass.h"
205   #include "llvm/IR/Function.h"
206   #include "llvm/Support/raw_ostream.h"
208   #include "llvm/IR/LegacyPassManager.h"
209   #include "llvm/Transforms/IPO/PassManagerBuilder.h"
211   using namespace llvm;
213   namespace {
214   struct Hello : public FunctionPass {
215     static char ID;
216     Hello() : FunctionPass(ID) {}
218     bool runOnFunction(Function &F) override {
219       errs() << "Hello: ";
220       errs().write_escaped(F.getName()) << '\n';
221       return false;
222     }
223   }; // end of struct Hello
224   }  // end of anonymous namespace
226   char Hello::ID = 0;
227   static RegisterPass<Hello> X("hello", "Hello World Pass",
228                                false /* Only looks at CFG */,
229                                false /* Analysis Pass */);
231   static RegisterStandardPasses Y(
232       PassManagerBuilder::EP_EarlyAsPossible,
233       [](const PassManagerBuilder &Builder,
234          legacy::PassManagerBase &PM) { PM.add(new Hello()); });
236 Now that it's all together, compile the file with a simple "``gmake``" command
237 from the top level of your build directory and you should get a new file
238 "``lib/LLVMHello.so``".  Note that everything in this file is
239 contained in an anonymous namespace --- this reflects the fact that passes
240 are self contained units that do not need external interfaces (although they
241 can have them) to be useful.
243 Running a pass with ``opt``
244 ---------------------------
246 Now that you have a brand new shiny shared object file, we can use the
247 :program:`opt` command to run an LLVM program through your pass.  Because you
248 registered your pass with ``RegisterPass``, you will be able to use the
249 :program:`opt` tool to access it, once loaded.
251 To test it, follow the example at the end of the :doc:`GettingStarted` to
252 compile "Hello World" to LLVM.  We can now run the bitcode file (hello.bc) for
253 the program through our transformation like this (or course, any bitcode file
254 will work):
256 .. code-block:: console
258   $ opt -load lib/LLVMHello.so -hello < hello.bc > /dev/null
259   Hello: __main
260   Hello: puts
261   Hello: main
263 The :option:`-load` option specifies that :program:`opt` should load your pass
264 as a shared object, which makes "``-hello``" a valid command line argument
265 (which is one reason you need to :ref:`register your pass
266 <writing-an-llvm-pass-registration>`).  Because the Hello pass does not modify
267 the program in any interesting way, we just throw away the result of
268 :program:`opt` (sending it to ``/dev/null``).
270 To see what happened to the other string you registered, try running
271 :program:`opt` with the :option:`-help` option:
273 .. code-block:: console
275   $ opt -load lib/LLVMHello.so -help
276   OVERVIEW: llvm .bc -> .bc modular optimizer and analysis printer
278   USAGE: opt [subcommand] [options] <input bitcode file>
280   OPTIONS:
281     Optimizations available:
282   ...
283       -guard-widening           - Widen guards
284       -gvn                      - Global Value Numbering
285       -gvn-hoist                - Early GVN Hoisting of Expressions
286       -hello                    - Hello World Pass
287       -indvars                  - Induction Variable Simplification
288       -inferattrs               - Infer set function attributes
289   ...
291 The pass name gets added as the information string for your pass, giving some
292 documentation to users of :program:`opt`.  Now that you have a working pass,
293 you would go ahead and make it do the cool transformations you want.  Once you
294 get it all working and tested, it may become useful to find out how fast your
295 pass is.  The :ref:`PassManager <writing-an-llvm-pass-passmanager>` provides a
296 nice command line option (:option:`-time-passes`) that allows you to get
297 information about the execution time of your pass along with the other passes
298 you queue up.  For example:
300 .. code-block:: console
302   $ opt -load lib/LLVMHello.so -hello -time-passes < hello.bc > /dev/null
303   Hello: __main
304   Hello: puts
305   Hello: main
306   ===-------------------------------------------------------------------------===
307                         ... Pass execution timing report ...
308   ===-------------------------------------------------------------------------===
309     Total Execution Time: 0.0007 seconds (0.0005 wall clock)
311      ---User Time---   --User+System--   ---Wall Time---  --- Name ---
312      0.0004 ( 55.3%)   0.0004 ( 55.3%)   0.0004 ( 75.7%)  Bitcode Writer
313      0.0003 ( 44.7%)   0.0003 ( 44.7%)   0.0001 ( 13.6%)  Hello World Pass
314      0.0000 (  0.0%)   0.0000 (  0.0%)   0.0001 ( 10.7%)  Module Verifier
315      0.0007 (100.0%)   0.0007 (100.0%)   0.0005 (100.0%)  Total
317 As you can see, our implementation above is pretty fast.  The additional
318 passes listed are automatically inserted by the :program:`opt` tool to verify
319 that the LLVM emitted by your pass is still valid and well formed LLVM, which
320 hasn't been broken somehow.
322 Now that you have seen the basics of the mechanics behind passes, we can talk
323 about some more details of how they work and how to use them.
325 .. _writing-an-llvm-pass-pass-classes:
327 Pass classes and requirements
328 =============================
330 One of the first things that you should do when designing a new pass is to
331 decide what class you should subclass for your pass.  The :ref:`Hello World
332 <writing-an-llvm-pass-basiccode>` example uses the :ref:`FunctionPass
333 <writing-an-llvm-pass-FunctionPass>` class for its implementation, but we did
334 not discuss why or when this should occur.  Here we talk about the classes
335 available, from the most general to the most specific.
337 When choosing a superclass for your ``Pass``, you should choose the **most
338 specific** class possible, while still being able to meet the requirements
339 listed.  This gives the LLVM Pass Infrastructure information necessary to
340 optimize how passes are run, so that the resultant compiler isn't unnecessarily
341 slow.
343 The ``ImmutablePass`` class
344 ---------------------------
346 The most plain and boring type of pass is the "`ImmutablePass
347 <https://llvm.org/doxygen/classllvm_1_1ImmutablePass.html>`_" class.  This pass
348 type is used for passes that do not have to be run, do not change state, and
349 never need to be updated.  This is not a normal type of transformation or
350 analysis, but can provide information about the current compiler configuration.
352 Although this pass class is very infrequently used, it is important for
353 providing information about the current target machine being compiled for, and
354 other static information that can affect the various transformations.
356 ``ImmutablePass``\ es never invalidate other transformations, are never
357 invalidated, and are never "run".
359 .. _writing-an-llvm-pass-ModulePass:
361 The ``ModulePass`` class
362 ------------------------
364 The `ModulePass <https://llvm.org/doxygen/classllvm_1_1ModulePass.html>`_ class
365 is the most general of all superclasses that you can use.  Deriving from
366 ``ModulePass`` indicates that your pass uses the entire program as a unit,
367 referring to function bodies in no predictable order, or adding and removing
368 functions.  Because nothing is known about the behavior of ``ModulePass``
369 subclasses, no optimization can be done for their execution.
371 A module pass can use function level passes (e.g. dominators) using the
372 ``getAnalysis`` interface ``getAnalysis<DominatorTree>(llvm::Function *)`` to
373 provide the function to retrieve analysis result for, if the function pass does
374 not require any module or immutable passes.  Note that this can only be done
375 for functions for which the analysis ran, e.g. in the case of dominators you
376 should only ask for the ``DominatorTree`` for function definitions, not
377 declarations.
379 To write a correct ``ModulePass`` subclass, derive from ``ModulePass`` and
380 override the ``runOnModule`` method with the following signature:
382 The ``runOnModule`` method
383 ^^^^^^^^^^^^^^^^^^^^^^^^^^
385 .. code-block:: c++
387   virtual bool runOnModule(Module &M) = 0;
389 The ``runOnModule`` method performs the interesting work of the pass.  It
390 should return ``true`` if the module was modified by the transformation and
391 ``false`` otherwise.
393 .. _writing-an-llvm-pass-CallGraphSCCPass:
395 The ``CallGraphSCCPass`` class
396 ------------------------------
398 The `CallGraphSCCPass
399 <https://llvm.org/doxygen/classllvm_1_1CallGraphSCCPass.html>`_ is used by
400 passes that need to traverse the program bottom-up on the call graph (callees
401 before callers).  Deriving from ``CallGraphSCCPass`` provides some mechanics
402 for building and traversing the ``CallGraph``, but also allows the system to
403 optimize execution of ``CallGraphSCCPass``\ es.  If your pass meets the
404 requirements outlined below, and doesn't meet the requirements of a
405 :ref:`FunctionPass <writing-an-llvm-pass-FunctionPass>`, you should derive from
406 ``CallGraphSCCPass``.
408 ``TODO``: explain briefly what SCC, Tarjan's algo, and B-U mean.
410 To be explicit, CallGraphSCCPass subclasses are:
412 #. ... *not allowed* to inspect or modify any ``Function``\ s other than those
413    in the current SCC and the direct callers and direct callees of the SCC.
414 #. ... *required* to preserve the current ``CallGraph`` object, updating it to
415    reflect any changes made to the program.
416 #. ... *not allowed* to add or remove SCC's from the current Module, though
417    they may change the contents of an SCC.
418 #. ... *allowed* to add or remove global variables from the current Module.
419 #. ... *allowed* to maintain state across invocations of :ref:`runOnSCC
420    <writing-an-llvm-pass-runOnSCC>` (including global data).
422 Implementing a ``CallGraphSCCPass`` is slightly tricky in some cases because it
423 has to handle SCCs with more than one node in it.  All of the virtual methods
424 described below should return ``true`` if they modified the program, or
425 ``false`` if they didn't.
427 The ``doInitialization(CallGraph &)`` method
428 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
430 .. code-block:: c++
432   virtual bool doInitialization(CallGraph &CG);
434 The ``doInitialization`` method is allowed to do most of the things that
435 ``CallGraphSCCPass``\ es are not allowed to do.  They can add and remove
436 functions, get pointers to functions, etc.  The ``doInitialization`` method is
437 designed to do simple initialization type of stuff that does not depend on the
438 SCCs being processed.  The ``doInitialization`` method call is not scheduled to
439 overlap with any other pass executions (thus it should be very fast).
441 .. _writing-an-llvm-pass-runOnSCC:
443 The ``runOnSCC`` method
444 ^^^^^^^^^^^^^^^^^^^^^^^
446 .. code-block:: c++
448   virtual bool runOnSCC(CallGraphSCC &SCC) = 0;
450 The ``runOnSCC`` method performs the interesting work of the pass, and should
451 return ``true`` if the module was modified by the transformation, ``false``
452 otherwise.
454 The ``doFinalization(CallGraph &)`` method
455 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
457 .. code-block:: c++
459   virtual bool doFinalization(CallGraph &CG);
461 The ``doFinalization`` method is an infrequently used method that is called
462 when the pass framework has finished calling :ref:`runOnSCC
463 <writing-an-llvm-pass-runOnSCC>` for every SCC in the program being compiled.
465 .. _writing-an-llvm-pass-FunctionPass:
467 The ``FunctionPass`` class
468 --------------------------
470 In contrast to ``ModulePass`` subclasses, `FunctionPass
471 <https://llvm.org/doxygen/classllvm_1_1Pass.html>`_ subclasses do have a
472 predictable, local behavior that can be expected by the system.  All
473 ``FunctionPass`` execute on each function in the program independent of all of
474 the other functions in the program.  ``FunctionPass``\ es do not require that
475 they are executed in a particular order, and ``FunctionPass``\ es do not modify
476 external functions.
478 To be explicit, ``FunctionPass`` subclasses are not allowed to:
480 #. Inspect or modify a ``Function`` other than the one currently being processed.
481 #. Add or remove ``Function``\ s from the current ``Module``.
482 #. Add or remove global variables from the current ``Module``.
483 #. Maintain state across invocations of :ref:`runOnFunction
484    <writing-an-llvm-pass-runOnFunction>` (including global data).
486 Implementing a ``FunctionPass`` is usually straightforward (See the :ref:`Hello
487 World <writing-an-llvm-pass-basiccode>` pass for example).
488 ``FunctionPass``\ es may override three virtual methods to do their work.  All
489 of these methods should return ``true`` if they modified the program, or
490 ``false`` if they didn't.
492 .. _writing-an-llvm-pass-doInitialization-mod:
494 The ``doInitialization(Module &)`` method
495 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
497 .. code-block:: c++
499   virtual bool doInitialization(Module &M);
501 The ``doInitialization`` method is allowed to do most of the things that
502 ``FunctionPass``\ es are not allowed to do.  They can add and remove functions,
503 get pointers to functions, etc.  The ``doInitialization`` method is designed to
504 do simple initialization type of stuff that does not depend on the functions
505 being processed.  The ``doInitialization`` method call is not scheduled to
506 overlap with any other pass executions (thus it should be very fast).
508 A good example of how this method should be used is the `LowerAllocations
509 <https://llvm.org/doxygen/LowerAllocations_8cpp-source.html>`_ pass.  This pass
510 converts ``malloc`` and ``free`` instructions into platform dependent
511 ``malloc()`` and ``free()`` function calls.  It uses the ``doInitialization``
512 method to get a reference to the ``malloc`` and ``free`` functions that it
513 needs, adding prototypes to the module if necessary.
515 .. _writing-an-llvm-pass-runOnFunction:
517 The ``runOnFunction`` method
518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
520 .. code-block:: c++
522   virtual bool runOnFunction(Function &F) = 0;
524 The ``runOnFunction`` method must be implemented by your subclass to do the
525 transformation or analysis work of your pass.  As usual, a ``true`` value
526 should be returned if the function is modified.
528 .. _writing-an-llvm-pass-doFinalization-mod:
530 The ``doFinalization(Module &)`` method
531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
533 .. code-block:: c++
535   virtual bool doFinalization(Module &M);
537 The ``doFinalization`` method is an infrequently used method that is called
538 when the pass framework has finished calling :ref:`runOnFunction
539 <writing-an-llvm-pass-runOnFunction>` for every function in the program being
540 compiled.
542 .. _writing-an-llvm-pass-LoopPass:
544 The ``LoopPass`` class
545 ----------------------
547 All ``LoopPass`` execute on each :ref:`loop <loop-terminology>` in the function
548 independent of all of the other loops in the function.  ``LoopPass`` processes
549 loops in loop nest order such that outer most loop is processed last.
551 ``LoopPass`` subclasses are allowed to update loop nest using ``LPPassManager``
552 interface.  Implementing a loop pass is usually straightforward.
553 ``LoopPass``\ es may override three virtual methods to do their work.  All
554 these methods should return ``true`` if they modified the program, or ``false``
555 if they didn't.
557 A ``LoopPass`` subclass which is intended to run as part of the main loop pass
558 pipeline needs to preserve all of the same *function* analyses that the other
559 loop passes in its pipeline require. To make that easier,
560 a ``getLoopAnalysisUsage`` function is provided by ``LoopUtils.h``. It can be
561 called within the subclass's ``getAnalysisUsage`` override to get consistent
562 and correct behavior. Analogously, ``INITIALIZE_PASS_DEPENDENCY(LoopPass)``
563 will initialize this set of function analyses.
565 The ``doInitialization(Loop *, LPPassManager &)`` method
566 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
568 .. code-block:: c++
570   virtual bool doInitialization(Loop *, LPPassManager &LPM);
572 The ``doInitialization`` method is designed to do simple initialization type of
573 stuff that does not depend on the functions being processed.  The
574 ``doInitialization`` method call is not scheduled to overlap with any other
575 pass executions (thus it should be very fast).  ``LPPassManager`` interface
576 should be used to access ``Function`` or ``Module`` level analysis information.
578 .. _writing-an-llvm-pass-runOnLoop:
580 The ``runOnLoop`` method
581 ^^^^^^^^^^^^^^^^^^^^^^^^
583 .. code-block:: c++
585   virtual bool runOnLoop(Loop *, LPPassManager &LPM) = 0;
587 The ``runOnLoop`` method must be implemented by your subclass to do the
588 transformation or analysis work of your pass.  As usual, a ``true`` value
589 should be returned if the function is modified.  ``LPPassManager`` interface
590 should be used to update loop nest.
592 The ``doFinalization()`` method
593 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
595 .. code-block:: c++
597   virtual bool doFinalization();
599 The ``doFinalization`` method is an infrequently used method that is called
600 when the pass framework has finished calling :ref:`runOnLoop
601 <writing-an-llvm-pass-runOnLoop>` for every loop in the program being compiled.
603 .. _writing-an-llvm-pass-RegionPass:
605 The ``RegionPass`` class
606 ------------------------
608 ``RegionPass`` is similar to :ref:`LoopPass <writing-an-llvm-pass-LoopPass>`,
609 but executes on each single entry single exit region in the function.
610 ``RegionPass`` processes regions in nested order such that the outer most
611 region is processed last.
613 ``RegionPass`` subclasses are allowed to update the region tree by using the
614 ``RGPassManager`` interface.  You may override three virtual methods of
615 ``RegionPass`` to implement your own region pass.  All these methods should
616 return ``true`` if they modified the program, or ``false`` if they did not.
618 The ``doInitialization(Region *, RGPassManager &)`` method
619 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
621 .. code-block:: c++
623   virtual bool doInitialization(Region *, RGPassManager &RGM);
625 The ``doInitialization`` method is designed to do simple initialization type of
626 stuff that does not depend on the functions being processed.  The
627 ``doInitialization`` method call is not scheduled to overlap with any other
628 pass executions (thus it should be very fast).  ``RPPassManager`` interface
629 should be used to access ``Function`` or ``Module`` level analysis information.
631 .. _writing-an-llvm-pass-runOnRegion:
633 The ``runOnRegion`` method
634 ^^^^^^^^^^^^^^^^^^^^^^^^^^
636 .. code-block:: c++
638   virtual bool runOnRegion(Region *, RGPassManager &RGM) = 0;
640 The ``runOnRegion`` method must be implemented by your subclass to do the
641 transformation or analysis work of your pass.  As usual, a true value should be
642 returned if the region is modified.  ``RGPassManager`` interface should be used to
643 update region tree.
645 The ``doFinalization()`` method
646 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
648 .. code-block:: c++
650   virtual bool doFinalization();
652 The ``doFinalization`` method is an infrequently used method that is called
653 when the pass framework has finished calling :ref:`runOnRegion
654 <writing-an-llvm-pass-runOnRegion>` for every region in the program being
655 compiled.
658 The ``MachineFunctionPass`` class
659 ---------------------------------
661 A ``MachineFunctionPass`` is a part of the LLVM code generator that executes on
662 the machine-dependent representation of each LLVM function in the program.
664 Code generator passes are registered and initialized specially by
665 ``TargetMachine::addPassesToEmitFile`` and similar routines, so they cannot
666 generally be run from the :program:`opt` or :program:`bugpoint` commands.
668 A ``MachineFunctionPass`` is also a ``FunctionPass``, so all the restrictions
669 that apply to a ``FunctionPass`` also apply to it.  ``MachineFunctionPass``\ es
670 also have additional restrictions.  In particular, ``MachineFunctionPass``\ es
671 are not allowed to do any of the following:
673 #. Modify or create any LLVM IR ``Instruction``\ s, ``BasicBlock``\ s,
674    ``Argument``\ s, ``Function``\ s, ``GlobalVariable``\ s,
675    ``GlobalAlias``\ es, or ``Module``\ s.
676 #. Modify a ``MachineFunction`` other than the one currently being processed.
677 #. Maintain state across invocations of :ref:`runOnMachineFunction
678    <writing-an-llvm-pass-runOnMachineFunction>` (including global data).
680 .. _writing-an-llvm-pass-runOnMachineFunction:
682 The ``runOnMachineFunction(MachineFunction &MF)`` method
683 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
685 .. code-block:: c++
687   virtual bool runOnMachineFunction(MachineFunction &MF) = 0;
689 ``runOnMachineFunction`` can be considered the main entry point of a
690 ``MachineFunctionPass``; that is, you should override this method to do the
691 work of your ``MachineFunctionPass``.
693 The ``runOnMachineFunction`` method is called on every ``MachineFunction`` in a
694 ``Module``, so that the ``MachineFunctionPass`` may perform optimizations on
695 the machine-dependent representation of the function.  If you want to get at
696 the LLVM ``Function`` for the ``MachineFunction`` you're working on, use
697 ``MachineFunction``'s ``getFunction()`` accessor method --- but remember, you
698 may not modify the LLVM ``Function`` or its contents from a
699 ``MachineFunctionPass``.
701 .. _writing-an-llvm-pass-registration:
703 Pass registration
704 -----------------
706 In the :ref:`Hello World <writing-an-llvm-pass-basiccode>` example pass we
707 illustrated how pass registration works, and discussed some of the reasons that
708 it is used and what it does.  Here we discuss how and why passes are
709 registered.
711 As we saw above, passes are registered with the ``RegisterPass`` template.  The
712 template parameter is the name of the pass that is to be used on the command
713 line to specify that the pass should be added to a program (for example, with
714 :program:`opt` or :program:`bugpoint`).  The first argument is the name of the
715 pass, which is to be used for the :option:`-help` output of programs, as well
716 as for debug output generated by the `--debug-pass` option.
718 If you want your pass to be easily dumpable, you should implement the virtual
719 print method:
721 The ``print`` method
722 ^^^^^^^^^^^^^^^^^^^^
724 .. code-block:: c++
726   virtual void print(llvm::raw_ostream &O, const Module *M) const;
728 The ``print`` method must be implemented by "analyses" in order to print a
729 human readable version of the analysis results.  This is useful for debugging
730 an analysis itself, as well as for other people to figure out how an analysis
731 works.  Use the opt ``-analyze`` argument to invoke this method.
733 The ``llvm::raw_ostream`` parameter specifies the stream to write the results
734 on, and the ``Module`` parameter gives a pointer to the top level module of the
735 program that has been analyzed.  Note however that this pointer may be ``NULL``
736 in certain circumstances (such as calling the ``Pass::dump()`` from a
737 debugger), so it should only be used to enhance debug output, it should not be
738 depended on.
740 .. _writing-an-llvm-pass-interaction:
742 Specifying interactions between passes
743 --------------------------------------
745 One of the main responsibilities of the ``PassManager`` is to make sure that
746 passes interact with each other correctly.  Because ``PassManager`` tries to
747 :ref:`optimize the execution of passes <writing-an-llvm-pass-passmanager>` it
748 must know how the passes interact with each other and what dependencies exist
749 between the various passes.  To track this, each pass can declare the set of
750 passes that are required to be executed before the current pass, and the passes
751 which are invalidated by the current pass.
753 Typically this functionality is used to require that analysis results are
754 computed before your pass is run.  Running arbitrary transformation passes can
755 invalidate the computed analysis results, which is what the invalidation set
756 specifies.  If a pass does not implement the :ref:`getAnalysisUsage
757 <writing-an-llvm-pass-getAnalysisUsage>` method, it defaults to not having any
758 prerequisite passes, and invalidating **all** other passes.
760 .. _writing-an-llvm-pass-getAnalysisUsage:
762 The ``getAnalysisUsage`` method
763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
765 .. code-block:: c++
767   virtual void getAnalysisUsage(AnalysisUsage &Info) const;
769 By implementing the ``getAnalysisUsage`` method, the required and invalidated
770 sets may be specified for your transformation.  The implementation should fill
771 in the `AnalysisUsage
772 <https://llvm.org/doxygen/classllvm_1_1AnalysisUsage.html>`_ object with
773 information about which passes are required and not invalidated.  To do this, a
774 pass may call any of the following methods on the ``AnalysisUsage`` object:
776 The ``AnalysisUsage::addRequired<>`` and ``AnalysisUsage::addRequiredTransitive<>`` methods
777 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
779 If your pass requires a previous pass to be executed (an analysis for example),
780 it can use one of these methods to arrange for it to be run before your pass.
781 LLVM has many different types of analyses and passes that can be required,
782 spanning the range from ``DominatorSet`` to ``BreakCriticalEdges``.  Requiring
783 ``BreakCriticalEdges``, for example, guarantees that there will be no critical
784 edges in the CFG when your pass has been run.
786 Some analyses chain to other analyses to do their job.  For example, an
787 `AliasAnalysis <AliasAnalysis>` implementation is required to :ref:`chain
788 <aliasanalysis-chaining>` to other alias analysis passes.  In cases where
789 analyses chain, the ``addRequiredTransitive`` method should be used instead of
790 the ``addRequired`` method.  This informs the ``PassManager`` that the
791 transitively required pass should be alive as long as the requiring pass is.
793 The ``AnalysisUsage::addPreserved<>`` method
794 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
796 One of the jobs of the ``PassManager`` is to optimize how and when analyses are
797 run.  In particular, it attempts to avoid recomputing data unless it needs to.
798 For this reason, passes are allowed to declare that they preserve (i.e., they
799 don't invalidate) an existing analysis if it's available.  For example, a
800 simple constant folding pass would not modify the CFG, so it can't possibly
801 affect the results of dominator analysis.  By default, all passes are assumed
802 to invalidate all others.
804 The ``AnalysisUsage`` class provides several methods which are useful in
805 certain circumstances that are related to ``addPreserved``.  In particular, the
806 ``setPreservesAll`` method can be called to indicate that the pass does not
807 modify the LLVM program at all (which is true for analyses), and the
808 ``setPreservesCFG`` method can be used by transformations that change
809 instructions in the program but do not modify the CFG or terminator
810 instructions.
812 ``addPreserved`` is particularly useful for transformations like
813 ``BreakCriticalEdges``.  This pass knows how to update a small set of loop and
814 dominator related analyses if they exist, so it can preserve them, despite the
815 fact that it hacks on the CFG.
817 Example implementations of ``getAnalysisUsage``
818 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
820 .. code-block:: c++
822   // This example modifies the program, but does not modify the CFG
823   void LICM::getAnalysisUsage(AnalysisUsage &AU) const {
824     AU.setPreservesCFG();
825     AU.addRequired<LoopInfoWrapperPass>();
826   }
828 .. _writing-an-llvm-pass-getAnalysis:
830 The ``getAnalysis<>`` and ``getAnalysisIfAvailable<>`` methods
831 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
833 The ``Pass::getAnalysis<>`` method is automatically inherited by your class,
834 providing you with access to the passes that you declared that you required
835 with the :ref:`getAnalysisUsage <writing-an-llvm-pass-getAnalysisUsage>`
836 method.  It takes a single template argument that specifies which pass class
837 you want, and returns a reference to that pass.  For example:
839 .. code-block:: c++
841   bool LICM::runOnFunction(Function &F) {
842     LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
843     //...
844   }
846 This method call returns a reference to the pass desired.  You may get a
847 runtime assertion failure if you attempt to get an analysis that you did not
848 declare as required in your :ref:`getAnalysisUsage
849 <writing-an-llvm-pass-getAnalysisUsage>` implementation.  This method can be
850 called by your ``run*`` method implementation, or by any other local method
851 invoked by your ``run*`` method.
853 A module level pass can use function level analysis info using this interface.
854 For example:
856 .. code-block:: c++
858   bool ModuleLevelPass::runOnModule(Module &M) {
859     //...
860     DominatorTree &DT = getAnalysis<DominatorTree>(Func);
861     //...
862   }
864 In above example, ``runOnFunction`` for ``DominatorTree`` is called by pass
865 manager before returning a reference to the desired pass.
867 If your pass is capable of updating analyses if they exist (e.g.,
868 ``BreakCriticalEdges``, as described above), you can use the
869 ``getAnalysisIfAvailable`` method, which returns a pointer to the analysis if
870 it is active.  For example:
872 .. code-block:: c++
874   if (DominatorSet *DS = getAnalysisIfAvailable<DominatorSet>()) {
875     // A DominatorSet is active.  This code will update it.
876   }
878 Implementing Analysis Groups
879 ----------------------------
881 Now that we understand the basics of how passes are defined, how they are used,
882 and how they are required from other passes, it's time to get a little bit
883 fancier.  All of the pass relationships that we have seen so far are very
884 simple: one pass depends on one other specific pass to be run before it can
885 run.  For many applications, this is great, for others, more flexibility is
886 required.
888 In particular, some analyses are defined such that there is a single simple
889 interface to the analysis results, but multiple ways of calculating them.
890 Consider alias analysis for example.  The most trivial alias analysis returns
891 "may alias" for any alias query.  The most sophisticated analysis a
892 flow-sensitive, context-sensitive interprocedural analysis that can take a
893 significant amount of time to execute (and obviously, there is a lot of room
894 between these two extremes for other implementations).  To cleanly support
895 situations like this, the LLVM Pass Infrastructure supports the notion of
896 Analysis Groups.
898 Analysis Group Concepts
899 ^^^^^^^^^^^^^^^^^^^^^^^
901 An Analysis Group is a single simple interface that may be implemented by
902 multiple different passes.  Analysis Groups can be given human readable names
903 just like passes, but unlike passes, they need not derive from the ``Pass``
904 class.  An analysis group may have one or more implementations, one of which is
905 the "default" implementation.
907 Analysis groups are used by client passes just like other passes are: the
908 ``AnalysisUsage::addRequired()`` and ``Pass::getAnalysis()`` methods.  In order
909 to resolve this requirement, the :ref:`PassManager
910 <writing-an-llvm-pass-passmanager>` scans the available passes to see if any
911 implementations of the analysis group are available.  If none is available, the
912 default implementation is created for the pass to use.  All standard rules for
913 :ref:`interaction between passes <writing-an-llvm-pass-interaction>` still
914 apply.
916 Although :ref:`Pass Registration <writing-an-llvm-pass-registration>` is
917 optional for normal passes, all analysis group implementations must be
918 registered, and must use the :ref:`INITIALIZE_AG_PASS
919 <writing-an-llvm-pass-RegisterAnalysisGroup>` template to join the
920 implementation pool.  Also, a default implementation of the interface **must**
921 be registered with :ref:`RegisterAnalysisGroup
922 <writing-an-llvm-pass-RegisterAnalysisGroup>`.
924 As a concrete example of an Analysis Group in action, consider the
925 `AliasAnalysis <https://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html>`_
926 analysis group.  The default implementation of the alias analysis interface
927 (the `basic-aa <https://llvm.org/doxygen/structBasicAliasAnalysis.html>`_ pass)
928 just does a few simple checks that don't require significant analysis to
929 compute (such as: two different globals can never alias each other, etc).
930 Passes that use the `AliasAnalysis
931 <https://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html>`_ interface (for
932 example the `gvn <https://llvm.org/doxygen/classllvm_1_1GVN.html>`_ pass), do not
933 care which implementation of alias analysis is actually provided, they just use
934 the designated interface.
936 From the user's perspective, commands work just like normal.  Issuing the
937 command ``opt -gvn ...`` will cause the ``basic-aa`` class to be instantiated
938 and added to the pass sequence.  Issuing the command ``opt -somefancyaa -gvn
939 ...`` will cause the ``gvn`` pass to use the ``somefancyaa`` alias analysis
940 (which doesn't actually exist, it's just a hypothetical example) instead.
942 .. _writing-an-llvm-pass-RegisterAnalysisGroup:
944 Using ``RegisterAnalysisGroup``
945 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
947 The ``RegisterAnalysisGroup`` template is used to register the analysis group
948 itself, while the ``INITIALIZE_AG_PASS`` is used to add pass implementations to
949 the analysis group.  First, an analysis group should be registered, with a
950 human readable name provided for it.  Unlike registration of passes, there is
951 no command line argument to be specified for the Analysis Group Interface
952 itself, because it is "abstract":
954 .. code-block:: c++
956   static RegisterAnalysisGroup<AliasAnalysis> A("Alias Analysis");
958 Once the analysis is registered, passes can declare that they are valid
959 implementations of the interface by using the following code:
961 .. code-block:: c++
963   namespace {
964     // Declare that we implement the AliasAnalysis interface
965     INITIALIZE_AG_PASS(FancyAA, AliasAnalysis , "somefancyaa",
966         "A more complex alias analysis implementation",
967         false,  // Is CFG Only?
968         true,   // Is Analysis?
969         false); // Is default Analysis Group implementation?
970   }
972 This just shows a class ``FancyAA`` that uses the ``INITIALIZE_AG_PASS`` macro
973 both to register and to "join" the `AliasAnalysis
974 <https://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html>`_ analysis group.
975 Every implementation of an analysis group should join using this macro.
977 .. code-block:: c++
979   namespace {
980     // Declare that we implement the AliasAnalysis interface
981     INITIALIZE_AG_PASS(BasicAA, AliasAnalysis, "basic-aa",
982         "Basic Alias Analysis (default AA impl)",
983         false, // Is CFG Only?
984         true,  // Is Analysis?
985         true); // Is default Analysis Group implementation?
986   }
988 Here we show how the default implementation is specified (using the final
989 argument to the ``INITIALIZE_AG_PASS`` template).  There must be exactly one
990 default implementation available at all times for an Analysis Group to be used.
991 Only default implementation can derive from ``ImmutablePass``.  Here we declare
992 that the `BasicAliasAnalysis
993 <https://llvm.org/doxygen/structBasicAliasAnalysis.html>`_ pass is the default
994 implementation for the interface.
996 Pass Statistics
997 ===============
999 The `Statistic <https://llvm.org/doxygen/Statistic_8h_source.html>`_ class is
1000 designed to be an easy way to expose various success metrics from passes.
1001 These statistics are printed at the end of a run, when the :option:`-stats`
1002 command line option is enabled on the command line.  See the :ref:`Statistics
1003 section <Statistic>` in the Programmer's Manual for details.
1005 .. _writing-an-llvm-pass-passmanager:
1007 What PassManager does
1008 ---------------------
1010 The `PassManager <https://llvm.org/doxygen/PassManager_8h_source.html>`_ `class
1011 <https://llvm.org/doxygen/classllvm_1_1PassManager.html>`_ takes a list of
1012 passes, ensures their :ref:`prerequisites <writing-an-llvm-pass-interaction>`
1013 are set up correctly, and then schedules passes to run efficiently.  All of the
1014 LLVM tools that run passes use the PassManager for execution of these passes.
1016 The PassManager does two main things to try to reduce the execution time of a
1017 series of passes:
1019 #. **Share analysis results.**  The ``PassManager`` attempts to avoid
1020    recomputing analysis results as much as possible.  This means keeping track
1021    of which analyses are available already, which analyses get invalidated, and
1022    which analyses are needed to be run for a pass.  An important part of work
1023    is that the ``PassManager`` tracks the exact lifetime of all analysis
1024    results, allowing it to :ref:`free memory
1025    <writing-an-llvm-pass-releaseMemory>` allocated to holding analysis results
1026    as soon as they are no longer needed.
1028 #. **Pipeline the execution of passes on the program.**  The ``PassManager``
1029    attempts to get better cache and memory usage behavior out of a series of
1030    passes by pipelining the passes together.  This means that, given a series
1031    of consecutive :ref:`FunctionPass <writing-an-llvm-pass-FunctionPass>`, it
1032    will execute all of the :ref:`FunctionPass
1033    <writing-an-llvm-pass-FunctionPass>` on the first function, then all of the
1034    :ref:`FunctionPasses <writing-an-llvm-pass-FunctionPass>` on the second
1035    function, etc... until the entire program has been run through the passes.
1037    This improves the cache behavior of the compiler, because it is only
1038    touching the LLVM program representation for a single function at a time,
1039    instead of traversing the entire program.  It reduces the memory consumption
1040    of compiler, because, for example, only one `DominatorSet
1041    <https://llvm.org/doxygen/classllvm_1_1DominatorSet.html>`_ needs to be
1042    calculated at a time.  This also makes it possible to implement some
1043    :ref:`interesting enhancements <writing-an-llvm-pass-SMP>` in the future.
1045 The effectiveness of the ``PassManager`` is influenced directly by how much
1046 information it has about the behaviors of the passes it is scheduling.  For
1047 example, the "preserved" set is intentionally conservative in the face of an
1048 unimplemented :ref:`getAnalysisUsage <writing-an-llvm-pass-getAnalysisUsage>`
1049 method.  Not implementing when it should be implemented will have the effect of
1050 not allowing any analysis results to live across the execution of your pass.
1052 The ``PassManager`` class exposes a ``--debug-pass`` command line options that
1053 is useful for debugging pass execution, seeing how things work, and diagnosing
1054 when you should be preserving more analyses than you currently are.  (To get
1055 information about all of the variants of the ``--debug-pass`` option, just type
1056 "``opt -help-hidden``").
1058 By using the --debug-pass=Structure option, for example, we can see how our
1059 :ref:`Hello World <writing-an-llvm-pass-basiccode>` pass interacts with other
1060 passes.  Lets try it out with the gvn and licm passes:
1062 .. code-block:: console
1064   $ opt -load lib/LLVMHello.so -gvn -licm --debug-pass=Structure < hello.bc > /dev/null
1065   ModulePass Manager
1066     FunctionPass Manager
1067       Dominator Tree Construction
1068       Basic Alias Analysis (stateless AA impl)
1069       Function Alias Analysis Results
1070       Memory Dependence Analysis
1071       Global Value Numbering
1072       Natural Loop Information
1073       Canonicalize natural loops
1074       Loop-Closed SSA Form Pass
1075       Basic Alias Analysis (stateless AA impl)
1076       Function Alias Analysis Results
1077       Scalar Evolution Analysis
1078       Loop Pass Manager
1079         Loop Invariant Code Motion
1080       Module Verifier
1081     Bitcode Writer
1083 This output shows us when passes are constructed.
1084 Here we see that GVN uses dominator tree information to do its job.  The LICM pass
1085 uses natural loop information, which uses dominator tree as well.
1087 After the LICM pass, the module verifier runs (which is automatically added by
1088 the :program:`opt` tool), which uses the dominator tree to check that the
1089 resultant LLVM code is well formed. Note that the dominator tree is computed
1090 once, and shared by three passes.
1092 Lets see how this changes when we run the :ref:`Hello World
1093 <writing-an-llvm-pass-basiccode>` pass in between the two passes:
1095 .. code-block:: console
1097   $ opt -load lib/LLVMHello.so -gvn -hello -licm --debug-pass=Structure < hello.bc > /dev/null
1098   ModulePass Manager
1099     FunctionPass Manager
1100       Dominator Tree Construction
1101       Basic Alias Analysis (stateless AA impl)
1102       Function Alias Analysis Results
1103       Memory Dependence Analysis
1104       Global Value Numbering
1105       Hello World Pass
1106       Dominator Tree Construction
1107       Natural Loop Information
1108       Canonicalize natural loops
1109       Loop-Closed SSA Form Pass
1110       Basic Alias Analysis (stateless AA impl)
1111       Function Alias Analysis Results
1112       Scalar Evolution Analysis
1113       Loop Pass Manager
1114         Loop Invariant Code Motion
1115       Module Verifier
1116     Bitcode Writer
1117   Hello: __main
1118   Hello: puts
1119   Hello: main
1121 Here we see that the :ref:`Hello World <writing-an-llvm-pass-basiccode>` pass
1122 has killed the Dominator Tree pass, even though it doesn't modify the code at
1123 all!  To fix this, we need to add the following :ref:`getAnalysisUsage
1124 <writing-an-llvm-pass-getAnalysisUsage>` method to our pass:
1126 .. code-block:: c++
1128   // We don't modify the program, so we preserve all analyses
1129   void getAnalysisUsage(AnalysisUsage &AU) const override {
1130     AU.setPreservesAll();
1131   }
1133 Now when we run our pass, we get this output:
1135 .. code-block:: console
1137   $ opt -load lib/LLVMHello.so -gvn -hello -licm --debug-pass=Structure < hello.bc > /dev/null
1138   Pass Arguments:  -gvn -hello -licm
1139   ModulePass Manager
1140     FunctionPass Manager
1141       Dominator Tree Construction
1142       Basic Alias Analysis (stateless AA impl)
1143       Function Alias Analysis Results
1144       Memory Dependence Analysis
1145       Global Value Numbering
1146       Hello World Pass
1147       Natural Loop Information
1148       Canonicalize natural loops
1149       Loop-Closed SSA Form Pass
1150       Basic Alias Analysis (stateless AA impl)
1151       Function Alias Analysis Results
1152       Scalar Evolution Analysis
1153       Loop Pass Manager
1154         Loop Invariant Code Motion
1155       Module Verifier
1156     Bitcode Writer
1157   Hello: __main
1158   Hello: puts
1159   Hello: main
1161 Which shows that we don't accidentally invalidate dominator information
1162 anymore, and therefore do not have to compute it twice.
1164 .. _writing-an-llvm-pass-releaseMemory:
1166 The ``releaseMemory`` method
1167 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1169 .. code-block:: c++
1171   virtual void releaseMemory();
1173 The ``PassManager`` automatically determines when to compute analysis results,
1174 and how long to keep them around for.  Because the lifetime of the pass object
1175 itself is effectively the entire duration of the compilation process, we need
1176 some way to free analysis results when they are no longer useful.  The
1177 ``releaseMemory`` virtual method is the way to do this.
1179 If you are writing an analysis or any other pass that retains a significant
1180 amount of state (for use by another pass which "requires" your pass and uses
1181 the :ref:`getAnalysis <writing-an-llvm-pass-getAnalysis>` method) you should
1182 implement ``releaseMemory`` to, well, release the memory allocated to maintain
1183 this internal state.  This method is called after the ``run*`` method for the
1184 class, before the next call of ``run*`` in your pass.
1186 Building pass plugins
1187 =====================
1189 As an alternative to using ``PLUGIN_TOOL``, LLVM provides a mechanism to
1190 automatically register pass plugins within ``clang``, ``opt`` and ``bugpoint``.
1191 One first needs to create an independent project and add it to either ``tools/``
1192 or, using the MonoRepo layout, at the root of the repo alongside other projects.
1193 This project must contain the following minimal ``CMakeLists.txt``:
1195 .. code-block:: cmake
1197     add_llvm_pass_plugin(Name source0.cpp)
1199 The pass must provide two entry points for the new pass manager, one for static
1200 registration and one for dynamically loaded plugins:
1202 - ``llvm::PassPluginLibraryInfo get##Name##PluginInfo();``
1203 - ``extern "C" ::llvm::PassPluginLibraryInfo llvmGetPassPluginInfo() LLVM_ATTRIBUTE_WEAK;``
1205 Pass plugins are compiled and link dynamically by default, but it's
1206 possible to set the following variables to change this behavior:
1208 - ``LLVM_${NAME}_LINK_INTO_TOOLS``, when set to ``ON``, turns the project into
1209   a statically linked extension
1212 When building a tool that uses the new pass manager, one can use the following snippet to
1213 include statically linked pass plugins:
1215 .. code-block:: c++
1217     // fetch the declaration
1218     #define HANDLE_EXTENSION(Ext) llvm::PassPluginLibraryInfo get##Ext##PluginInfo();
1219     #include "llvm/Support/Extension.def"
1221     [...]
1223     // use them, PB is an llvm::PassBuilder instance
1224     #define HANDLE_EXTENSION(Ext) get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB);
1225     #include "llvm/Support/Extension.def"
1231 Registering dynamically loaded passes
1232 =====================================
1234 *Size matters* when constructing production quality tools using LLVM, both for
1235 the purposes of distribution, and for regulating the resident code size when
1236 running on the target system.  Therefore, it becomes desirable to selectively
1237 use some passes, while omitting others and maintain the flexibility to change
1238 configurations later on.  You want to be able to do all this, and, provide
1239 feedback to the user.  This is where pass registration comes into play.
1241 The fundamental mechanisms for pass registration are the
1242 ``MachinePassRegistry`` class and subclasses of ``MachinePassRegistryNode``.
1244 An instance of ``MachinePassRegistry`` is used to maintain a list of
1245 ``MachinePassRegistryNode`` objects.  This instance maintains the list and
1246 communicates additions and deletions to the command line interface.
1248 An instance of ``MachinePassRegistryNode`` subclass is used to maintain
1249 information provided about a particular pass.  This information includes the
1250 command line name, the command help string and the address of the function used
1251 to create an instance of the pass.  A global static constructor of one of these
1252 instances *registers* with a corresponding ``MachinePassRegistry``, the static
1253 destructor *unregisters*.  Thus a pass that is statically linked in the tool
1254 will be registered at start up.  A dynamically loaded pass will register on
1255 load and unregister at unload.
1257 Using existing registries
1258 -------------------------
1260 There are predefined registries to track instruction scheduling
1261 (``RegisterScheduler``) and register allocation (``RegisterRegAlloc``) machine
1262 passes.  Here we will describe how to *register* a register allocator machine
1263 pass.
1265 Implement your register allocator machine pass.  In your register allocator
1266 ``.cpp`` file add the following include:
1268 .. code-block:: c++
1270   #include "llvm/CodeGen/RegAllocRegistry.h"
1272 Also in your register allocator ``.cpp`` file, define a creator function in the
1273 form:
1275 .. code-block:: c++
1277   FunctionPass *createMyRegisterAllocator() {
1278     return new MyRegisterAllocator();
1279   }
1281 Note that the signature of this function should match the type of
1282 ``RegisterRegAlloc::FunctionPassCtor``.  In the same file add the "installing"
1283 declaration, in the form:
1285 .. code-block:: c++
1287   static RegisterRegAlloc myRegAlloc("myregalloc",
1288                                      "my register allocator help string",
1289                                      createMyRegisterAllocator);
1291 Note the two spaces prior to the help string produces a tidy result on the
1292 :option:`-help` query.
1294 .. code-block:: console
1296   $ llc -help
1297     ...
1298     -regalloc                    - Register allocator to use (default=linearscan)
1299       =linearscan                -   linear scan register allocator
1300       =local                     -   local register allocator
1301       =simple                    -   simple register allocator
1302       =myregalloc                -   my register allocator help string
1303     ...
1305 And that's it.  The user is now free to use ``-regalloc=myregalloc`` as an
1306 option.  Registering instruction schedulers is similar except use the
1307 ``RegisterScheduler`` class.  Note that the
1308 ``RegisterScheduler::FunctionPassCtor`` is significantly different from
1309 ``RegisterRegAlloc::FunctionPassCtor``.
1311 To force the load/linking of your register allocator into the
1312 :program:`llc`/:program:`lli` tools, add your creator function's global
1313 declaration to ``Passes.h`` and add a "pseudo" call line to
1314 ``llvm/Codegen/LinkAllCodegenComponents.h``.
1316 Creating new registries
1317 -----------------------
1319 The easiest way to get started is to clone one of the existing registries; we
1320 recommend ``llvm/CodeGen/RegAllocRegistry.h``.  The key things to modify are
1321 the class name and the ``FunctionPassCtor`` type.
1323 Then you need to declare the registry.  Example: if your pass registry is
1324 ``RegisterMyPasses`` then define:
1326 .. code-block:: c++
1328   MachinePassRegistry RegisterMyPasses::Registry;
1330 And finally, declare the command line option for your passes.  Example:
1332 .. code-block:: c++
1334   cl::opt<RegisterMyPasses::FunctionPassCtor, false,
1335           RegisterPassParser<RegisterMyPasses> >
1336   MyPassOpt("mypass",
1337             cl::init(&createDefaultMyPass),
1338             cl::desc("my pass option help"));
1340 Here the command option is "``mypass``", with ``createDefaultMyPass`` as the
1341 default creator.
1343 Using GDB with dynamically loaded passes
1344 ----------------------------------------
1346 Unfortunately, using GDB with dynamically loaded passes is not as easy as it
1347 should be.  First of all, you can't set a breakpoint in a shared object that
1348 has not been loaded yet, and second of all there are problems with inlined
1349 functions in shared objects.  Here are some suggestions to debugging your pass
1350 with GDB.
1352 For sake of discussion, I'm going to assume that you are debugging a
1353 transformation invoked by :program:`opt`, although nothing described here
1354 depends on that.
1356 Setting a breakpoint in your pass
1357 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1359 First thing you do is start gdb on the opt process:
1361 .. code-block:: console
1363   $ gdb opt
1364   GNU gdb 5.0
1365   Copyright 2000 Free Software Foundation, Inc.
1366   GDB is free software, covered by the GNU General Public License, and you are
1367   welcome to change it and/or distribute copies of it under certain conditions.
1368   Type "show copying" to see the conditions.
1369   There is absolutely no warranty for GDB.  Type "show warranty" for details.
1370   This GDB was configured as "sparc-sun-solaris2.6"...
1371   (gdb)
1373 Note that :program:`opt` has a lot of debugging information in it, so it takes
1374 time to load.  Be patient.  Since we cannot set a breakpoint in our pass yet
1375 (the shared object isn't loaded until runtime), we must execute the process,
1376 and have it stop before it invokes our pass, but after it has loaded the shared
1377 object.  The most foolproof way of doing this is to set a breakpoint in
1378 ``PassManager::run`` and then run the process with the arguments you want:
1380 .. code-block:: console
1382   $ (gdb) break llvm::PassManager::run
1383   Breakpoint 1 at 0x2413bc: file Pass.cpp, line 70.
1384   (gdb) run test.bc -load $(LLVMTOP)/llvm/Debug+Asserts/lib/[libname].so -[passoption]
1385   Starting program: opt test.bc -load $(LLVMTOP)/llvm/Debug+Asserts/lib/[libname].so -[passoption]
1386   Breakpoint 1, PassManager::run (this=0xffbef174, M=@0x70b298) at Pass.cpp:70
1387   70      bool PassManager::run(Module &M) { return PM->run(M); }
1388   (gdb)
1390 Once the :program:`opt` stops in the ``PassManager::run`` method you are now
1391 free to set breakpoints in your pass so that you can trace through execution or
1392 do other standard debugging stuff.
1394 Miscellaneous Problems
1395 ^^^^^^^^^^^^^^^^^^^^^^
1397 Once you have the basics down, there are a couple of problems that GDB has,
1398 some with solutions, some without.
1400 * Inline functions have bogus stack information.  In general, GDB does a pretty
1401   good job getting stack traces and stepping through inline functions.  When a
1402   pass is dynamically loaded however, it somehow completely loses this
1403   capability.  The only solution I know of is to de-inline a function (move it
1404   from the body of a class to a ``.cpp`` file).
1406 * Restarting the program breaks breakpoints.  After following the information
1407   above, you have succeeded in getting some breakpoints planted in your pass.
1408   Next thing you know, you restart the program (i.e., you type "``run``" again),
1409   and you start getting errors about breakpoints being unsettable.  The only
1410   way I have found to "fix" this problem is to delete the breakpoints that are
1411   already set in your pass, run the program, and re-set the breakpoints once
1412   execution stops in ``PassManager::run``.
1414 Hopefully these tips will help with common case debugging situations.  If you'd
1415 like to contribute some tips of your own, just contact `Chris
1416 <mailto:sabre@nondot.org>`_.
1418 Future extensions planned
1419 -------------------------
1421 Although the LLVM Pass Infrastructure is very capable as it stands, and does
1422 some nifty stuff, there are things we'd like to add in the future.  Here is
1423 where we are going:
1425 .. _writing-an-llvm-pass-SMP:
1427 Multithreaded LLVM
1428 ^^^^^^^^^^^^^^^^^^
1430 Multiple CPU machines are becoming more common and compilation can never be
1431 fast enough: obviously we should allow for a multithreaded compiler.  Because
1432 of the semantics defined for passes above (specifically they cannot maintain
1433 state across invocations of their ``run*`` methods), a nice clean way to
1434 implement a multithreaded compiler would be for the ``PassManager`` class to
1435 create multiple instances of each pass object, and allow the separate instances
1436 to be hacking on different parts of the program at the same time.
1438 This implementation would prevent each of the passes from having to implement
1439 multithreaded constructs, requiring only the LLVM core to have locking in a few
1440 places (for global resources).  Although this is a simple extension, we simply
1441 haven't had time (or multiprocessor machines, thus a reason) to implement this.
1442 Despite that, we have kept the LLVM passes SMP ready, and you should too.