Update failing SingleSource test-case list.
[oota-llvm.git] / docs / LangRef.html
index 1b9dc458ccf9d99e596abd58f18cda7d2368d7aa..41379db37f7cc0268740362cafba331b58fd2e29 100644 (file)
@@ -3,6 +3,10 @@
 <html>
 <head>
   <title>LLVM Assembly Language Reference Manual</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta name="author" content="Chris Lattner">
+  <meta name="description" 
+  content="LLVM Assembly Language Reference Manual.">
   <link rel="stylesheet" href="llvm.css" type="text/css">
 </head>
 
@@ -26,7 +30,7 @@
           <li><a href="#t_function">Function Type</a></li>
           <li><a href="#t_pointer">Pointer Type</a></li>
           <li><a href="#t_struct">Structure Type</a></li>
-<!-- <li><a href="#t_packed" >Packed Type</a> -->
+          <li><a href="#t_packed">Packed Type</a></li>
         </ol>
       </li>
     </ol>
@@ -47,6 +51,7 @@
           <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li>
           <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li>
           <li><a href="#i_unwind">'<tt>unwind</tt>'  Instruction</a></li>
+          <li><a href="#i_unreachable">'<tt>unreachable</tt>' Instruction</a></li>
         </ol>
       </li>
       <li><a href="#binaryops">Binary Operations</a>
@@ -294,78 +299,39 @@ href="#rw_stroustrup">1</a></sup>.<p> --> </div>
 <p>The primitive types are the fundamental building blocks of the LLVM
 system. The current set of primitive types are as follows:</p>
 
-<table border="0" style="align: center">
-  <tbody>
-    <tr>
-      <td>
-      <table border="1" cellspacing="0" cellpadding="4" style="align: center">
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <table>
         <tbody>
-          <tr>
-            <td><tt>void</tt></td>
-            <td>No value</td>
-          </tr>
-          <tr>
-            <td><tt>ubyte</tt></td>
-            <td>Unsigned 8 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>ushort</tt></td>
-            <td>Unsigned 16 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>uint</tt></td>
-            <td>Unsigned 32 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>ulong</tt></td>
-            <td>Unsigned 64 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>
+        <tr><th>Type</th><th>Description</th></tr>
+        <tr><td><tt>void</tt></td><td>No value</td></tr>
+        <tr><td><tt>ubyte</tt></td><td>Unsigned 8 bit value</td></tr>
+        <tr><td><tt>ushort</tt></td><td>Unsigned 16 bit value</td></tr>
+        <tr><td><tt>uint</tt></td><td>Unsigned 32 bit value</td></tr>
+        <tr><td><tt>ulong</tt></td><td>Unsigned 64 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>
-      </td>
-      <td valign="top">
-      <table border="1" cellspacing="0" cellpadding="4">
+    </td>
+    <td class="right">
+      <table>
         <tbody>
-          <tr>
-            <td><tt>bool</tt></td>
-            <td>True or False value</td>
-          </tr>
-          <tr>
-            <td><tt>sbyte</tt></td>
-            <td>Signed 8 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>short</tt></td>
-            <td>Signed 16 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>int</tt></td>
-            <td>Signed 32 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>long</tt></td>
-            <td>Signed 64 bit value</td>
-          </tr>
-          <tr>
-            <td><tt>double</tt></td>
-            <td>64 bit floating point value</td>
-          </tr>
+          <tr><th>Type</th><th>Description</th></tr>
+          <tr><td><tt>bool</tt></td><td>True or False value</td></tr>
+          <tr><td><tt>sbyte</tt></td><td>Signed 8 bit value</td></tr>
+          <tr><td><tt>short</tt></td><td>Signed 16 bit value</td></tr>
+          <tr><td><tt>int</tt></td><td>Signed 32 bit value</td></tr>
+          <tr><td><tt>long</tt></td><td>Signed 64 bit value</td></tr>
+          <tr><td><tt>double</tt></td><td>64 bit floating point value</td></tr>
         </tbody>
       </table>
-      </td>
-    </tr>
-  </tbody>
+    </td>
+  </tr>
 </table>
-
 </div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_classifications">Type
 Classifications</a> </div>
@@ -375,6 +341,7 @@ classifications:</p>
 
 <table border="1" cellspacing="0" cellpadding="4">
   <tbody>
+    <tr><th>Classification</th><th>Types</th></tr>
     <tr>
       <td><a name="t_signed">signed</a></td>
       <td><tt>sbyte, short, int, long, float, double</tt></td>
