<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Writing an LLVM Pass</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">
  Writing an LLVM Pass
</div>

<ol>
  <li><a href="#introduction">Introduction - What is a pass?</a></li>
  <li><a href="#quickstart">Quick Start - Writing hello world</a>
    <ul>
    <li><a href="#makefile">Setting up the build environment</a></li>
    <li><a href="#basiccode">Basic code required</a></li>
    <li><a href="#running">Running a pass with <tt>opt</tt>
                 or <tt>analyze</tt></a></li>
    </ul></li>
  <li><a href="#passtype">Pass classes and requirements</a>
     <ul>
     <li><a href="#ImmutablePass">The <tt>ImmutablePass</tt> class</a></li>
     <li><a href="#ModulePass">The <tt>ModulePass</tt> class</a>
        <ul>
        <li><a href="#runOnModule">The <tt>runOnModule</tt> method</a></li>
        </ul></li>
     <li><a href="#CallGraphSCCPass">The <tt>CallGraphSCCPass</tt> class</a>
        <ul>
        <li><a href="#doInitialization_scc">The <tt>doInitialization(Module
                                           &amp;)</tt> method</a></li>
        <li><a href="#runOnSCC">The <tt>runOnSCC</tt> method</a></li>
        <li><a href="#doFinalization_scc">The <tt>doFinalization(Module
                                           &amp;)</tt> method</a></li>
        </ul></li>
     <li><a href="#FunctionPass">The <tt>FunctionPass</tt> class</a>
        <ul>
        <li><a href="#doInitialization_mod">The <tt>doInitialization(Module
                                            &amp;)</tt> method</a></li>
        <li><a href="#runOnFunction">The <tt>runOnFunction</tt> method</a></li>
        <li><a href="#doFinalization_mod">The <tt>doFinalization(Module
                                            &amp;)</tt> method</a></li>
        </ul></li>
     <li><a href="#BasicBlockPass">The <tt>BasicBlockPass</tt> class</a>
        <ul>
        <li><a href="#doInitialization_fn">The <tt>doInitialization(Function
                                             &amp;)</tt> method</a></li>
        <li><a href="#runOnBasicBlock">The <tt>runOnBasicBlock</tt>
                                       method</a></li>
        <li><a href="#doFinalization_fn">The <tt>doFinalization(Function
                                         &amp;)</tt> method</a></li>
        </ul></li>
     <li><a href="#MachineFunctionPass">The <tt>MachineFunctionPass</tt>
                                        class</a>
        <ul>
        <li><a href="#runOnMachineFunction">The
            <tt>runOnMachineFunction(MachineFunction &amp;)</tt> method</a></li>
        </ul></li>
     </ul>
  <li><a href="#registration">Pass Registration</a>
     <ul>
     <li><a href="#print">The <tt>print</tt> method</a></li>
     </ul></li>
  <li><a href="#interaction">Specifying interactions between passes</a>
     <ul>
     <li><a href="#getAnalysisUsage">The <tt>getAnalysisUsage</tt> 
                                     method</a></li>
     <li><a href="#AU::addRequired">The <tt>AnalysisUsage::addRequired&lt;&gt;</tt> and <tt>AnalysisUsage::addRequiredTransitive&lt;&gt;</tt> methods</a></li>
     <li><a href="#AU::addPreserved">The <tt>AnalysisUsage::addPreserved&lt;&gt;</tt> method</a></li>
     <li><a href="#AU::examples">Example implementations of <tt>getAnalysisUsage</tt></a></li>
     <li><a href="#getAnalysis">The <tt>getAnalysis&lt;&gt;</tt> and <tt>getAnalysisToUpdate&lt;&gt;</tt> methods</a></li>
     </ul></li>
  <li><a href="#analysisgroup">Implementing Analysis Groups</a>
     <ul>
     <li><a href="#agconcepts">Analysis Group Concepts</a></li>
     <li><a href="#registerag">Using <tt>RegisterAnalysisGroup</tt></a></li>
     </ul></li>
  <li><a href="#passStatistics">Pass Statistics</a>
  <li><a href="#passmanager">What PassManager does</a>
    <ul>
    <li><a href="#releaseMemory">The <tt>releaseMemory</tt> method</a></li>
    </ul></li>
  <li><a href="#debughints">Using GDB with dynamically loaded passes</a>
    <ul>
    <li><a href="#breakpoint">Setting a breakpoint in your pass</a></li>
    <li><a href="#debugmisc">Miscellaneous Problems</a></li>
    </ul></li>
  <li><a href="#future">Future extensions planned</a>
    <ul>
    <li><a href="#SMP">Multithreaded LLVM</a></li>
    <li><a href="#PassFunctionPass"><tt>ModulePass</tt>es requiring 
                                    <tt>FunctionPass</tt>es</a></li>
    </ul></li>
</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a></p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="introduction">Introduction - What is a pass?</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM Pass Framework is an important part of the LLVM system, because LLVM
passes are where most of the interesting parts of the compiler exist.  Passes
perform the transformations and optimizations that make up the compiler, they
build the analysis results that are used by these transformations, and they are,
above all, a structuring technique for compiler code.</p>

<p>All LLVM passes are subclasses of the <tt><a
href="http://llvm.org/doxygen/classllvm_1_1Pass.html">Pass</a></tt>
class, which implement functionality by overriding virtual methods inherited
from <tt>Pass</tt>.  Depending on how your pass works, you should inherit from
the <tt><a href="#ModulePass">ModulePass</a></tt>, <tt><a
href="#CallGraphSCCPass">CallGraphSCCPass</a></tt>, <tt><a
href="#FunctionPass">FunctionPass</a></tt>, or <tt><a
href="#BasicBlockPass">BasicBlockPass</a></tt> classes, which gives the system
more information about what your pass does, and how it can be combined with
other passes.  One of the main features of the LLVM Pass Framework is that it
schedules passes to run in an efficient way based on the constraints that your
pass meets (which are indicated by which class they derive from).</p>

<p>We start by showing you how to construct a pass, everything from setting up
the code, to compiling, loading, and executing it.  After the basics are down,
more advanced features are discussed.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="quickstart">Quick Start - Writing hello world</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Here we describe how to write the "hello world" of passes.  The "Hello" pass
is designed to simply print out the name of non-external functions that exist in
the program being compiled.  It does not modify the program at all, it just
inspects it.  The source code and files for this pass are available in the LLVM
source tree in the <tt>lib/Transforms/Hello</tt> directory.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="makefile">Setting up the build environment</a>
</div>

<div class="doc_text">

  <p>First, you need to create a new directory somewhere in the LLVM source 
  base.  For this example, we'll assume that you made 
  <tt>lib/Transforms/Hello</tt>.  Next, you must set up a build script 
  (Makefile) that will compile the source code for the new pass.  To do this, 
  copy the following into <tt>Makefile</tt>:</p>
  <hr/>

<pre>
# Makefile for hello pass

# Path to top level of LLVM heirarchy
LEVEL = ../../..

