+<!-- ======================================================================= -->
+<div class="doc_subsection">
+ <a name="int_manip">Bit Manipulation Intrinsics</a>
+</div>
+
+<div class="doc_text">
+<p>
+LLVM provides intrinsics for a few important bit manipulation operations.
+These allow efficient code generation for some algorithms.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<p>This is an overloaded intrinsic function. You can use bswap on any integer
+type that is an even number of bytes (i.e. BitWidth % 16 == 0).
+<pre>
+ declare i16 @llvm.bswap.i16(i16 <id>)
+ declare i32 @llvm.bswap.i32(i32 <id>)
+ declare i64 @llvm.bswap.i64(i64 <id>)
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
+values with an even number of bytes (positive multiple of 16 bits). These are
+useful for performing operations on data that is not in the target's native
+byte order.
+</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
+and low byte of the input i16 swapped. Similarly, the <tt>llvm.bswap.i32</tt>
+intrinsic returns an i32 value that has the four bytes of the input i32
+swapped, so that if the input bytes are numbered 0, 1, 2, 3 then the returned
+i32 will have its bytes in 3, 2, 1, 0 order. The <tt>llvm.bswap.i48</tt>,
+<tt>llvm.bswap.i64</tt> and other intrinsics extend this concept to
+additional even-byte lengths (6 bytes, 8 bytes and more, respectively).
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
+width. Not all targets support all bit widths however.
+<pre>
+ declare i8 @llvm.ctpop.i8 (i8 <src>)
+ declare i16 @llvm.ctpop.i16(i16 <src>)
+ declare i32 @llvm.ctpop.i32(i32 <src>)
+ declare i64 @llvm.ctpop.i64(i64 <src>)
+ declare i256 @llvm.ctpop.i256(i256 <src>)
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set in a
+value.
+</p>
+
+<h5>Arguments:</h5>
+
+<p>
+The only argument is the value to be counted. The argument may be of any
+integer type. The return type must match the argument type.
+</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.
+</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+ <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
+</div>
+
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
+integer bit width. Not all targets support all bit widths however.
+<pre>
+ declare i8 @llvm.ctlz.i8 (i8 <src>)
+ declare i16 @llvm.ctlz.i16(i16 <src>)
+ declare i32 @llvm.ctlz.i32(i32 <src>)
+ declare i64 @llvm.ctlz.i64(i64 <src>)
+ declare i256 @llvm.ctlz.i256(i256 <src>)
+</pre>
+
+<h5>Overview:</h5>
+
+<p>
+The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
+leading zeros in a variable.
+</p>
+
+<h5>Arguments:</h5>
+
+<p>
+The only argument is the value to be counted. The argument may be of any
+integer type. The return type must match the argument type.
+</p>
+
+<h5>Semantics:</h5>
+
+<p>
+The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant) zeros
+in a variable. If the src == 0 then the result is the size in bits of the type
+of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.
+</p>
+</div>
+
+
+