@@ -389,7 +356,8 @@ classifications:</p>
     </tr>
     <tr>
       <td><a name="t_integral">integral</a></td>
-      <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long</tt></td>
+      <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long</tt>
+      </td>
     </tr>
     <tr>
       <td><a name="t_floating">floating point</a></td>
@@ -397,8 +365,9 @@ classifications:</p>
     </tr>
     <tr>
       <td><a name="t_firstclass">first class</a></td>
-      <td><tt>bool, ubyte, sbyte, ushort, short,<br>
-uint, int, ulong, long, float, double, <a href="#t_pointer">pointer</a></tt></td>
+      <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long,<br> 
+      float, double, <a href="#t_pointer">pointer</a>, 
+      <a href="#t_packed">packed</a></tt></td>
     </tr>
   </tbody>
 </table>
@@ -429,30 +398,37 @@ elements) and an underlying data type.</p>
 <p>The number of elements is a constant integer value, elementtype may
 be any type with a size.</p>
 <h5>Examples:</h5>
-<p> <tt>[40 x int ]</tt>: Array of 40 integer values.<br>
-<tt>[41 x int ]</tt>: Array of 41 integer values.<br>
-<tt>[40 x uint]</tt>: Array of 40 unsigned integer values.</p>
-<p> </p>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>[40 x int ]</tt><br/>
+      <tt>[41 x int ]</tt><br/>
+      <tt>[40 x uint]</tt><br/>
+    </td>
+    <td class="left">
+      Array of 40 integer values.<br/>
+      Array of 41 integer values.<br/>
+      Array of 40 unsigned integer values.<br/>
+    </td>
+  </tr>
+</table>
 <p>Here are some examples of multidimensional arrays:</p>
-
-<table border="0" cellpadding="0" cellspacing="0">
-  <tbody>
-    <tr>
-      <td><tt>[3 x [4 x int]]</tt></td>
-      <td>: 3x4 array integer values.</td>
-    </tr>
-    <tr>
-      <td><tt>[12 x [10 x float]]</tt></td>
-      <td>: 12x10 array of single precision floating point values.</td>
-    </tr>
-    <tr>
-      <td><tt>[2 x [3 x [4 x uint]]]</tt></td>
-      <td>: 2x3x4 array of unsigned integer values.</td>
-    </tr>
-  </tbody>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>[3 x [4 x int]]</tt><br/>
+      <tt>[12 x [10 x float]]</tt><br/>
+      <tt>[2 x [3 x [4 x uint]]]</tt><br/>
+    </td>
+    <td class="left">
+      3x4 array integer values.<br/>
+      12x10 array of single precision floating point values.<br/>
+      2x3x4 array of unsigned integer values.<br/>
+    </td>
+  </tr>
 </table>
-
 </div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_function">Function Type</a> </div>
 <div class="doc_text">
@@ -467,33 +443,29 @@ The return type of a function type cannot be an aggregate type.
 </p>
 <h5>Syntax:</h5>
 <pre>  &lt;returntype&gt; (&lt;parameter list&gt;)<br></pre>
-<p>Where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of
-type specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
+<p>Where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of type
+specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
 which indicates that the function takes a variable number of arguments.
 Variable argument functions can access their arguments with the <a
  href="#int_varargs">variable argument handling intrinsic</a> functions.</p>
 <h5>Examples:</h5>
-
-<table border="0" cellpadding="0" cellspacing="0">
-  <tbody>
-    <tr>
-      <td><tt>int (int)</tt></td>
-      <td>: function taking an <tt>int</tt>, returning an <tt>int</tt></td>
-    </tr>
-    <tr>
-      <td><tt>float (int, int *) *</tt></td>
-      <td>: <a href="#t_pointer">Pointer</a> to a function that takes
-an <tt>int</tt> and a <a href="#t_pointer">pointer</a> to <tt>int</tt>,
-returning <tt>float</tt>.</td>
-    </tr>
-    <tr>
-      <td><tt>int (sbyte *, ...)</tt></td>
-      <td>: A vararg function that takes at least one <a
- href="#t_pointer">pointer</a> to <tt>sbyte</tt> (signed char in C),
-which       returns an integer.  This is the signature for <tt>printf</tt>
-in LLVM.</td>
-    </tr>
-  </tbody>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>int (int)</tt> <br/>
+      <tt>float (int, int *) *</tt><br/>
+      <tt>int (sbyte *, ...)</tt><br/>
+    </td>
+    <td class="left">
+      function taking an <tt>int</tt>, returning an <tt>int</tt><br/>
+      <a href="#t_pointer">Pointer</a> to a function that takes an
+      <tt>int</tt> and a <a href="#t_pointer">pointer</a> to <tt>int</tt>,
+      returning <tt>float</tt>.<br/>
+      A vararg function that takes at least one <a href="#t_pointer">pointer</a> 
+      to <tt>sbyte</tt> (signed char in C), which returns an integer.  This is 
+      the signature for <tt>printf</tt> in LLVM.<br/>
+    </td>
+  </tr>
 </table>
 
 </div>