# Name of the library to build
LIBRARYNAME = Hello

# Build a dynamically linkable shared object
SHARED_LIBRARY = 1

# Make the shared library become a loadable module so the tools can 
# dlopen/dlsym on the resulting library.
LOADABLE_MODULE = 1

# Include the makefile implementation stuff
include $(LEVEL)/Makefile.common
</pre>

<p>This makefile specifies that all of the <tt>.cpp</tt> files in the current
directory are to be compiled and linked together into a
<tt>Debug/lib/Hello.so</tt> shared object that can be dynamically loaded by
the <tt>opt</tt> or <tt>analyze</tt> tools via their <tt>-load</tt> options.  
If your operating system uses a suffix other than .so (such as windows or 
Mac OS/X), the appropriate extension will be used.</p>

<p>Now that we have the build scripts set up, we just need to write the code for
the pass itself.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="basiccode">Basic code required</a>
</div>

<div class="doc_text">

<p>Now that we have a way to compile our new pass, we just have to write it.
Start out with:</p>

<pre>
<b>#include</b> "<a href="http://llvm.org/doxygen/Pass_8h-source.html">llvm/Pass.h</a>"
<b>#include</b> "<a href="http://llvm.org/doxygen/Function_8h-source.html">llvm/Function.h</a>"
</pre>

<p>Which are needed because we are writing a <tt><a
href="http://llvm.org/doxygen/classllvm_1_1Pass.html">Pass</a></tt>, and
we are operating on <tt><a
href="http://llvm.org/doxygen/classllvm_1_1Function.html">Function</a></tt>'s.</p>

<p>Next we have:</p>
<pre>
<b>using namespace llvm;</b>
</pre>
<p>... which is required because the functions from the include files 
live in the llvm namespace.
</p>

<p>Next we have:</p>

<pre>
<b>namespace</b> {
</pre>

<p>... which starts out an anonymous namespace.  Anonymous namespaces are to C++
what the "<tt>static</tt>" keyword is to C (at global scope).  It makes the
things declared inside of the anonymous namespace only visible to the current
file.  If you're not familiar with them, consult a decent C++ book for more
information.</p>

<p>Next, we declare our pass itself:</p>

<pre>
  <b>struct</b> Hello : <b>public</b> <a href="#FunctionPass">FunctionPass</a> {
</pre><p>

<p>This declares a "<tt>Hello</tt>" class that is a subclass of <tt><a
href="http://llvm.org/doxygen/classllvm_1_1FunctionPass.html">FunctionPass</a></tt>.
The different builtin pass subclasses are described in detail <a
href="#passtype">later</a>, but for now, know that <a
href="#FunctionPass"><tt>FunctionPass</tt></a>'s operate a function at a
time.</p>

<pre>
    <b>virtual bool</b> <a href="#runOnFunction">runOnFunction</a>(Function &amp;F) {
      std::cerr &lt;&lt; "<i>Hello: </i>" &lt;&lt; F.getName() &lt;&lt; "\n";
      <b>return false</b>;
    }
  };  <i>// end of struct Hello</i>
</pre>

<p>We declare a "<a href="#runOnFunction"><tt>runOnFunction</tt></a>" method,
which overloads an abstract virtual method inherited from <a
href="#FunctionPass"><tt>FunctionPass</tt></a>.  This is where we are supposed
to do our thing, so we just print out our message with the name of each
function.</p>

<pre>
  RegisterOpt&lt;Hello&gt; X("<i>hello</i>", "<i>Hello World Pass</i>");
}  <i>// end of anonymous namespace</i>
</pre>

<p>Lastly, we register our class <tt>Hello</tt>, giving it a command line
argument "<tt>hello</tt>", and a name "<tt>Hello World Pass</tt>".  There are
several different ways of <a href="#registration">registering your pass</a>,
depending on what it is to be used for.  For "optimizations" we use the
<tt>RegisterOpt</tt> template.</p>

<p>As a whole, the <tt>.cpp</tt> file looks like:</p>

<pre>
<b>#include</b> "<a href="http://llvm.org/doxygen/Pass_8h-source.html">llvm/Pass.h</a>"
<b>#include</b> "<a href="http://llvm.org/doxygen/Function_8h-source.html">llvm/Function.h</a>"

<b>using namespace llvm;</b>

<b>namespace</b> {
  <b>struct Hello</b> : <b>public</b> <a href="#FunctionPass">FunctionPass</a> {
    <b>virtual bool</b> <a href="#runOnFunction">runOnFunction</a>(Function &amp;F) {
      std::cerr &lt;&lt; "<i>Hello: </i>" &lt;&lt; F.getName() &lt;&lt; "\n";
      <b>return false</b>;
    }
  };
  
  RegisterOpt&lt;Hello&gt; X("<i>hello</i>", "<i>Hello World Pass</i>");
}
</pre>

<p>Now that it's all together, compile the file with a simple "<tt>gmake</tt>"
command in the local directory and you should get a new
"<tt>Debug/lib/Hello.so</tt> file.  Note that everything in this file is
contained in an anonymous namespace: this reflects the fact that passes are self
contained units that do not need external interfaces (although they can have
them) to be useful.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="running">Running a pass with <tt>opt</tt> or <tt>analyze</tt></a>
</div>

<div class="doc_text">

<p>Now that you have a brand new shiny shared object file, we can use the
<tt>opt</tt> command to run an LLVM program through your pass.  Because you
registered your pass with the <tt>RegisterOpt</tt> template, you will be able to
use the <tt>opt</tt> tool to access it, once loaded.</p>

<p>To test it, follow the example at the end of the <a
href="GettingStarted.html">Getting Started Guide</a> to compile "Hello World" to
LLVM.  We can now run the bytecode file (<tt>hello.bc</tt>) for the program
through our transformation like this (or course, any bytecode file will
work):</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so -hello &lt; hello.bc &gt; /dev/null
Hello: __main
Hello: puts
Hello: main
</pre>

<p>The '<tt>-load</tt>' option specifies that '<tt>opt</tt>' should load your
pass as a shared object, which makes '<tt>-hello</tt>' a valid command line
argument (which is one reason you need to <a href="#registration">register your
pass</a>).  Because the hello pass does not modify the program in any
interesting way, we just throw away the result of <tt>opt</tt> (sending it to
<tt>/dev/null</tt>).</p>

<p>To see what happened to the other string you registered, try running
<tt>opt</tt> with the <tt>--help</tt> option:</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so --help
OVERVIEW: llvm .bc -&gt; .bc modular optimizer

USAGE: opt [options] &lt;input bytecode&gt;

OPTIONS:
  Optimizations available:
...
    -funcresolve    - Resolve Functions
    -gcse           - Global Common Subexpression Elimination
    -globaldce      - Dead Global Elimination
    <b>-hello          - Hello World Pass</b>
    -indvars        - Canonicalize Induction Variables
    -inline         - Function Integration/Inlining
    -instcombine    - Combine redundant instructions
