+
+<!-- ======================================================================= -->
+<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 operands might represent
+multiple data, as is the case with the <a href="#t_vector">vector</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>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_add">'<tt>add</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = add <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<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.
+ This instruction can also take <a href="#t_vector">vector</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>
+<h5>Example:</h5>
+<pre> <result> = add i32 4, %var <i>; yields {i32}:result = 4 + %var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_sub">'<tt>sub</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = sub <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>sub</tt>' instruction returns the difference of its two
+operands.</p>
+<p>Note that the '<tt>sub</tt>' instruction is used to represent the '<tt>neg</tt>'
+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.
+This instruction can also take <a href="#t_vector">vector</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>
+<h5>Example:</h5>
+<pre> <result> = sub i32 4, %var <i>; yields {i32}:result = 4 - %var</i>
+ <result> = sub i32 0, %val <i>; yields {i32}:result = -%var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_mul">'<tt>mul</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = mul <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>mul</tt>' instruction returns the product of its two
+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.
+This instruction can also take <a href="#t_vector">vector</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>
+<p>Because the operands are the same width, the result of an integer
+multiplication is the same whether the operands should be deemed unsigned or
+signed.</p>
+<h5>Example:</h5>
+<pre> <result> = mul i32 4, %var <i>; yields {i32}:result = 4 * %var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_udiv">'<tt>udiv</tt>' Instruction
+</a></div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = udiv <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>udiv</tt>' instruction returns the quotient of its two
+operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>udiv</tt>' instruction must be
+<a href="#t_integer">integer</a> values. Both arguments must have identical
+types. This instruction can also take <a href="#t_vector">vector</a> versions
+of the values in which case the elements must be integers.</p>
+<h5>Semantics:</h5>
+<p>The value produced is the unsigned integer quotient of the two operands. This
+instruction always performs an unsigned division operation, regardless of
+whether the arguments are unsigned or not.</p>
+<h5>Example:</h5>
+<pre> <result> = udiv i32 4, %var <i>; yields {i32}:result = 4 / %var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_sdiv">'<tt>sdiv</tt>' Instruction
+</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = sdiv <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>sdiv</tt>' instruction returns the quotient of its two
+operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>sdiv</tt>' instruction must be
+<a href="#t_integer">integer</a> values. Both arguments must have identical
+types. This instruction can also take <a href="#t_vector">vector</a> versions
+of the values in which case the elements must be integers.</p>
+<h5>Semantics:</h5>
+<p>The value produced is the signed integer quotient of the two operands. This
+instruction always performs a signed division operation, regardless of whether
+the arguments are signed or not.</p>
+<h5>Example:</h5>
+<pre> <result> = sdiv i32 4, %var <i>; yields {i32}:result = 4 / %var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_fdiv">'<tt>fdiv</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = fdiv <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>fdiv</tt>' instruction returns the quotient of its two
+operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>div</tt>' instruction must be
+<a href="#t_floating">floating point</a> values. Both arguments must have
+identical types. This instruction can also take <a href="#t_vector">vector</a>
+versions of the values in which case the elements must be floating point.</p>
+<h5>Semantics:</h5>
+<p>The value produced is the floating point quotient of the two operands.</p>
+<h5>Example:</h5>
+<pre> <result> = fdiv float 4.0, %var <i>; yields {float}:result = 4.0 / %var</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_urem">'<tt>urem</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = urem <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>urem</tt>' instruction returns the remainder from the
+unsigned division of its two arguments.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>urem</tt>' instruction must be
+<a href="#t_integer">integer</a> values. Both arguments must have identical
+types.</p>
+<h5>Semantics:</h5>
+<p>This instruction returns the unsigned integer <i>remainder</i> of a division.
+This instruction always performs an unsigned division to get the remainder,
+regardless of whether the arguments are unsigned or not.</p>
+<h5>Example:</h5>
+<pre> <result> = urem i32 4, %var <i>; yields {i32}:result = 4 % %var</i>
+</pre>
+
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_srem">'<tt>srem</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = srem <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>srem</tt>' instruction returns the remainder from the
+signed division of its two operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>srem</tt>' instruction must be
+<a href="#t_integer">integer</a> values. Both arguments must have identical
+types.</p>
+<h5>Semantics:</h5>
+<p>This instruction returns the <i>remainder</i> of a division (where the result
+has the same sign as the dividend, <tt>var1</tt>), not the <i>modulo</i>
+operator (where the result has the same sign as the divisor, <tt>var2</tt>) of
+a value. For more information about the difference, see <a
+ href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
+Math Forum</a>. For a table of how this is implemented in various languages,
+please see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">
+Wikipedia: modulo operation</a>.</p>
+<h5>Example:</h5>
+<pre> <result> = srem i32 4, %var <i>; yields {i32}:result = 4 % %var</i>
+</pre>
+
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_frem">'<tt>frem</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = frem <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>frem</tt>' instruction returns the remainder from the
+division of its two operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>frem</tt>' instruction must be
+<a href="#t_floating">floating point</a> values. Both arguments must have
+identical types.</p>
+<h5>Semantics:</h5>
+<p>This instruction returns the <i>remainder</i> of a division.</p>
+<h5>Example:</h5>
+<pre> <result> = frem float 4.0, %var <i>; yields {float}:result = 4.0 % %var</i>
+</pre>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
+Operations</a> </div>
+<div class="doc_text">
+<p>Bitwise binary operators are used to do various forms of
+bit-twiddling in a program. They are generally very efficient
+instructions and can commonly be strength reduced from other
+instructions. They require two operands, execute an operation on them,
+and produce a single value. The resulting value of the bitwise binary
+operators is always the same type as its first operand.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = shl <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>shl</tt>' instruction returns the first operand shifted to
+the left a specified number of bits.</p>
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>shl</tt>' instruction must be the same <a
+ href="#t_integer">integer</a> type.</p>
+<h5>Semantics:</h5>
+<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
+<h5>Example:</h5><pre>
+ <result> = shl i32 4, %var <i>; yields {i32}: 4 << %var</i>
+ <result> = shl i32 4, 2 <i>; yields {i32}: 16</i>
+ <result> = shl i32 1, 10 <i>; yields {i32}: 1024</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = lshr <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
+operand shifted to the right a specified number of bits.</p>
+
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>lshr</tt>' instruction must be the same
+<a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>This instruction always performs a logical shift right operation. The most
+significant bits of the result will be filled with zero bits after the
+shift.</p>
+
+<h5>Example:</h5>
+<pre>
+ <result> = lshr i32 4, 1 <i>; yields {i32}:result = 2</i>
+ <result> = lshr i32 4, 2 <i>; yields {i32}:result = 1</i>
+ <result> = lshr i8 4, 3 <i>; yields {i8}:result = 0</i>
+ <result> = lshr i8 -2, 1 <i>; yields {i8}:result = 0x7FFFFFFF </i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre> <result> = ashr <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
+operand shifted to the right a specified number of bits.</p>
+
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>ashr</tt>' instruction must be the same
+<a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>This instruction always performs an arithmetic shift right operation,
+The most significant bits of the result will be filled with the sign bit
+of <tt>var1</tt>.</p>
+
+<h5>Example:</h5>
+<pre>
+ <result> = ashr i32 4, 1 <i>; yields {i32}:result = 2</i>
+ <result> = ashr i32 4, 2 <i>; yields {i32}:result = 1</i>
+ <result> = ashr i8 4, 3 <i>; yields {i8}:result = 0</i>
+ <result> = ashr i8 -2, 1 <i>; yields {i8}:result = -1</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = and <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>and</tt>' instruction returns the bitwise logical and of
+its two operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>and</tt>' instruction must be <a
+ href="#t_integer">integer</a> values. Both arguments must have
+identical types.</p>
+<h5>Semantics:</h5>
+<p>The truth table used for the '<tt>and</tt>' instruction is:</p>
+<p> </p>
+<div style="align: center">
+<table border="1" cellspacing="0" cellpadding="4">
+ <tbody>
+ <tr>
+ <td>In0</td>
+ <td>In1</td>
+ <td>Out</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<h5>Example:</h5>
+<pre> <result> = and i32 4, %var <i>; yields {i32}:result = 4 & %var</i>
+ <result> = and i32 15, 40 <i>; yields {i32}:result = 8</i>
+ <result> = and i32 4, 8 <i>; yields {i32}:result = 0</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = or <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive
+or of its two operands.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>or</tt>' instruction must be <a
+ href="#t_integer">integer</a> values. Both arguments must have
+identical types.</p>
+<h5>Semantics:</h5>
+<p>The truth table used for the '<tt>or</tt>' instruction is:</p>
+<p> </p>
+<div style="align: center">
+<table border="1" cellspacing="0" cellpadding="4">
+ <tbody>
+ <tr>
+ <td>In0</td>
+ <td>In1</td>
+ <td>Out</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<h5>Example:</h5>
+<pre> <result> = or i32 4, %var <i>; yields {i32}:result = 4 | %var</i>
+ <result> = or i32 15, 40 <i>; yields {i32}:result = 47</i>
+ <result> = or i32 4, 8 <i>; yields {i32}:result = 12</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_xor">'<tt>xor</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = xor <ty> <var1>, <var2> <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive
+or of its two operands. The <tt>xor</tt> is used to implement the
+"one's complement" operation, which is the "~" operator in C.</p>
+<h5>Arguments:</h5>
+<p>The two arguments to the '<tt>xor</tt>' instruction must be <a
+ href="#t_integer">integer</a> values. Both arguments must have
+identical types.</p>
+<h5>Semantics:</h5>
+<p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
+<p> </p>
+<div style="align: center">
+<table border="1" cellspacing="0" cellpadding="4">
+ <tbody>
+ <tr>
+ <td>In0</td>
+ <td>In1</td>
+ <td>Out</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<p> </p>
+<h5>Example:</h5>
+<pre> <result> = xor i32 4, %var <i>; yields {i32}:result = 4 ^ %var</i>
+ <result> = xor i32 15, 40 <i>; yields {i32}:result = 39</i>
+ <result> = xor i32 4, 8 <i>; yields {i32}:result = 12</i>
+ <result> = xor i32 %V, -1 <i>; yields {i32}:result = ~%V</i>
+</pre>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+ <a name="vectorops">Vector Operations</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM supports several instructions to represent vector operations in a
+target-independent manner. This instructions cover the element-access and
+vector-specific operations needed to process vectors effectively. While LLVM
+does directly support these vector operations, many sophisticated algorithms
+will want to use target-specific intrinsics to take full advantage of a specific
+target.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = extractelement <n x <ty>> <val>, i32 <idx> <i>; yields <ty></i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>extractelement</tt>' instruction extracts a single scalar
+element from a vector at a specified index.
+</p>
+
+
+<h5>Arguments:</h5>
+
+<p>
+The first operand of an '<tt>extractelement</tt>' instruction is a
+value of <a href="#t_vector">vector</a> type. The second operand is
+an index indicating the position from which to extract the element.
+The index may be a variable.</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The result is a scalar of the same type as the element type of
+<tt>val</tt>. Its value is the value at position <tt>idx</tt> of
+<tt>val</tt>. If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
+results are undefined.
+</p>
+
+<h5>Example:</h5>
+
+<pre>
+ %result = extractelement <4 x i32> %vec, i32 0 <i>; yields i32</i>
+</pre>
+</div>
+
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = insertelement <n x <ty>> <val>, <ty> <elt>, i32 <idx> <i>; yields <n x <ty>></i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>insertelement</tt>' instruction inserts a scalar
+element into a vector at a specified index.
+</p>
+
+
+<h5>Arguments:</h5>
+
+<p>
+The first operand of an '<tt>insertelement</tt>' instruction is a
+value of <a href="#t_vector">vector</a> type. The second operand is a
+scalar value whose type must equal the element type of the first
+operand. The third operand is an index indicating the position at
+which to insert the value. The index may be a variable.</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The result is a vector of the same type as <tt>val</tt>. Its
+element values are those of <tt>val</tt> except at position
+<tt>idx</tt>, where it gets the value <tt>elt</tt>. If <tt>idx</tt>
+exceeds the length of <tt>val</tt>, the results are undefined.
+</p>
+
+<h5>Example:</h5>
+
+<pre>
+ %result = insertelement <4 x i32> %vec, i32 1, i32 0 <i>; yields <4 x i32></i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <n x i32> <mask> <i>; yields <n x <ty>></i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>shufflevector</tt>' instruction constructs a permutation of elements
+from two input vectors, returning a vector of the same type.
+</p>
+
+<h5>Arguments:</h5>
+
+<p>
+The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
+with types that match each other and types that match the result of the
+instruction. The third argument is a shuffle mask, which has the same number
+of elements as the other vector type, but whose element type is always 'i32'.
+</p>
+
+<p>
+The shuffle mask operand is required to be a constant vector with either
+constant integer or undef values.
+</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The elements of the two input vectors are numbered from left to right across
+both of the vectors. The shuffle mask operand specifies, for each element of
+the result vector, which element of the two input registers the result element
+gets. The element selector may be undef (meaning "don't care") and the second
+operand may be undef if performing a shuffle from only one vector.
+</p>
+
+<h5>Example:</h5>
+
+<pre>
+ %result = shufflevector <4 x i32> %v1, <4 x i32> %v2,
+ <4 x i32> <i32 0, i32 4, i32 1, i32 5> <i>; yields <4 x i32></i>
+ %result = shufflevector <4 x i32> %v1, <4 x i32> undef,
+ <4 x i32> <i32 0, i32 1, i32 2, i32 3> <i>; yields <4 x i32></i> - Identity shuffle.
+</pre>
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+ <a name="memoryops">Memory Access and Addressing Operations</a>
+</div>
+
+<div class="doc_text">
+
+<p>A key design point of an SSA-based representation is how it
+represents memory. In LLVM, no memory locations are in SSA form, which
+makes things very simple. This section describes how to read, write,
+allocate, and free memory in LLVM.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_malloc">'<tt>malloc</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = malloc <type>[, i32 <NumElements>][, align <alignment>] <i>; yields {type*}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>The '<tt>malloc</tt>' instruction allocates memory from the system
+heap and returns a pointer to it.</p>
+
+<h5>Arguments:</h5>
+
+<p>The '<tt>malloc</tt>' instruction allocates
+<tt>sizeof(<type>)*NumElements</tt>
+bytes of memory from the operating system and returns a pointer of the
+appropriate type to the program. If "NumElements" is specified, it is the
+number of elements allocated. If an alignment is specified, the value result
+of the allocation is guaranteed to be aligned to at least that boundary. If
+not specified, or if zero, the target can choose to align the allocation on any
+convenient boundary.</p>
+
+<p>'<tt>type</tt>' must be a sized type.</p>
+
+<h5>Semantics:</h5>
+
+<p>Memory is allocated using the system "<tt>malloc</tt>" function, and
+a pointer is returned.</p>
+
+<h5>Example:</h5>
+
+<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>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_free">'<tt>free</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ free <type> <value> <i>; yields {void}</i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>The '<tt>free</tt>' instruction returns memory back to the unused
+memory heap to be reallocated in the future.</p>
+
+<h5>Arguments:</h5>
+
+<p>'<tt>value</tt>' shall be a pointer value that points to a value
+that was allocated with the '<tt><a href="#i_malloc">malloc</a></tt>'
+instruction.</p>
+
+<h5>Semantics:</h5>
+
+<p>Access to the memory pointed to by the pointer is no longer defined
+after this instruction executes.</p>
+
+<h5>Example:</h5>
+
+<pre>
+ %array = <a href="#i_malloc">malloc</a> [4 x i8] <i>; yields {[4 x i8]*}:array</i>
+ free [4 x i8]* %array
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = alloca <type>[, i32 <NumElements>][, align <alignment>] <i>; yields {type*}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+
+<p>The '<tt>alloca</tt>' instruction allocates memory on the current
+stack frame of the procedure that is live until the current function
+returns to its caller.</p>
+
+<h5>Arguments:</h5>
+
+<p>The '<tt>alloca</tt>' instruction allocates <tt>sizeof(<type>)*NumElements</tt>
+bytes of memory on the runtime stack, returning a pointer of the
+appropriate type to the program. If "NumElements" is specified, it is the
+number of elements allocated. If an alignment is specified, the value result
+of the allocation is guaranteed to be aligned to at least that boundary. If
+not specified, or if zero, the target can choose to align the allocation on any
+convenient boundary.</p>
+
+<p>'<tt>type</tt>' may be any sized type.</p>
+
+<h5>Semantics:</h5>
+
+<p>Memory is allocated; a pointer is returned. '<tt>alloca</tt>'d
+memory is automatically released when the function returns. The '<tt>alloca</tt>'
+instruction is commonly used to represent automatic variables that must
+have an address available. When the function returns (either with the <tt><a
+ href="#i_ret">ret</a></tt> or <tt><a href="#i_unwind">unwind</a></tt>
+instructions), the memory is reclaimed.</p>
+
+<h5>Example:</h5>
+
+<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, align 1024 <i>; yields {i32*}:ptr</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_load">'<tt>load</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> <result> = load <ty>* <pointer><br> <result> = volatile load <ty>* <pointer><br></pre>
+<h5>Overview:</h5>
+<p>The '<tt>load</tt>' instruction is used to read from memory.</p>
+<h5>Arguments:</h5>
+<p>The argument to the '<tt>load</tt>' instruction specifies the memory
+address from which to load. The pointer must point to a <a
+ href="#t_firstclass">first class</a> type. If the <tt>load</tt> is
+marked as <tt>volatile</tt>, then the optimizer is not allowed to modify
+the number or order of execution of this <tt>load</tt> with other
+volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
+instructions. </p>
+<h5>Semantics:</h5>
+<p>The location of memory pointed to is loaded.</p>
+<h5>Examples:</h5>
+<pre> %ptr = <a href="#i_alloca">alloca</a> i32 <i>; yields {i32*}:ptr</i>
+ <a
+ href="#i_store">store</a> i32 3, i32* %ptr <i>; yields {void}</i>
+ %val = load i32* %ptr <i>; yields {i32}:val = i32 3</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre> store <ty> <value>, <ty>* <pointer> <i>; yields {void}</i>
+ volatile store <ty> <value>, <ty>* <pointer> <i>; yields {void}</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>store</tt>' instruction is used to write to memory.</p>
+<h5>Arguments:</h5>
+<p>There are two arguments to the '<tt>store</tt>' instruction: a value
+to store and an address in which to store it. The type of the '<tt><pointer></tt>'
+operand must be a pointer to the type of the '<tt><value></tt>'
+operand. If the <tt>store</tt> is marked as <tt>volatile</tt>, then the
+optimizer is not allowed to modify the number or order of execution of
+this <tt>store</tt> with other volatile <tt>load</tt> and <tt><a
+ href="#i_store">store</a></tt> instructions.</p>
+<h5>Semantics:</h5>
+<p>The contents of memory are updated to contain '<tt><value></tt>'
+at the location specified by the '<tt><pointer></tt>' operand.</p>
+<h5>Example:</h5>
+<pre> %ptr = <a href="#i_alloca">alloca</a> i32 <i>; yields {i32*}:ptr</i>
+ <a
+ href="#i_store">store</a> i32 3, i32* %ptr <i>; yields {void}</i>
+ %val = load i32* %ptr <i>; yields {i32}:val = i32 3</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre>
+ <result> = getelementptr <ty>* <ptrval>{, <ty> <idx>}*
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>getelementptr</tt>' instruction is used to get the address of a
+subelement of an aggregate data structure.</p>
+
+<h5>Arguments:</h5>
+
+<p>This instruction takes a list of integer operands that indicate what
+elements of the aggregate object to index to. The actual types of the arguments
+provided depend on the type of the first pointer argument. The
+'<tt>getelementptr</tt>' instruction is used to index down through the type
+levels of a structure or to a specific index in an array. When indexing into a
+structure, only <tt>i32</tt> integer constants are allowed. When indexing
+into an array or pointer, only integers of 32 or 64 bits are allowed, and will
+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>
+
+<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 &s[1].Z.B[5][13];
+ }
+</pre>
+
+<p>The LLVM code generated by the GCC frontend is:</p>
+
+<pre>
+ %RT = type { i8 , [10 x [20 x i32]], i8 }
+ %ST = type { i32, double, %RT }
+
+ implementation
+
+ define i32* %foo(%ST* %s) {
+ entry:
+ %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
+ ret i32* %reg
+ }
+</pre>
+
+<h5>Semantics:</h5>
+
+<p>The index types specified for the '<tt>getelementptr</tt>' instruction depend
+on the pointer type that is being indexed into. <a href="#t_pointer">Pointer</a>
+and <a href="#t_array">array</a> types can use a 32-bit or 64-bit
+<a href="#t_integer">integer</a> type but the value will always be sign extended
+to 64-bits. <a href="#t_struct">Structure</a> types, require <tt>i32</tt>
+<b>constants</b>.</p>
+
+<p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
+type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
+}</tt>' type, a structure. The second index indexes into the third element of
+the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
+i8 }</tt>' type, another structure. The third index indexes into the second
+element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
+array. The two dimensions of the array are subscripted into, yielding an
+'<tt>i32</tt>' type. The '<tt>getelementptr</tt>' instruction returns a pointer
+to this element, thus computing a value of '<tt>i32*</tt>' type.</p>
+
+<p>Note that it is perfectly legal to index partially through a
+structure, returning a pointer to an inner element. Because of this,
+the LLVM code for the given testcase is equivalent to:</p>
+
+<pre>
+ define i32* %foo(%ST* %s) {
+ %t1 = getelementptr %ST* %s, i32 1 <i>; yields %ST*:%t1</i>
+ %t2 = getelementptr %ST* %t1, i32 0, i32 2 <i>; yields %RT*:%t2</i>
+ %t3 = getelementptr %RT* %t2, i32 0, i32 1 <i>; yields [10 x [20 x i32]]*:%t3</i>
+ %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5 <i>; yields [20 x i32]*:%t4</i>
+ %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13 <i>; yields i32*:%t5</i>
+ ret i32* %t5
+ }
+</pre>
+
+<p>Note that it is undefined to access an array out of bounds: array and
+pointer indexes must always be within the defined bounds of the array type.
+The one exception for this rules is zero length arrays. These arrays are
+defined to be accessible as variable length arrays, which requires access
+beyond the zero'th element.</p>
+
+<p>The getelementptr instruction is often confusing. For some more insight
+into how it works, see <a href="GetElementPtr.html">the getelementptr
+FAQ</a>.</p>
+
+<h5>Example:</h5>
+
+<pre>
+ <i>; yields [12 x i8]*:aptr</i>
+ %aptr = getelementptr {i32, [12 x i8]}* %sptr, i64 0, i32 1
+</pre>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"> <a name="convertops">Conversion Operations</a>
+</div>
+<div class="doc_text">
+<p>The instructions in this category are the conversion instructions (casting)
+which all take a single operand and a type. They perform various bit conversions
+on the operand.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = trunc <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>
+The '<tt>trunc</tt>' instruction truncates its operand to the type <tt>ty2</tt>.
+</p>
+
+<h5>Arguments:</h5>
+<p>
+The '<tt>trunc</tt>' instruction takes a <tt>value</tt> to trunc, which must
+be an <a href="#t_integer">integer</a> type, and a type that specifies the size
+and type of the result, which must be an <a href="#t_integer">integer</a>
+type. The bit size of <tt>value</tt> must be larger than the bit size of
+<tt>ty2</tt>. Equal sized types are not allowed.</p>
+
+<h5>Semantics:</h5>
+<p>
+The '<tt>trunc</tt>' instruction truncates the high order bits in <tt>value</tt>
+and converts the remaining bits to <tt>ty2</tt>. Since the source size must be
+larger than the destination size, <tt>trunc</tt> cannot be a <i>no-op cast</i>.
+It will always truncate bits.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = trunc i32 257 to i8 <i>; yields i8:1</i>
+ %Y = trunc i32 123 to i1 <i>; yields i1:true</i>
+ %Y = trunc i32 122 to i1 <i>; yields i1:false</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = zext <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>zext</tt>' instruction zero extends its operand to type
+<tt>ty2</tt>.</p>
+
+
+<h5>Arguments:</h5>
+<p>The '<tt>zext</tt>' instruction takes a value to cast, which must be of
+<a href="#t_integer">integer</a> type, and a type to cast it to, which must
+also be of <a href="#t_integer">integer</a> type. The bit size of the
+<tt>value</tt> must be smaller than the bit size of the destination type,
+<tt>ty2</tt>.</p>
+
+<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>
+
+<p>When zero extending from i1, the result will always be either 0 or 1.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = zext i32 257 to i64 <i>; yields i64:257</i>
+ %Y = zext i1 true to i32 <i>; yields i32:1</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = sext <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>
+
+<h5>Arguments:</h5>
+<p>
+The '<tt>sext</tt>' instruction takes a value to cast, which must be of
+<a href="#t_integer">integer</a> type, and a type to cast it to, which must
+also be of <a href="#t_integer">integer</a> type. The bit size of the
+<tt>value</tt> must be smaller than the bit size of the destination type,
+<tt>ty2</tt>.</p>
+
+<h5>Semantics:</h5>
+<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>
+
+<p>When sign extending from i1, the extension always results in -1 or 0.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = sext i8 -1 to i16 <i>; yields i16 :65535</i>
+ %Y = sext i1 true to i32 <i>; yields i32:-1</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+
+<pre>
+ <result> = fptrunc <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
+<tt>ty2</tt>.</p>
+
+
+<h5>Arguments:</h5>
+<p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
+ point</a> value to cast and a <a href="#t_floating">floating point</a> type to
+cast it to. The size of <tt>value</tt> must be larger than the size of
+<tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a
+<i>no-op cast</i>.</p>
+
+<h5>Semantics:</h5>
+<p> The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
+<a href="#t_floating">floating point</a> type to a smaller
+<a href="#t_floating">floating point</a> type. If the value cannot fit within
+the destination type, <tt>ty2</tt>, then the results are undefined.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = fptrunc double 123.0 to float <i>; yields float:123.0</i>
+ %Y = fptrunc double 1.0E+300 to float <i>; yields undefined</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = fpext <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
+floating point value.</p>
+
+<h5>Arguments:</h5>
+<p>The '<tt>fpext</tt>' instruction takes a
+<a href="#t_floating">floating point</a> <tt>value</tt> to cast,
+and a <a href="#t_floating">floating point</a> type to cast it to. The source
+type must be smaller than the destination type.</p>
+
+<h5>Semantics:</h5>
+<p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
+<a href="t_floating">floating point</a> type to a larger
+<a href="t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
+used to make a <i>no-op cast</i> because it always changes bits. Use
+<tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = fpext float 3.1415 to double <i>; yields double:3.1415</i>
+ %Y = fpext float 1.0 to float <i>; yields float:1.0 (no-op)</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = fp2uint <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>fp2uint</tt>' converts a floating point <tt>value</tt> to its
+unsigned integer equivalent of type <tt>ty2</tt>.
+</p>
+
+<h5>Arguments:</h5>
+<p>The '<tt>fp2uint</tt>' instruction takes a value to cast, which must be a
+<a href="#t_floating">floating point</a> value, and a type to cast it to, which
+must be an <a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p> The '<tt>fp2uint</tt>' instruction converts its
+<a href="#t_floating">floating point</a> operand into the nearest (rounding
+towards zero) unsigned integer value. If the value cannot fit in <tt>ty2</tt>,
+the results are undefined.</p>
+
+<p>When converting to i1, the conversion is done as a comparison against
+zero. If the <tt>value</tt> was zero, the i1 result will be <tt>false</tt>.
+If the <tt>value</tt> was non-zero, the i1 result will be <tt>true</tt>.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = fp2uint double 123.0 to i32 <i>; yields i32:123</i>
+ %Y = fp2uint float 1.0E+300 to i1 <i>; yields i1:true</i>
+ %X = fp2uint float 1.04E+17 to i8 <i>; yields undefined:1</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = fptosi <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>fptosi</tt>' instruction converts
+<a href="#t_floating">floating point</a> <tt>value</tt> to type <tt>ty2</tt>.
+</p>
+
+
+<h5>Arguments:</h5>
+<p> The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a
+<a href="#t_floating">floating point</a> value, and a type to cast it to, which
+must also be an <a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>The '<tt>fptosi</tt>' instruction converts its
+<a href="#t_floating">floating point</a> operand into the nearest (rounding
+towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
+the results are undefined.</p>
+
+<p>When converting to i1, the conversion is done as a comparison against
+zero. If the <tt>value</tt> was zero, the i1 result will be <tt>false</tt>.
+If the <tt>value</tt> was non-zero, the i1 result will be <tt>true</tt>.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = fptosi double -123.0 to i32 <i>; yields i32:-123</i>
+ %Y = fptosi float 1.0E-247 to i1 <i>; yields i1:true</i>
+ %X = fptosi float 1.04E+17 to i8 <i>; yields undefined:1</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = uitofp <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
+integer and converts that value to the <tt>ty2</tt> type.</p>
+
+
+<h5>Arguments:</h5>
+<p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be an
+<a href="#t_integer">integer</a> value, and a type to cast it to, which must
+be a <a href="#t_floating">floating point</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
+integer quantity and converts it to the corresponding floating point value. If
+the value cannot fit in the floating point value, the results are undefined.</p>
+
+
+<h5>Example:</h5>
+<pre>
+ %X = uitofp i32 257 to float <i>; yields float:257.0</i>
+ %Y = uitofp i8 -1 to double <i>; yields double:255.0</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = sitofp <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed
+integer and converts that value to the <tt>ty2</tt> type.</p>
+
+<h5>Arguments:</h5>
+<p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be an
+<a href="#t_integer">integer</a> value, and a type to cast it to, which must be
+a <a href="#t_floating">floating point</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed
+integer quantity and converts it to the corresponding floating point value. If
+the value cannot fit in the floating point value, the results are undefined.</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = sitofp i32 257 to float <i>; yields float:257.0</i>
+ %Y = sitofp i8 -1 to double <i>; yields double:-1.0</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>
+ <result> = ptrtoint <ty> <value> to <ty2> <i>; yields ty2</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
+the integer type <tt>ty2</tt>.</p>
+
+<h5>Arguments:</h5>
+<p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which
+must be a <a href="t_pointer">pointer</a> value, and a type to cast it to
+<tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.
+
+<h5>Semantics:</h5>
+<p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
+<tt>ty2</tt> by interpreting the pointer value as an integer and either
+truncating or zero extending that value to the size of the integer type. If
+<tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
+<tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
+are the same size, then nothing is done (<i>no-op cast</i>).</p>
+
+<h5>Example:</h5>
+<pre>
+ %X = ptrtoint i32* %X to i8 <i>; yields truncation on 32-bit</i>
+ %Y = ptrtoint i32* %x to i64 <i>; yields zero extend on 32-bit</i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
+</div>
+<div class="doc_text">