@@ -512,24 +484,22 @@ instruction.</p>
 <h5>Syntax:</h5>
 <pre>  { &lt;type list&gt; }<br></pre>
 <h5>Examples:</h5>
-
-<table border="0" cellpadding="0" cellspacing="0">
-  <tbody>
-    <tr>
-      <td><tt>{ int, int, int }</tt></td>
-      <td>: a triple of three <tt>int</tt> values</td>
-    </tr>
-    <tr>
-      <td><tt>{ float, int (int) * }</tt></td>
-      <td>: A pair, where the first element is a <tt>float</tt> and the
-second       element is a <a href="#t_pointer">pointer</a> to a <a
- href="#t_function">function</a> that takes an <tt>int</tt>, returning
-an <tt>int</tt>.</td>
-    </tr>
-  </tbody>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>{ int, int, int }</tt><br/>
+      <tt>{ float, int (int) * }</tt><br/>
+    </td>
+    <td class="left">
+      a triple of three <tt>int</tt> values<br/>
+      A pair, where the first element is a <tt>float</tt> and the second element 
+      is a <a href="#t_pointer">pointer</a> to a <a href="#t_function">function</a> 
+      that takes an <tt>int</tt>, returning an <tt>int</tt>.<br/>
+    </td>
+  </tr>
 </table>
-
 </div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
 <div class="doc_text">
@@ -539,41 +509,60 @@ reference to another object, which must live in memory.</p>
 <h5>Syntax:</h5>
 <pre>  &lt;type&gt; *<br></pre>
 <h5>Examples:</h5>
-
-<table border="0" cellpadding="0" cellspacing="0">
-  <tbody>
-    <tr>
-      <td><tt>[4x int]*</tt></td>
-      <td>: <a href="#t_pointer">pointer</a> to <a href="#t_array">array</a>
-of four <tt>int</tt> values</td>
-    </tr>
-    <tr>
-      <td><tt>int (int *) *</tt></td>
-      <td>: A <a href="#t_pointer">pointer</a> to a <a
- href="#t_function">function</a> that takes an <tt>int</tt>, returning
-an <tt>int</tt>.</td>
-    </tr>
-  </tbody>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>[4x int]*</tt><br/>
+      <tt>int (int *) *</tt><br/>
+    </td>
+    <td class="left">
+      A <a href="#t_pointer">pointer</a> to <a href="#t_array">array</a> of
+      four <tt>int</tt> values<br/>
+      A <a href="#t_pointer">pointer</a> to a <a
+      href="#t_function">function</a> that takes an <tt>int</tt>, returning an
+      <tt>int</tt>.<br/>
+    </td>
+  </tr>
 </table>
-
-</div>
-<!-- _______________________________________________________________________ --><!--
-<div class="doc_subsubsection">
-  <a name="t_packed">Packed Type</a>
 </div>
 
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="t_packed">Packed Type</a> </div>
 <div class="doc_text">
-
-Mention/decide that packed types work with saturation or not. Maybe have a packed+saturated type in addition to just a packed type.<p>
-
-Packed types should be 'nonsaturated' because standard data types are not saturated.  Maybe have a saturated packed type?<p>
-
+<h5>Overview:</h5>
+<p>A packed type is a simple derived type that represents a vector
+of elements.  Packed types are used when multiple primitive data 
+are operated in parallel using a single instruction (SIMD). 
+A packed type requires a size (number of
+elements) and an underlying primitive data type.  Packed types are
+considered <a href="#t_firstclass">first class</a>.</p>
+<h5>Syntax:</h5>
+<pre>  &lt; &lt;# elements&gt; x &lt;elementtype&gt; &gt;<br></pre>
+<p>The number of elements is a constant integer value, elementtype may
+be any integral or floating point type.</p>
+<h5>Examples:</h5>
+<table class="layout">
+  <tr class="layout">
+    <td class="left">
+      <tt>&lt;4 x int&gt;</tt><br/>
+      <tt>&lt;8 x float&gt;</tt><br/>
+      <tt>&lt;2 x uint&gt;</tt><br/>
+    </td>
+    <td class="left">
+      Packed vector of 4 integer values.<br/>
+      Packed vector of 8 floating-point values.<br/>
+      Packed vector of 2 unsigned integer values.<br/>
+    </td>
+  </tr>
+</table>
 </div>
 
