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

<!--

If Passes.html is up to date, the following "one-liner" should print
an empty diff.

egrep -e '^<tr><td><a href="#.*">-.*</a></td><td>.*</td></tr>$' \
      -e '^  <a name=".*">.*</a>$' < Passes.html >html; \
perl >help <<'EOT' && diff -u help html; rm -f help html
open HTML, "<Passes.html" or die "open: Passes.html: $!\n";
while (<HTML>) {
  m:^<tr><td><a href="#(.*)">-.*</a></td><td>.*</td></tr>$: or next;
  $order{$1} = sprintf("%03d", 1 + int %order);
}
open HELP, "../Release/bin/opt -help|" or die "open: opt -help: $!\n";
while (<HELP>) {
  m:^    -([^ ]+) +- (.*)$: or next;
  my $o = $order{$1};
  $o = "000" unless defined $o;
  push @x, "$o<tr><td><a href=\"#$1\">-$1</a></td><td>$2</td></tr>\n";
  push @y, "$o  <a name=\"$1\">$2</a>\n";
}
@x = map { s/^\d\d\d//; $_ } sort @x;
@y = map { s/^\d\d\d//; $_ } sort @y;
print @x, @y;
EOT

This (real) one-liner can also be helpful when converting comments to HTML:

perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print "  <p>\n" if !$on && $_ =~ /\S/; print "  </p>\n" if $on && $_ =~ /^\s*$/; print "  $_\n"; $on = ($_ =~ /\S/); } print "  </p>\n" if $on'

  -->

<div class="doc_title">LLVM's Analysis and Transform Passes</div>

<ol>
  <li><a href="#intro">Introduction</a></li>
  <li><a href="#analyses">Analysis Passes</a>
  <li><a href="#transforms">Transform Passes</a></li>
  <li><a href="#utilities">Utility Passes</a></li>
</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:rspencer@x10sys.com">Reid Spencer</a>
            and Gordon Henriksen</p>
</div>

<!-- ======================================================================= -->
<div class="doc_section"> <a name="intro">Introduction</a> </div>
<div class="doc_text">
  <p>This document serves as a high level summary of the optimization features 
  that LLVM provides. Optimizations are implemented as Passes that traverse some
  portion of a program to either collect information or transform the program.
  The table below divides the passes that LLVM provides into three categories.
  Analysis passes compute information that other passes can use or for debugging
  or program visualization purposes. Transform passes can use (or invalidate)
  the analysis passes. Transform passes all mutate the program in some way. 
  Utility passes provides some utility but don't otherwise fit categorization.
  For example passes to extract functions to bitcode or write a module to
  bitcode are neither analysis nor transform passes.
  <p>The table below provides a quick summary of each pass and links to the more
  complete pass description later in the document.</p>
</div>
<div class="doc_text" >
<table>
<tr><th colspan="2"><b>ANALYSIS PASSES</b></th></tr>
<tr><th>Option</th><th>Name</th></tr>
<tr><td><a href="#aa-eval">-aa-eval</a></td><td>Exhaustive Alias Analysis Precision Evaluator</td></tr>
<tr><td><a href="#anders-aa">-anders-aa</a></td><td>Andersen's Interprocedural Alias Analysis</td></tr>
<tr><td><a href="#basicaa">-basicaa</a></td><td>Basic Alias Analysis (default AA impl)</td></tr>
<tr><td><a href="#basiccg">-basiccg</a></td><td>Basic CallGraph Construction</td></tr>
<tr><td><a href="#basicvn">-basicvn</a></td><td>Basic Value Numbering (default GVN impl)</td></tr>
<tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Optimize for code generation</td></tr>
<tr><td><a href="#count-aa">-count-aa</a></td><td>Count Alias Analysis Query Responses</td></tr>
<tr><td><a href="#debug-aa">-debug-aa</a></td><td>AA use debugger</td></tr>
<tr><td><a href="#domfrontier">-domfrontier</a></td><td>Dominance Frontier Construction</td></tr>
<tr><td><a href="#domtree">-domtree</a></td><td>Dominator Tree Construction</td></tr>
<tr><td><a href="#dot-callgraph">-dot-callgraph</a></td><td>Print Call Graph to 'dot' file</td></tr>
<tr><td><a href="#dot-cfg">-dot-cfg</a></td><td>Print CFG of function to 'dot' file</td></tr>
<tr><td><a href="#dot-cfg-only">-dot-cfg-only</a></td><td>Print CFG of function to 'dot' file (with no function bodies)</td></tr>
<tr><td><a href="#globalsmodref-aa">-globalsmodref-aa</a></td><td>Simple mod/ref analysis for globals</td></tr>
<tr><td><a href="#instcount">-instcount</a></td><td>Counts the various types of Instructions</td></tr>
<tr><td><a href="#intervals">-intervals</a></td><td>Interval Partition Construction</td></tr>
<tr><td><a href="#load-vn">-load-vn</a></td><td>Load Value Numbering</td></tr>
<tr><td><a href="#loops">-loops</a></td><td>Natural Loop Construction</td></tr>
<tr><td><a href="#memdep">-memdep</a></td><td>Memory Dependence Analysis</td></tr>
<tr><td><a href="#no-aa">-no-aa</a></td><td>No Alias Analysis (always returns 'may' alias)</td></tr>
<tr><td><a href="#no-profile">-no-profile</a></td><td>No Profile Information</td></tr>
<tr><td><a href="#postdomfrontier">-postdomfrontier</a></td><td>Post-Dominance Frontier Construction</td></tr>
<tr><td><a href="#postdomtree">-postdomtree</a></td><td>Post-Dominator Tree Construction</td></tr>
<tr><td><a href="#print-alias-sets">-print-alias-sets</a></td><td>Alias Set Printer</td></tr>
<tr><td><a href="#print-callgraph">-print-callgraph</a></td><td>Print a call graph</td></tr>
<tr><td><a href="#print-callgraph-sccs">-print-callgraph-sccs</a></td><td>Print SCCs of the Call Graph</td></tr>
<tr><td><a href="#print-cfg-sccs">-print-cfg-sccs</a></td><td>Print SCCs of each function CFG</td></tr>
<tr><td><a href="#print-externalfnconstants">-print-externalfnconstants</a></td><td>Print external fn callsites passed constants</td></tr>
<tr><td><a href="#print-function">-print-function</a></td><td>Print function to stderr</td></tr>
<tr><td><a href="#print-module">-print-module</a></td><td>Print module to stderr</td></tr>
<tr><td><a href="#print-used-types">-print-used-types</a></td><td>Find Used Types</td></tr>
<tr><td><a href="#profile-loader">-profile-loader</a></td><td>Load profile information from llvmprof.out</td></tr>
<tr><td><a href="#scalar-evolution">-scalar-evolution</a></td><td>Scalar Evolution Analysis</td></tr>
<tr><td><a href="#targetdata">-targetdata</a></td><td>Target Data Layout</td></tr>


<tr><th colspan="2"><b>TRANSFORM PASSES</b></th></tr>
<tr><th>Option</th><th>Name</th></tr>
<tr><td><a href="#adce">-adce</a></td><td>Aggressive Dead Code Elimination</td></tr>
<tr><td><a href="#argpromotion">-argpromotion</a></td><td>Promote 'by reference' arguments to scalars</td></tr>
<tr><td><a href="#block-placement">-block-placement</a></td><td>Profile Guided Basic Block Placement</td></tr>
<tr><td><a href="#break-crit-edges">-break-crit-edges</a></td><td>Break critical edges in CFG</td></tr>
<tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Prepare a function for code generation </td></tr>
<tr><td><a href="#condprop">-condprop</a></td><td>Conditional Propagation</td></tr>
<tr><td><a href="#constmerge">-constmerge</a></td><td>Merge Duplicate Global Constants</td></tr>
<tr><td><a href="#constprop">-constprop</a></td><td>Simple constant propagation</td></tr>
<tr><td><a href="#dce">-dce</a></td><td>Dead Code Elimination</td></tr>
<tr><td><a href="#deadargelim">-deadargelim</a></td><td>Dead Argument Elimination</td></tr>
<tr><td><a href="#deadtypeelim">-deadtypeelim</a></td><td>Dead Type Elimination</td></tr>
<tr><td><a href="#die">-die</a></td><td>Dead Instruction Elimination</td></tr>
<tr><td><a href="#dse">-dse</a></td><td>Dead Store Elimination</td></tr>
<tr><td><a href="#gcse">-gcse</a></td><td>Global Common Subexpression Elimination</td></tr>
<tr><td><a href="#globaldce">-globaldce</a></td><td>Dead Global Elimination</td></tr>
<tr><td><a href="#globalopt">-globalopt</a></td><td>Global Variable Optimizer</td></tr>
<tr><td><a href="#gvn">-gvn</a></td><td>Global Value Numbering</td></tr>
<tr><td><a href="#gvnpre">-gvnpre</a></td><td>Global Value Numbering/Partial Redundancy Elimination</td></tr>
<tr><td><a href="#indmemrem">-indmemrem</a></td><td>Indirect Malloc and Free Removal</td></tr>
<tr><td><a href="#indvars">-indvars</a></td><td>Canonicalize Induction Variables</td></tr>
<tr><td><a href="#inline">-inline</a></td><td>Function Integration/Inlining</td></tr>
<tr><td><a href="#insert-block-profiling">-insert-block-profiling</a></td><td>Insert instrumentation for block profiling</td></tr>
<tr><td><a href="#insert-edge-profiling">-insert-edge-profiling</a></td><td>Insert instrumentation for edge profiling</td></tr>
<tr><td><a href="#insert-function-profiling">-insert-function-profiling</a></td><td>Insert instrumentation for function profiling</td></tr>
<tr><td><a href="#insert-null-profiling-rs">-insert-null-profiling-rs</a></td><td>Measure profiling framework overhead</td></tr>
<tr><td><a href="#insert-rs-profiling-framework">-insert-rs-profiling-framework</a></td><td>Insert random sampling instrumentation framework</td></tr>
<tr><td><a href="#instcombine">-instcombine</a></td><td>Combine redundant instructions</td></tr>
<tr><td><a href="#internalize">-internalize</a></td><td>Internalize Global Symbols</td></tr>
<tr><td><a href="#ipconstprop">-ipconstprop</a></td><td>Interprocedural constant propagation</td></tr>
<tr><td><a href="#ipsccp">-ipsccp</a></td><td>Interprocedural Sparse Conditional Constant Propagation</td></tr>
<tr><td><a href="#jump-threading">-jump-threading</a></td><td>Thread control through conditional blocks </td></tr>
<tr><td><a href="#lcssa">-lcssa</a></td><td>Loop-Closed SSA Form Pass</td></tr>
<tr><td><a href="#licm">-licm</a></td><td>Loop Invariant Code Motion</td></tr>
<tr><td><a href="#loop-deletion">-loop-deletion</a></td><td>Dead Loop Deletion Pass </td></tr>
<tr><td><a href="#loop-extract">-loop-extract</a></td><td>Extract loops into new functions</td></tr>
<tr><td><a href="#loop-extract-single">-loop-extract-single</a></td><td>Extract at most one loop into a new function</td></tr>
<tr><td><a href="#loop-index-split">-loop-index-split</a></td><td>Index Split Loops</td></tr>
<tr><td><a href="#loop-reduce">-loop-reduce</a></td><td>Loop Strength Reduction</td></tr>
<tr><td><a href="#loop-rotate">-loop-rotate</a></td><td>Rotate Loops</td></tr>
<tr><td><a href="#loop-unroll">-loop-unroll</a></td><td>Unroll loops</td></tr>
<tr><td><a href="#loop-unswitch">-loop-unswitch</a></td><td>Unswitch loops</td></tr>
<tr><td><a href="#loopsimplify">-loopsimplify</a></td><td>Canonicalize natural loops</td></tr>
<tr><td><a href="#lowerallocs">-lowerallocs</a></td><td>Lower allocations from instructions to calls</td></tr>
<tr><td><a href="#lowerinvoke">-lowerinvoke</a></td><td>Lower invoke and unwind, for unwindless code generators</td></tr>
<tr><td><a href="#lowersetjmp">-lowersetjmp</a></td><td>Lower Set Jump</td></tr>
<tr><td><a href="#lowerswitch">-lowerswitch</a></td><td>Lower SwitchInst's to branches</td></tr>
<tr><td><a href="#mem2reg">-mem2reg</a></td><td>Promote Memory to Register</td></tr>
<tr><td><a href="#memcpyopt">-memcpyopt</a></td><td>Optimize use of memcpy and friends</td></tr>
<tr><td><a href="#mergereturn">-mergereturn</a></td><td>Unify function exit nodes</td></tr>
<tr><td><a href="#predsimplify">-predsimplify</a></td><td>Predicate Simplifier</td></tr>
<tr><td><a href="#prune-eh">-prune-eh</a></td><td>Remove unused exception handling info</td></tr>
<tr><td><a href="#raiseallocs">-raiseallocs</a></td><td>Raise allocations from calls to instructions</td></tr>
<tr><td><a href="#reassociate">-reassociate</a></td><td>Reassociate expressions</td></tr>
<tr><td><a href="#reg2mem">-reg2mem</a></td><td>Demote all values to stack slots</td></tr>
<tr><td><a href="#scalarrepl">-scalarrepl</a></td><td>Scalar Replacement of Aggregates</td></tr>
<tr><td><a href="#sccp">-sccp</a></td><td>Sparse Conditional Constant Propagation</td></tr>
<tr><td><a href="#simplify-libcalls">-simplify-libcalls</a></td><td>Simplify well-known library calls</td></tr>
<tr><td><a href="#simplifycfg">-simplifycfg</a></td><td>Simplify the CFG</td></tr>
<tr><td><a href="#strip">-strip</a></td><td>Strip all symbols from a module</td></tr>
<tr><td><a href="#strip-dead-prototypes">-strip-dead-prototypes</a></td><td>Remove unused function declarations</td></tr>
<tr><td><a href="#sretpromotion">-sretpromotion</a></td><td>Promote sret arguments</td></tr>
<tr><td><a href="#tailcallelim">-tailcallelim</a></td><td>Tail Call Elimination</td></tr>
<tr><td><a href="#tailduplicate">-tailduplicate</a></td><td>Tail Duplication</td></tr>


<tr><th colspan="2"><b>UTILITY PASSES</b></th></tr>
<tr><th>Option</th><th>Name</th></tr>
<tr><td><a href="#deadarghaX0r">-deadarghaX0r</a></td><td>Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)</td></tr>
<tr><td><a href="#extract-blocks">-extract-blocks</a></td><td>Extract Basic Blocks From Module (for bugpoint use)</td></tr>
<tr><td><a href="#preverify">-preverify</a></td><td>Preliminary module verification</td></tr>
<tr><td><a href="#verify">-verify</a></td><td>Module Verifier</td></tr>
<tr><td><a href="#view-cfg">-view-cfg</a></td><td>View CFG of function</td></tr>
<tr><td><a href="#view-cfg-only">-view-cfg-only</a></td><td>View CFG of function (with no function bodies)</td></tr>
</table>
</div>

