<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>The LLVM Alias Analysis Infrastructure</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">
  The LLVM Alias Analysis Infrastructure
</div>

<ol>
  <li><a href="#introduction">Introduction</a></li>

  <li><a href="#overview"><tt>AliasAnalysis</tt> Class Overview</a>
    <ul>
    <li><a href="#pointers">Representation of Pointers</a></li>
    <li><a href="#alias">The <tt>alias</tt> method</a></li>
    <li><a href="#ModRefInfo">The <tt>getModRefInfo</tt> methods</a></li>
    <li><a href="#OtherItfs">Other useful <tt>AliasAnalysis</tt> methods</a></li>
    </ul>
  </li>

  <li><a href="#writingnew">Writing a new <tt>AliasAnalysis</tt> Implementation</a>
    <ul>
    <li><a href="#passsubclasses">Different Pass styles</a></li>
    <li><a href="#requiredcalls">Required initialization calls</a></li>
    <li><a href="#interfaces">Interfaces which may be specified</a></li>
    <li><a href="#chaining"><tt>AliasAnalysis</tt> chaining behavior</a></li>
    <li><a href="#updating">Updating analysis results for transformations</a></li>
    <li><a href="#implefficiency">Efficiency Issues</a></li>
    </ul>
  </li>

  <li><a href="#using">Using alias analysis results</a>
    <ul>
    <li><a href="#loadvn">Using the <tt>-load-vn</tt> Pass</a></li>
    <li><a href="#ast">Using the <tt>AliasSetTracker</tt> class</a></li>
    <li><a href="#direct">Using the <tt>AliasAnalysis</tt> interface directly</a></li>
    </ul>
  </li>

  <li><a href="#exist">Existing alias analysis implementations and clients</a>
    <ul>
    <li><a href="#impls">Available <tt>AliasAnalysis</tt> implementations</a></li>
    <li><a href="#aliasanalysis-xforms">Alias analysis driven transformations</a></li>
    <li><a href="#aliasanalysis-debug">Clients for debugging and evaluation of implementations</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</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Alias Analysis (aka Pointer Analysis) is a class of techniques which attempt
to determine whether or not two pointers ever can point to the same object in
memory.  There are many different algorithms for alias analysis and many
different ways of classifying them: flow-sensitive vs flow-insensitive,
context-sensitive vs context-insensitive, field-sensitive vs field-insensitive,
unification-based vs subset-based, etc.  Traditionally, alias analyses respond
to a query with a <a href="#MustNoMay">Must, May, or No</a> alias response,
indicating that two pointers always point to the same object, might point to the
same object, or are known to never point to the same object.</p>

<p>The LLVM <a
href="http://llvm.cs.uiuc.edu/doxygen/classllvm_1_1AliasAnalysis.html"><tt>AliasAnalysis</tt></a>
class is the primary interface used by clients and implementations of alias
analyses in the LLVM system.  This class is the common interface between clients
of alias analysis information and the implementations providing it, and is
designed to support a wide range of implementations and clients (but currently
all clients are assumed to be flow-insensitive).  In addition to simple alias
analysis information, this class exposes Mod/Ref information from those
implementations which can provide it, allowing for powerful analyses and
transformations to work well together.</p>

<p>This document contains information necessary to successfully implement this
interface, use it, and to test both sides.  It also explains some of the finer
points about what exactly results mean.  If you feel that something is unclear
or should be added, please <a href="mailto:sabre@nondot.org">let me
know</a>.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="overview"><tt>AliasAnalysis</tt> Class Overview</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The <a
href="http://llvm.cs.uiuc.edu/doxygen/classllvm_1_1AliasAnalysis.html"><tt>AliasAnalysis</tt></a>
class defines the interface that the various alias analysis implementations
should support.  This class exports two important enums: <tt>AliasResult</tt>
and <tt>ModRefResult</tt> which represent the result of an alias query or a
mod/ref query, respectively.</p>

