[llvm-commits] CVS: llvm/docs/AliasAnalysis.html
Misha Brukman
brukman at cs.uiuc.edu
Wed Jul 28 15:18:43 PDT 2004
Changes in directory llvm/docs:
AliasAnalysis.html updated: 1.23 -> 1.24
---
Log message:
* Use the doc_code class for code listings to make it stand out from text
* Wrap text in soft, comfortable <div>s and <p>s
* Wrap lines at 80 cols
---
Diffs of the changes: (+65 -56)
Index: llvm/docs/AliasAnalysis.html
diff -u llvm/docs/AliasAnalysis.html:1.23 llvm/docs/AliasAnalysis.html:1.24
--- llvm/docs/AliasAnalysis.html:1.23 Tue Jul 27 02:50:07 2004
+++ llvm/docs/AliasAnalysis.html Wed Jul 28 17:18:33 2004
@@ -134,16 +134,18 @@
important for correct Alias Analyses. For example, consider this (silly, but
possible) C code:</p>
+<div class="doc_code">
<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 */
- }
+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>
+</div>
<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
@@ -151,16 +153,18 @@
LICM pass can use store motion to remove the stores from the loop. In
constrast, the following code:</p>
+<div class="doc_code">
<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 */
- }
+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>
+</div>
<p>In this case, the two stores to C do alias each other, because the access to
the <tt>&C[0]</tt> element is a two byte access. If size information wasn't
@@ -361,25 +365,29 @@
declaring any pass dependencies your pass has. Thus you should have something
like this:</p>
+<div class="doc_code">
<pre>
- void getAnalysisUsage(AnalysisUsage &AU) const {
- AliasAnalysis::getAnalysisUsage(AU);
- <i>// declare your dependencies here.</i>
- }
+void getAnalysisUsage(AnalysisUsage &AU) const {
+ AliasAnalysis::getAnalysisUsage(AU);
+ <i>// declare your dependencies here.</i>
+}
</pre>
+</div>
<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>
+<div class="doc_code">
<pre>
- bool run(Module &M) {
- InitializeAliasAnalysis(this);
- <i>// Perform analysis here...</i>
- return false;
- }
+bool run(Module &M) {
+ InitializeAliasAnalysis(this);
+ <i>// Perform analysis here...</i>
+ return false;
+}
</pre>
+</div>
</div>
@@ -419,17 +427,19 @@
paths that return a conservative MayAlias or Mod/Ref result, simply return
whatever the superclass computes. For example:</p>
+<div class="doc_code">
<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);
- }
+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>
+</div>
<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
@@ -473,7 +483,6 @@
any entries for the specified value, if they exist.
</div>
-
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">The <tt>copyValue</tt> method</div>
@@ -485,7 +494,6 @@
new value has exactly the same properties as the value being copied.
</div>
-
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">The <tt>replaceWithNewValue</tt> method</div>
@@ -549,8 +557,8 @@
<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
+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
@@ -602,7 +610,6 @@
</div>
-
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="direct">Using the <tt>AliasAnalysis</tt> interface directly</a>
@@ -662,7 +669,6 @@
</div>
-
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
<a name="basic-aa">The <tt>-basicaa</tt> pass</a>
@@ -845,8 +851,8 @@
</div>
<div class="doc_text">
-<p>
-The <tt>-load-vn</tt> pass uses alias analysis to "<a href="#loadvn">value
+
+<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
@@ -864,18 +870,19 @@
</div>
-
-
-
<!-- ======================================================================= -->
<div class="doc_subsection">
- <a name="aliasanalysis-debug">Clients for debugging and evaluation of implementations</a>
+ <a name="aliasanalysis-debug">Clients for debugging and evaluation of
+ implementations</a>
</div>
-These passes are useful for evaluating the various alias analysis
+<div class="doc_text">
+
+<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
--aa-eval foo.bc -disable-output -stats</tt>'.
+-aa-eval foo.bc -disable-output -stats</tt>'.</p>
+</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
@@ -900,17 +907,19 @@
<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>
+pass is making and what responses are returned by the alias analysis. As an
+example,</p>
+<div class="doc_code">
<pre>
- $ opt -basicaa -count-aa -ds-aa -count-aa -licm
+% opt -basicaa -count-aa -ds-aa -count-aa -licm
</pre>
+</div>
-<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>
+<p>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>
@@ -940,7 +949,7 @@
<a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
<a href="http://llvm.cs.uiuc.edu">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2004/07/27 07:50:07 $
+ Last modified: $Date: 2004/07/28 22:18:33 $
</address>
</body>
More information about the llvm-commits
mailing list