<!-- ======================================================================= -->
<div class="doc_section"> <a name="example">Analysis Passes</a></div>
<div class="doc_text">
  <p>This section describes the LLVM Analysis Passes.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="aa-eval">Exhaustive Alias Analysis Precision Evaluator</a>
</div>
<div class="doc_text">
  <p>This is a simple N^2 alias analysis accuracy evaluator.
  Basically, for each function in the program, it simply queries to see how the
  alias analysis implementation answers alias queries between each pair of
  pointers in the function.</p>

  <p>This is inspired and adapted from code by: Naveen Neelakantam, Francesco
  Spadini, and Wojciech Stryjewski.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="anders-aa">Andersen's Interprocedural Alias Analysis</a>
</div>
<div class="doc_text">
  <p>
  This is an implementation of Andersen's interprocedural alias
  analysis
  </p>
  
  <p>
  In pointer analysis terms, this is a subset-based, flow-insensitive,
  field-sensitive, and context-insensitive algorithm pointer algorithm.
  </p>
  
  <p>
  This algorithm is implemented as three stages:
  </p>
  
  <ol>
    <li>Object identification.</li>
    <li>Inclusion constraint identification.</li>
    <li>Offline constraint graph optimization.</li>
    <li>Inclusion constraint solving.</li>
  </ol>
  
  <p>
  The object identification stage identifies all of the memory objects in the
  program, which includes globals, heap allocated objects, and stack allocated
  objects.
  </p>
  
  <p>
  The inclusion constraint identification stage finds all inclusion constraints
  in the program by scanning the program, looking for pointer assignments and
  other statements that effect the points-to graph.  For a statement like 
  <code><var>A</var> = <var>B</var></code>, this statement is processed to 
  indicate that <var>A</var> can point to anything that <var>B</var> can point 
  to.  Constraints can handle copies, loads, and stores, and address taking.
  </p>
  
  <p>
  The offline constraint graph optimization portion includes offline variable
  substitution algorithms intended to computer pointer and location
  equivalences.  Pointer equivalences are those pointers that will have the
  same points-to sets, and location equivalences are those variables that
  always appear together in points-to sets.
  </p>
  
  <p>
  The inclusion constraint solving phase iteratively propagates the inclusion
  constraints until a fixed point is reached.  This is an O(<var>n</var>³) 
  algorithm.
  </p>
  
  <p>
  Function constraints are handled as if they were structs with <var>X</var> 
  fields. Thus, an access to argument <var>X</var> of function <var>Y</var> is 
  an access to node index <code>getNode(<var>Y</var>) + <var>X</var></code>.  
  This representation allows handling of indirect calls without any issues.  To 
  wit, an indirect call <code><var>Y</var>(<var>a</var>,<var>b</var>)</code> is 
  equivalent to <code>*(<var>Y</var> + 1) = <var>a</var>, *(<var>Y</var> + 2) = 
  <var>b</var></code>. The return node for a function <var>F</var> is always 
  located at <code>getNode(<var>F</var>) + CallReturnPos</code>. The arguments 
  start at <code>getNode(<var>F</var>) + CallArgPos</code>.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="basicaa">Basic Alias Analysis (default AA impl)</a>