<p>The <tt>AliasAnalysis</tt> interface exposes information about memory,
represented in several different ways.  In particular, memory objects are
represented as a starting address and size, and function calls are represented
as the actual <tt>call</tt> or <tt>invoke</tt> instructions that performs the
call.  The <tt>AliasAnalysis</tt> interface also exposes some helper methods
which allow you to get mod/ref information for arbitrary instructions.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="pointers">Representation of Pointers</a>
</div>

<div class="doc_text">

<p>Most importantly, the <tt>AliasAnalysis</tt> class provides several methods
which are used to query whether or not two memory objects alias, whether
function calls can modify or read a memory object, etc.  For all of these
queries, memory objects are represented as a pair of their starting address (a
symbolic LLVM <tt>Value*</tt>) and a static size.</p>

<p>Representing memory objects as a starting address and a size is critically
important for correct Alias Analyses.  For example, consider this (silly, but
possible) C code:</p>

<pre>
  int i;
  char C[2];
  char A[10]; 
  /* ... */
  for (i = 0; i != 10; ++i) {
    C[0] = A[i];          /* One byte store */
    C[1] = A[9-i];        /* One byte store */
  }
</pre>

<p>In this case, the <tt>basicaa</tt> pass will disambiguate the stores to
<tt>C[0]</tt> and <tt>C[1]</tt> because they are accesses to two distinct
locations one byte apart, and the accesses are each one byte.  In this case, the
LICM pass can use store motion to remove the stores from the loop.  In
constrast, the following code:</p>

<pre>
  int i;
  char C[2];
  char A[10]; 
  /* ... */
  for (i = 0; i != 10; ++i) {
    ((short*)C)[0] = A[i];  /* Two byte store! */
    C[1] = A[9-i];          /* One byte store */
  }
</pre>

<p>In this case, the two stores to C do alias each other, because the access to
the <tt>&amp;C[0]</tt> element is a two byte access.  If size information wasn't
available in the query, even the first case would have to conservatively assume
that the accesses alias.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="alias">The <tt>alias</tt> method</a>
</div>
  
<div class="doc_text">
The <tt>alias</tt> method is the primary interface used to determine whether or
not two memory objects alias each other.  It takes two memory objects as input
and returns MustAlias, MayAlias, or NoAlias as appropriate.
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="MustMayNo">Must, May, and No Alias Responses</a>
</div>

<div class="doc_text">

<p>An Alias Analysis implementation can return one of three responses:
MustAlias, MayAlias, and NoAlias.  The No and May alias results are obvious: if
the two pointers can never equal each other, return NoAlias, if they might,
return MayAlias.</p>

<p>The MustAlias response is trickier though.  In LLVM, the Must Alias response
may only be returned if the two memory objects are guaranteed to always start at
exactly the same location.  If two memory objects overlap, but do not start at
the same location, return MayAlias.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ModRefInfo">The <tt>getModRefInfo</tt> methods</a>
</div>

<div class="doc_text">

<p>The <tt>getModRefInfo</tt> methods return information about whether the
execution of an instruction can read or modify a memory location.  Mod/Ref
information is always conservative: if an instruction <b>might</b> read or write
a location, ModRef is returned.</p>

<p>The <tt>AliasAnalysis</tt> class also provides a <tt>getModRefInfo</tt>
method for testing dependencies between function calls.  This method takes two
call sites (CS1 &amp; CS2), returns NoModRef if the two calls refer to disjoint
memory locations, Ref if CS1 reads memory written by CS2, Mod if CS1 writes to
memory read or written by CS2, or ModRef if CS1 might read or write memory
accessed by CS2.  Note that this relation is not commutative.  Clients that use
this method should be predicated on the <tt>hasNoModRefInfoForCalls()</tt>
method, which indicates whether or not an analysis can provide mod/ref
information for function call pairs (most can not).  If this predicate is false,
the client shouldn't waste analysis time querying the <tt>getModRefInfo</tt>
method many times.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="OtherItfs">Other useful <tt>AliasAnalysis</tt> methods</a>
</div>