...
</pre>

<p>The pass name get added as the information string for your pass, giving some
documentation to users of <tt>opt</tt>.  Now that you have a working pass, you
would go ahead and make it do the cool transformations you want.  Once you get
it all working and tested, it may become useful to find out how fast your pass
is.  The <a href="#passManager"><tt>PassManager</tt></a> provides a nice command
line option (<tt>--time-passes</tt>) that allows you to get information about
the execution time of your pass along with the other passes you queue up.  For
example:</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so -hello -time-passes &lt; hello.bc &gt; /dev/null
Hello: __main
Hello: puts
Hello: main
===============================================================================
                      ... Pass execution timing report ...
===============================================================================
  Total Execution Time: 0.02 seconds (0.0479059 wall clock)

   ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- Pass Name ---
   0.0100 (100.0%)   0.0000 (  0.0%)   0.0100 ( 50.0%)   0.0402 ( 84.0%)  Bytecode Writer
   0.0000 (  0.0%)   0.0100 (100.0%)   0.0100 ( 50.0%)   0.0031 (  6.4%)  Dominator Set Construction
   0.0000 (  0.0%)   0.0000 (  0.0%)   0.0000 (  0.0%)   0.0013 (  2.7%)  Module Verifier
 <b>  0.0000 (  0.0%)   0.0000 (  0.0%)   0.0000 (  0.0%)   0.0033 (  6.9%)  Hello World Pass</b>
   0.0100 (100.0%)   0.0100 (100.0%)   0.0200 (100.0%)   0.0479 (100.0%)  TOTAL
</pre>

<p>As you can see, our implementation above is pretty fast :).  The additional
passes listed are automatically inserted by the '<tt>opt</tt>' tool to verify
that the LLVM emitted by your pass is still valid and well formed LLVM, which
hasn't been broken somehow.</p>

<p>Now that you have seen the basics of the mechanics behind passes, we can talk
about some more details of how they work and how to use them.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="passtype">Pass classes and requirements</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>One of the first things that you should do when designing a new pass is to
decide what class you should subclass for your pass.  The <a
href="#basiccode">Hello World</a> example uses the <tt><a
href="#FunctionPass">FunctionPass</a></tt> class for its implementation, but we
did not discuss why or when this should occur.  Here we talk about the classes
available, from the most general to the most specific.</p>

<p>When choosing a superclass for your Pass, you should choose the <b>most
specific</b> class possible, while still being able to meet the requirements
listed.  This gives the LLVM Pass Infrastructure information necessary to
optimize how passes are run, so that the resultant compiler isn't unneccesarily
slow.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ImmutablePass">The <tt>ImmutablePass</tt> class</a>
</div>

<div class="doc_text">

<p>The most plain and boring type of pass is the "<tt><a
href="http://llvm.org/doxygen/classllvm_1_1ImmutablePass.html">ImmutablePass</a></tt>"
class.  This pass type is used for passes that do not have to be run, do not
change state, and never need to be updated.  This is not a normal type of
transformation or analysis, but can provide information about the current
compiler configuration.</p>

<p>Although this pass class is very infrequently used, it is important for
providing information about the current target machine being compiled for, and
other static information that can affect the various transformations.</p>

<p><tt>ImmutablePass</tt>es never invalidate other transformations, are never
invalidated, and are never "run".</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ModulePass">The <tt>ModulePass</tt> class</a>
</div>

<div class="doc_text">

<p>The "<tt><a
href="http://llvm.org/doxygen/classllvm_1_1ModulePass.html">ModulePass</a></tt>"
class is the most general of all superclasses that you can use.  Deriving from
<tt>ModulePass</tt> indicates that your pass uses the entire program as a unit,
refering to function bodies in no predictable order, or adding and removing
functions.  Because nothing is known about the behavior of <tt>ModulePass</tt>
subclasses, no optimization can be done for their execution.</p>

<p>To write a correct <tt>ModulePass</tt> subclass, derive from
<tt>ModulePass</tt> and overload the <tt>runOnModule</tt> method with the
following signature:</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="runOnModule">The <tt>runOnModule</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> runOnModule(Module &amp;M) = 0;
</pre>

<p>The <tt>runOnModule</tt> method performs the interesting work of the pass.
It should return true if the module was modified by the transformation and
false otherwise.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="CallGraphSCCPass">The <tt>CallGraphSCCPass</tt> class</a>
</div>

<div class="doc_text">

<p>The "<tt><a
href="http://llvm.org/doxygen/classllvm_1_1CallGraphSCCPass.html">CallGraphSCCPass</a></tt>"
is used by passes that need to traverse the program bottom-up on the call graph
(callees before callers).  Deriving from CallGraphSCCPass provides some
mechanics for building and traversing the CallGraph, but also allows the system
to optimize execution of CallGraphSCCPass's.  If your pass meets the
requirements outlined below, and doesn't meet the requirements of a <tt><a
href="#FunctionPass">FunctionPass</a></tt> or <tt><a
href="#BasicBlockPass">BasicBlockPass</a></tt>, you should derive from
<tt>CallGraphSCCPass</tt>.</p>

<p><b>TODO</b>: explain briefly what SCC, Tarjan's algo, and B-U mean.</p>

<p>To be explicit, <tt>CallGraphSCCPass</tt> subclasses are:</p>

<ol>

<li>... <em>not allowed</em> to modify any <tt>Function</tt>s that are not in
the current SCC.</li>

<li>... <em>allowed</em> to inspect any Function's other than those in the
current SCC and the direct callees of the SCC.</li>

<li>... <em>required</em> to preserve the current CallGraph object, updating it
to reflect any changes made to the program.</li>

<li>... <em>not allowed</em> to add or remove SCC's from the current Module,
though they may change the contents of an SCC.</li>

<li>... <em>allowed</em> to add or remove global variables from the current
Module.</li>

<li>... <em>allowed</em> to maintain state across invocations of
    <a href="#runOnSCC"><tt>runOnSCC</tt></a> (including global data).</li>
</ol>

<p>Implementing a <tt>CallGraphSCCPass</tt> is slightly tricky in some cases
because it has to handle SCCs with more than one node in it.  All of the virtual
methods described below should return true if they modified the program, or
false if they didn't.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doInitialization_scc">The <tt>doInitialization(Module &amp;)</tt>
  method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doInitialization(Module &amp;M);
</pre>

<p>The <tt>doIninitialize</tt> method is allowed to do most of the things that
<tt>CallGraphSCCPass</tt>'s are not allowed to do.  They can add and remove
functions, get pointers to functions, etc.  The <tt>doInitialization</tt> method
is designed to do simple initialization type of stuff that does not depend on
the SCCs being processed.  The <tt>doInitialization</tt> method call is not
scheduled to overlap with any other pass executions (thus it should be very
fast).</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="runOnSCC">The <tt>runOnSCC</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> runOnSCC(const std::vector&lt;CallGraphNode *&gt; &amp;SCCM) = 0;
</pre>