</div>
<div class="doc_text">
  <p>
  This is the default implementation of the Alias Analysis interface
  that simply implements a few identities (two different globals cannot alias,
  etc), but otherwise does no analysis.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="basiccg">Basic CallGraph Construction</a>
</div>
<div class="doc_text">
  <p>Yet to be written.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="basicvn">Basic Value Numbering (default Value Numbering impl)</a>
</div>
<div class="doc_text">
  <p>
  This is the default implementation of the <code>ValueNumbering</code>
  interface.  It walks the SSA def-use chains to trivially identify
  lexically identical expressions.  This does not require any ahead of time
  analysis, so it is a very fast default implementation.
  </p>
  <p>
  The ValueNumbering analysis passes are mostly deprecated. They are only used
  by the <a href="#gcse">Global Common Subexpression Elimination pass</a>, which
  is deprecated by the <a href="#gvn">Global Value Numbering pass</a> (which
  does its value numbering on its own).
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="codegenprepare">Optimize for code generation</a>
</div>
<div class="doc_text">
  <p>
  This pass munges the code in the input function to better prepare it for
  SelectionDAG-based code generation.  This works around limitations in it's
  basic-block-at-a-time approach.  It should eventually be removed.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="count-aa">Count Alias Analysis Query Responses</a>
</div>
<div class="doc_text">
  <p>
  A pass which can be used to count how many alias queries
  are being made and how the alias analysis implementation being used responds.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="debug-aa">AA use debugger</a>
</div>
<div class="doc_text">
  <p>
  This simple pass checks alias analysis users to ensure that if they
  create a new value, they do not query AA without informing it of the value.
  It acts as a shim over any other AA pass you want.
  </p>
  
  <p>
  Yes keeping track of every value in the program is expensive, but this is 
  a debugging pass.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="domfrontier">Dominance Frontier Construction</a>
</div>
<div class="doc_text">
  <p>
  This pass is a simple dominator construction algorithm for finding forward
  dominator frontiers.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="domtree">Dominator Tree Construction</a>
</div>
<div class="doc_text">
  <p>
  This pass is a simple dominator construction algorithm for finding forward
  dominators.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="dot-callgraph">Print Call Graph to 'dot' file</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the call graph into a
  <code>.dot</code> graph.  This graph can then be processed with the "dot" tool
  to convert it to postscript or some other suitable format.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="dot-cfg">Print CFG of function to 'dot' file</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the control flow graph
  into a <code>.dot</code> graph.  This graph can then be processed with the
  "dot" tool to convert it to postscript or some other suitable format.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="dot-cfg-only">Print CFG of function to 'dot' file (with no function bodies)</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the control flow graph
  into a <code>.dot</code> graph, omitting the function bodies.  This graph can
  then be processed with the "dot" tool to convert it to postscript or some
  other suitable format.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="globalsmodref-aa">Simple mod/ref analysis for globals</a>
</div>
<div class="doc_text">
  <p>
  This simple pass provides alias and mod/ref information for global values
  that do not have their address taken, and keeps track of whether functions
  read or write memory (are "pure").  For this simple (but very common) case,
  we can provide pretty accurate and useful information.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="instcount">Counts the various types of Instructions</a>
</div>
<div class="doc_text">
  <p>
  This pass collects the count of all instructions and reports them
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="intervals">Interval Partition Construction</a>
</div>
<div class="doc_text">
  <p>
  This analysis calculates and represents the interval partition of a function,
  or a preexisting interval partition.
  </p>
  
  <p>
  In this way, the interval partition may be used to reduce a flow graph down
  to its degenerate single node interval partition (unless it is irreducible).
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="load-vn">Load Value Numbering</a>
</div>
<div class="doc_text">
  <p>
  This pass value numbers load and call instructions.  To do this, it finds
  lexically identical load instructions, and uses alias analysis to determine
  which loads are guaranteed to produce the same value.  To value number call
  instructions, it looks for calls to functions that do not write to memory
  which do not have intervening instructions that clobber the memory that is
  read from.
  </p>
  
  <p>
  This pass builds off of another value numbering pass to implement value
  numbering for non-load and non-call instructions.  It uses Alias Analysis so
  that it can disambiguate the load instructions.  The more powerful these base
  analyses are, the more powerful the resultant value numbering will be.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loops">Natural Loop Construction</a>
</div>
<div class="doc_text">
  <p>
  This analysis is used to identify natural loops and determine the loop depth
  of various nodes of the CFG.  Note that the loops identified may actually be
  several natural loops that share the same header node... not just a single
  natural loop.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="memdep">Memory Dependence Analysis</a>