<div class="doc_text">

<p>
Several other tidbits of information are often collected by various alias
analysis implementations and can be put to good use by various clients.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  The <tt>getMustAliases</tt> method
</div>

<div class="doc_text">

<p>The <tt>getMustAliases</tt> method returns all values that are known to
always must alias a pointer.  This information can be provided in some cases for
important objects like the null pointer and global values.  Knowing that a
pointer always points to a particular function allows indirect calls to be
turned into direct calls, for example.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  The <tt>pointsToConstantMemory</tt> method
</div>

<div class="doc_text">

<p>The <tt>pointsToConstantMemory</tt> method returns true if and only if the
analysis can prove that the pointer only points to unchanging memory locations
(functions, constant global variables, and the null pointer).  This information
can be used to refine mod/ref information: it is impossible for an unchanging
memory location to be modified.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="simplemodref">The <tt>doesNotAccessMemory</tt> and
  <tt>onlyReadsMemory</tt> methods</a>
</div>

<div class="doc_text">

<p>These methods are used to provide very simple mod/ref information for
function calls.  The <tt>doesNotAccessMemory</tt> method returns true for a
function if the analysis can prove that the function never reads or writes to
memory, or if the function only reads from constant memory.  Functions with this
property are side-effect free and only depend on their input arguments, allowing
them to be eliminated if they form common subexpressions or be hoisted out of
loops.  Many common functions behave this way (e.g., <tt>sin</tt> and
<tt>cos</tt>) but many others do not (e.g., <tt>acos</tt>, which modifies the
<tt>errno</tt> variable).</p>

<p>The <tt>onlyReadsMemory</tt> method returns true for a function if analysis
can prove that (at most) the function only reads from non-volatile memory.
Functions with this property are side-effect free, only depending on their input
arguments and the state of memory when they are called.  This property allows
calls to these functions to be eliminated and moved around, as long as there is
no store instruction that changes the contents of memory.  Note that all
functions that satisfy the <tt>doesNotAccessMemory</tt> method also satisfies
<tt>onlyReadsMemory</tt>.</p>

</div>



<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="writingnew">Writing a new <tt>AliasAnalysis</tt> Implementation</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Writing a new alias analysis implementation for LLVM is quite
straight-forward.  There are already several implementations that you can use
for examples, and the following information should help fill in any details.
For a examples, take a look at the <a href="#impls">various alias analysis
implementations</a> included with LLVM.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="passsubclasses">Different Pass styles</a>
</div>

<div class="doc_text">

<p>The first step to determining what type of <a
href="WritingAnLLVMPass.html">LLVM pass</a> you need to use for your Alias
Analysis.  As is the case with most other analyses and transformations, the
answer should be fairly obvious from what type of problem you are trying to
solve:</p>

<ol>
  <li>If you require interprocedural analysis, it should be a
      <tt>Pass</tt>.</li>
  <li>If you are a function-local analysis, subclass <tt>FunctionPass</tt>.</li>
  <li>If you don't need to look at the program at all, subclass 
      <tt>ImmutablePass</tt>.</li>
</ol>

<p>In addition to the pass that you subclass, you should also inherit from the
<tt>AliasAnalysis</tt> interface, of course, and use the
<tt>RegisterAnalysisGroup</tt> template to register as an implementation of
<tt>AliasAnalysis</tt>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="requiredcalls">Required initialization calls</a>
</div>

<div class="doc_text">

<p>Your subclass of <tt>AliasAnalysis</tt> is required to invoke two methods on
the <tt>AliasAnalysis</tt> base class: <tt>getAnalysisUsage</tt> and
<tt>InitializeAliasAnalysis</tt>.  In particular, your implementation of
<tt>getAnalysisUsage</tt> should explicitly call into the
<tt>AliasAnalysis::getAnalysisUsage</tt> method in addition to doing any
declaring any pass dependencies your pass has.  Thus you should have something
like this:</p>

