mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 21:35:07 +00:00
remove anders-aa from mainline, it isn't maintained and is
tantalyzing enough that people keep trying to use it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97483 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ad4df4c0da
commit
a9cf19670f
@ -403,7 +403,7 @@ implementing, you just override the interfaces you can improve.</p>
|
|||||||
href="#basic-aa">basicaa</a></tt> and <a href="#no-aa"><tt>no-aa</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
|
passes) every alias analysis pass chains to another alias analysis
|
||||||
implementation (for example, the user can specify "<tt>-basicaa -ds-aa
|
implementation (for example, the user can specify "<tt>-basicaa -ds-aa
|
||||||
-anders-aa -licm</tt>" to get the maximum benefit from the three alias
|
-licm</tt>" to get the maximum benefit from both alias
|
||||||
analyses). The alias analysis class automatically takes care of most of this
|
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
|
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
|
paths that return a conservative MayAlias or Mod/Ref result, simply return
|
||||||
@ -703,25 +703,6 @@ loads and stores to be eliminated.</p>
|
|||||||
non-address taken globals), but is very quick analysis.</p>
|
non-address taken globals), but is very quick analysis.</p>
|
||||||
</div>
|
</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">
|
<div class="doc_subsubsection">
|
||||||
<a name="steens-aa">The <tt>-steens-aa</tt> pass</a>
|
<a name="steens-aa">The <tt>-steens-aa</tt> pass</a>
|
||||||
@ -855,7 +836,7 @@ pointer.</p>
|
|||||||
<div class="doc_text">
|
<div class="doc_text">
|
||||||
|
|
||||||
<p>These passes are useful for evaluating the various alias analysis
|
<p>These passes are useful for evaluating the various alias analysis
|
||||||
implementations. You can use them with commands like '<tt>opt -anders-aa -ds-aa
|
implementations. You can use them with commands like '<tt>opt -ds-aa
|
||||||
-aa-eval foo.bc -disable-output -stats</tt>'.</p>
|
-aa-eval foo.bc -disable-output -stats</tt>'.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -75,7 +75,6 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
|
|||||||
<tr><th colspan="2"><b>ANALYSIS PASSES</b></th></tr>
|
<tr><th colspan="2"><b>ANALYSIS PASSES</b></th></tr>
|
||||||
<tr><th>Option</th><th>Name</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="#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="#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="#basiccg">-basiccg</a></td><td>Basic CallGraph Construction</td></tr>
|
||||||
<tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Optimize for code generation</td></tr>
|
<tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Optimize for code generation</td></tr>
|
||||||
@ -202,80 +201,6 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
|
|||||||
Spadini, and Wojciech Stryjewski.</p>
|
Spadini, and Wojciech Stryjewski.</p>
|
||||||
</div>
|
</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>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Please keep in mind that the current andersen's pass has many known
|
|
||||||
problems and bugs. It should be considered "research quality".
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-------------------------------------------------------------------------- -->
|
<!-------------------------------------------------------------------------- -->
|
||||||
<div class="doc_subsection">
|
<div class="doc_subsection">
|
||||||
<a name="basicaa">Basic Alias Analysis (default AA impl)</a>
|
<a name="basicaa">Basic Alias Analysis (default AA impl)</a>
|
||||||
|
@ -66,7 +66,6 @@ Almost dead code.
|
|||||||
llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
|
llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
|
||||||
ABCD, SCCVN, GEPSplitterPass
|
ABCD, SCCVN, GEPSplitterPass
|
||||||
MSIL backend?
|
MSIL backend?
|
||||||
AndersAA -> Unsupported, zap after branch.
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
@ -734,7 +733,6 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
|
|||||||
experimental.</li>
|
experimental.</li>
|
||||||
<li>The <tt>llc</tt> "<tt>-filetype=asm</tt>" (the default) is the only
|
<li>The <tt>llc</tt> "<tt>-filetype=asm</tt>" (the default) is the only
|
||||||
supported value for this option. The ELF writer is experimental.</li>
|
supported value for this option. The ELF writer is experimental.</li>
|
||||||
<li>The implementation of Andersen's Alias Analysis has many known bugs.</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -79,13 +79,6 @@ namespace llvm {
|
|||||||
//
|
//
|
||||||
FunctionPass *createScalarEvolutionAliasAnalysisPass();
|
FunctionPass *createScalarEvolutionAliasAnalysisPass();
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
|
||||||
//
|
|
||||||
// createAndersensPass - This pass implements Andersen's interprocedural alias
|
|
||||||
// analysis.
|
|
||||||
//
|
|
||||||
ModulePass *createAndersensPass();
|
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// createProfileLoaderPass - This pass loads information from a profile dump
|
// createProfileLoaderPass - This pass loads information from a profile dump
|
||||||
|
@ -46,7 +46,6 @@ namespace {
|
|||||||
(void) llvm::createAggressiveDCEPass();
|
(void) llvm::createAggressiveDCEPass();
|
||||||
(void) llvm::createAliasAnalysisCounterPass();
|
(void) llvm::createAliasAnalysisCounterPass();
|
||||||
(void) llvm::createAliasDebugger();
|
(void) llvm::createAliasDebugger();
|
||||||
(void) llvm::createAndersensPass();
|
|
||||||
(void) llvm::createArgumentPromotionPass();
|
(void) llvm::createArgumentPromotionPass();
|
||||||
(void) llvm::createStructRetPromotionPass();
|
(void) llvm::createStructRetPromotionPass();
|
||||||
(void) llvm::createBasicAliasAnalysisPass();
|
(void) llvm::createBasicAliasAnalysisPass();
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user