</div>
<div class="doc_text">
  <p>
  An analysis that determines, for a given memory operation, what preceding 
  memory operations it depends on.  It builds on alias analysis information, and 
  tries to provide a lazy, caching interface to a common kind of alias 
  information query.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="no-aa">No Alias Analysis (always returns 'may' alias)</a>
</div>
<div class="doc_text">
  <p>
  Always returns "I don't know" for alias queries.  NoAA is unlike other alias
  analysis implementations, in that it does not chain to a previous analysis. As
  such it doesn't follow many of the rules that other alias analyses must.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="no-profile">No Profile Information</a>
</div>
<div class="doc_text">
  <p>
  The default "no profile" implementation of the abstract
  <code>ProfileInfo</code> interface.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="postdomfrontier">Post-Dominance Frontier Construction</a>
</div>
<div class="doc_text">
  <p>
  This pass is a simple post-dominator construction algorithm for finding
  post-dominator frontiers.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="postdomtree">Post-Dominator Tree Construction</a>
</div>
<div class="doc_text">
  <p>
  This pass is a simple post-dominator construction algorithm for finding
  post-dominators.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-alias-sets">Alias Set Printer</a>
</div>
<div class="doc_text">
  <p>Yet to be written.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-callgraph">Print a call graph</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the call graph to
  standard output in a human-readable form.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-callgraph-sccs">Print SCCs of the Call Graph</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the SCCs of the call
  graph to standard output in a human-readable form.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-cfg-sccs">Print SCCs of each function CFG</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints the SCCs of each
  function CFG to standard output in a human-readable form.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-externalfnconstants">Print external fn callsites passed constants</a>
</div>
<div class="doc_text">
  <p>
  This pass, only available in <code>opt</code>, prints out call sites to
  external functions that are called with constant arguments.  This can be
  useful when looking for standard library functions we should constant fold
  or handle in alias analyses.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-function">Print function to stderr</a>
</div>
<div class="doc_text">
  <p>
  The <code>PrintFunctionPass</code> class is designed to be pipelined with
  other <code>FunctionPass</code>es, and prints out the functions of the module
  as they are processed.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-module">Print module to stderr</a>
</div>
<div class="doc_text">
  <p>
  This pass simply prints out the entire module when it is executed.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="print-used-types">Find Used Types</a>
</div>
<div class="doc_text">
  <p>
  This pass is used to seek out all of the types in use by the program.  Note
  that this analysis explicitly does not include types only used by the symbol
  table.
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="profile-loader">Load profile information from llvmprof.out</a>
</div>
<div class="doc_text">
  <p>
  A concrete implementation of profiling information that loads the information
  from a profile dump file.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="scalar-evolution">Scalar Evolution Analysis</a>
</div>
<div class="doc_text">
  <p>
  The <code>ScalarEvolution</code> analysis can be used to analyze and
  catagorize scalar expressions in loops.  It specializes in recognizing general
  induction variables, representing them with the abstract and opaque
  <code>SCEV</code> class.  Given this analysis, trip counts of loops and other
  important properties can be obtained.
  </p>
  
  <p>
  This analysis is primarily useful for induction variable substitution and
  strength reduction.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="targetdata">Target Data Layout</a>
</div>
<div class="doc_text">
  <p>Provides other passes access to information on how the size and alignment
  required by the the target ABI for various data types.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_section"> <a name="transform">Transform Passes</a></div>
<div class="doc_text">
  <p>This section describes the LLVM Transform Passes.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="adce">Aggressive Dead Code Elimination</a>
</div>
<div class="doc_text">
  <p>ADCE aggressively tries to eliminate code. This pass is similar to
  <a href="#dce">DCE</a> but it assumes that values are dead until proven 
  otherwise. This is similar to <a href="#sccp">SCCP</a>, except applied to 
  the liveness of values.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="argpromotion">Promote 'by reference' arguments to scalars</a>
</div>
<div class="doc_text">
  <p>
  This pass promotes "by reference" arguments to be "by value" arguments.  In
  practice, this means looking for internal functions that have pointer
  arguments.  If it can prove, through the use of alias analysis, that an
  argument is *only* loaded, then it can pass the value into the function
  instead of the address of the value.  This can cause recursive simplification
  of code and lead to the elimination of allocas (especially in C++ template
  code like the STL).
  </p>
  
  <p>
  This pass also handles aggregate arguments that are passed into a function,
  scalarizing them if the elements of the aggregate are only loaded.  Note that
  it refuses to scalarize aggregates which would require passing in more than
  three operands to the function, because passing thousands of operands for a
  large array or structure is unprofitable!
  </p>
  
  <p>
  Note that this transformation could also be done for arguments that are only
  stored to (returning the value instead), but does not currently.  This case
  would be best handled when and if LLVM starts supporting multiple return
  values from functions.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="block-placement">Profile Guided Basic Block Placement</a>
</div>
<div class="doc_text">
  <p>This pass is a very simple profile guided basic block placement algorithm.
  The idea is to put frequently executed blocks together at the start of the
  function and hopefully increase the number of fall-through conditional
  branches.  If there is no profile information for a particular function, this
  pass basically orders blocks in depth-first order.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="break-crit-edges">Break critical edges in CFG</a>
</div>
<div class="doc_text">
  <p>
  Break all of the critical edges in the CFG by inserting a dummy basic block.
  It may be "required" by passes that cannot deal with critical edges. This
  transformation obviously invalidates the CFG, but can update forward dominator
  (set, immediate dominators, tree, and frontier) information.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="codegenprepare">Prepare a function for code generation</a>
</div>
<div class="doc_text">
  This pass munges the code in the input function to better prepare it for
  SelectionDAG-based code generation. This works around limitations in it's
  basic-block-at-a-time approach. It should eventually be removed.
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="condprop">Conditional Propagation</a>
</div>
<div class="doc_text">
  <p>This pass propagates information about conditional expressions through the
  program, allowing it to eliminate conditional branches in some cases.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="constmerge">Merge Duplicate Global Constants</a>
</div>
<div class="doc_text">
  <p>
  Merges duplicate global constants together into a single constant that is
  shared.  This is useful because some passes (ie TraceValues) insert a lot of
  string constants into the program, regardless of whether or not an existing
  string is available.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="constprop">Simple constant propagation</a>
</div>
<div class="doc_text">
  <p>This file implements constant propagation and merging. It looks for
  instructions involving only constant operands and replaces them with a
  constant value instead of an instruction. For example:</p>
  <blockquote><pre>add i32 1, 2</pre></blockquote>
  <p>becomes</p>
  <blockquote><pre>i32 3</pre></blockquote>
  <p>NOTE: this pass has a habit of making definitions be dead.  It is a good 
  idea to to run a <a href="#die">DIE</a> (Dead Instruction Elimination) pass 
  sometime after running this pass.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="dce">Dead Code Elimination</a>
</div>
<div class="doc_text">
  <p>
  Dead code elimination is similar to <a href="#die">dead instruction
  elimination</a>, but it rechecks instructions that were used by removed
  instructions to see if they are newly dead.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="deadargelim">Dead Argument Elimination</a>
</div>
<div class="doc_text">
  <p>
  This pass deletes dead arguments from internal functions.  Dead argument
  elimination removes arguments which are directly dead, as well as arguments
  only passed into function calls as dead arguments of other functions.  This
  pass also deletes dead arguments in a similar way.
  </p>
  
  <p>
  This pass is often useful as a cleanup pass to run after aggressive
  interprocedural passes, which add possibly-dead arguments.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="deadtypeelim">Dead Type Elimination</a>
</div>
<div class="doc_text">
  <p>
  This pass is used to cleanup the output of GCC.  It eliminate names for types
  that are unused in the entire translation unit, using the <a
  href="#findusedtypes">find used types</a> pass.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="die">Dead Instruction Elimination</a>