<pre>
    void getAnalysisUsage(AnalysisUsage &amp;AU) const {
      AliasAnalysis::getAnalysisUsage(AU);
      <i>// declare your dependencies here.</i>
    }
</pre>

<p>Additionally, your must invoke the <tt>InitializeAliasAnalysis</tt> method
from your analysis run method (<tt>run</tt> for a <tt>Pass</tt>,
<tt>runOnFunction</tt> for a <tt>FunctionPass</tt>, or <tt>InitializePass</tt>
for an <tt>ImmutablePass</tt>).  For example (as part of a <tt>Pass</tt>):</p>

<pre>
    bool run(Module &amp;M) {
      InitializeAliasAnalysis(this);
      <i>// Perform analysis here...</i>
      return false;
    }
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="interfaces">Interfaces which may be specified</a>
</div>

<div class="doc_text">

<p>All of the <a
href="/doxygen/classllvm_1_1AliasAnalysis.html"><tt>AliasAnalysis</tt></a>
virtual methods default to providing <a href="#chaining">chaining</a> to another
alias analysis implementation, which ends up returning conservatively correct
information (returning "May" Alias and "Mod/Ref" for alias and mod/ref queries
respectively).  Depending on the capabilities of the analysis you are
implementing, you just override the interfaces you can improve.</p>

</div>



<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="chaining"><tt>AliasAnalysis</tt> chaining behavior</a>
</div>

<div class="doc_text">

<p>With only two special exceptions (the <tt><a
href="#basic-aa">basicaa</a></tt> and <a href="#no-aa"><tt>no-aa</tt></a>
passes) every alias analysis pass chains to another alias analysis
implementation (for example, the user can specify "<tt>-basicaa -ds-aa
-anders-aa -licm</tt>" to get the maximum benefit from the three alias
analyses).  The alias analysis class automatically takes care of most of this
for methods that you don't override.  For methods that you do override, in code
paths that return a conservative MayAlias or Mod/Ref result, simply return
whatever the superclass computes.  For example:</p>

<pre>
  AliasAnalysis::AliasResult alias(const Value *V1, unsigned V1Size,
                                   const Value *V2, unsigned V2Size) {
    if (...)
      return NoAlias;
    ...

    <i>// Couldn't determine a must or no-alias result.</i>
    return AliasAnalysis::alias(V1, V1Size, V2, V2Size);
  }
</pre>

<p>In addition to analysis queries, you must make sure to unconditionally pass
LLVM <a href="#updating">update notification</a> methods to the superclass as
well if you override them, which allows all alias analyses in a change to be
updated.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="updating">Updating analysis results for transformations</a>
</div>

<div class="doc_text">
<p>
Alias analysis information is initially computed for a static snapshot of the
program, but clients will use this information to make transformations to the
code.  All but the most trivial forms of alias analysis will need to have their
analysis results updated to reflect the changes made by these transformations.
</p>

<p>
The <tt>AliasAnalysis</tt> interface exposes two methods which are used to
communicate program changes from the clients to the analysis implementations.
Various alias analysis implementations should use these methods to ensure that
their internal data structures are kept up-to-date as the program changes (for
example, when an instruction is deleted), and clients of alias analysis must be
sure to call these interfaces appropriately.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">The <tt>deleteValue</tt> method</div>

<div class="doc_text">
The <tt>deleteValue</tt> method is called by transformations when they remove an
instruction or any other value from the program (including values that do not
use pointers).  Typically alias analyses keep data structures that have entries
for each value in the program.  When this method is called, they should remove
any entries for the specified value, if they exist.
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">The <tt>copyValue</tt> method</div>

