Separate program name from error message with a :
[oota-llvm.git] / docs / WritingAnLLVMPass.html
index 13849d0dba1b2f10cac3fe00868fb44012cce6bf..58bea1a0cad4cce106158fb54808e40c73d6a012 100644 (file)
@@ -263,8 +263,8 @@ href="#FunctionPass"><tt>FunctionPass</tt></a>'s operate a function at a
 time.</p>
 
 <div class="doc_code"><pre>
-     static const int ID;
-     Hello() : FunctionPass((intptr_t)&ID) {}
+     static char ID;
+     Hello() : FunctionPass((intptr_t)&amp;ID) {}
 </pre></div><p>
 
 <p> This declares pass identifier used by LLVM to identify pass. This allows LLVM to
@@ -285,7 +285,7 @@ to do our thing, so we just print out our message with the name of each
 function.</p>
 
 <div class="doc_code"><pre>
-  const int Hello::ID = 0;
+  char Hello::ID = 0;
 </pre></div>
 
 <p> We initialize pass ID here. LLVM uses ID's address to identify pass so 
@@ -311,8 +311,8 @@ argument "<tt>hello</tt>", and a name "<tt>Hello World Pass</tt>".</p>
 <b>namespace</b> {
   <b>struct Hello</b> : <b>public</b> <a href="#FunctionPass">FunctionPass</a> {
     
-    static const int ID;
-    Hello() : FunctionPass((intptr_t)&ID) {}
+    static char ID;
+    Hello() : FunctionPass((intptr_t)&amp;ID) {}
 
     <b>virtual bool</b> <a href="#runOnFunction">runOnFunction</a>(Function &amp;F) {
       llvm::cerr &lt;&lt; "<i>Hello: </i>" &lt;&lt; F.getName() &lt;&lt; "\n";
@@ -320,6 +320,7 @@ argument "<tt>hello</tt>", and a name "<tt>Hello World Pass</tt>".</p>
     }
   };
   
+  char Hello::ID = 0;
   RegisterPass&lt;Hello&gt; X("<i>hello</i>", "<i>Hello World Pass</i>");
 }
 </pre></div>
@@ -347,8 +348,8 @@ use the <tt>opt</tt> tool to access it, once loaded.</p>
 
 <p>To test it, follow the example at the end of the <a
 href="GettingStarted.html">Getting Started Guide</a> to compile "Hello World" to