</div>
<div class="doc_text">
  <p>
  Dead instruction elimination performs a single pass over the function,
  removing instructions that are obviously dead.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="dse">Dead Store Elimination</a>
</div>
<div class="doc_text">
  <p>
  A trivial dead store elimination that only considers basic-block local
  redundant stores.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="gcse">Global Common Subexpression Elimination</a>
</div>
<div class="doc_text">
  <p>
  This pass is designed to be a very quick global transformation that
  eliminates global common subexpressions from a function.  It does this by
  using an existing value numbering analysis pass to identify the common
  subexpressions, eliminating them when possible.
  </p>
  <p>
  This pass is deprecated by the <a href="#gvn">Global Value Numbering pass</a>
  (which does a better job with its own value numbering).
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="globaldce">Dead Global Elimination</a>
</div>
<div class="doc_text">
  <p>
  This transform is designed to eliminate unreachable internal globals from the
  program.  It uses an aggressive algorithm, searching out globals that are
  known to be alive.  After it finds all of the globals which are needed, it
  deletes whatever is left over.  This allows it to delete recursive chunks of
  the program which are unreachable.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="globalopt">Global Variable Optimizer</a>
</div>
<div class="doc_text">
  <p>
  This pass transforms simple global variables that never have their address
  taken.  If obviously true, it marks read/write globals as constant, deletes
  variables only stored to, etc.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="gvn">Global Value Numbering</a>
</div>
<div class="doc_text">
  <p>
  This pass performs global value numbering to eliminate fully redundant
  instructions.  It also performs simple dead load elimination.
  </p>
  <p>
  Note that this pass does the value numbering itself, it does not use the
  ValueNumbering analysis passes.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="gvnpre">Global Value Numbering/Partial Redundancy Elimination</a>
</div>
<div class="doc_text">
  <p>
  This pass performs a hybrid of global value numbering and partial redundancy
  elimination, known as GVN-PRE.  It performs partial redundancy elimination on
  values, rather than lexical expressions, allowing a more comprehensive view 
  the optimization.  It replaces redundant values with uses of earlier 
  occurences of the same value.  While this is beneficial in that it eliminates
  unneeded computation, it also increases register pressure by creating large
  live ranges, and should be used with caution on platforms that are very 
  sensitive to register pressure.
  </p>
  <p>
  Note that this pass does the value numbering itself, it does not use the
  ValueNumbering analysis passes.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="indmemrem">Indirect Malloc and Free Removal</a>
</div>
<div class="doc_text">
  <p>
  This pass finds places where memory allocation functions may escape into
  indirect land.  Some transforms are much easier (aka possible) only if free 
  or malloc are not called indirectly.
  </p>
  
  <p>
  Thus find places where the address of memory functions are taken and construct
  bounce functions with direct calls of those functions.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="indvars">Canonicalize Induction Variables</a>
</div>
<div class="doc_text">
  <p>
  This transformation analyzes and transforms the induction variables (and
  computations derived from them) into simpler forms suitable for subsequent
  analysis and transformation.
  </p>
  
  <p>
  This transformation makes the following changes to each loop with an
  identifiable induction variable:
  </p>
  
  <ol>
    <li>All loops are transformed to have a <em>single</em> canonical
        induction variable which starts at zero and steps by one.</li>
    <li>The canonical induction variable is guaranteed to be the first PHI node
        in the loop header block.</li>
    <li>Any pointer arithmetic recurrences are raised to use array
        subscripts.</li>
  </ol>
  
  <p>
  If the trip count of a loop is computable, this pass also makes the following
  changes:
  </p>
  
  <ol>
    <li>The exit condition for the loop is canonicalized to compare the
        induction value against the exit value.  This turns loops like:
        <blockquote><pre>for (i = 7; i*i < 1000; ++i)</pre></blockquote>
        into
        <blockquote><pre>for (i = 0; i != 25; ++i)</pre></blockquote></li>
    <li>Any use outside of the loop of an expression derived from the indvar
        is changed to compute the derived value outside of the loop, eliminating
        the dependence on the exit value of the induction variable.  If the only
        purpose of the loop is to compute the exit value of some derived
        expression, this transformation will make the loop dead.</li>
  </ol>
  
  <p>
  This transformation should be followed by strength reduction after all of the
  desired loop transformations have been performed.  Additionally, on targets
  where it is profitable, the loop could be transformed to count down to zero
  (the "do loop" optimization).
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="inline">Function Integration/Inlining</a>
</div>
<div class="doc_text">
  <p>
  Bottom-up inlining of functions into callees.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="insert-block-profiling">Insert instrumentation for block profiling</a>
</div>
<div class="doc_text">
  <p>
  This pass instruments the specified program with counters for basic block
  profiling, which counts the number of times each basic block executes.  This
  is the most basic form of profiling, which can tell which blocks are hot, but
  cannot reliably detect hot paths through the CFG.
  </p>
  
  <p>
  Note that this implementation is very naïve.  Control equivalent regions of
  the CFG should not require duplicate counters, but it does put duplicate
  counters in.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="insert-edge-profiling">Insert instrumentation for edge profiling</a>
</div>
<div class="doc_text">
  <p>
  This pass instruments the specified program with counters for edge profiling.
  Edge profiling can give a reasonable approximation of the hot paths through a
  program, and is used for a wide variety of program transformations.
  </p>
  
  <p>
  Note that this implementation is very naïve.  It inserts a counter for
  <em>every</em> edge in the program, instead of using control flow information
  to prune the number of counters inserted.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="insert-function-profiling">Insert instrumentation for function profiling</a>
</div>
<div class="doc_text">
  <p>
  This pass instruments the specified program with counters for function
  profiling, which counts the number of times each function is called.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="insert-null-profiling-rs">Measure profiling framework overhead</a>
</div>
<div class="doc_text">
  <p>
  The basic profiler that does nothing.  It is the default profiler and thus
  terminates <code>RSProfiler</code> chains.  It is useful for  measuring
  framework overhead.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="insert-rs-profiling-framework">Insert random sampling instrumentation framework</a>
</div>
<div class="doc_text">
  <p>
  The second stage of the random-sampling instrumentation framework, duplicates
  all instructions in a function, ignoring the profiling code, then connects the
  two versions together at the entry and at backedges.  At each connection point
  a choice is made as to whether to jump to the profiled code (take a sample) or
  execute the unprofiled code.
  </p>
  
  <p>
  After this pass, it is highly recommended to run<a href="#mem2reg">mem2reg</a>
  and <a href="#adce">adce</a>. <a href="#instcombine">instcombine</a>,
  <a href="#load-vn">load-vn</a>, <a href="#gdce">gdce</a>, and
  <a href="#dse">dse</a> also are good to run afterwards.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="instcombine">Combine redundant instructions</a>
</div>
<div class="doc_text">
  <p>
  Combine instructions to form fewer, simple
  instructions.  This pass does not modify the CFG This pass is where algebraic
  simplification happens.
  </p>
  
  <p>
  This pass combines things like:
  </p>
  
<blockquote><pre
>%Y = add i32 %X, 1
%Z = add i32 %Y, 1</pre></blockquote>
  
  <p>
  into:
  </p>

