Use the built-in postorder iterators rather than computing a postorder walk by hand.
[oota-llvm.git] / docs / LangRef.html
index c1bfe743a557ec49f8e4d9d73093df2421f58f7a..96d4fa1086869383e65b85e926b1bec74120b1e2 100644 (file)
       </li>
       <li><a href="#int_debugger">Debugger intrinsics</a></li>
       <li><a href="#int_eh">Exception Handling intrinsics</a></li>
       </li>
       <li><a href="#int_debugger">Debugger intrinsics</a></li>
       <li><a href="#int_eh">Exception Handling intrinsics</a></li>
+      <li><a href="#int_general">General intrinsics</a></li>
+        <ol>
+          <li><a href="#int_var_annotation">'<tt>llvm.var.annotation</tt>' 
+                                                              Intrinsic</a></li>
+          </ol>
+      </li>
     </ol>
   </li>
 </ol>
     </ol>
   </li>
 </ol>
@@ -378,21 +384,21 @@ symbol table entries. Here is an example of the "hello world" module:</p>
 
 <div class="doc_code">
 <pre><i>; Declare the string constant as a global constant...</i>
 
 <div class="doc_code">
 <pre><i>; Declare the string constant as a global constant...</i>
-<a href="#identifiers">%.LC0</a> = <a href="#linkage_internal">internal</a> <a
- href="#globalvars">constant</a> <a href="#t_array">[13 x i8 ]</a> c"hello world\0A\00"          <i>; [13 x i8 ]*</i>
+<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a
+ href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00"          <i>; [13 x i8]*</i>
 
 <i>; External declaration of the puts function</i>
 
 <i>; External declaration of the puts function</i>
-<a href="#functionstructure">declare</a> i32 %puts(i8 *)                                            <i>; i32(i8 *)* </i>
+<a href="#functionstructure">declare</a> i32 @puts(i8 *)                                            <i>; i32(i8 *)* </i>
 
 <i>; Definition of main function</i>
 
 <i>; Definition of main function</i>
-define i32 %main() {                                                 <i>; i32()* </i>
+define i32 @main() {                                                 <i>; i32()* </i>
         <i>; Convert [13x i8 ]* to i8  *...</i>
         %cast210 = <a
         <i>; Convert [13x i8 ]* to i8  *...</i>
         %cast210 = <a
- href="#i_getelementptr">getelementptr</a> [13 x i8 ]* %.LC0, i64 0, i64 0 <i>; i8 *</i>
+ href="#i_getelementptr">getelementptr</a> [13 x i8 ]* @.LC0, i64 0, i64 0 <i>; i8 *</i>
 
         <i>; Call puts function to write out the string to stdout...</i>
         <a
 
         <i>; Call puts function to write out the string to stdout...</i>
         <a
- href="#i_call">call</a> i32 %puts(i8 * %cast210)                              <i>; i32</i>
+ href="#i_call">call</a> i32 @puts(i8 * %cast210)                              <i>; i32</i>
         <a
  href="#i_ret">ret</a> i32 0<br>}<br>
 </pre>
         <a
  href="#i_ret">ret</a> i32 0<br>}<br>
 </pre>
@@ -698,7 +704,7 @@ basic block a symbol table entry), contains a list of instructions, and ends
 with a <a href="#terminators">terminator</a> instruction (such as a branch or
 function return).</p>
 
 with a <a href="#terminators">terminator</a> instruction (such as a branch or
 function return).</p>
 
-<p>The first basic block in a program is special in two ways: it is immediately
+<p>The first basic block in a function is special in two ways: it is immediately
 executed on entrance to the function, and it is not allowed to have predecessor
 basic blocks (i.e. there can not be any branches to the entry block of a
 function).  Because the block can have no predecessors, it also cannot have any
 executed on entrance to the function, and it is not allowed to have predecessor
 basic blocks (i.e. there can not be any branches to the entry block of a
 function).  Because the block can have no predecessors, it also cannot have any
@@ -734,9 +740,9 @@ a power of 2.</p>
   <h5>Syntax:</h5>
 
 <div class="doc_code">
   <h5>Syntax:</h5>
 
 <div class="doc_code">
-  <pre>
+<pre>
 @&lt;Name&gt; = [Linkage] [Visibility] alias &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
 @&lt;Name&gt; = [Linkage] [Visibility] alias &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
-  </pre>
+</pre>
 </div>
 
 </div>
 </div>
 
 </div>
@@ -784,6 +790,9 @@ a power of 2.</p>
     <dt><tt>sret</tt></dt>
     <dd>This indicates that the parameter specifies the address of a structure
     that is the return value of the function in the source program.</dd>
     <dt><tt>sret</tt></dt>
     <dd>This indicates that the parameter specifies the address of a structure
     that is the return value of the function in the source program.</dd>
