Use the built-in postorder iterators rather than computing a postorder walk by hand.
[oota-llvm.git] / docs / LangRef.html
index cf5ee06cf4f0dc8b9c0fea983bbf69f29511c36a..96d4fa1086869383e65b85e926b1bec74120b1e2 100644 (file)
       </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>
@@ -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>
-<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>
-<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>
-define i32 %main() {                                                 <i>; i32()* </i>
+define i32 @main() {                                                 <i>; i32()* </i>
         <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
- 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>
@@ -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>
 
-<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
@@ -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>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
@@ -1425,9 +1434,9 @@ file:</p>
 
 <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>
 
@@ -2792,16 +2801,16 @@ compiled to LLVM:</p>
 <pre>
 struct RT {
   char A;
-  i32 B[10][20];
+  int B[10][20];
   char C;
 };
 struct ST {
-  i32 X;
+  int X;
   double Y;
   struct RT Z;
 };
 
-i32 *foo(struct ST *s) {
+int *foo(struct ST *s) {
   return &amp;s[1].Z.B[5][13];
 }
 </pre>
@@ -4816,6 +4825,51 @@ href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
 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>