---><!-- *********************************************************************** -->
+<!-- *********************************************************************** -->
 <div class="doc_section"> <a name="highlevel">High Level Structure</a> </div>
-<!-- *********************************************************************** --><!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="modulestructure">Module Structure</a> </div>
+<!-- *********************************************************************** -->
+<!-- ======================================================================= -->
+<div class="doc_subsection"> <a name="modulestructure">Module Structure</a>
+</div>
 <div class="doc_text">
 <p>LLVM programs are composed of "Module"s, each of which is a
 translation unit of the input programs.  Each module consists of
@@ -738,8 +727,9 @@ the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
 <p>There are five different terminator instructions: the '<a
  href="#i_ret"><tt>ret</tt></a>' instruction, the '<a href="#i_br"><tt>br</tt></a>'
 instruction, the '<a href="#i_switch"><tt>switch</tt></a>' instruction,
-the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, and the '<a
- href="#i_unwind"><tt>unwind</tt></a>' instruction.</p>
+the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, the '<a
+ href="#i_unwind"><tt>unwind</tt></a>' instruction, and the '<a
+ href="#i_unreachable"><tt>unreachable</tt></a>' instruction.</p>
 </div>
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="i_ret">'<tt>ret</tt>'
@@ -905,32 +895,71 @@ support them.</p>
 <pre>  %retval = invoke int %Test(int 15)<br>              to label %Continue<br>              except label %TestCleanup     <i>; {int}:retval set</i>
 </pre>
 </div>
+
+
 <!-- _______________________________________________________________________ -->
+
 <div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
 Instruction</a> </div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+  unwind
+</pre>
+
+<h5>Overview:</h5>
+
+<p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow
+at the first callee in the dynamic call stack which used an <a
+href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call.  This is
+primarily used to implement exception handling.</p>
+
+<h5>Semantics:</h5>
+
+<p>The '<tt>unwind</tt>' intrinsic causes execution of the current function to
+immediately halt.  The dynamic call stack is then searched for the first <a
+href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack.  Once found,
+execution continues at the "exceptional" destination block specified by the
+<tt>invoke</tt> instruction.  If there is no <tt>invoke</tt> instruction in the
+dynamic call chain, undefined behavior results.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+
+<div class="doc_subsubsection"> <a name="i_unreachable">'<tt>unreachable</tt>'
+Instruction</a> </div>
+
 <div class="doc_text">
+
 <h5>Syntax:</h5>
-<pre>  unwind<br></pre>
+<pre>
+  unreachable
+</pre>
+
 <h5>Overview:</h5>
-<p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing
-control flow at the first callee in the dynamic call stack which used
-an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the
-call.  This is primarily used to implement exception handling.</p>
+
+<p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
+instruction is used to inform the optimizer that a particular portion of the
+code is not reachable.  This can be used to indicate that the code after a
+no-return function cannot be reached, and other facts.</p>
+
 <h5>Semantics:</h5>
-<p>The '<tt>unwind</tt>' intrinsic causes execution of the current
-function to immediately halt.  The dynamic call stack is then searched
-for the first <a href="#i_invoke"><tt>invoke</tt></a> instruction on
-the call stack.  Once found, execution continues at the "exceptional"
-destination block specified by the <tt>invoke</tt> instruction.  If
-there is no <tt>invoke</tt> instruction in the dynamic call chain,
-undefined behavior results.</p>
+
+<p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>
 </div>
+
+
+
 <!-- ======================================================================= -->
 <div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>
 <div class="doc_text">
 <p>Binary operators are used to do most of the computation in a
 program.  They require two operands, execute an operation on them, and
-produce a single value. The result value of a binary operator is not
+produce a single value.  Although, that single value might represent 
+multiple data, as is the case with the <a href="#t_packed">packed</a> data type. 
+The result value of a binary operator is not
 necessarily the same type as its operands.</p>
 <p>There are several different binary operators:</p>
 </div>
@@ -945,8 +974,9 @@ Instruction</a> </div>
 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>add</tt>' instruction must be either <a