<p>The <tt>runOnSCC</tt> method performs the interesting work of the pass, and
should return true if the module was modified by the transformation, false
otherwise.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doFinalization_scc">The <tt>doFinalization(Module
   &amp;)</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doFinalization(Module &amp;M);
</pre>

<p>The <tt>doFinalization</tt> method is an infrequently used method that is
called when the pass framework has finished calling <a
href="#runOnFunction"><tt>runOnFunction</tt></a> for every function in the
program being compiled.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="FunctionPass">The <tt>FunctionPass</tt> class</a>
</div>

<div class="doc_text">

<p>In contrast to <tt>ModulePass</tt> subclasses, <tt><a
href="http://llvm.org/doxygen/classllvm_1_1Pass.html">FunctionPass</a></tt>
subclasses do have a predictable, local behavior that can be expected by the
system.  All <tt>FunctionPass</tt> execute on each function in the program
independent of all of the other functions in the program.
<tt>FunctionPass</tt>'s do not require that they are executed in a particular
order, and <tt>FunctionPass</tt>'s do not modify external functions.</p>

<p>To be explicit, <tt>FunctionPass</tt> subclasses are not allowed to:</p>

<ol>
<li>Modify a Function other than the one currently being processed.</li>
<li>Add or remove Function's from the current Module.</li>
<li>Add or remove global variables from the current Module.</li>
<li>Maintain state across invocations of
    <a href="#runOnFunction"><tt>runOnFunction</tt></a> (including global data)</li>
</ol>

<p>Implementing a <tt>FunctionPass</tt> is usually straightforward (See the <a
href="#basiccode">Hello World</a> pass for example).  <tt>FunctionPass</tt>'s
may overload three virtual methods to do their work.  All of these methods
should return true if they modified the program, or false if they didn't.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doInitialization_mod">The <tt>doInitialization(Module &amp;)</tt>
  method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doInitialization(Module &amp;M);
</pre>

<p>The <tt>doIninitialize</tt> method is allowed to do most of the things that
<tt>FunctionPass</tt>'s are not allowed to do.  They can add and remove
functions, get pointers to functions, etc.  The <tt>doInitialization</tt> method
is designed to do simple initialization type of stuff that does not depend on
the functions being processed.  The <tt>doInitialization</tt> method call is not
scheduled to overlap with any other pass executions (thus it should be very
fast).</p>

<p>A good example of how this method should be used is the <a
href="http://llvm.org/doxygen/LowerAllocations_8cpp-source.html">LowerAllocations</a>
pass.  This pass converts <tt>malloc</tt> and <tt>free</tt> instructions into
platform dependent <tt>malloc()</tt> and <tt>free()</tt> function calls.  It
uses the <tt>doInitialization</tt> method to get a reference to the malloc and
free functions that it needs, adding prototypes to the module if necessary.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="runOnFunction">The <tt>runOnFunction</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> runOnFunction(Function &amp;F) = 0;
</pre><p>

<p>The <tt>runOnFunction</tt> method must be implemented by your subclass to do
the transformation or analysis work of your pass.  As usual, a true value should
be returned if the function is modified.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doFinalization_mod">The <tt>doFinalization(Module
  &amp;)</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doFinalization(Module &amp;M);
</pre>

<p>The <tt>doFinalization</tt> method is an infrequently used method that is
called when the pass framework has finished calling <a
href="#runOnFunction"><tt>runOnFunction</tt></a> for every function in the
program being compiled.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="BasicBlockPass">The <tt>BasicBlockPass</tt> class</a>
</div>

<div class="doc_text">

<p><tt>BasicBlockPass</tt>'s are just like <a
href="#FunctionPass"><tt>FunctionPass</tt></a>'s, except that they must limit
their scope of inspection and modification to a single basic block at a time.
As such, they are <b>not</b> allowed to do any of the following:</p>

<ol>
<li>Modify or inspect any basic blocks outside of the current one</li>
<li>Maintain state across invocations of
    <a href="#runOnBasicBlock"><tt>runOnBasicBlock</tt></a></li>
<li>Modify the control flow graph (by altering terminator instructions)</li>
<li>Any of the things forbidden for
    <a href="#FunctionPass"><tt>FunctionPass</tt></a>es.</li>
</ol>

<p><tt>BasicBlockPass</tt>es are useful for traditional local and "peephole"
optimizations.  They may override the same <a
href="#doInitialization_mod"><tt>doInitialization(Module &amp;)</tt></a> and <a
href="#doFinalization_mod"><tt>doFinalization(Module &amp;)</tt></a> methods that <a
href="#FunctionPass"><tt>FunctionPass</tt></a>'s have, but also have the following virtual methods that may also be implemented:</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doInitialization_fn">The <tt>doInitialization(Function
  &amp;)</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doInitialization(Function &amp;F);
</pre>

<p>The <tt>doIninitialize</tt> method is allowed to do most of the things that
<tt>BasicBlockPass</tt>'s are not allowed to do, but that
<tt>FunctionPass</tt>'s can.  The <tt>doInitialization</tt> method is designed
to do simple initialization that does not depend on the
BasicBlocks being processed.  The <tt>doInitialization</tt> method call is not
scheduled to overlap with any other pass executions (thus it should be very
fast).</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="runOnBasicBlock">The <tt>runOnBasicBlock</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> runOnBasicBlock(BasicBlock &amp;BB) = 0;
</pre>

<p>Override this function to do the work of the <tt>BasicBlockPass</tt>.  This
function is not allowed to inspect or modify basic blocks other than the
parameter, and are not allowed to modify the CFG.  A true value must be returned
if the basic block is modified.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="doFinalization_fn">The <tt>doFinalization(Function &amp;)</tt> 
  method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> doFinalization(Function &amp;F);
</pre>

<p>The <tt>doFinalization</tt> method is an infrequently used method that is
called when the pass framework has finished calling <a
href="#runOnBasicBlock"><tt>runOnBasicBlock</tt></a> for every BasicBlock in the
program being compiled.  This can be used to perform per-function
finalization.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="MachineFunctionPass">The <tt>MachineFunctionPass</tt> class</a>
</div>

<div class="doc_text">

<p>A <tt>MachineFunctionPass</tt> is a part of the LLVM code generator that
executes on the machine-dependent representation of each LLVM function in the
program.  A <tt>MachineFunctionPass</tt> is also a <tt>FunctionPass</tt>, so all
the restrictions that apply to a <tt>FunctionPass</tt> also apply to it.
<tt>MachineFunctionPass</tt>es also have additional restrictions. In particular,
<tt>MachineFunctionPass</tt>es are not allowed to do any of the following:</p>

<ol>
<li>Modify any LLVM Instructions, BasicBlocks or Functions.</li>
<li>Modify a MachineFunction other than the one currently being processed.</li>
<li>Add or remove MachineFunctions from the current Module.</li>
<li>Add or remove global variables from the current Module.</li>
<li>Maintain state across invocations of <a
href="#runOnMachineFunction"><tt>runOnMachineFunction</tt></a> (including global
data)</li>
</ol>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="runOnMachineFunction">The <tt>runOnMachineFunction(MachineFunction
  &amp;MF)</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual bool</b> runOnMachineFunction(MachineFunction &amp;MF) = 0;