<div class="doc_text">
The <tt>copyValue</tt> method is used when a new value is introduced into the
program.  There is no way to introduce a value into the program that did not
exist before (this doesn't make sense for a safe compiler transformation), so
this is the only way to introduce a new value.  This method indicates that the
new value has exactly the same properties as the value being copied.
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">The <tt>replaceWithNewValue</tt> method</div>

<div class="doc_text">
This method is a simple helper method that is provided to make clients easier to
use.  It is implemented by copying the old analysis information to the new
value, then deleting the old value.  This method cannot be overridden by alias
analysis implementations.
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="implefficiency">Efficiency Issues</a>
</div>

<div class="doc_text">

<p>From the LLVM perspective, the only thing you need to do to provide an
efficient alias analysis is to make sure that alias analysis <b>queries</b> are
serviced quickly.  The actual calculation of the alias analysis results (the
"run" method) is only performed once, but many (perhaps duplicate) queries may
be performed.  Because of this, try to move as much computation to the run
method as possible (within reason).</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="using">Using alias analysis results</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>There are several different ways to use alias analysis results.  In order of
preference, these are...</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="loadvn">Using the <tt>-load-vn</tt> Pass</a>
</div>

<div class="doc_text">

<p>The <tt>load-vn</tt> pass uses alias analysis to provide value numbering
information for <tt>load</tt> instructions and pointer values.  If your analysis
or transformation can be modeled in a form that uses value numbering
information, you don't have to do anything special to handle load instructions:
just use the <tt>load-vn</tt> pass, which uses alias analysis.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ast">Using the <tt>AliasSetTracker</tt> class</a>
</div>

<div class="doc_text">

<p>Many transformations need information about alias <b>sets</b> that are active
in some scope, rather than information about pairwise aliasing.  The <tt><a
href="/doxygen/classllvm_1_1AliasSetTracker.html">AliasSetTracker</a></tt> class is used
to efficiently build these Alias Sets from the pairwise alias analysis
information provided by the <tt>AliasAnalysis</tt> interface.</p>

<p>First you initialize the AliasSetTracker by using the "<tt>add</tt>" methods
to add information about various potentially aliasing instructions in the scope
you are interested in.  Once all of the alias sets are completed, your pass
should simply iterate through the constructed alias sets, using the
<tt>AliasSetTracker</tt> <tt>begin()</tt>/<tt>end()</tt> methods.</p>

<p>The <tt>AliasSet</tt>s formed by the <tt>AliasSetTracker</tt> are guaranteed
to be disjoint, calculate mod/ref information and volatility for the set, and
keep track of whether or not all of the pointers in the set are Must aliases.
The AliasSetTracker also makes sure that sets are properly folded due to call
instructions, and can provide a list of pointers in each set.</p>

<p>As an example user of this, the <a href="/doxygen/structLICM.html">Loop
Invariant Code Motion</a> pass uses <tt>AliasSetTracker</tt>s to calculate alias
sets for each loop nest.  If an <tt>AliasSet</tt> in a loop is not modified,
then all load instructions from that set may be hoisted out of the loop.  If any
alias sets are stored to <b>and</b> are must alias sets, then the stores may be
sunk to outside of the loop, promoting the memory location to a register for the
duration of the loop nest.  Both of these transformations only apply if the
pointer argument is loop-invariant.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  The AliasSetTracker implementation
</div>

<div class="doc_text">

<p>The AliasSetTracker class is implemented to be as efficient as possible.  It
uses the union-find algorithm to efficiently merge AliasSets when a pointer is
inserted into the AliasSetTracker that aliases multiple sets.  The primary data
structure is a hash table mapping pointers to the AliasSet they are in.</p>

<p>The AliasSetTracker class must maintain a list of all of the LLVM Value*'s
that are in each AliasSet.  Since the hash table already has entries for each
LLVM Value* of interest, the AliasesSets thread the linked list through these
hash-table nodes to avoid having to allocate memory unnecessarily, and to make
merging alias sets extremely efficient (the linked list merge is constant time).
</p>

<p>You shouldn't need to understand these details if you are just a client of
the AliasSetTracker, but if you look at the code, hopefully this brief
description will help make sense of why things are designed the way they
are.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="direct">Using the <tt>AliasAnalysis</tt> interface directly</a>
</div>

<div class="doc_text">

<p>If neither of these utility class are what your pass needs, you should use
the interfaces exposed by the <tt>AliasAnalysis</tt> class directly.  Try to use
the higher-level methods when possible (e.g., use mod/ref information instead of
the <a href="#alias"><tt>alias</tt></a> method directly if possible) to get the
best precision and efficiency.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="exist">Existing alias analysis implementations and clients</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>If you're going to be working with the LLVM alias analysis infrastructure,
you should know what clients and implementations of alias analysis are
available.  In particular, if you are implementing an alias analysis, you should
be aware of the <a href="#aliasanalysis-debug">the clients</a> that are useful
for monitoring and evaluating different implementations.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="impls">Available <tt>AliasAnalysis</tt> implementations</a>
</div>

<div class="doc_text">

<p>This section lists the various implementations of the <tt>AliasAnalysis</tt>
interface.  With the exception of the <a href="#no-aa"><tt>-no-aa</tt></a> and
<a href="#basic-aa"><tt>-basicaa</tt></a> implementations, all of these <a
href="chaining">chain</a> to other alias analysis implementations.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="no-aa">The <tt>-no-aa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-no-aa</tt> pass is just like what it sounds: an alias analysis that
never returns any useful information.  This pass can be useful if you think that
alias analysis is doing something wrong and are trying to narrow down a
problem.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="basic-aa">The <tt>-basicaa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-basicaa</tt> pass is the default LLVM alias analysis.  It is an
aggressive local analysis that "knows" many important facts:</p>

<ul>
<li>Distinct globals, stack allocations, and heap allocations can never
    alias.</li>
<li>Globals, stack allocations, and heap allocations never alias the null
    pointer.</li>
<li>Different fields of a structure do not alias.</li>
<li>Indexes into arrays with statically differing subscripts cannot alias.</li>
<li>Many common standard C library functions <a
    href="#simplemodref">never access memory or only read memory</a>.</li>
<li>Pointers that obviously point to constant globals
    "<tt>pointToConstantMemory</tt>".</li>
<li>Function calls can not modify or references stack allocations if they never
    escape from the function that allocates them (a common case for automatic
    arrays).</li>
</ul>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="anders-aa">The <tt>-anders-aa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-anders-aa</tt> pass implements the well-known "Andersen's algorithm"
for interprocedural alias analysis.  This algorithm is a subset-based,
flow-insensitive, context-insensitive, and field-insensitive alias analysis that
is widely believed to be fairly precise.  Unfortunately, this algorithm is also
O(N<sup>3</sup>).  The LLVM implementation currently does not implement any of
the refinements (such as "online cycle elimination" or "offline variable
substitution") to improve its efficiency, so it can be quite slow in common
cases.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="steens-aa">The <tt>-steens-aa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-steens-aa</tt> pass implements a variation on the well-known
"Steensgaard's algorithm" for interprocedural alias analysis.  Steensgaard's
algorithm is a unification-based, flow-insensitive, context-insensitive, and
field-insensitive alias analysis that is also very scalable (effectively linear
time).</p>

<p>The LLVM <tt>-steens-aa</tt> pass implements a "speculatively
field-<b>sensitive</b>" version of Steensgaard's algorithm using the Data
Structure Analysis framework.  This gives it substantially more precision than
the standard algorithm while maintaining excellent analysis scalability.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ds-aa">The <tt>-ds-aa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-ds-aa</tt> pass implements the full Data Structure Analysis
algorithm.  Data Structure Analysis is a modular unification-based,
flow-insensitive, context-<b>sensitive</b>, and speculatively
field-<b>sensitive</b> alias analysis that is also quite scalable, usually at
O(n*log(n)).</p>

<p>This algorithm is capable of responding to a full variety of alias analysis
queries, and can provide context-sensitive mod/ref information as well.  The
only major facility not implemented so far is support for must-alias
information.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="aliasanalysis-xforms">Alias analysis driven transformations</a>
</div>

<div class="doc_text">
LLVM includes several alias-analysis driven transformations which can be used
with any of the implementations above.
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="adce">The <tt>-adce</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-adce</tt> pass, which implements Aggressive Dead Code Elimination
uses the <tt>AliasAnalysis</tt> interface to delete calls to functions that do
not have side-effects and are not used.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="licm">The <tt>-licm</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-licm</tt> pass implements various Loop Invariant Code Motion related
transformations.  It uses the <tt>AliasAnalysis</tt> interface for several
different transformations:</p>

<ul>
<li>It uses mod/ref information to hoist or sink load instructions out of loops
if there are no instructions in the loop that modifies the memory loaded.</li>

<li>It uses mod/ref information to hoist function calls out of loops that do not
write to memory and are loop-invariant.</li>

<li>If uses alias information to promote memory objects that are loaded and
stored to in loops to live in a register instead.  It can do this if there are
no may aliases to the loaded/stored memory location.</li>
</ul>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="argpromotion">The <tt>-argpromotion</tt> pass</a>
</div>

<div class="doc_text">
<p>
The <tt>-argpromotion</tt> pass promotes by-reference arguments to be passed in
by-value instead.  In particular, if pointer arguments are only loaded from it
passes in the value loaded instead of the address to the function.  This pass
uses alias information to make sure that the value loaded from the argument
pointer is not modified between the entry of the function and any load of the
pointer.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="gcseloadvn">The <tt>-load-vn</tt> &amp; <tt>-gcse</tt> passes</a>
</div>

<div class="doc_text">
<p>
The <tt>-load-vn</tt> pass uses alias analysis to "<a href="#loadvn">value
number</a>" loads and pointers values, which is used by the GCSE pass to
eliminate instructions.  The <tt>-load-vn</tt> pass relies on alias information
and must-alias information.  This combination of passes can make the following
transformations:</p>

<ul>
<li>Redundant load instructions are eliminated.</li>
<li>Load instructions that follow a store to the same location are replaced with
the stored value ("store forwarding").</li>
<li>Pointers values (e.g. formal arguments) that must-alias simpler expressions
(e.g. global variables or the null pointer) are replaced.  Note that this
implements transformations like "virtual method resolution", turning indirect
calls into direct calls.</li>
</ul>

</div>




<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="aliasanalysis-debug">Clients for debugging and evaluation of implementations</a>
</div>

These passes are useful for evaluating the various alias analysis
implementations.  You can use them with commands like '<tt>opt -anders-aa -ds-aa
-aa-eval foo.bc -disable-output -stats</tt>'.


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

<div class="doc_text">

<p>The <tt>-print-alias-sets</tt> pass is exposed as part of the
<tt>analyze</tt> tool to print out the Alias Sets formed by the <a
href="#ast"><tt>AliasSetTracker</tt></a> class.  This is useful if you're using
the <tt>AliasSetTracker</tt> class.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="count-aa">The <tt>-count-aa</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-count-aa</tt> pass is useful to see how many queries a particular
pass is making and what responses are returned by the alias analysis.  An
example usage is:</p>

<pre>
  $ opt -basicaa -count-aa -ds-aa -count-aa -licm
</pre>

<p>Which will print out how many queries (and what responses are returned) by
the <tt>-licm</tt> pass (of the <tt>-ds-aa</tt> pass) and how many queries are
made of the <tt>-basicaa</tt> pass by the <tt>-ds-aa</tt> pass.  This can be
useful when debugging a transformation or an alias analysis implementation.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="aa-eval">The <tt>-aa-eval</tt> pass</a>
</div>

<div class="doc_text">

<p>The <tt>-aa-eval</tt> pass simply iterates through all pairs of pointers in a
function and asks an alias analysis whether or not the pointers alias.  This
gives an indication of the precision of the alias analysis.  Statistics are
printed indicating the percent of no/may/must aliases found (a more precise
algorithm will have a lower number of may aliases).</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.cs.uiuc.edu">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