<blockquote><pre
>%Z = add i32 %X, 2</pre></blockquote>
  
  <p>
  This is a simple worklist driven algorithm.
  </p>
  
  <p>
  This pass guarantees that the following canonicalizations are performed on
  the program:
  </p>

  <ul>
    <li>If a binary operator has a constant operand, it is moved to the right-
        hand side.</li>
    <li>Bitwise operators with constant operands are always grouped so that
        shifts are performed first, then <code>or</code>s, then
        <code>and</code>s, then <code>xor</code>s.</li>
    <li>Compare instructions are converted from <code>&lt;</code>,
        <code>&gt;</code>, <code>≤</code>, or <code>≥</code> to
        <code>=</code> or <code>≠</code> if possible.</li>
    <li>All <code>cmp</code> instructions on boolean values are replaced with
        logical operations.</li>
    <li><code>add <var>X</var>, <var>X</var></code> is represented as
        <code>mul <var>X</var>, 2</code> ⇒ <code>shl <var>X</var>, 1</code></li>
    <li>Multiplies with a constant power-of-two argument are transformed into
        shifts.</li>
    <li>… etc.</li>
  </ul>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="internalize">Internalize Global Symbols</a>
</div>
<div class="doc_text">
  <p>
  This pass loops over all of the functions in the input module, looking for a
  main function.  If a main function is found, all other functions and all
  global variables with initializers are marked as internal.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="ipconstprop">Interprocedural constant propagation</a>
</div>
<div class="doc_text">
  <p>
  This pass implements an <em>extremely</em> simple interprocedural constant
  propagation pass.  It could certainly be improved in many different ways,
  like using a worklist.  This pass makes arguments dead, but does not remove
  them.  The existing dead argument elimination pass should be run after this
  to clean up the mess.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="ipsccp">Interprocedural Sparse Conditional Constant Propagation</a>
</div>
<div class="doc_text">
  <p>
  An interprocedural variant of <a href="#sccp">Sparse Conditional Constant 
  Propagation</a>.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="jump-threading">Thread control through conditional blocks</a>
</div>
<div class="doc_text">
  <p>
  Jump threading tries to find distinct threads of control flow running through
  a basic block. This pass looks at blocks that have multiple predecessors and
  multiple successors.  If one or more of the predecessors of the block can be
  proven to always cause a jump to one of the successors, we forward the edge
  from the predecessor to the successor by duplicating the contents of this
  block.
  </p>
  <p>
  An example of when this can occur is code like this:
  </p>

  <pre