-LLVM.  We can now run the bytecode file (<tt>hello.bc</tt>) for the program
-through our transformation like this (or course, any bytecode file will
+LLVM.  We can now run the bitcode file (<tt>hello.bc</tt>) for the program
+through our transformation like this (or course, any bitcode file will
 work):</p>
 
 <div class="doc_code"><pre>
@@ -372,7 +373,7 @@ interesting way, we just throw away the result of <tt>opt</tt> (sending it to
 $ opt -load ../../../Debug/lib/Hello.so --help
 OVERVIEW: llvm .bc -&gt; .bc modular optimizer
 
-USAGE: opt [options] &lt;input bytecode&gt;
+USAGE: opt [options] &lt;input bitcode&gt;
 
 OPTIONS:
   Optimizations available:
@@ -407,7 +408,7 @@ Hello: main
   Total Execution Time: 0.02 seconds (0.0479059 wall clock)
 
    ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- Pass Name ---
-   0.0100 (100.0%)   0.0000 (  0.0%)   0.0100 ( 50.0%)   0.0402 ( 84.0%)  Bytecode Writer
+   0.0100 (100.0%)   0.0000 (  0.0%)   0.0100 ( 50.0%)   0.0402 ( 84.0%)  Bitcode Writer
    0.0000 (  0.0%)   0.0100 (100.0%)   0.0100 ( 50.0%)   0.0031 (  6.4%)  Dominator Set Construction
    0.0000 (  0.0%)   0.0000 (  0.0%)   0.0000 (  0.0%)   0.0013 (  2.7%)  Module Verifier
  <b>  0.0000 (  0.0%)   0.0000 (  0.0%)   0.0000 (  0.0%)   0.0033 (  6.9%)  Hello World Pass</b>
@@ -485,7 +486,7 @@ refering to function bodies in no predictable order, or adding and removing
 functions.  Because nothing is known about the behavior of <tt>ModulePass</tt>
 subclasses, no optimization can be done for their execution. A module pass
 can use function level passes (e.g. dominators) using getAnalysis interface
-<tt> getAnalysis<DominatorTree>(Function)</tt>. </p> 
+<tt> getAnalysis&lt;DominatorTree&gt;(Function)</tt>. </p> 
 
 <p>To write a correct <tt>ModulePass</tt> subclass, derive from
 <tt>ModulePass</tt> and overload the <tt>runOnModule</tt> method with the
@@ -537,7 +538,7 @@ href="#BasicBlockPass">BasicBlockPass</a></tt>, you should derive from
 <li>... <em>not allowed</em> to modify any <tt>Function</tt>s that are not in
 the current SCC.</li>
 
-<li>... <em>allowed</em> to inspect any Function's other than those in the
+<li>... <em>not allowed</em> to inspect any Function's other than those in the
 current SCC and the direct callees of the SCC.</li>
 
 <li>... <em>required</em> to preserve the current CallGraph object, updating it
@@ -746,7 +747,7 @@ program, or false if they didn't. </p>
   <b>virtual bool</b> doInitialization(Loop *, LPPassManager &amp;LPM);
 </pre></div>
 
-The <tt>doInitialization</tt> method is designed to do simple initialization 
+<p>The <tt>doInitialization</tt> method is designed to do simple initialization 
 type of stuff that does not depend on the functions being processed.  The 
 <tt>doInitialization</tt> method call is not scheduled to overlap with any 
 other pass executions (thus it should be very fast). LPPassManager 
@@ -1159,7 +1160,7 @@ For example:</p>
    }
 </pre></div>
 
-In above example, runOnFunction for DominatorTree is called by pass manager
+<p>In above example, runOnFunction for DominatorTree is called by pass manager
 before returning a reference to the desired pass.</p>
 
 <p>
@@ -1308,8 +1309,9 @@ no problem.</p>
 <p>Here we show how the default implementation is specified (using the extra
 argument to the <tt>RegisterAnalysisGroup</tt> template).  There must be exactly
 one default implementation available at all times for an Analysis Group to be
-used.  Here we declare that the <tt><a
-href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a></tt>
+used.  Only default implementation can derive from <tt>ImmutablePass</tt>. 
+Here we declare that the
+ <tt><a href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a></tt>
 pass is the default implementation for the interface.</p>
 
 </div>
@@ -1412,8 +1414,8 @@ Module Pass Manager
     Module Verifier
 --  Dominator Set Construction
 --  Module Verifier
-  Bytecode Writer
---Bytecode Writer
+  Bitcode Writer
+--Bitcode Writer
 </pre></div>
 
 <p>This output shows us when passes are constructed and when the analysis
@@ -1453,8 +1455,8 @@ Module Pass Manager
     Module Verifier
 --  Dominator Set Construction
 --  Module Verifier
-  Bytecode Writer
---Bytecode Writer
+  Bitcode Writer
+--Bitcode Writer
 Hello: __main
 Hello: puts
 Hello: main
@@ -1493,8 +1495,8 @@ Module Pass Manager
     Module Verifier
 --  Dominator Set Construction
 --  Module Verifier
-  Bytecode Writer
---Bytecode Writer
+  Bitcode Writer
+--Bitcode Writer
 Hello: __main
 Hello: puts
 Hello: main
@@ -1797,6 +1799,8 @@ places (for global resources).  Although this is a simple extension, we simply
 haven't had time (or multiprocessor machines, thus a reason) to implement this.
 Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>
 
+</div>
+
 <!-- *********************************************************************** -->
 <hr>
 <address>