</pre>

<p><tt>runOnMachineFunction</tt> can be considered the main entry point of a
<tt>MachineFunctionPass</tt>; that is, you should override this method to do the
work of your <tt>MachineFunctionPass</tt>.</p>

<p>The <tt>runOnMachineFunction</tt> method is called on every
<tt>MachineFunction</tt> in a <tt>Module</tt>, so that the
<tt>MachineFunctionPass</tt> may perform optimizations on the machine-dependent
representation of the function. If you want to get at the LLVM <tt>Function</tt>
for the <tt>MachineFunction</tt> you're working on, use
<tt>MachineFunction</tt>'s <tt>getFunction()</tt> accessor method -- but
remember, you may not modify the LLVM <tt>Function</tt> or its contents from a
<tt>MachineFunctionPass</tt>.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="registration">Pass registration</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>In the <a href="#basiccode">Hello World</a> example pass we illustrated how
pass registration works, and discussed some of the reasons that it is used and
what it does.  Here we discuss how and why passes are registered.</p>

<p>Passes can be registered in several different ways.  Depending on the general
classification of the pass, you should use one of the following templates to
register the pass:</p>

<ul>
<li><b><tt>RegisterOpt</tt></b> - This template should be used when you are
registering a pass that logically should be available for use in the
'<tt>opt</tt>' utility.</li>

<li><b><tt>RegisterAnalysis</tt></b> - This template should be used when you are
registering a pass that logically should be available for use in the
'<tt>analyze</tt>' utility.</li>

<li><b><tt>RegisterPass</tt></b> - This is the generic form of the
<tt>Register*</tt> templates that should be used if you want your pass listed by
multiple or no utilities.  This template takes an extra third argument that
specifies which tools it should be listed in.  See the <a
href="http://llvm.org/doxygen/PassSupport_8h-source.html">PassSupport.h</a>
file for more information.</li>

</ul>

<p>Regardless of how you register your pass, you must specify at least two
parameters.  The first parameter is the name of the pass that is to be used on
the command line to specify that the pass should be added to a program (for
example <tt>opt</tt> or <tt>analyze</tt>).  The second argument is the name of
the pass, which is to be used for the <tt>--help</tt> output of programs, as
well as for debug output generated by the <tt>--debug-pass</tt> option.</p>

<p>If a pass is registered to be used by the <tt>analyze</tt> utility, you
should implement the virtual <tt>print</tt> method:</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="print">The <tt>print</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual void</b> print(std::ostream &amp;O, <b>const</b> Module *M) <b>const</b>;
</pre>

<p>The <tt>print</tt> method must be implemented by "analyses" in order to print
a human readable version of the analysis results.  This is useful for debugging
an analysis itself, as well as for other people to figure out how an analysis
works.  The <tt>analyze</tt> tool uses this method to generate its output.</p>

<p>The <tt>ostream</tt> parameter specifies the stream to write the results on,
and the <tt>Module</tt> parameter gives a pointer to the top level module of the
program that has been analyzed.  Note however that this pointer may be null in
certain circumstances (such as calling the <tt>Pass::dump()</tt> from a
debugger), so it should only be used to enhance debug output, it should not be
depended on.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="interaction">Specifying interactions between passes</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>One of the main responsibilities of the <tt>PassManager</tt> is the make sure
that passes interact with each other correctly.  Because <tt>PassManager</tt>
tries to <a href="#passmanager">optimize the execution of passes</a> it must
know how the passes interact with each other and what dependencies exist between
the various passes.  To track this, each pass can declare the set of passes that
are required to be executed before the current pass, and the passes which are
invalidated by the current pass.</p>

<p>Typically this functionality is used to require that analysis results are
computed before your pass is run.  Running arbitrary transformation passes can
invalidate the computed analysis results, which is what the invalidation set
specifies.  If a pass does not implement the <tt><a
href="#getAnalysisUsage">getAnalysisUsage</a></tt> method, it defaults to not
having any prerequisite passes, and invalidating <b>all</b> other passes.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="getAnalysisUsage">The <tt>getAnalysisUsage</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual void</b> getAnalysisUsage(AnalysisUsage &amp;Info) <b>const</b>;
</pre>

<p>By implementing the <tt>getAnalysisUsage</tt> method, the required and
invalidated sets may be specified for your transformation.  The implementation
should fill in the <tt><a
href="http://llvm.org/doxygen/classllvm_1_1AnalysisUsage.html">AnalysisUsage</a></tt>
object with information about which passes are required and not invalidated.  To
do this, a pass may call any of the following methods on the AnalysisUsage
object:</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="AU::addRequired">The <tt>AnalysisUsage::addRequired&lt;&gt;</tt> and <tt>AnalysisUsage::addRequiredTransitive&lt;&gt;</tt> methods</a>
</div>

<div class="doc_text">
<p>
If your pass requires a previous pass to be executed (an analysis for example),
it can use one of these methods to arrange for it to be run before your pass.
LLVM has many different types of analyses and passes that can be required,
spanning the range from <tt>DominatorSet</tt> to <tt>BreakCriticalEdges</tt>.
Requiring <tt>BreakCriticalEdges</tt>, for example, guarantees that there will
be no critical edges in the CFG when your pass has been run.
</p>

<p>
Some analyses chain to other analyses to do their job.  For example, an <a
href="AliasAnalysis.html">AliasAnalysis</a> implementation is required to <a
href="AliasAnalysis.html#chaining">chain</a> to other alias analysis passes.  In
cases where analyses chain, the <tt>addRequiredTransitive</tt> method should be
used instead of the <tt>addRequired</tt> method.  This informs the PassManager
that the transitively required pass should be alive as long as the requiring
pass is.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="AU::addPreserved">The <tt>AnalysisUsage::addPreserved&lt;&gt;</tt> method</a>
</div>

<div class="doc_text">
<p>
One of the jobs of the PassManager is to optimize how and when analyses are run.
In particular, it attempts to avoid recomputing data unless it needs to.  For
this reason, passes are allowed to declare that they preserve (i.e., they don't
invalidate) an existing analysis if it's available.  For example, a simple
constant folding pass would not modify the CFG, so it can't possibly affect the
results of dominator analysis.  By default, all passes are assumed to invalidate
all others.
</p>