>if () { ...
  X = 4;
}
if (X &lt; 3) {</pre>

  <p>
  In this case, the unconditional branch at the end of the first if can be
  revectored to the false side of the second if.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="lcssa">Loop-Closed SSA Form Pass</a>
</div>
<div class="doc_text">
  <p>
  This pass transforms loops by placing phi nodes at the end of the loops for
  all values that are live across the loop boundary.  For example, it turns
  the left into the right code:
  </p>
  
  <pre
>for (...)                for (...)
  if (c)                   if (c)
    X1 = ...                 X1 = ...
  else                     else
    X2 = ...                 X2 = ...
  X3 = phi(X1, X2)         X3 = phi(X1, X2)
... = X3 + 4              X4 = phi(X3)
                          ... = X4 + 4</pre>
  
  <p>
  This is still valid LLVM; the extra phi nodes are purely redundant, and will
  be trivially eliminated by <code>InstCombine</code>.  The major benefit of
  this transformation is that it makes many other loop optimizations, such as 
  LoopUnswitching, simpler.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="licm">Loop Invariant Code Motion</a>
</div>
<div class="doc_text">
  <p>
  This pass performs loop invariant code motion, attempting to remove as much
  code from the body of a loop as possible.  It does this by either hoisting
  code into the preheader block, or by sinking code to the exit blocks if it is
  safe.  This pass also promotes must-aliased memory locations in the loop to
  live in registers, thus hoisting and sinking "invariant" loads and stores.
  </p>
  
  <p>
  This pass uses alias analysis for two purposes:
  </p>
  
  <ul>
    <li>Moving loop invariant loads and calls out of loops.  If we can determine
        that a load or call inside of a loop never aliases anything stored to,
        we can hoist it or sink it like any other instruction.</li>
    <li>Scalar Promotion of Memory - If there is a store instruction inside of
        the loop, we try to move the store to happen AFTER the loop instead of
        inside of the loop.  This can only happen if a few conditions are true:
        <ul>
          <li>The pointer stored through is loop invariant.</li>
          <li>There are no stores or loads in the loop which <em>may</em> alias
              the pointer.  There are no calls in the loop which mod/ref the
              pointer.</li>
        </ul>
        If these conditions are true, we can promote the loads and stores in the
        loop of the pointer to use a temporary alloca'd variable.  We then use
        the mem2reg functionality to construct the appropriate SSA form for the
        variable.</li>
  </ul>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-deletion">Dead Loop Deletion Pass</a>
</div>
<div class="doc_text">
  <p>
  This file implements the Dead Loop Deletion Pass.  This pass is responsible
  for eliminating loops with non-infinite computable trip counts that have no
  side effects or volatile instructions, and do not contribute to the
  computation of the function's return value.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-extract">Extract loops into new functions</a>
</div>
<div class="doc_text">
  <p>
  A pass wrapper around the <code>ExtractLoop()</code> scalar transformation to 
  extract each top-level loop into its own new function. If the loop is the
  <em>only</em> loop in a given function, it is not touched. This is a pass most
  useful for debugging via bugpoint.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-extract-single">Extract at most one loop into a new function</a>
</div>
<div class="doc_text">
  <p>
  Similar to <a href="#loop-extract">Extract loops into new functions</a>,
  this pass extracts one natural loop from the program into a function if it
  can. This is used by bugpoint.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-index-split">Index Split Loops</a>
</div>
<div class="doc_text">
  <p>
  This pass divides loop's iteration range by spliting loop such that each 
  individual loop is executed efficiently.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-reduce">Loop Strength Reduction</a>
</div>
<div class="doc_text">
  <p>
  This pass performs a strength reduction on array references inside loops that
  have as one or more of their components the loop induction variable.  This is
  accomplished by creating a new value to hold the initial value of the array
  access for the first iteration, and then creating a new GEP instruction in
  the loop to increment the value by the appropriate amount.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-rotate">Rotate Loops</a>
</div>
<div class="doc_text">
  <p>A simple loop rotation transformation.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-unroll">Unroll loops</a>
</div>
<div class="doc_text">
  <p>
  This pass implements a simple loop unroller.  It works best when loops have
  been canonicalized by the <a href="#indvars"><tt>-indvars</tt></a> pass,
  allowing it to determine the trip counts of loops easily.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loop-unswitch">Unswitch loops</a>
</div>
<div class="doc_text">
  <p>
  This pass transforms loops that contain branches on loop-invariant conditions
  to have multiple loops.  For example, it turns the left into the right code:
  </p>
  
  <pre
>for (...)                  if (lic)
  A                          for (...)
  if (lic)                     A; B; C
    B                      else
  C                          for (...)
                               A; C</pre>
  
  <p>
  This can increase the size of the code exponentially (doubling it every time
  a loop is unswitched) so we only unswitch if the resultant code will be
  smaller than a threshold.
  </p>
  
  <p>
  This pass expects LICM to be run before it to hoist invariant conditions out
  of the loop, to make the unswitching opportunity obvious.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="loopsimplify">Canonicalize natural loops</a>
</div>
<div class="doc_text">
  <p>
  This pass performs several transformations to transform natural loops into a
  simpler form, which makes subsequent analyses and transformations simpler and
  more effective.
  </p>
  
  <p>
  Loop pre-header insertion guarantees that there is a single, non-critical
  entry edge from outside of the loop to the loop header.  This simplifies a
  number of analyses and transformations, such as LICM.
  </p>
  
  <p>
  Loop exit-block insertion guarantees that all exit blocks from the loop
  (blocks which are outside of the loop that have predecessors inside of the
  loop) only have predecessors from inside of the loop (and are thus dominated
  by the loop header).  This simplifies transformations such as store-sinking
  that are built into LICM.
  </p>
  
  <p>
  This pass also guarantees that loops will have exactly one backedge.
  </p>
  
  <p>
  Note that the simplifycfg pass will clean up blocks which are split out but
  end up being unnecessary, so usage of this pass should not pessimize
  generated code.
  </p>
  
  <p>
  This pass obviously modifies the CFG, but updates loop information and
  dominator information.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="lowerallocs">Lower allocations from instructions to calls</a>
</div>
<div class="doc_text">
  <p>
  Turn <tt>malloc</tt> and <tt>free</tt> instructions into <tt>@malloc</tt> and
  <tt>@free</tt> calls.
  </p>

  <p>
  This is a target-dependent tranformation because it depends on the size of
  data types and alignment constraints.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="lowerinvoke">Lower invoke and unwind, for unwindless code generators</a>
</div>
<div class="doc_text">
  <p>
  This transformation is designed for use by code generators which do not yet
  support stack unwinding.  This pass supports two models of exception handling
  lowering, the 'cheap' support and the 'expensive' support.
  </p>
  
  <p>
  'Cheap' exception handling support gives the program the ability to execute
  any program which does not "throw an exception", by turning 'invoke'
  instructions into calls and by turning 'unwind' instructions into calls to
  abort().  If the program does dynamically use the unwind instruction, the
  program will print a message then abort.
  </p>
  
  <p>
  'Expensive' exception handling support gives the full exception handling
  support to the program at the cost of making the 'invoke' instruction
  really expensive.  It basically inserts setjmp/longjmp calls to emulate the
  exception handling as necessary.
  </p>
  
  <p>
  Because the 'expensive' support slows down programs a lot, and EH is only
  used for a subset of the programs, it must be specifically enabled by the
  <tt>-enable-correct-eh-support</tt> option.
  </p>
  
  <p>
  Note that after this pass runs the CFG is not entirely accurate (exceptional
  control flow edges are not correct anymore) so only very simple things should
  be done after the lowerinvoke pass has run (like generation of native code).
  This should not be used as a general purpose "my LLVM-to-LLVM pass doesn't
  support the invoke instruction yet" lowering pass.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="lowersetjmp">Lower Set Jump</a>
</div>
<div class="doc_text">
  <p>
   Lowers <tt>setjmp</tt> and <tt>longjmp</tt> to use the LLVM invoke and unwind
   instructions as necessary.
  </p>
  
  <p>
   Lowering of <tt>longjmp</tt> is fairly trivial. We replace the call with a
   call to the LLVM library function <tt>__llvm_sjljeh_throw_longjmp()</tt>.
   This unwinds the stack for us calling all of the destructors for
   objects allocated on the stack.
  </p>
  
  <p>
   At a <tt>setjmp</tt> call, the basic block is split and the <tt>setjmp</tt>
   removed. The calls in a function that have a <tt>setjmp</tt> are converted to
   invoke where the except part checks to see if it's a <tt>longjmp</tt>
   exception and, if so, if it's handled in the function. If it is, then it gets
   the value returned by the <tt>longjmp</tt> and goes to where the basic block
   was split. <tt>invoke</tt> instructions are handled in a similar fashion with
   the original except block being executed if it isn't a <tt>longjmp</tt>
   except that is handled by that function.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="lowerswitch">Lower SwitchInst's to branches</a>
</div>
<div class="doc_text">
  <p>
  Rewrites <tt>switch</tt> instructions with a sequence of branches, which
  allows targets to get away with not implementing the switch instruction until
  it is convenient.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="mem2reg">Promote Memory to Register</a>
</div>
<div class="doc_text">
  <p>
  This file promotes memory references to be register references.  It promotes
  <tt>alloca</tt> instructions which only have <tt>load</tt>s and
  <tt>store</tt>s as uses.  An <tt>alloca</tt> is transformed by using dominator
  frontiers to place <tt>phi</tt> nodes, then traversing the function in
  depth-first order to rewrite <tt>load</tt>s and <tt>store</tt>s as
  appropriate. This is just the standard SSA construction algorithm to construct
  "pruned" SSA form.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="memcpyopt">Optimize use of memcpy and friend</a>
</div>
<div class="doc_text">
  <p>
  This pass performs various transformations related to eliminating memcpy
  calls, or transforming sets of stores into memset's.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="mergereturn">Unify function exit nodes</a>
</div>
<div class="doc_text">
  <p>
  Ensure that functions have at most one <tt>ret</tt> instruction in them.
  Additionally, it keeps track of which node is the new exit node of the CFG.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="predsimplify">Predicate Simplifier</a>
</div>
<div class="doc_text">
  <p>
  Path-sensitive optimizer. In a branch where <tt>x == y</tt>, replace uses of
  <tt>x</tt> with <tt>y</tt>. Permits further optimization, such as the 
  elimination of the unreachable call:
  </p>
  
<blockquote><pre
>void test(int *p, int *q)
{
  if (p != q)
    return;

  if (*p != *q)
    foo(); // unreachable
}</pre></blockquote>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="prune-eh">Remove unused exception handling info</a>
</div>
<div class="doc_text">
  <p>
  This file implements a simple interprocedural pass which walks the call-graph,
  turning <tt>invoke</tt> instructions into <tt>call</tt> instructions if and
  only if the callee cannot throw an exception. It implements this as a
  bottom-up traversal of the call-graph.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="raiseallocs">Raise allocations from calls to instructions</a>
</div>
<div class="doc_text">
  <p>
  Converts <tt>@malloc</tt> and <tt>@free</tt> calls to <tt>malloc</tt> and
  <tt>free</tt> instructions.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="reassociate">Reassociate expressions</a>
</div>
<div class="doc_text">
  <p>
  This pass reassociates commutative expressions in an order that is designed
  to promote better constant propagation, GCSE, LICM, PRE, etc.
  </p>
  
  <p>
  For example: 4 + (<var>x</var> + 5) ⇒ <var>x</var> + (4 + 5)
  </p>
  
  <p>
  In the implementation of this algorithm, constants are assigned rank = 0,
  function arguments are rank = 1, and other values are assigned ranks
  corresponding to the reverse post order traversal of current function
  (starting at 2), which effectively gives values in deep loops higher rank
  than values not in loops.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="reg2mem">Demote all values to stack slots</a>
</div>
<div class="doc_text">
  <p>
  This file demotes all registers to memory references.  It is intented to be
  the inverse of <a href="#mem2reg"><tt>-mem2reg</tt></a>.  By converting to
  <tt>load</tt> instructions, the only values live accross basic blocks are
  <tt>alloca</tt> instructions and <tt>load</tt> instructions before
  <tt>phi</tt> nodes. It is intended that this should make CFG hacking much 
  easier. To make later hacking easier, the entry block is split into two, such
  that all introduced <tt>alloca</tt> instructions (and nothing else) are in the
  entry block.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="scalarrepl">Scalar Replacement of Aggregates</a>
</div>
<div class="doc_text">
  <p>
  The well-known scalar replacement of aggregates transformation.  This
  transform breaks up <tt>alloca</tt> instructions of aggregate type (structure
  or array) into individual <tt>alloca</tt> instructions for each member if
  possible.  Then, if possible, it transforms the individual <tt>alloca</tt>
  instructions into nice clean scalar SSA form.
  </p>
  
  <p>
  This combines a simple scalar replacement of aggregates algorithm with the <a
  href="#mem2reg"><tt>mem2reg</tt></a> algorithm because often interact, 
  especially for C++ programs.  As such, iterating between <tt>scalarrepl</tt>, 
  then <a href="#mem2reg"><tt>mem2reg</tt></a> until we run out of things to 
  promote works well.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="sccp">Sparse Conditional Constant Propagation</a>
</div>
<div class="doc_text">
  <p>
  Sparse conditional constant propagation and merging, which can be summarized
  as:
  </p>
  
  <ol>
    <li>Assumes values are constant unless proven otherwise</li>
    <li>Assumes BasicBlocks are dead unless proven otherwise</li>
    <li>Proves values to be constant, and replaces them with constants</li>
    <li>Proves conditional branches to be unconditional</li>
  </ol>
  
  <p>
  Note that this pass has a habit of making definitions be dead.  It is a good
  idea to to run a DCE pass sometime after running this pass.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="simplify-libcalls">Simplify well-known library calls</a>
</div>
<div class="doc_text">
  <p>
  Applies a variety of small optimizations for calls to specific well-known 
  function calls (e.g. runtime library functions). For example, a call
   <tt>exit(3)</tt> that occurs within the <tt>main()</tt> function can be 
   transformed into simply <tt>return 3</tt>.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="simplifycfg">Simplify the CFG</a>
</div>
<div class="doc_text">
  <p>
  Performs dead code elimination and basic block merging. Specifically:
  </p>
  
  <ol>
    <li>Removes basic blocks with no predecessors.</li>
    <li>Merges a basic block into its predecessor if there is only one and the
        predecessor only has one successor.</li>
    <li>Eliminates PHI nodes for basic blocks with a single predecessor.</li>
    <li>Eliminates a basic block that only contains an unconditional
        branch.</li>
  </ol>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="strip">Strip all symbols from a module</a>
</div>
<div class="doc_text">
  <p>
  Performs code stripping. This transformation can delete:
  </p>
  
  <ol>
    <li>names for virtual registers</li>
    <li>symbols for internal globals and functions</li>
    <li>debug information</li>
  </ol>
  
  <p>
  Note that this transformation makes code much less readable, so it should
  only be used in situations where the <tt>strip</tt> utility would be used,
  such as reducing code size or making it harder to reverse engineer code.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="strip-dead-prototypes">Remove unused function declarations</a>
</div>
<div class="doc_text">
  <p>
  This pass loops over all of the functions in the input module, looking for
  dead declarations and removes them. Dead declarations are declarations of
  functions for which no implementation is available (i.e., declarations for
  unused library functions).
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="sretpromotion">Promote sret arguments</a>
</div>
<div class="doc_text">
  <p>
  This pass finds functions that return a struct (using a pointer to the struct
  as the first argument of the function, marked with the '<tt>sret</tt>' attribute) and
  replaces them with a new function that simply returns each of the elements of
  that struct (using multiple return values).
  </p>

  <p>
  This pass works under a number of conditions:
  </p>

  <ul>
  <li>The returned struct must not contain other structs</li>
  <li>The returned struct must only be used to load values from</li>
  <li>The placeholder struct passed in is the result of an <tt>alloca</tt></li>
  </ul>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="tailcallelim">Tail Call Elimination</a>
</div>
<div class="doc_text">
  <p>
  This file transforms calls of the current function (self recursion) followed
  by a return instruction with a branch to the entry of the function, creating
  a loop.  This pass also implements the following extensions to the basic
  algorithm:
  </p>
  
  <ul>
  <li>Trivial instructions between the call and return do not prevent the
      transformation from taking place, though currently the analysis cannot
      support moving any really useful instructions (only dead ones).
  <li>This pass transforms functions that are prevented from being tail
      recursive by an associative expression to use an accumulator variable,
      thus compiling the typical naive factorial or <tt>fib</tt> implementation
      into efficient code.
  <li>TRE is performed if the function returns void, if the return
      returns the result returned by the call, or if the function returns a
      run-time constant on all exits from the function.  It is possible, though
      unlikely, that the return returns something else (like constant 0), and
      can still be TRE'd.  It can be TRE'd if <em>all other</em> return 
      instructions in the function return the exact same value.
  <li>If it can prove that callees do not access theier caller stack frame,
      they are marked as eligible for tail call elimination (by the code
      generator).
  </ul>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="tailduplicate">Tail Duplication</a>
</div>
<div class="doc_text">
  <p>
  This pass performs a limited form of tail duplication, intended to simplify
  CFGs by removing some unconditional branches.  This pass is necessary to
  straighten out loops created by the C front-end, but also is capable of
  making other code nicer.  After this pass is run, the CFG simplify pass
  should be run to clean up the mess.
  </p>
</div>

<!-- ======================================================================= -->
<div class="doc_section"> <a name="transform">Utility Passes</a></div>
<div class="doc_text">
  <p>This section describes the LLVM Utility Passes.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="deadarghaX0r">Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)</a>
