Use the built-in postorder iterators rather than computing a postorder walk by hand.
[oota-llvm.git] / docs / LangRef.html
index 58e0e3c5f39fcf7b73e3da3e2118b8d34ccfe5eb..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>
@@ -252,9 +258,11 @@ LLVM assembly language.  There is a difference between what the parser
 accepts and what is considered 'well formed'.  For example, the
 following instruction is syntactically okay, but not well formed:</p>
 
+<div class="doc_code">
 <pre>
-  %x = <a href="#i_add">add</a> i32 1, %x
+%x = <a href="#i_add">add</a> i32 1, %x
 </pre>
+</div>
 
 <p>...because the definition of <tt>%x</tt> does not dominate all of
 its uses. The LLVM infrastructure provides a verification pass that may
@@ -263,6 +271,7 @@ automatically run by the parser after parsing input assembly and by
 the optimizer before it outputs bytecode.  The violations pointed out
 by the verifier pass indicate bugs in transformation passes or input to
 the parser.</p>
+</div>
 
 <!-- Describe the typesetting conventions here. --> </div>
 
@@ -310,23 +319,29 @@ none of them start with a '%' character.</p>
 
 <p>The easy way:</p>
 
+<div class="doc_code">
 <pre>
-  %result = <a href="#i_mul">mul</a> i32 %X, 8
+%result = <a href="#i_mul">mul</a> i32 %X, 8
 </pre>
+</div>
 
 <p>After strength reduction:</p>
 
+<div class="doc_code">
 <pre>
-  %result = <a href="#i_shl">shl</a> i32 %X, i8 3
+%result = <a href="#i_shl">shl</a> i32 %X, i8 3
 </pre>
+</div>
 
 <p>And the hard way:</p>
 
+<div class="doc_code">
 <pre>
-  <a href="#i_add">add</a> i32 %X, %X           <i>; yields {i32}:%0</i>
-  <a href="#i_add">add</a> i32 %0, %0           <i>; yields {i32}:%1</i>
-  %result = <a href="#i_add">add</a> i32 %1, %1
+<a href="#i_add">add</a> i32 %X, %X           <i>; yields {i32}:%0</i>
+<a href="#i_add">add</a> i32 %0, %0           <i>; yields {i32}:%1</i>
+%result = <a href="#i_add">add</a> i32 %1, %1
 </pre>
+</div>
 
 <p>This last way of multiplying <tt>%X</tt> by 8 illustrates several
 important lexical features of LLVM:</p>
@@ -367,24 +382,27 @@ combined together with the LLVM linker, which merges function (and
 global variable) definitions, resolves forward declarations, and merges
 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>
+ href="#i_ret">ret</a> i32 0<br>}<br>
+</pre>
+</div>
 
 <p>This example is made up of a <a href="#globalvars">global variable</a>
 named "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>"
@@ -647,9 +665,11 @@ a power of 2.</p>
 <p>For example, the following defines a global with an initializer, section,
    and alignment:</p>
 
+<div class="doc_code">
 <pre>
-  %G = constant float 1.0, section "foo", align 4
+%G = constant float 1.0, section "foo", align 4
 </pre>
+</div>
 
 </div>
 
@@ -684,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
@@ -719,9 +739,11 @@ a power of 2.</p>
 
   <h5>Syntax:</h5>
 
-  <pre>
-    @&lt;Name&gt; = [Linkage] [Visibility] alias &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
-  </pre>
+<div class="doc_code">
+<pre>
+@&lt;Name&gt; = [Linkage] [Visibility] alias &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
+</pre>
+</div>
 
 </div>
 
@@ -739,9 +761,15 @@ a power of 2.</p>
 
   <p>Parameter attributes are simple keywords that follow the type specified. If
   multiple parameter attributes are needed, they are space separated. For 