- href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
-values. Both arguments must have identical types.</p>
+ href="#t_integer">integer</a> or <a href="#t_floating">floating point</a> values.
+ This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point sum of the two
 operands.</p>
@@ -969,7 +999,9 @@ instruction present in most other intermediate representations.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>sub</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
-values. Both arguments must have identical types.</p>
+values. 
+This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point difference of
 the two operands.</p>
@@ -991,7 +1023,9 @@ operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>mul</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
-values. Both arguments must have identical types.</p>
+values. 
+This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point product of the
 two operands.</p>
@@ -1014,7 +1048,9 @@ operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>div</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
-values. Both arguments must have identical types.</p>
+values. 
+This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point quotient of the
 two operands.</p>
@@ -1035,7 +1071,9 @@ division of its two operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>rem</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
-values. Both arguments must have identical types.</p>
+values. 
+This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>This returns the <i>remainder</i> of a division (where the result
 has the same sign as the divisor), not the <i>modulus</i> (where the
@@ -1511,8 +1549,11 @@ compiled to LLVM:</p>
   %RT = type { sbyte, [10 x [20 x int]], sbyte }
   %ST = type { int, double, %RT }
 
-  int* "foo"(%ST* %s) {
-    %reg = getelementptr %ST* %s, int 1, uint 2, uint 1, int 5, int 13<br>
+  implementation
+
+  int* %foo(%ST* %s) {
+  entry:
+    %reg = getelementptr %ST* %s, int 1, uint 2, uint 1, int 5, int 13
     ret int* %reg
   }
 </pre>
@@ -1733,65 +1774,104 @@ the <a href="#i_invoke">invoke</a> instruction.</p>
 <h5>Example:</h5>
 <pre>  %retval = call int %test(int %argc)<br>  call int(sbyte*, ...) *%printf(sbyte* %msg, int 12, sbyte 42);<br></pre>
 </div>
+
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_vanext">'<tt>vanext</tt>'
-Instruction</a> </div>
+<div class="doc_subsubsection">
+  <a name="i_vanext">'<tt>vanext</tt>' Instruction</a>
+</div>
+
 <div class="doc_text">
+
 <h5>Syntax:</h5>
-<pre>  &lt;resultarglist&gt; = vanext &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;<br></pre>
+
+<pre>
+  &lt;resultarglist&gt; = vanext &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;
+</pre>
+
 <h5>Overview:</h5>
+
 <p>The '<tt>vanext</tt>' instruction is used to access arguments passed
 through the "variable argument" area of a function call.  It is used to
 implement the <tt>va_arg</tt> macro in C.</p>
+
 <h5>Arguments:</h5>
-<p>This instruction takes a <tt>valist</tt> value and the type of the
-argument. It returns another <tt>valist</tt>.</p>
+
+<p>This instruction takes a <tt>va_list</tt> value and the type of the
+argument. It returns another <tt>va_list</tt>. The actual type of
+<tt>va_list</tt> may be defined differently for different targets.  Most targets
+use a <tt>va_list</tt> type of <tt>sbyte*</tt> or some other pointer type.</p>
+
 <h5>Semantics:</h5>
-<p>The '<tt>vanext</tt>' instruction advances the specified <tt>valist</tt>
+
+<p>The '<tt>vanext</tt>' instruction advances the specified <tt>va_list</tt>
 past an argument of the specified type.  In conjunction with the <a
  href="#i_vaarg"><tt>vaarg</tt></a> instruction, it is used to implement
 the <tt>va_arg</tt> macro available in C.  For more information, see
 the variable argument handling <a href="#int_varargs">Intrinsic
 Functions</a>.</p>
+
 <p>It is legal for this instruction to be called in a function which
 does not take a variable number of arguments, for example, the <tt>vfprintf</tt>
 function.</p>
+
 <p><tt>vanext</tt> is an LLVM instruction instead of an <a
- href="#intrinsics">intrinsic function</a> because it takes an type as
-an argument.</p>
+href="#intrinsics">intrinsic function</a> because it takes a type as an
+argument.  The type refers to the current argument in the <tt>va_list</tt>, it
+tells the compiler how far on the stack it needs to advance to find the next
+argument</p>
+
 <h5>Example:</h5>
+
 <p>See the <a href="#int_varargs">variable argument processing</a>
 section.</p>
+
 </div>
+
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_vaarg">'<tt>vaarg</tt>'
-Instruction</a> </div>
+<div class="doc_subsubsection">
+  <a name="i_vaarg">'<tt>vaarg</tt>' Instruction</a>
+</div>
+
 <div class="doc_text">
+
 <h5>Syntax:</h5>
-<pre>  &lt;resultval&gt; = vaarg &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;<br></pre>
+
+<pre>
+  &lt;resultval&gt; = vaarg &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;
+</pre>
+
 <h5>Overview:</h5>
-<p>The '<tt>vaarg</tt>' instruction is used to access arguments passed
-through the "variable argument" area of a function call.  It is used to
-implement the <tt>va_arg</tt> macro in C.</p>
+
+<p>The '<tt>vaarg</tt>' instruction is used to access arguments passed through
+the "variable argument" area of a function call.  It is used to implement the
+<tt>va_arg</tt> macro in C.</p>
+
 <h5>Arguments:</h5>
-<p>This instruction takes a <tt>valist</tt> value and the type of the
-argument. It returns a value of the specified argument type.</p>
+
+<p>This instruction takes a <tt>va_list</tt> value and the type of the
+argument. It returns a value of the specified argument type.  Again, the actual
+type of <tt>va_list</tt> is target specific.</p>
+
 <h5>Semantics:</h5>
-<p>The '<tt>vaarg</tt>' instruction loads an argument of the specified
-type from the specified <tt>va_list</tt>.  In conjunction with the <a
- href="#i_vanext"><tt>vanext</tt></a> instruction, it is used to
-implement the <tt>va_arg</tt> macro available in C.  For more
-information, see the variable argument handling <a href="#int_varargs">Intrinsic
-Functions</a>.</p>
-<p>It is legal for this instruction to be called in a function which
-does not take a variable number of arguments, for example, the <tt>vfprintf</tt>
+
+<p>The '<tt>vaarg</tt>' instruction loads an argument of the specified type from
+the specified <tt>va_list</tt>.  In conjunction with the <a
+href="#i_vanext"><tt>vanext</tt></a> instruction, it is used to implement the
+<tt>va_arg</tt> macro available in C.  For more information, see the variable
+argument handling <a href="#int_varargs">Intrinsic Functions</a>.</p>
+
+<p>It is legal for this instruction to be called in a function which does not
+take a variable number of arguments, for example, the <tt>vfprintf</tt>
 function.</p>
+
 <p><tt>vaarg</tt> is an LLVM instruction instead of an <a
- href="#intrinsics">intrinsic function</a> because it takes an type as
-an argument.</p>
+href="#intrinsics">intrinsic function</a> because it takes an type as an
+argument.</p>
+
 <h5>Example:</h5>
-<p>See the <a href="#int_varargs">variable argument processing</a>
-section.</p>
+
+<p>See the <a href="#int_varargs">variable argument processing</a> section.</p>
+
 </div>
 
 <!-- *********************************************************************** -->
@@ -1878,7 +1958,7 @@ int %test(int %X, ...) {
 
 <div class="doc_text">
 <h5>Syntax:</h5>
-<pre>  call va_list ()* %llvm.va_start()<br></pre>
+<pre>  call &lt;va_list&gt; ()* %llvm.va_start()<br></pre>
 <h5>Overview:</h5>
 <p>The '<tt>llvm.va_start</tt>' intrinsic returns a new <tt>&lt;arglist&gt;</tt>
 for subsequent use by the variable argument intrinsics.</p>
@@ -1900,7 +1980,7 @@ within the body of a variable argument function.</p>
 
 <div class="doc_text">
 <h5>Syntax:</h5>
-<pre>  call void (va_list)* %llvm.va_end(va_list &lt;arglist&gt;)<br></pre>
+<pre>  call void (&lt;va_list&gt;)* %llvm.va_end(&lt;va_list&gt; &lt;arglist&gt;)<br></pre>
 <h5>Overview:</h5>
 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>&lt;arglist&gt;</tt>
 which has been initialized previously with <tt><a href="#i_va_start">llvm.va_start</a></tt>
@@ -1925,7 +2005,7 @@ with calls to <tt>llvm.va_end</tt>.</p>
 <h5>Syntax:</h5>
 
 <pre>
-  call va_list (va_list)* %llvm.va_copy(va_list &lt;destarglist&gt;)
+  call  &lt;va_list&gt; (&lt;va_list&gt;)* %llvm.va_copy(&lt;va_list&gt; &lt;destarglist&gt;)
 </pre>
 
 <h5>Overview:</h5>