</div>
<div class="doc_text">
  <p>
  Same as dead argument elimination, but deletes arguments to functions which
  are external.  This is only for use by <a
  href="Bugpoint.html">bugpoint</a>.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="extract-blocks">Extract Basic Blocks From Module (for bugpoint use)</a>
</div>
<div class="doc_text">
  <p>
  This pass is used by bugpoint to extract all blocks from the module into their
  own functions.</p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="preverify">Preliminary module verification</a>
</div>
<div class="doc_text">
  <p>
  Ensures that the module is in the form required by the <a
  href="#verifier">Module Verifier</a> pass.
  </p>
  
  <p>
  Running the verifier runs this pass automatically, so there should be no need
  to use it directly.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="verify">Module Verifier</a>
</div>
<div class="doc_text">
  <p>
  Verifies an LLVM IR code. This is useful to run after an optimization which is
  undergoing testing. Note that <tt>llvm-as</tt> verifies its input before
  emitting bitcode, and also that malformed bitcode is likely to make LLVM
  crash. All language front-ends are therefore encouraged to verify their output
  before performing optimizing transformations.
  </p>

  <ul>
    <li>Both of a binary operator's parameters are of the same type.</li>
    <li>Verify that the indices of mem access instructions match other
        operands.</li>
    <li>Verify that arithmetic and other things are only performed on
        first-class types.  Verify that shifts and logicals only happen on
        integrals f.e.</li>
    <li>All of the constants in a switch statement are of the correct type.</li>
    <li>The code is in valid SSA form.</li>
    <li>It should be illegal to put a label into any other type (like a
        structure) or to return one. [except constant arrays!]</li>
    <li>Only phi nodes can be self referential: <tt>%x = add i32 %x, %x</tt> is
        invalid.</li>
    <li>PHI nodes must have an entry for each predecessor, with no extras.</li>
    <li>PHI nodes must be the first thing in a basic block, all grouped
        together.</li>
    <li>PHI nodes must have at least one entry.</li>
    <li>All basic blocks should only end with terminator insts, not contain
        them.</li>
    <li>The entry node to a function must not have predecessors.</li>
    <li>All Instructions must be embedded into a basic block.</li>
    <li>Functions cannot take a void-typed parameter.</li>
    <li>Verify that a function's argument list agrees with its declared
        type.</li>
    <li>It is illegal to specify a name for a void value.</li>
    <li>It is illegal to have a internal global value with no initializer.</li>
    <li>It is illegal to have a ret instruction that returns a value that does
        not agree with the function return value type.</li>
    <li>Function call argument types match the function prototype.</li>
    <li>All other things that are tested by asserts spread about the code.</li>
  </ul>
  
  <p>
  Note that this does not provide full security verification (like Java), but
  instead just tries to ensure that code is well-formed.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="view-cfg">View CFG of function</a>
</div>
<div class="doc_text">
  <p>
  Displays the control flow graph using the GraphViz tool.
  </p>
</div>

<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
  <a name="view-cfg-only">View CFG of function (with no function bodies)</a>
</div>
<div class="doc_text">
  <p>
  Displays the control flow graph using the GraphViz tool, but omitting function
  bodies.
  </p>
</div>

<!-- *********************************************************************** -->

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

  <a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