-  example:</p><pre>
-    %someFunc = i16 (i8 sext %someParam) zext
-    %someFunc = i16 (i8 zext %someParam) zext</pre>
+  example:</p>
+
+<div class="doc_code">
+<pre>
+%someFunc = i16 (i8 sext %someParam) zext
+%someFunc = i16 (i8 zext %someParam) zext
+</pre>
+</div>
+
   <p>Note that the two function types above are unique because the parameter has
   a different attribute (sext in the first one, zext in the second). Also note
   that the attribute for the function result (zext) comes immediately after the
@@ -762,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
@@ -787,10 +818,12 @@ LLVM and treated as a single unit, but may be separated in the .ll file if
 desired.  The syntax is very simple:
 </p>
 
-<div class="doc_code"><pre>
-  module asm "inline asm code goes here"
-  module asm "more can go here"
-</pre></div>
+<div class="doc_code">
+<pre>
+module asm "inline asm code goes here"
+module asm "more can go here"
+</pre>
+</div>
 
 <p>The strings can contain any character by escaping non-printable characters.
    The escape sequence used is simply "\xx" where "xx" is the two digit hex code
@@ -908,9 +941,6 @@ system. The current set of primitive types is as follows:</p>
         <tbody>
         <tr><th>Type</th><th>Description</th></tr>
         <tr><td><tt><a name="t_void">void</a></tt></td><td>No value</td></tr>
-        <tr><td><tt>i8</tt></td><td>8-bit value</td></tr>
-        <tr><td><tt>i32</tt></td><td>32-bit value</td></tr>
-        <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
         <tr><td><tt>label</tt></td><td>Branch destination</td></tr>
         </tbody>
       </table>
@@ -919,9 +949,7 @@ system. The current set of primitive types is as follows:</p>
       <table>
         <tbody>
           <tr><th>Type</th><th>Description</th></tr>
-          <tr><td><tt>i1</tt></td><td>True or False value</td></tr>
-          <tr><td><tt>i16</tt></td><td>16-bit value</td></tr>
-          <tr><td><tt>i64</tt></td><td>64-bit value</td></tr>
+          <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
          <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
         </tbody>
       </table>
@@ -942,7 +970,7 @@ classifications:</p>
     <tr><th>Classification</th><th>Types</th></tr>
     <tr>
       <td><a name="t_integer">integer</a></td>
-      <td><tt>i1, i8, i16, i32, i64</tt></td>
+      <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td>
     </tr>
     <tr>
       <td><a name="t_floating">floating point</a></td>
@@ -950,7 +978,7 @@ classifications:</p>
     </tr>
     <tr>
       <td><a name="t_firstclass">first class</a></td>
-      <td><tt>i1, i8, i16, i32, i64, float, double, <br/>
+      <td><tt>i1, ..., float, double, <br/>
           <a href="#t_pointer">pointer</a>,<a href="#t_vector">vector</a></tt>
       </td>
     </tr>
@@ -976,6 +1004,52 @@ recursive: For example, it is possible to have a two dimensional array.</p>
 
 </div>
 
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="t_integer">Integer Type</a> </div>
+
+<div class="doc_text">
+
+<h5>Overview:</h5>
+<p>The integer type is a very simple derived type that simply specifies an
+arbitrary bit width for the integer type desired. Any bit width from 1 bit to
+2^23-1 (about 8 million) can be specified.</p>
+
+<h5>Syntax:</h5>
+
+<pre>
+  iN
+</pre>
+
+<p>The number of bits the integer will occupy is specified by the <tt>N</tt>
+value.</p>
+
+<h5>Examples:</h5>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>i1</tt><br/>
+      <tt>i4</tt><br/>
+      <tt>i8</tt><br/>
+      <tt>i16</tt><br/>
+      <tt>i32</tt><br/>
+      <tt>i42</tt><br/>
+      <tt>i64</tt><br/>
+      <tt>i1942652</tt><br/>
+    </td>
+    <td class="left">
+      A boolean integer of 1 bit<br/>
+      A nibble sized integer of 4 bits.<br/>
+      A byte sized integer of 8 bits.<br/>
+      A half word sized integer of 16 bits.<br/>
+      A word sized integer of 32 bits.<br/>
+      An integer whose bit width is the answer. <br/>
+      A double word sized integer of 64 bits.<br/>
+      A really big integer of over 1 million bits.<br/>
+    </td>
+  </tr>
+</table>
+</div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>
 