<p>
The <tt>AnalysisUsage</tt> class provides several methods which are useful in
certain circumstances that are related to <tt>addPreserved</tt>.  In particular,
the <tt>setPreservesAll</tt> method can be called to indicate that the pass does
not modify the LLVM program at all (which is true for analyses), and the
<tt>setPreservesCFG</tt> method can be used by transformations that change
instructions in the program but do not modify the CFG or terminator instructions
(note that this property is implicitly set for <a
href="#BasicBlockPass">BasicBlockPass</a>'s).
</p>

<p>
<tt>addPreserved</tt> is particularly useful for transformations like
<tt>BreakCriticalEdges</tt>.  This pass knows how to update a small set of loop
and dominator related analyses if they exist, so it can preserve them, despite
the fact that it hacks on the CFG.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="AU::examples">Example implementations of <tt>getAnalysisUsage</tt></a>
</div>

<div class="doc_text">

<pre>
  <i>// This is an example implementation from an analysis, which does not modify
  // the program at all, yet has a prerequisite.</i>
  <b>void</b> <a href="http://llvm.org/doxygen/classllvm_1_1PostDominanceFrontier.html">PostDominanceFrontier</a>::getAnalysisUsage(AnalysisUsage &amp;AU) <b>const</b> {
    AU.setPreservesAll();
    AU.addRequired&lt;<a href="http://llvm.org/doxygen/classllvm_1_1PostDominatorTree.html">PostDominatorTree</a>&gt;();
  }
</pre>

<p>and:</p>

<pre>
  <i>// This example modifies the program, but does not modify the CFG</i>
  <b>void</b> <a href="http://llvm.org/doxygen/structLICM.html">LICM</a>::getAnalysisUsage(AnalysisUsage &amp;AU) <b>const</b> {
    AU.setPreservesCFG();
    AU.addRequired&lt;<a href="http://llvm.org/doxygen/classllvm_1_1LoopInfo.html">LoopInfo</a>&gt;();
  }
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="getAnalysis">The <tt>getAnalysis&lt;&gt;</tt> and <tt>getAnalysisToUpdate&lt;&gt;</tt> methods</a>
</div>

<div class="doc_text">

<p>The <tt>Pass::getAnalysis&lt;&gt;</tt> method is automatically inherited by
your class, providing you with access to the passes that you declared that you
required with the <a href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a>
method.  It takes a single template argument that specifies which pass class you
want, and returns a reference to that pass.  For example:</p>

<pre>
   bool LICM::runOnFunction(Function &amp;F) {
     LoopInfo &amp;LI = getAnalysis&lt;LoopInfo&gt;();
     ...
   }
</pre>

<p>This method call returns a reference to the pass desired.  You may get a
runtime assertion failure if you attempt to get an analysis that you did not
declare as required in your <a
href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a> implementation.  This
method can be called by your <tt>run*</tt> method implementation, or by any
other local method invoked by your <tt>run*</tt> method.</p>

<p>
If your pass is capable of updating analyses if they exist (e.g.,
<tt>BreakCriticalEdges</tt>, as described above), you can use the
<tt>getAnalysisToUpdate</tt> method, which returns a pointer to the analysis if
it is active.  For example:</p>

<pre>
  ...
  if (DominatorSet *DS = getAnalysisToUpdate&lt;DominatorSet&gt;()) {
    <i>// A DominatorSet is active.  This code will update it.</i>
  }
  ...
</pre>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="analysisgroup">Implementing Analysis Groups</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Now that we understand the basics of how passes are defined, how the are
used, and how they are required from other passes, it's time to get a little bit
fancier.  All of the pass relationships that we have seen so far are very
simple: one pass depends on one other specific pass to be run before it can run.
For many applications, this is great, for others, more flexibility is
required.</p>

<p>In particular, some analyses are defined such that there is a single simple
interface to the analysis results, but multiple ways of calculating them.
Consider alias analysis for example.  The most trivial alias analysis returns
"may alias" for any alias query.  The most sophisticated analysis a
flow-sensitive, context-sensitive interprocedural analysis that can take a
significant amount of time to execute (and obviously, there is a lot of room
between these two extremes for other implementations).  To cleanly support
situations like this, the LLVM Pass Infrastructure supports the notion of
Analysis Groups.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="agconcepts">Analysis Group Concepts</a>
</div>

<div class="doc_text">

<p>An Analysis Group is a single simple interface that may be implemented by
multiple different passes.  Analysis Groups can be given human readable names
just like passes, but unlike passes, they need not derive from the <tt>Pass</tt>
class.  An analysis group may have one or more implementations, one of which is
the "default" implementation.</p>

<p>Analysis groups are used by client passes just like other passes are: the
<tt>AnalysisUsage::addRequired()</tt> and <tt>Pass::getAnalysis()</tt> methods.
In order to resolve this requirement, the <a href="#passmanager">PassManager</a>
scans the available passes to see if any implementations of the analysis group
are available.  If none is available, the default implementation is created for
the pass to use.  All standard rules for <A href="#interaction">interaction
between passes</a> still apply.</p>

<p>Although <a href="#registration">Pass Registration</a> is optional for normal
passes, all analysis group implementations must be registered, and must use the
<A href="#registerag"><tt>RegisterAnalysisGroup</tt></a> template to join the
implementation pool.  Also, a default implementation of the interface
<b>must</b> be registered with <A
href="#registerag"><tt>RegisterAnalysisGroup</tt></a>.</p>

<p>As a concrete example of an Analysis Group in action, consider the <a
href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>
analysis group.  The default implementation of the alias analysis interface (the
<tt><a
href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">basicaa</a></tt>
pass) just does a few simple checks that don't require significant analysis to
compute (such as: two different globals can never alias each other, etc).
Passes that use the <tt><a
href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt>
interface (for example the <tt><a
href="http://llvm.org/doxygen/structGCSE.html">gcse</a></tt> pass), do
not care which implementation of alias analysis is actually provided, they just
use the designated interface.</p>

<p>From the user's perspective, commands work just like normal.  Issuing the
command '<tt>opt -gcse ...</tt>' will cause the <tt>basicaa</tt> class to be
instantiated and added to the pass sequence.  Issuing the command '<tt>opt
-somefancyaa -gcse ...</tt>' will cause the <tt>gcse</tt> pass to use the
<tt>somefancyaa</tt> alias analysis (which doesn't actually exist, it's just a
hypothetical example) instead.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="registerag">Using <tt>RegisterAnalysisGroup</tt></a>
</div>

<div class="doc_text">

<p>The <tt>RegisterAnalysisGroup</tt> template is used to register the analysis
group itself as well as add pass implementations to the analysis group.  First,
an analysis should be registered, with a human readable name provided for it.
Unlike registration of passes, there is no command line argument to be specified
for the Analysis Group Interface itself, because it is "abstract":</p>

<pre>
  <b>static</b> RegisterAnalysisGroup&lt;<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>&gt; A("<i>Alias Analysis</i>");
</pre>

<p>Once the analysis is registered, passes can declare that they are valid
implementations of the interface by using the following code:</p>

<pre>
<b>namespace</b> {
  //<i> Analysis Group implementations <b>must</b> be registered normally...</i>
  RegisterOpt&lt;FancyAA&gt;
  B("<i>somefancyaa</i>", "<i>A more complex alias analysis implementation</i>");

  //<i> Declare that we implement the AliasAnalysis interface</i>
  RegisterAnalysisGroup&lt;<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, FancyAA&gt; C;
}
</pre>

<p>This just shows a class <tt>FancyAA</tt> that is registered normally, then
uses the <tt>RegisterAnalysisGroup</tt> template to "join" the <tt><a
href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt>
analysis group.  Every implementation of an analysis group should join using
this template.  A single pass may join multiple different analysis groups with
no problem.</p>

<pre>
<b>namespace</b> {
  //<i> Analysis Group implementations <b>must</b> be registered normally...</i>
  RegisterOpt&lt;<a href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a>&gt;
  D("<i>basicaa</i>", "<i>Basic Alias Analysis (default AA impl)</i>");

  //<i> Declare that we implement the AliasAnalysis interface</i>
  RegisterAnalysisGroup&lt;<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, <a href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a>, <b>true</b>&gt; E;
}
</pre>

<p>Here we show how the default implementation is specified (using the extra
argument to the <tt>RegisterAnalysisGroup</tt> template).  There must be exactly
one default implementation available at all times for an Analysis Group to be
used.  Here we declare that the <tt><a
href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a></tt>
pass is the default implementation for the interface.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="passStatistics">Pass Statistics</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">
<p>The <a
href="http://llvm.org/doxygen/Statistic_8h-source.html"><tt>Statistic</tt></a>
class is designed to be an easy way to expose various success
metrics from passes.  These statistics are printed at the end of a
run, when the -stats command line option is enabled on the command
line. See the <a href="http://llvm.org/docs/ProgrammersManual.html#Statistic">Statistics section</a> in the Programmer's Manual for details. 

</div>


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="passmanager">What PassManager does</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The <a
href="http://llvm.org/doxygen/PassManager_8h-source.html"><tt>PassManager</tt></a>
<a
href="http://llvm.org/doxygen/classllvm_1_1PassManager.html">class</a>
takes a list of passes, ensures their <a href="#interaction">prerequisites</a>
are set up correctly, and then schedules passes to run efficiently.  All of the
LLVM tools that run passes use the <tt>PassManager</tt> for execution of these
passes.</p>

<p>The <tt>PassManager</tt> does two main things to try to reduce the execution
time of a series of passes:</p>

<ol>
<li><b>Share analysis results</b> - The PassManager attempts to avoid
recomputing analysis results as much as possible.  This means keeping track of
which analyses are available already, which analyses get invalidated, and which
analyses are needed to be run for a pass.  An important part of work is that the
<tt>PassManager</tt> tracks the exact lifetime of all analysis results, allowing
it to <a href="#releaseMemory">free memory</a> allocated to holding analysis
results as soon as they are no longer needed.</li>

<li><b>Pipeline the execution of passes on the program</b> - The
<tt>PassManager</tt> attempts to get better cache and memory usage behavior out
of a series of passes by pipelining the passes together.  This means that, given
a series of consequtive <a href="#FunctionPass"><tt>FunctionPass</tt></a>'s, it
will execute all of the <a href="#FunctionPass"><tt>FunctionPass</tt></a>'s on
the first function, then all of the <a
href="#FunctionPass"><tt>FunctionPass</tt></a>es on the second function,
etc... until the entire program has been run through the passes.

<p>This improves the cache behavior of the compiler, because it is only touching
the LLVM program representation for a single function at a time, instead of
traversing the entire program.  It reduces the memory consumption of compiler,
because, for example, only one <a
href="http://llvm.org/doxygen/classllvm_1_1DominatorSet.html"><tt>DominatorSet</tt></a>
needs to be calculated at a time.  This also makes it possible some <a
href="#SMP">interesting enhancements</a> in the future.</p></li>

</ol>

<p>The effectiveness of the <tt>PassManager</tt> is influenced directly by how
much information it has about the behaviors of the passes it is scheduling.  For
example, the "preserved" set is intentionally conservative in the face of an
unimplemented <a href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a> method.
Not implementing when it should be implemented will have the effect of not
allowing any analysis results to live across the execution of your pass.</p>

<p>The <tt>PassManager</tt> class exposes a <tt>--debug-pass</tt> command line
options that is useful for debugging pass execution, seeing how things work, and
diagnosing when you should be preserving more analyses than you currently are
(To get information about all of the variants of the <tt>--debug-pass</tt>
option, just type '<tt>opt --help-hidden</tt>').</p>

<p>By using the <tt>--debug-pass=Structure</tt> option, for example, we can see
how our <a href="#basiccode">Hello World</a> pass interacts with other passes.
Lets try it out with the <tt>gcse</tt> and <tt>licm</tt> passes:</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so -gcse -licm --debug-pass=Structure &lt; hello.bc &gt; /dev/null
Module Pass Manager
  Function Pass Manager
    Dominator Set Construction
    Immediate Dominators Construction
    Global Common Subexpression Elimination
--  Immediate Dominators Construction
--  Global Common Subexpression Elimination
    Natural Loop Construction
    Loop Invariant Code Motion
--  Natural Loop Construction
--  Loop Invariant Code Motion
    Module Verifier
--  Dominator Set Construction
--  Module Verifier
  Bytecode Writer
--Bytecode Writer
</pre>

<p>This output shows us when passes are constructed and when the analysis
results are known to be dead (prefixed with '<tt>--</tt>').  Here we see that
GCSE uses dominator and immediate dominator information to do its job.  The LICM
pass uses natural loop information, which uses dominator sets, but not immediate
dominators.  Because immediate dominators are no longer useful after the GCSE
pass, it is immediately destroyed.  The dominator sets are then reused to
compute natural loop information, which is then used by the LICM pass.</p>

<p>After the LICM pass, the module verifier runs (which is automatically added
by the '<tt>opt</tt>' tool), which uses the dominator set to check that the
resultant LLVM code is well formed.  After it finishes, the dominator set
information is destroyed, after being computed once, and shared by three
passes.</p>

<p>Lets see how this changes when we run the <a href="#basiccode">Hello
World</a> pass in between the two passes:</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure &lt; hello.bc &gt; /dev/null
Module Pass Manager
  Function Pass Manager
    Dominator Set Construction
    Immediate Dominators Construction
    Global Common Subexpression Elimination
<b>--  Dominator Set Construction</b>
--  Immediate Dominators Construction
--  Global Common Subexpression Elimination
<b>    Hello World Pass
--  Hello World Pass
    Dominator Set Construction</b>
    Natural Loop Construction
    Loop Invariant Code Motion
--  Natural Loop Construction
--  Loop Invariant Code Motion
    Module Verifier
--  Dominator Set Construction
--  Module Verifier
  Bytecode Writer
--Bytecode Writer
Hello: __main
Hello: puts
Hello: main
</pre>

<p>Here we see that the <a href="#basiccode">Hello World</a> pass has killed the
Dominator Set pass, even though it doesn't modify the code at all!  To fix this,
we need to add the following <a
href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a> method to our pass:</p>

<pre>
    <i>// We don't modify the program, so we preserve all analyses</i>
    <b>virtual void</b> getAnalysisUsage(AnalysisUsage &amp;AU) <b>const</b> {
      AU.setPreservesAll();
    }
</pre>

<p>Now when we run our pass, we get this output:</p>

<pre>
$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure &lt; hello.bc &gt; /dev/null
Pass Arguments:  -gcse -hello -licm
Module Pass Manager
  Function Pass Manager
    Dominator Set Construction
    Immediate Dominators Construction
    Global Common Subexpression Elimination
--  Immediate Dominators Construction
--  Global Common Subexpression Elimination
    Hello World Pass
--  Hello World Pass
    Natural Loop Construction
    Loop Invariant Code Motion
--  Loop Invariant Code Motion
--  Natural Loop Construction
    Module Verifier
--  Dominator Set Construction
--  Module Verifier
  Bytecode Writer
--Bytecode Writer
Hello: __main
Hello: puts
Hello: main
</pre>

<p>Which shows that we don't accidentally invalidate dominator information
anymore, and therefore do not have to compute it twice.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="releaseMemory">The <tt>releaseMemory</tt> method</a>
</div>

<div class="doc_text">

<pre>
  <b>virtual void</b> releaseMemory();
</pre>

<p>The <tt>PassManager</tt> automatically determines when to compute analysis
results, and how long to keep them around for.  Because the lifetime of the pass
object itself is effectively the entire duration of the compilation process, we
need some way to free analysis results when they are no longer useful.  The
<tt>releaseMemory</tt> virtual method is the way to do this.</p>

<p>If you are writing an analysis or any other pass that retains a significant
amount of state (for use by another pass which "requires" your pass and uses the
<a href="#getAnalysis">getAnalysis</a> method) you should implement
<tt>releaseMEmory</tt> to, well, release the memory allocated to maintain this
internal state.  This method is called after the <tt>run*</tt> method for the
class, before the next call of <tt>run*</tt> in your pass.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="debughints">Using GDB with dynamically loaded passes</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Unfortunately, using GDB with dynamically loaded passes is not as easy as it
should be.  First of all, you can't set a breakpoint in a shared object that has
not been loaded yet, and second of all there are problems with inlined functions
in shared objects.  Here are some suggestions to debugging your pass with
GDB.</p>

<p>For sake of discussion, I'm going to assume that you are debugging a
transformation invoked by <tt>opt</tt>, although nothing described here depends
on that.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="breakpoint">Setting a breakpoint in your pass</a>
</div>

<div class="doc_text">

<p>First thing you do is start <tt>gdb</tt> on the <tt>opt</tt> process:</p>

<pre>
$ <b>gdb opt</b>
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.6"...
(gdb)
</pre>

<p>Note that <tt>opt</tt> has a lot of debugging information in it, so it takes
time to load.  Be patient.  Since we cannot set a breakpoint in our pass yet
(the shared object isn't loaded until runtime), we must execute the process, and
have it stop before it invokes our pass, but after it has loaded the shared
object.  The most foolproof way of doing this is to set a breakpoint in
<tt>PassManager::run</tt> and then run the process with the arguments you
want:</p>

<pre>
(gdb) <b>break PassManager::run</b>
Breakpoint 1 at 0x2413bc: file Pass.cpp, line 70.
(gdb) <b>run test.bc -load $(LLVMTOP)/llvm/Debug/lib/[libname].so -[passoption]</b>
Starting program: opt test.bc -load $(LLVMTOP)/llvm/Debug/lib/[libname].so -[passoption]
Breakpoint 1, PassManager::run (this=0xffbef174, M=@0x70b298) at Pass.cpp:70
70      bool PassManager::run(Module &amp;M) { return PM-&gt;run(M); }
(gdb)
</pre>

<p>Once the <tt>opt</tt> stops in the <tt>PassManager::run</tt> method you are
now free to set breakpoints in your pass so that you can trace through execution
or do other standard debugging stuff.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="debugmisc">Miscellaneous Problems</a>
</div>

<div class="doc_text">

<p>Once you have the basics down, there are a couple of problems that GDB has,
some with solutions, some without.</p>

<ul>
<li>Inline functions have bogus stack information.  In general, GDB does a
pretty good job getting stack traces and stepping through inline functions.
When a pass is dynamically loaded however, it somehow completely loses this
capability.  The only solution I know of is to de-inline a function (move it
from the body of a class to a .cpp file).</li>

<li>Restarting the program breaks breakpoints.  After following the information
above, you have succeeded in getting some breakpoints planted in your pass.  Nex
thing you know, you restart the program (i.e., you type '<tt>run</tt>' again),
and you start getting errors about breakpoints being unsettable.  The only way I
have found to "fix" this problem is to <tt>delete</tt> the breakpoints that are
already set in your pass, run the program, and re-set the breakpoints once
execution stops in <tt>PassManager::run</tt>.</li>

</ul>

<p>Hopefully these tips will help with common case debugging situations.  If
you'd like to contribute some tips of your own, just contact <a
href="mailto:sabre@nondot.org">Chris</a>.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="future">Future extensions planned</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Although the LLVM Pass Infrastructure is very capable as it stands, and does
some nifty stuff, there are things we'd like to add in the future.  Here is
where we are going:</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="SMP">Multithreaded LLVM</a>
</div>

<div class="doc_text">

<p>Multiple CPU machines are becoming more common and compilation can never be
fast enough: obviously we should allow for a multithreaded compiler.  Because of
the semantics defined for passes above (specifically they cannot maintain state
across invocations of their <tt>run*</tt> methods), a nice clean way to
implement a multithreaded compiler would be for the <tt>PassManager</tt> class
to create multiple instances of each pass object, and allow the separate
instances to be hacking on different parts of the program at the same time.</p>

<p>This implementation would prevent each of the passes from having to implement
multithreaded constructs, requiring only the LLVM core to have locking in a few
places (for global resources).  Although this is a simple extension, we simply
haven't had time (or multiprocessor machines, thus a reason) to implement this.
Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
<a name="PassFunctionPass"><tt>ModulePass</tt>es requiring <tt>FunctionPass</tt>es</a>
</div>

<div class="doc_text">

<p>Currently it is illegal for a <a href="#ModulePass"><tt>ModulePass</tt></a>
to require a <a href="#FunctionPass"><tt>FunctionPass</tt></a>.  This is because
there is only one instance of the <a
href="#FunctionPass"><tt>FunctionPass</tt></a> object ever created, thus nowhere
to store information for all of the functions in the program at the same time.
Although this has come up a couple of times before, this has always been worked
around by factoring one big complicated pass into a global and an
interprocedural part, both of which are distinct.  In the future, it would be
nice to have this though.</p>

<p>Note that it is no problem for a <a
href="#FunctionPass"><tt>FunctionPass</tt></a> to require the results of a <a
href="#ModulePass"><tt>ModulePass</tt></a>, only the other way around.</p>

</div>

<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