+    <dt><tt>noalias</tt></dt>
+    <dd>This indicates that the parameter not alias any other object or any 
+    other "noalias" objects during the function call.
     <dt><tt>noreturn</tt></dt>
     <dd>This function attribute indicates that the function never returns. This
     indicates to LLVM that every call to this function should be treated as if
     <dt><tt>noreturn</tt></dt>
     <dd>This function attribute indicates that the function never returns. This
     indicates to LLVM that every call to this function should be treated as if
@@ -1425,9 +1434,9 @@ file:</p>
 
 <div class="doc_code">
 <pre>
 
 <div class="doc_code">
 <pre>
-%X = global i32 17
-%Y = global i32 42
-%Z = global [2 x i32*] [ i32* %X, i32* %Y ]
+@X = global i32 17
+@Y = global i32 42
+@Z = global [2 x i32*] [ i32* @X, i32* @Y ]
 </pre>
 </div>
 
 </pre>
 </div>
 
@@ -1961,7 +1970,8 @@ Both arguments must have identical types.</p>
 <p>The value produced is the integer or floating point difference of
 the two operands.</p>
 <h5>Example:</h5>
 <p>The value produced is the integer or floating point difference of
 the two operands.</p>
 <h5>Example:</h5>
-<pre>  &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
+<pre>
+  &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
 </pre>
 </div>
   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
 </pre>
 </div>
@@ -2607,11 +2617,11 @@ a pointer is returned.</p>
 <pre>
   %array  = malloc [4 x i8 ]                    <i>; yields {[%4 x i8]*}:array</i>
 
 <pre>
   %array  = malloc [4 x i8 ]                    <i>; yields {[%4 x i8]*}:array</i>
 
-  %size   = <a href="#i_add">add</a> i32 2, 2                          <i>; yields {i32}:size = i32 4</i>
-  %array1 = malloc i8, i32 4                   <i>; yields {i8*}:array1</i>
-  %array2 = malloc [12 x i8], i32 %size        <i>; yields {[12 x i8]*}:array2</i>
-  %array3 = malloc i32, i32 4, align 1024         <i>; yields {i32*}:array3</i>
-  %array4 = malloc i32, align 1024                 <i>; yields {i32*}:array4</i>
+  %size   = <a href="#i_add">add</a> i32 2, 2                        <i>; yields {i32}:size = i32 4</i>
+  %array1 = malloc i8, i32 4                    <i>; yields {i8*}:array1</i>
+  %array2 = malloc [12 x i8], i32 %size         <i>; yields {[12 x i8]*}:array2</i>
+  %array3 = malloc i32, i32 4, align 1024       <i>; yields {i32*}:array3</i>
+  %array4 = malloc i32, align 1024              <i>; yields {i32*}:array4</i>
 </pre>
 </div>
 
 </pre>
 </div>
 
@@ -2791,16 +2801,16 @@ compiled to LLVM:</p>
 <pre>
 struct RT {
   char A;
 <pre>
 struct RT {
   char A;
-  i32 B[10][20];
+  int B[10][20];
   char C;
 };
 struct ST {
   char C;
 };
 struct ST {
-  i32 X;
+  int X;
   double Y;
   struct RT Z;
 };
 
   double Y;
   struct RT Z;
 };
 
-i32 *foo(struct ST *s) {
+int *foo(struct ST *s) {
   return &amp;s[1].Z.B[5][13];
 }
 </pre>
   return &amp;s[1].Z.B[5][13];
 }
 </pre>
@@ -4815,6 +4825,51 @@ href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
 Handling</a> document. </p>
 </div>
 
 Handling</a> document. </p>
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="int_general">General Intrinsics</a>
+</div>
+
+<div class="doc_text">
+<p> This class of intrinsics is designed to be generic and has
+no specific purpose. </p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+  declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>llvm.var.annotation</tt>' intrinsic
+</p>
+
+<h5>Arguments:</h5>
+
+<p>
+The first argument is a pointer to a value, the second is a pointer to a 
+global string, the third is a pointer to a global string which is the source 
+file name, and the last argument is the line number.
+</p>
+
+<h5>Semantics:</h5>
+
+<p>
+This intrinsic allows annotation of local variables with arbitrary strings.  
+This can be useful for special purpose optimizations that want to look for these
+ annotations.  These have no other defined use, they are ignored by code 
+ generation and optimization.
+</div>
+
 
 <!-- *********************************************************************** -->
 <hr>
 
 <!-- *********************************************************************** -->
 <hr>