@@ -1358,11 +1432,13 @@ href="#identifiers">identifier for the global</a> is used and always have <a
 href="#t_pointer">pointer</a> type. For example, the following is a legal LLVM
 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>
 
 </div>
 
@@ -1516,18 +1592,22 @@ indicates whether or not the inline asm expression has side effects.  An example
 inline assembler expression is:
 </p>
 
+<div class="doc_code">
 <pre>
-  i32 (i32) asm "bswap $0", "=r,r"
+i32 (i32) asm "bswap $0", "=r,r"
 </pre>
+</div>
 
 <p>
 Inline assembler expressions may <b>only</b> be used as the callee operand of
 a <a href="#i_call"><tt>call</tt> instruction</a>.  Thus, typically we have:
 </p>
 
+<div class="doc_code">
 <pre>
-  %X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
+%X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
 </pre>
+</div>
 
 <p>
 Inline asms with side effects not visible in the constraint list must be marked
@@ -1535,9 +1615,11 @@ as having side effects.  This is done through the use of the
 '<tt>sideeffect</tt>' keyword, like so:
 </p>
 
+<div class="doc_code">
 <pre>
-  call void asm sideeffect "eieio", ""()
+call void asm sideeffect "eieio", ""()
 </pre>
+</div>
 
 <p>TODO: The format of the asm and constraints string still need to be
 documented here.  Constraints on what can be done (e.g. duplication, moving, etc
@@ -1888,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>
-<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>
@@ -2534,11 +2617,11 @@ a pointer is returned.</p>
 <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>
 
@@ -2623,8 +2706,8 @@ instructions), the memory is reclaimed.</p>
 
 <pre>
   %ptr = alloca i32                              <i>; yields {i32*}:ptr</i>
-  %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
-  %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
+  %ptr = alloca i32, i32 4                       <i>; yields {i32*}:ptr</i>
+  %ptr = alloca i32, i32 4, align 1024           <i>; yields {i32*}:ptr</i>
   %ptr = alloca i32, align 1024                  <i>; yields {i32*}:ptr</i>
 </pre>
 </div>
@@ -2714,35 +2797,39 @@ be sign extended to 64-bit values.</p>
 <p>For example, let's consider a C code fragment and how it gets
 compiled to LLVM:</p>
 
+<div class="doc_code">
 <pre>
-  struct RT {
-    char A;
-    i32 B[10][20];
-    char C;
-  };
-  struct ST {
-    i32 X;
-    double Y;
-    struct RT Z;
-  };
-
-  define i32 *foo(struct ST *s) {
-    return &amp;s[1].Z.B[5][13];
-  }
+struct RT {
+  char A;
+  int B[10][20];
+  char C;
+};
+struct ST {
+  int X;
+  double Y;
+  struct RT Z;
+};
+
+int *foo(struct ST *s) {
+  return &amp;s[1].Z.B[5][13];
+}
 </pre>
+</div>
 
 <p>The LLVM code generated by the GCC frontend is:</p>
 
+<div class="doc_code">
 <pre>
-  %RT = type { i8 , [10 x [20 x i32]], i8  }
-  %ST = type { i32, double, %RT }
+%RT = type { i8 , [10 x [20 x i32]], i8  }
+%ST = type { i32, double, %RT }
 
-  define i32* %foo(%ST* %s) {
-  entry:
-    %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
-    ret i32* %reg
-  }
+define i32* %foo(%ST* %s) {
+entry:
+  %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
+  ret i32* %reg
+}
 </pre>
+</div>
 
 <h5>Semantics:</h5>
 
@@ -2869,10 +2956,7 @@ also be of <a href="#t_integer">integer</a> type. The bit size of the
 
 <h5>Semantics:</h5>
 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
-bits until it reaches the size of the destination type, <tt>ty2</tt>. When the
-the operand and the type are the same size, no bit filling is done and the 
-cast is considered a <i>no-op cast</i> because no bits change (only the type 
-changes).</p>
+bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>
 
 <p>When zero extending from i1, the result will always be either 0 or 1.</p>
 
@@ -2909,9 +2993,7 @@ also be of <a href="#t_integer">integer</a> type.  The bit size of the
 <p>
 The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
 bit (highest order bit) of the <tt>value</tt> until it reaches the bit size of
-the type <tt>ty2</tt>.  When the the operand and the type are the same size, 
-no bit filling is done and the cast is considered a <i>no-op cast</i> because 
-no bits change (only the type changes).</p>
+the type <tt>ty2</tt>.</p>
 
 <p>When sign extending from i1, the extension always results in -1 or 0.</p>
 
@@ -3659,6 +3741,7 @@ the type used.</p>
 instruction and the variable argument handling intrinsic functions are
 used.</p>
 
+<div class="doc_code">
 <pre>
 define i32 @test(i32 %X, ...) {
   ; Initialize variable argument processing
@@ -3686,6 +3769,8 @@ declare void @llvm.va_end(i8*)
 </pre>
 </div>
 
+</div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">
   <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
@@ -4655,16 +4740,11 @@ only the <tt>%hiBit - %loBit</tt> bits set, as follows:</p>
   <li>A mask of the retained bits is created by shifting a -1 value.</li>
   <li>The mask is ANDed with <tt>%val</tt> to produce the result.
 </ol>
-<p>In reverse mode, a similar computation is made except that:</p>
-<ol>
-  <li>The bits selected wrap around to include both the highest and lowest bits.
-  For example, part.select(i16 X, 4, 7) selects bits from X with a mask of 
-  0x00F0 (forwards case) while part.select(i16 X, 8, 3) selects bits from X 
-  with a mask of 0xFF0F.</li>
-  <li>The bits returned in the reverse case are reversed. So, if X has the value
-  0x6ACF and we apply part.select(i16 X, 8, 3) to it, we get back the value
-  0x0A6F.</li>
-</ol>
+<p>In reverse mode, a similar computation is made except that the bits are
+returned in the reverse order. So, for example, if <tt>X</tt> has the value
+<tt>i16 0x0ACF (101011001111)</tt> and we apply 
+<tt>part.select(i16 X, 8, 3)</tt> to it, we get back the value 
+<tt>i16 0x0026 (000000100110)</tt>.</p>
 </div>
 
 <div class="doc_subsubsection">
@@ -4705,15 +4785,15 @@ up to that size.</p>
 are replaced with corresponding bits from <tt>%repl</tt>. That is the 0th bit
 in <tt>%repl</tt> replaces the <tt>%lo</tt>th bit in <tt>%val</tt> and etc. up
 to the <tt>%hi</tt>th bit. 
-<p>In reverse mode, a similar computation is made except that the bits replaced
-wrap around to include both the highest and lowest bits. For example, if a
-16 bit value is being replaced then <tt>%lo=8</tt> and <tt>%hi=4</tt> would
-cause these bits to be set: <tt>0xFF1F</tt>.</p>
+<p>In reverse mode, a similar computation is made except that the bits are
+reversed.  That is, the <tt>0</tt>th bit in <tt>%repl</tt> replaces the 
+<tt>%hi</tt> bit in <tt>%val</tt> and etc. down to the <tt>%lo</tt>th bit.
 <h5>Examples:</h5>
 <pre>
   llvm.part.set(0xFFFF, 0, 4, 7) -&gt; 0xFF0F
-  llvm.part.set(0xFFFF, 0, 7, 4) -&gt; 0x0060
-  llvm.part.set(0xFFFF, 0, 8, 3) -&gt; 0x00F0
+  llvm.part.set(0xFFFF, 0, 7, 4) -&gt; 0xFF0F
+  llvm.part.set(0xFFFF, 1, 7, 4) -&gt; 0xFF8F
+  llvm.part.set(0xFFFF, F, 8, 3) -&gt; 0xFFE7
   llvm.part.set(0xFFFF, 0, 3, 8) -&gt; 0xFE07
 </pre>
 </div>
@@ -4745,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>