<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<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>

<body>

<div class="doc_title"> LLVM Language Reference Manual </div>
<ol>
  <li><a href="#abstract">Abstract</a></li>
  <li><a href="#introduction">Introduction</a></li>
  <li><a href="#identifiers">Identifiers</a></li>
  <li><a href="#highlevel">High Level Structure</a>
    <ol>
      <li><a href="#modulestructure">Module Structure</a></li>
      <li><a href="#linkage">Linkage Types</a></li>
      <li><a href="#callingconv">Calling Conventions</a></li>
      <li><a href="#globalvars">Global Variables</a></li>
      <li><a href="#functionstructure">Functions</a></li>
      <li><a href="#aliasstructure">Aliases</a>
      <li><a href="#paramattrs">Parameter Attributes</a></li>
      <li><a href="#gc">Garbage Collector Names</a></li>
      <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
      <li><a href="#datalayout">Data Layout</a></li>
    </ol>
  </li>
  <li><a href="#typesystem">Type System</a>
    <ol>
      <li><a href="#t_classifications">Type Classifications</a></li>
      <li><a href="#t_primitive">Primitive Types</a>    
        <ol>
          <li><a href="#t_floating">Floating Point Types</a></li>
          <li><a href="#t_void">Void Type</a></li>
          <li><a href="#t_label">Label Type</a></li>
        </ol>
      </li>
      <li><a href="#t_derived">Derived Types</a>
        <ol>
          <li><a href="#t_integer">Integer Type</a></li>
          <li><a href="#t_array">Array Type</a></li>
          <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_pstruct">Packed Structure Type</a></li>
          <li><a href="#t_vector">Vector Type</a></li>
          <li><a href="#t_opaque">Opaque Type</a></li>
        </ol>
      </li>
    </ol>
  </li>
  <li><a href="#constants">Constants</a>
    <ol>
      <li><a href="#simpleconstants">Simple Constants</a>
      <li><a href="#aggregateconstants">Aggregate Constants</a>
      <li><a href="#globalconstants">Global Variable and Function Addresses</a>
      <li><a href="#undefvalues">Undefined Values</a>
      <li><a href="#constantexprs">Constant Expressions</a>
    </ol>
  </li>
  <li><a href="#othervalues">Other Values</a>
    <ol>
      <li><a href="#inlineasm">Inline Assembler Expressions</a>
    </ol>
  </li>
  <li><a href="#instref">Instruction Reference</a>
    <ol>
      <li><a href="#terminators">Terminator Instructions</a>
        <ol>
          <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li>
          <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li>
          <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>
        <ol>
          <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li>
          <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
          <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
          <li><a href="#i_udiv">'<tt>udiv</tt>' Instruction</a></li>
          <li><a href="#i_sdiv">'<tt>sdiv</tt>' Instruction</a></li>
          <li><a href="#i_fdiv">'<tt>fdiv</tt>' Instruction</a></li>
          <li><a href="#i_urem">'<tt>urem</tt>' Instruction</a></li>
          <li><a href="#i_srem">'<tt>srem</tt>' Instruction</a></li>
          <li><a href="#i_frem">'<tt>frem</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#bitwiseops">Bitwise Binary Operations</a>
        <ol>
          <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
          <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
          <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#vectorops">Vector Operations</a>
        <ol>
          <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li>
          <li><a href="#i_insertelement">'<tt>insertelement</tt>' Instruction</a></li>
          <li><a href="#i_shufflevector">'<tt>shufflevector</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#memoryops">Memory Access and Addressing Operations</a>
        <ol>
          <li><a href="#i_malloc">'<tt>malloc</tt>'   Instruction</a></li>
          <li><a href="#i_free">'<tt>free</tt>'     Instruction</a></li>
          <li><a href="#i_alloca">'<tt>alloca</tt>'   Instruction</a></li>
         <li><a href="#i_load">'<tt>load</tt>'     Instruction</a></li>
         <li><a href="#i_store">'<tt>store</tt>'    Instruction</a></li>
         <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#convertops">Conversion Operations</a>
        <ol>
          <li><a href="#i_trunc">'<tt>trunc .. to</tt>' Instruction</a></li>
          <li><a href="#i_zext">'<tt>zext .. to</tt>' Instruction</a></li>
          <li><a href="#i_sext">'<tt>sext .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a></li>
          <li><a href="#i_fpext">'<tt>fpext .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a></li>
          <li><a href="#i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a></li>
          <li><a href="#i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a></li>
          <li><a href="#i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a></li>
          <li><a href="#i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a></li>
          <li><a href="#i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a></li>
        </ol>
      <li><a href="#otherops">Other Operations</a>
        <ol>
          <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li>
          <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li>
          <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
          <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
          <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
          <li><a href="#i_va_arg">'<tt>va_arg</tt>'  Instruction</a></li>
          <li><a href="#i_getresult">'<tt>getresult</tt>'  Instruction</a></li>
        </ol>
      </li>
    </ol>
  </li>
  <li><a href="#intrinsics">Intrinsic Functions</a>
    <ol>
      <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
        <ol>
          <li><a href="#int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
          <li><a href="#int_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
          <li><a href="#int_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
        <ol>
          <li><a href="#int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
          <li><a href="#int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
          <li><a href="#int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_codegen">Code Generator Intrinsics</a>
        <ol>
          <li><a href="#int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
          <li><a href="#int_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
          <li><a href="#int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li>
          <li><a href="#int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li>
          <li><a href="#int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
          <li><a href="#int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
          <li><a href="#int_readcyclecounter"><tt>llvm.readcyclecounter</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_libc">Standard C Library Intrinsics</a>
        <ol>
          <li><a href="#int_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li>
          <li><a href="#int_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li>
          <li><a href="#int_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li>
          <li><a href="#int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li>
          <li><a href="#int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a></li>
          <li><a href="#int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a></li>
          <li><a href="#int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a></li>
          <li><a href="#int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_manip">Bit Manipulation Intrinsics</a>
        <ol>
          <li><a href="#int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a></li>
          <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li>
          <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li>
          <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li>
          <li><a href="#int_part_select">'<tt>llvm.part.select.*</tt>' Intrinsic </a></li>
          <li><a href="#int_part_set">'<tt>llvm.part.set.*</tt>' Intrinsic </a></li>
        </ol>
      </li>
      <li><a href="#int_debugger">Debugger intrinsics</a></li>
      <li><a href="#int_eh">Exception Handling intrinsics</a></li>
      <li><a href="#int_trampoline">Trampoline Intrinsic</a>
        <ol>
          <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
        </ol>
      </li>
          <li><a href="#int_atomics">Atomic intrinsics</a>
            <ol>
              <li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
              <li><a href="#int_atomic_lcs"><tt>llvm.atomic.lcs</tt></a></li>
              <li><a href="#int_atomic_las"><tt>llvm.atomic.las</tt></a></li>
              <li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
            </ol>
          </li>
      <li><a href="#int_general">General intrinsics</a>
        <ol>
          <li><a href="#int_var_annotation">
            <tt>llvm.var.annotation</tt>' Intrinsic</a></li>
          <li><a href="#int_annotation">
            <tt>llvm.annotation.*</tt>' Intrinsic</a></li>
          <li><a href="#int_trap">
            <tt>llvm.trap</tt>' Intrinsic</a></li>
        </ol>
      </li>
    </ol>
  </li>
</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
            and <a href="mailto:vadve@cs.uiuc.edu">Vikram Adve</a></p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="abstract">Abstract </a></div>
<!-- *********************************************************************** -->

<div class="doc_text">
<p>This document is a reference manual for the LLVM assembly language. 
LLVM is an SSA based representation that provides type safety,
low-level operations, flexibility, and the capability of representing
'all' high-level languages cleanly.  It is the common code
representation used throughout all phases of the LLVM compilation
strategy.</p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="introduction">Introduction</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM code representation is designed to be used in three
different forms: as an in-memory compiler IR, as an on-disk bitcode
representation (suitable for fast loading by a Just-In-Time compiler),
and as a human readable assembly language representation.  This allows
LLVM to provide a powerful intermediate representation for efficient
compiler transformations and analysis, while providing a natural means
to debug and visualize the transformations.  The three different forms
of LLVM are all equivalent.  This document describes the human readable
representation and notation.</p>

<p>The LLVM representation aims to be light-weight and low-level
while being expressive, typed, and extensible at the same time.  It
aims to be a "universal IR" of sorts, by being at a low enough level
that high-level ideas may be cleanly mapped to it (similar to how
microprocessors are "universal IR's", allowing many source languages to
be mapped to them).  By providing type information, LLVM can be used as
the target of optimizations: for example, through pointer analysis, it
can be proven that a C automatic variable is never accessed outside of
the current function... allowing it to be promoted to a simple SSA
value instead of a memory location.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="wellformed">Well-Formedness</a> </div>

<div class="doc_text">

<p>It is important to note that this document describes 'well formed'
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
</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
be used to verify that an LLVM module is well formed.  This pass is
automatically run by the parser after parsing input assembly and by
the optimizer before it outputs bitcode.  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 class="doc_section"> <a name="identifiers">Identifiers</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

  <p>LLVM identifiers come in two basic types: global and local. Global
  identifiers (functions, global variables) begin with the @ character. Local
  identifiers (register names, types) begin with the % character. Additionally,
  there are three different formats for identifiers, for different purposes:

<ol>
  <li>Named values are represented as a string of characters with their prefix.
  For example, %foo, @DivisionByZero, %a.really.long.identifier.  The actual
  regular expression used is '<tt>[%@][a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.
  Identifiers which require other characters in their names can be surrounded
  with quotes.  In this way, anything except a <tt>&quot;</tt> character can 
  be used in a named value.</li>

  <li>Unnamed values are represented as an unsigned numeric value with their
  prefix.  For example, %12, @2, %44.</li>

  <li>Constants, which are described in a <a href="#constants">section about
  constants</a>, below.</li>
</ol>

<p>LLVM requires that values start with a prefix for two reasons: Compilers
don't need to worry about name clashes with reserved words, and the set of
reserved words may be expanded in the future without penalty.  Additionally,
unnamed identifiers allow a compiler to quickly come up with a temporary
variable without having to avoid symbol table conflicts.</p>

<p>Reserved words in LLVM are very similar to reserved words in other
languages. There are keywords for different opcodes 
('<tt><a href="#i_add">add</a></tt>', 
 '<tt><a href="#i_bitcast">bitcast</a></tt>', 
 '<tt><a href="#i_ret">ret</a></tt>', etc...), for primitive type names ('<tt><a
href="#t_void">void</a></tt>', '<tt><a href="#t_primitive">i32</a></tt>', etc...),
and others.  These reserved words cannot conflict with variable names, because
none of them start with a prefix character ('%' or '@').</p>

<p>Here is an example of LLVM code to multiply the integer variable
'<tt>%X</tt>' by 8:</p>

<p>The easy way:</p>

<div class="doc_code">
<pre>
%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
</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
</pre>
</div>

<p>This last way of multiplying <tt>%X</tt> by 8 illustrates several
important lexical features of LLVM:</p>

<ol>

  <li>Comments are delimited with a '<tt>;</tt>' and go until the end of
  line.</li>

  <li>Unnamed temporaries are created when the result of a computation is not
  assigned to a named value.</li>

  <li>Unnamed temporaries are numbered sequentially</li>

</ol>

<p>...and it also shows a convention that we follow in this document.  When
demonstrating instructions, we will follow an instruction with a comment that
defines the type and name of value produced.  Comments are shown in italic
text.</p>

</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_text">

<p>LLVM programs are composed of "Module"s, each of which is a
translation unit of the input programs.  Each module consists of
functions, global variables, and symbol table entries.  Modules may be
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>

<i>; External declaration of the puts function</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>
        <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>

        <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>
        <a
 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>"
function, and a <a href="#functionstructure">function definition</a>
for "<tt>main</tt>".</p>

<p>In general, a module is made up of a list of global values,
where both functions and global variables are global values.  Global values are
represented by a pointer to a memory location (in this case, a pointer to an
array of char, and a pointer to a function), and have one of the following <a
href="#linkage">linkage types</a>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="linkage">Linkage Types</a>
</div>

<div class="doc_text">

<p>
All Global Variables and Functions have one of the following types of linkage:
</p>

<dl>

  <dt><tt><b><a name="linkage_internal">internal</a></b></tt> </dt>

  <dd>Global values with internal linkage are only directly accessible by
  objects in the current module.  In particular, linking code into a module with
  an internal global value may cause the internal to be renamed as necessary to
  avoid collisions.  Because the symbol is internal to the module, all
  references can be updated.  This corresponds to the notion of the
  '<tt>static</tt>' keyword in C.
  </dd>

  <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt>: </dt>

  <dd>Globals with "<tt>linkonce</tt>" linkage are merged with other globals of
  the same name when linkage occurs.  This is typically used to implement 
  inline functions, templates, or other code which must be generated in each 
  translation unit that uses it.  Unreferenced <tt>linkonce</tt> globals are 
  allowed to be discarded.
  </dd>

  <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt>

  <dd>"<tt>weak</tt>" linkage is exactly the same as <tt>linkonce</tt> linkage,
  except that unreferenced <tt>weak</tt> globals may not be discarded.  This is
  used for globals that may be emitted in multiple translation units, but that
  are not guaranteed to be emitted into every translation unit that uses them.
  One example of this are common globals in C, such as "<tt>int X;</tt>" at 
  global scope.
  </dd>

  <dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt>

  <dd>"<tt>appending</tt>" linkage may only be applied to global variables of
  pointer to array type.  When two global variables with appending linkage are
  linked together, the two global arrays are appended together.  This is the
  LLVM, typesafe, equivalent of having the system linker append together
  "sections" with identical names when .o files are linked.
  </dd>

  <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt>: </dt>
  <dd>The semantics of this linkage follow the ELF model: the symbol is weak
    until linked, if not linked, the symbol becomes null instead of being an
    undefined reference.
  </dd>

  <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>

  <dd>If none of the above identifiers are used, the global is externally
  visible, meaning that it participates in linkage and can be used to resolve
  external symbol references.
  </dd>
</dl>

  <p>
  The next two types of linkage are targeted for Microsoft Windows platform
  only. They are designed to support importing (exporting) symbols from (to)
  DLLs.
  </p>

  <dl>
  <dt><tt><b><a name="linkage_dllimport">dllimport</a></b></tt>: </dt>

  <dd>"<tt>dllimport</tt>" linkage causes the compiler to reference a function
    or variable via a global pointer to a pointer that is set up by the DLL
    exporting the symbol. On Microsoft Windows targets, the pointer name is
    formed by combining <code>_imp__</code> and the function or variable name.
  </dd>

  <dt><tt><b><a name="linkage_dllexport">dllexport</a></b></tt>: </dt>

  <dd>"<tt>dllexport</tt>" linkage causes the compiler to provide a global
    pointer to a pointer in a DLL, so that it can be referenced with the
    <tt>dllimport</tt> attribute. On Microsoft Windows targets, the pointer
    name is formed by combining <code>_imp__</code> and the function or variable
    name.
  </dd>

</dl>

<p><a name="linkage_external"></a>For example, since the "<tt>.LC0</tt>"
variable is defined to be internal, if another module defined a "<tt>.LC0</tt>"
variable and was linked with this one, one of the two would be renamed,
preventing a collision.  Since "<tt>main</tt>" and "<tt>puts</tt>" are
external (i.e., lacking any linkage declarations), they are accessible
outside of the current module.</p>
<p>It is illegal for a function <i>declaration</i>
to have any linkage type other than "externally visible", <tt>dllimport</tt>,
or <tt>extern_weak</tt>.</p>
<p>Aliases can have only <tt>external</tt>, <tt>internal</tt> and <tt>weak</tt>
linkages.
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="callingconv">Calling Conventions</a>
</div>

<div class="doc_text">

<p>LLVM <a href="#functionstructure">functions</a>, <a href="#i_call">calls</a>
and <a href="#i_invoke">invokes</a> can all have an optional calling convention
specified for the call.  The calling convention of any pair of dynamic
caller/callee must match, or the behavior of the program is undefined.  The
following calling conventions are supported by LLVM, and more may be added in
the future:</p>

<dl>
  <dt><b>"<tt>ccc</tt>" - The C calling convention</b>:</dt>

  <dd>This calling convention (the default if no other calling convention is
  specified) matches the target C calling conventions.  This calling convention
  supports varargs function calls and tolerates some mismatch in the declared
  prototype and implemented declaration of the function (as does normal C). 
  </dd>

  <dt><b>"<tt>fastcc</tt>" - The fast calling convention</b>:</dt>

  <dd>This calling convention attempts to make calls as fast as possible
  (e.g. by passing things in registers).  This calling convention allows the
  target to use whatever tricks it wants to produce fast code for the target,
  without having to conform to an externally specified ABI.  Implementations of
  this convention should allow arbitrary
  <a href="CodeGenerator.html#tailcallopt">tail call optimization</a> to be
  supported.  This calling convention does not support varargs and requires the
  prototype of all callees to exactly match the prototype of the function
  definition.
  </dd>

  <dt><b>"<tt>coldcc</tt>" - The cold calling convention</b>:</dt>

  <dd>This calling convention attempts to make code in the caller as efficient
  as possible under the assumption that the call is not commonly executed.  As
  such, these calls often preserve all registers so that the call does not break
  any live ranges in the caller side.  This calling convention does not support
  varargs and requires the prototype of all callees to exactly match the
  prototype of the function definition.
  </dd>

  <dt><b>"<tt>cc &lt;<em>n</em>&gt;</tt>" - Numbered convention</b>:</dt>

  <dd>Any calling convention may be specified by number, allowing
  target-specific calling conventions to be used.  Target specific calling
  conventions start at 64.
  </dd>
</dl>

<p>More calling conventions can be added/defined on an as-needed basis, to
support pascal conventions or any other well-known target-independent
convention.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="visibility">Visibility Styles</a>
</div>

<div class="doc_text">

<p>
All Global Variables and Functions have one of the following visibility styles:
</p>

<dl>
  <dt><b>"<tt>default</tt>" - Default style</b>:</dt>

  <dd>On ELF, default visibility means that the declaration is visible to other
    modules and, in shared libraries, means that the declared entity may be
    overridden. On Darwin, default visibility means that the declaration is
    visible to other modules. Default visibility corresponds to "external
    linkage" in the language.
  </dd>

  <dt><b>"<tt>hidden</tt>" - Hidden style</b>:</dt>

  <dd>Two declarations of an object with hidden visibility refer to the same
    object if they are in the same shared object. Usually, hidden visibility
    indicates that the symbol will not be placed into the dynamic symbol table,
    so no other module (executable or shared library) can reference it
    directly.
  </dd>

  <dt><b>"<tt>protected</tt>" - Protected style</b>:</dt>

  <dd>On ELF, protected visibility indicates that the symbol will be placed in
  the dynamic symbol table, but that references within the defining module will
  bind to the local symbol. That is, the symbol cannot be overridden by another
  module.
  </dd>
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="globalvars">Global Variables</a>
</div>

<div class="doc_text">

<p>Global variables define regions of memory allocated at compilation time
instead of run-time.  Global variables may optionally be initialized, may have
an explicit section to be placed in, and may have an optional explicit alignment
specified.  A variable may be defined as "thread_local", which means that it
will not be shared by threads (each thread will have a separated copy of the
variable).  A variable may be defined as a global "constant," which indicates
that the contents of the variable will <b>never</b> be modified (enabling better
optimization, allowing the global data to be placed in the read-only section of
an executable, etc).  Note that variables that need runtime initialization
cannot be marked "constant" as there is a store to the variable.</p>

<p>
LLVM explicitly allows <em>declarations</em> of global variables to be marked
constant, even if the final definition of the global is not.  This capability
can be used to enable slightly better optimization of the program, but requires
the language definition to guarantee that optimizations based on the
'constantness' are valid for the translation units that do not include the
definition.
</p>

<p>As SSA values, global variables define pointer values that are in
scope (i.e. they dominate) all basic blocks in the program.  Global
variables always define a pointer to their "content" type because they
describe a region of memory, and all memory objects in LLVM are
accessed through pointers.</p>

<p>A global variable may be declared to reside in a target-specifc numbered 
address space. For targets that support them, address spaces may affect how
optimizations are performed and/or what target instructions are used to access 
the variable. The default address space is zero. The address space qualifier 
must precede any other attributes.</p>

<p>LLVM allows an explicit section to be specified for globals.  If the target
supports it, it will emit globals to the section specified.</p>

<p>An explicit alignment may be specified for a global.  If not present, or if
the alignment is set to zero, the alignment of the global is set by the target
to whatever it feels convenient.  If an explicit alignment is specified, the 
global is forced to have at least that much alignment.  All alignments must be
a power of 2.</p>

<p>For example, the following defines a global in a numbered address space with 
an initializer, section, and alignment:</p>

<div class="doc_code">
<pre>
@G = constant float 1.0 addrspace(5), section "foo", align 4
</pre>
</div>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="functionstructure">Functions</a>
</div>

<div class="doc_text">

<p>LLVM function definitions consist of the "<tt>define</tt>" keyord, 
an optional <a href="#linkage">linkage type</a>, an optional 
<a href="#visibility">visibility style</a>, an optional 
<a href="#callingconv">calling convention</a>, a return type, an optional
<a href="#paramattrs">parameter attribute</a> for the return type, a function 
name, a (possibly empty) argument list (each with optional 
<a href="#paramattrs">parameter attributes</a>), an optional section, an
optional alignment, an optional <a href="#gc">garbage collector name</a>, an
opening curly brace, a list of basic blocks, and a closing curly brace.

LLVM function declarations consist of the "<tt>declare</tt>" keyword, an
optional <a href="#linkage">linkage type</a>, an optional
<a href="#visibility">visibility style</a>, an optional 
<a href="#callingconv">calling convention</a>, a return type, an optional
<a href="#paramattrs">parameter attribute</a> for the return type, a function 
name, a possibly empty list of arguments, an optional alignment, and an optional
<a href="#gc">garbage collector name</a>.</p>

<p>A function definition contains a list of basic blocks, forming the CFG for
the function.  Each basic block may optionally start with a label (giving the
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 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
<a href="#i_phi">PHI nodes</a>.</p>

<p>LLVM allows an explicit section to be specified for functions.  If the target
supports it, it will emit functions to the section specified.</p>

<p>An explicit alignment may be specified for a function.  If not present, or if
the alignment is set to zero, the alignment of the function is set by the target
to whatever it feels convenient.  If an explicit alignment is specified, the
function is forced to have at least that much alignment.  All alignments must be
a power of 2.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="aliasstructure">Aliases</a>
</div>
<div class="doc_text">
  <p>Aliases act as "second name" for the aliasee value (which can be either
  function, global variable, another alias or bitcast of global value). Aliases
  may have an optional <a href="#linkage">linkage type</a>, and an
  optional <a href="#visibility">visibility style</a>.</p>

  <h5>Syntax:</h5>

<div class="doc_code">
<pre>
@&lt;Name&gt; = [Linkage] [Visibility] alias &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
</pre>
</div>

</div>



<!-- ======================================================================= -->
<div class="doc_subsection"><a name="paramattrs">Parameter Attributes</a></div>
<div class="doc_text">
  <p>The return type and each parameter of a function type may have a set of
  <i>parameter attributes</i> associated with them. Parameter attributes are
  used to communicate additional information about the result or parameters of
  a function. Parameter attributes are considered to be part of the function,
  not of the function type, so functions with different parameter attributes
  can have the same function type.</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>

<div class="doc_code">
<pre>
declare i32 @printf(i8* noalias , ...) nounwind
declare i32 @atoi(i8*) nounwind readonly
</pre>
</div>

  <p>Note that any attributes for the function result (<tt>nounwind</tt>,
  <tt>readonly</tt>) come immediately after the argument list.</p>

  <p>Currently, only the following parameter attributes are defined:</p>
  <dl>
    <dt><tt>zeroext</tt></dt>
    <dd>This indicates that the parameter should be zero extended just before
    a call to this function.</dd>

    <dt><tt>signext</tt></dt>
    <dd>This indicates that the parameter should be sign extended just before
    a call to this function.</dd>

    <dt><tt>inreg</tt></dt>
    <dd>This indicates that the parameter should be placed in register (if
    possible) during assembling function call. Support for this attribute is
    target-specific</dd>

    <dt><tt>byval</tt></dt>
    <dd>This indicates that the pointer parameter should really be passed by
    value to the function.  The attribute implies that a hidden copy of the
    pointee is made between the caller and the callee, so the callee is unable
    to modify the value in the callee.  This attribute is only valid on llvm
    pointer arguments.  It is generally used to pass structs and arrays by
    value, but is also valid on scalars (even though this is silly).</dd>

    <dt><tt>sret</tt></dt>
    <dd>This indicates that the pointer parameter specifies the address of a
    structure that is the return value of the function in the source program.
    Loads and stores to the structure are assumed not to trap.
    May only be applied to the first parameter.</dd>

    <dt><tt>noalias</tt></dt>
    <dd>This indicates that the parameter does not alias any global or any other
    parameter.  The caller is responsible for ensuring that this is the case,
    usually by placing the value in a stack allocation.</dd>

    <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
    an <tt>unreachable</tt> instruction immediately followed the call.</dd> 

    <dt><tt>nounwind</tt></dt>
    <dd>This function attribute indicates that no exceptions unwind out of the
    function.  Usually this is because the function makes no use of exceptions,
    but it may also be that the function catches any exceptions thrown when
    executing it.</dd>

    <dt><tt>nest</tt></dt>
    <dd>This indicates that the parameter can be excised using the
    <a href="#int_trampoline">trampoline intrinsics</a>.</dd>
    <dt><tt>readonly</tt></dt>
    <dd>This function attribute indicates that the function has no side-effects
    except for producing a return value or throwing an exception.  The value
    returned must only depend on the function arguments and/or global variables.
    It may use values obtained by dereferencing pointers.</dd>
    <dt><tt>readnone</tt></dt>
    <dd>A <tt>readnone</tt> function has the same restrictions as a <tt>readonly</tt>
    function, but in addition it is not allowed to dereference any pointer arguments
    or global variables.
  </dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="gc">Garbage Collector Names</a>
</div>

<div class="doc_text">
<p>Each function may specify a garbage collector name, which is simply a
string.</p>

<div class="doc_code"><pre
>define void @f() gc "name" { ...</pre></div>

<p>The compiler declares the supported values of <i>name</i>. Specifying a
collector which will cause the compiler to alter its output in order to support
the named garbage collection algorithm.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="moduleasm">Module-Level Inline Assembly</a>
</div>

<div class="doc_text">
<p>
Modules may contain "module-level inline asm" blocks, which corresponds to the
GCC "file scope inline asm" blocks.  These blocks are internally concatenated by
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>

<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
   for the number.
</p>

<p>
  The inline asm code is simply printed to the machine code .s file when
  assembly code is generated.
</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="datalayout">Data Layout</a>
</div>

<div class="doc_text">
<p>A module may specify a target specific data layout string that specifies how
data is to be laid out in memory. The syntax for the data layout is simply:</p>
<pre>    target datalayout = "<i>layout specification</i>"</pre>
<p>The <i>layout specification</i> consists of a list of specifications 
separated by the minus sign character ('-').  Each specification starts with a 
letter and may include other information after the letter to define some 
aspect of the data layout.  The specifications accepted are as follows: </p>
<dl>
  <dt><tt>E</tt></dt>
  <dd>Specifies that the target lays out data in big-endian form. That is, the
  bits with the most significance have the lowest address location.</dd>
  <dt><tt>e</tt></dt>
  <dd>Specifies that hte target lays out data in little-endian form. That is,
  the bits with the least significance have the lowest address location.</dd>
  <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and 
  <i>preferred</i> alignments. All sizes are in bits. Specifying the <i>pref</i>
  alignment is optional. If omitted, the preceding <tt>:</tt> should be omitted
  too.</dd>
  <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for an integer type of a given bit
  <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd>
  <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for a vector type of a given bit 
  <i>size</i>.</dd>
  <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for a floating point type of a given bit 
  <i>size</i>. The value of <i>size</i> must be either 32 (float) or 64
  (double).</dd>
  <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for an aggregate type of a given bit
  <i>size</i>.</dd>
</dl>
<p>When constructing the data layout for a given target, LLVM starts with a
default set of specifications which are then (possibly) overriden by the
specifications in the <tt>datalayout</tt> keyword. The default specifications
are given in this list:</p>
<ul>
  <li><tt>E</tt> - big endian</li>
  <li><tt>p:32:64:64</tt> - 32-bit pointers with 64-bit alignment</li>
  <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li>
  <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li>
  <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li>
  <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li>
  <li><tt>i64:32:64</tt> - i64 has abi alignment of 32-bits but preferred
  alignment of 64-bits</li>
  <li><tt>f32:32:32</tt> - float is 32-bit aligned</li>
  <li><tt>f64:64:64</tt> - double is 64-bit aligned</li>
  <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li>
  <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li>
  <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li>
</ul>
<p>When llvm is determining the alignment for a given type, it uses the 
following rules:
<ol>
  <li>If the type sought is an exact match for one of the specifications, that
  specification is used.</li>
  <li>If no match is found, and the type sought is an integer type, then the
  smallest integer type that is larger than the bitwidth of the sought type is
  used. If none of the specifications are larger than the bitwidth then the the
  largest integer type is used. For example, given the default specifications
  above, the i7 type will use the alignment of i8 (next largest) while both
  i65 and i256 will use the alignment of i64 (largest specified).</li>
  <li>If no match is found, and the type sought is a vector type, then the
  largest vector type that is smaller than the sought vector type will be used
  as a fall back.  This happens because <128 x double> can be implemented in 
  terms of 64 <2 x double>, for example.</li>
</ol>
</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="typesystem">Type System</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM type system is one of the most important features of the
intermediate representation.  Being typed enables a number of
optimizations to be performed on the IR directly, without having to do
extra analyses on the side before the transformation.  A strong type
system makes it easier to read the generated code and enables novel
analyses and transformations that are not feasible to perform on normal
three address code representations.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="t_classifications">Type
Classifications</a> </div>
<div class="doc_text">
<p>The types fall into a few useful
classifications:</p>

<table border="1" cellspacing="0" cellpadding="4">
  <tbody>
    <tr><th>Classification</th><th>Types</th></tr>
    <tr>
      <td><a href="#t_integer">integer</a></td>
      <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td>
    </tr>
    <tr>
      <td><a href="#t_floating">floating point</a></td>
      <td><tt>float, double, x86_fp80, fp128, ppc_fp128</tt></td>
    </tr>
    <tr>
      <td><a name="t_firstclass">first class</a></td>
      <td><a href="#t_integer">integer</a>,
          <a href="#t_floating">floating point</a>,
          <a href="#t_pointer">pointer</a>,
          <a href="#t_vector">vector</a>
      </td>
    </tr>
    <tr>
      <td><a href="#t_primitive">primitive</a></td>
      <td><a href="#t_label">label</a>,
          <a href="#t_void">void</a>,
          <a href="#t_integer">integer</a>,
          <a href="#t_floating">floating point</a>.</td>
    </tr>
    <tr>
      <td><a href="#t_derived">derived</a></td>
      <td><a href="#t_integer">integer</a>,
          <a href="#t_array">array</a>,
          <a href="#t_function">function</a>,
          <a href="#t_pointer">pointer</a>,
          <a href="#t_struct">structure</a>,
          <a href="#t_pstruct">packed structure</a>,
          <a href="#t_vector">vector</a>,
          <a href="#t_opaque">opaque</a>.
    </tr>
  </tbody>
</table>

<p>The <a href="#t_firstclass">first class</a> types are perhaps the
most important.  Values of these types are the only ones which can be
produced by instructions, passed as arguments, or used as operands to
instructions.  This means that all structures and arrays must be
manipulated either by pointer or by component.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="t_primitive">Primitive Types</a> </div>

<div class="doc_text">
<p>The primitive types are the fundamental building blocks of the LLVM
system.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_floating">Floating Point Types</a> </div>

<div class="doc_text">
      <table>
        <tbody>
          <tr><th>Type</th><th>Description</th></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>
          <tr><td><tt>fp128</tt></td><td>128-bit floating point value (112-bit mantissa)</td></tr>
          <tr><td><tt>x86_fp80</tt></td><td>80-bit floating point value (X87)</td></tr>
          <tr><td><tt>ppc_fp128</tt></td><td>128-bit floating point value (two 64-bits)</td></tr>
        </tbody>
      </table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_void">Void Type</a> </div>

<div class="doc_text">
<h5>Overview:</h5>
<p>The void type does not represent any value and has no size.</p>

<h5>Syntax:</h5>

<pre>
  void
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_label">Label Type</a> </div>

<div class="doc_text">
<h5>Overview:</h5>
<p>The label type represents code labels.</p>

<h5>Syntax:</h5>

<pre>
  label
</pre>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="t_derived">Derived Types</a> </div>

<div class="doc_text">

<p>The real power in LLVM comes from the derived types in the system. 
This is what allows a programmer to represent arrays, functions,
pointers, and other useful types.  Note that these derived types may be
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">
  <tbody>
  <tr>
    <td><tt>i1</tt></td>
    <td>a single-bit integer.</td>
  </tr><tr>
    <td><tt>i32</tt></td>
    <td>a 32-bit integer.</td>
  </tr><tr>
    <td><tt>i1942652</tt></td>
    <td>a really big integer of over 1 million bits.</td>
  </tr>
  </tbody>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>

<div class="doc_text">

<h5>Overview:</h5>

<p>The array type is a very simple derived type that arranges elements
sequentially in memory.  The array type requires a size (number of
elements) and an underlying data type.</p>

<h5>Syntax:</h5>

<pre>
  [&lt;# elements&gt; x &lt;elementtype&gt;]
</pre>

<p>The number of elements is a constant integer value; elementtype may
be any type with a size.</p>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>[40 x i32]</tt></td>
    <td class="left">Array of 40 32-bit integer values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>[41 x i32]</tt></td>
    <td class="left">Array of 41 32-bit integer values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>[4 x i8]</tt></td>
    <td class="left">Array of 4 8-bit integer values.</td>
  </tr>
</table>
<p>Here are some examples of multidimensional arrays:</p>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>[3 x [4 x i32]]</tt></td>
    <td class="left">3x4 array of 32-bit integer values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>[12 x [10 x float]]</tt></td>
    <td class="left">12x10 array of single precision floating point values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>[2 x [3 x [4 x i16]]]</tt></td>
    <td class="left">2x3x4 array of 16-bit integer  values.</td>
  </tr>
</table>

<p>Note that 'variable sized arrays' can be implemented in LLVM with a zero 
length array.  Normally, accesses past the end of an array are undefined in
LLVM (e.g. it is illegal to access the 5th element of a 3 element array).
As a special case, however, zero length arrays are recognized to be variable
length.  This allows implementation of 'pascal style arrays' with the  LLVM
type "{ i32, [0 x float]}", for example.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_function">Function Type</a> </div>
<div class="doc_text">

<h5>Overview:</h5>

<p>The function type can be thought of as a function signature.  It
consists of a return type and a list of formal parameter types. The
return type of a function type is a scalar type, a void type, or a struct type. 
If the return type is a struct type then all struct elements must be of first 
class types, and the struct must have at least one element.</p>

<h5>Syntax:</h5>

<pre>
  &lt;returntype list&gt; (&lt;parameter list&gt;)
</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>,
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.
'<tt>&lt;returntype list&gt;</tt>' is a comma-separated list of
<a href="#t_firstclass">first class</a> type specifiers.</p>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>i32 (i32)</tt></td>
    <td class="left">function taking an <tt>i32</tt>, returning an <tt>i32</tt>
    </td>
  </tr><tr class="layout">
    <td class="left"><tt>float&nbsp;(i16&nbsp;signext,&nbsp;i32&nbsp;*)&nbsp;*
    </tt></td>
    <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes 
      an <tt>i16</tt> that should be sign extended and a 
      <a href="#t_pointer">pointer</a> to <tt>i32</tt>, returning 
      <tt>float</tt>.
    </td>
  </tr><tr class="layout">
    <td class="left"><tt>i32 (i8*, ...)</tt></td>
    <td class="left">A vararg function that takes at least one 
      <a href="#t_pointer">pointer</a> to <tt>i8 </tt> (char in C), 
      which returns an integer.  This is the signature for <tt>printf</tt> in 
      LLVM.
    </td>
  </tr><tr class="layout">
    <td class="left"><tt>{i32, i32} (i32)</tt></td>
    <td class="left">A function taking an <tt>i32></tt>, returning two 
        <tt> i32 </tt> values as an aggregate of type <tt>{ i32, i32 }</tt>
    </td>
  </tr>
</table>

</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_struct">Structure Type</a> </div>
<div class="doc_text">
<h5>Overview:</h5>
<p>The structure type is used to represent a collection of data members
together in memory.  The packing of the field types is defined to match
the ABI of the underlying processor.  The elements of a structure may
be any type that has a size.</p>
<p>Structures are accessed using '<tt><a href="#i_load">load</a></tt>
and '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a
field with the '<tt><a href="#i_getelementptr">getelementptr</a></tt>'
instruction.</p>
<h5>Syntax:</h5>
<pre>  { &lt;type list&gt; }<br></pre>
<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>{ i32, i32, i32 }</tt></td>
    <td class="left">A triple of three <tt>i32</tt> values</td>
  </tr><tr class="layout">
    <td class="left"><tt>{&nbsp;float,&nbsp;i32&nbsp;(i32)&nbsp;*&nbsp;}</tt></td>
    <td class="left">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>i32</tt>, returning
      an <tt>i32</tt>.</td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pstruct">Packed Structure Type</a>
</div>
<div class="doc_text">
<h5>Overview:</h5>
<p>The packed structure type is used to represent a collection of data members
together in memory.  There is no padding between fields.  Further, the alignment
of a packed structure is 1 byte.  The elements of a packed structure may
be any type that has a size.</p>
<p>Structures are accessed using '<tt><a href="#i_load">load</a></tt>
and '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a
field with the '<tt><a href="#i_getelementptr">getelementptr</a></tt>'
instruction.</p>
<h5>Syntax:</h5>
<pre>  &lt; { &lt;type list&gt; } &gt; <br></pre>
<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>&lt; { i32, i32, i32 } &gt;</tt></td>
    <td class="left">A triple of three <tt>i32</tt> values</td>
  </tr><tr class="layout">
  <td class="left"><tt>&lt; { float, i32 (i32)* } &gt;</tt></td>
    <td class="left">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>i32</tt>, returning
      an <tt>i32</tt>.</td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
<div class="doc_text">
<h5>Overview:</h5>
<p>As in many languages, the pointer type represents a pointer or
reference to another object, which must live in memory. Pointer types may have 
an optional address space attribute defining the target-specific numbered 
address space where the pointed-to object resides. The default address space is 
zero.</p>
<h5>Syntax:</h5>
<pre>  &lt;type&gt; *<br></pre>
<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>[4x i32]*</tt></td>
    <td class="left">A <a href="#t_pointer">pointer</a> to <a
                    href="#t_array">array</a> of four <tt>i32</tt> values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i32 (i32 *) *</tt></td>
    <td class="left"> A <a href="#t_pointer">pointer</a> to a <a
      href="#t_function">function</a> that takes an <tt>i32*</tt>, returning an
      <tt>i32</tt>.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i32 addrspace(5)*</tt></td>
    <td class="left">A <a href="#t_pointer">pointer</a> to an <tt>i32</tt> value
     that resides in address space #5.</td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_vector">Vector Type</a> </div>
<div class="doc_text">

<h5>Overview:</h5>

<p>A vector type is a simple derived type that represents a vector
of elements.  Vector types are used when multiple primitive data 
are operated in parallel using a single instruction (SIMD). 
A vector type requires a size (number of
elements) and an underlying primitive data type.  Vectors must have a power
of two length (1, 2, 4, 8, 16 ...).  Vector types are
considered <a href="#t_firstclass">first class</a>.</p>

<h5>Syntax:</h5>

<pre>
  &lt; &lt;# elements&gt; x &lt;elementtype&gt; &gt;
</pre>

<p>The number of elements is a constant integer value; elementtype may
be any integer or floating point type.</p>

<h5>Examples:</h5>

<table class="layout">
  <tr class="layout">
    <td class="left"><tt>&lt;4 x i32&gt;</tt></td>
    <td class="left">Vector of 4 32-bit integer values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>&lt;8 x float&gt;</tt></td>
    <td class="left">Vector of 8 32-bit floating-point values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>&lt;2 x i64&gt;</tt></td>
    <td class="left">Vector of 2 64-bit integer values.</td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_opaque">Opaque Type</a> </div>
<div class="doc_text">

<h5>Overview:</h5>

<p>Opaque types are used to represent unknown types in the system.  This
corresponds (for example) to the C notion of a forward declared structure type.
In LLVM, opaque types can eventually be resolved to any type (not just a
structure type).</p>

<h5>Syntax:</h5>

<pre>
  opaque
</pre>

<h5>Examples:</h5>

<table class="layout">
  <tr class="layout">
    <td class="left"><tt>opaque</tt></td>
    <td class="left">An opaque type.</td>
  </tr>
</table>
</div>


<!-- *********************************************************************** -->
<div class="doc_section"> <a name="constants">Constants</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>LLVM has several different basic types of constants.  This section describes
them all and their syntax.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="simpleconstants">Simple Constants</a></div>

<div class="doc_text">

<dl>
  <dt><b>Boolean constants</b></dt>

  <dd>The two strings '<tt>true</tt>' and '<tt>false</tt>' are both valid
  constants of the <tt><a href="#t_primitive">i1</a></tt> type.
  </dd>

  <dt><b>Integer constants</b></dt>

  <dd>Standard integers (such as '4') are constants of the <a
  href="#t_integer">integer</a> type.  Negative numbers may be used with 
  integer types.
  </dd>

  <dt><b>Floating point constants</b></dt>

  <dd>Floating point constants use standard decimal notation (e.g. 123.421),
  exponential notation (e.g. 1.23421e+2), or a more precise hexadecimal
  notation (see below).  The assembler requires the exact decimal value of
  a floating-point constant.  For example, the assembler accepts 1.25 but
  rejects 1.3 because 1.3 is a repeating decimal in binary.  Floating point
  constants must have a <a href="#t_floating">floating point</a> type. </dd>

  <dt><b>Null pointer constants</b></dt>

  <dd>The identifier '<tt>null</tt>' is recognized as a null pointer constant
  and must be of <a href="#t_pointer">pointer type</a>.</dd>

</dl>

<p>The one non-intuitive notation for constants is the optional hexadecimal form
of floating point constants.  For example, the form '<tt>double
0x432ff973cafa8000</tt>' is equivalent to (but harder to read than) '<tt>double
4.5e+15</tt>'.  The only time hexadecimal floating point constants are required
(and the only time that they are generated by the disassembler) is when a 
floating point constant must be emitted but it cannot be represented as a 
decimal floating point number.  For example, NaN's, infinities, and other 
special values are represented in their IEEE hexadecimal format so that 
assembly and disassembly do not cause any bits to change in the constants.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="aggregateconstants">Aggregate Constants</a>
</div>

<div class="doc_text">
<p>Aggregate constants arise from aggregation of simple constants
and smaller aggregate constants.</p>

<dl>
  <dt><b>Structure constants</b></dt>

  <dd>Structure constants are represented with notation similar to structure
  type definitions (a comma separated list of elements, surrounded by braces
  (<tt>{}</tt>)).  For example: "<tt>{ i32 4, float 17.0, i32* @G }</tt>",
  where "<tt>@G</tt>" is declared as "<tt>@G = external global i32</tt>".  Structure constants
  must have <a href="#t_struct">structure type</a>, and the number and
  types of elements must match those specified by the type.
  </dd>

  <dt><b>Array constants</b></dt>

  <dd>Array constants are represented with notation similar to array type
  definitions (a comma separated list of elements, surrounded by square brackets
  (<tt>[]</tt>)).  For example: "<tt>[ i32 42, i32 11, i32 74 ]</tt>".  Array
  constants must have <a href="#t_array">array type</a>, and the number and
  types of elements must match those specified by the type.
  </dd>

  <dt><b>Vector constants</b></dt>

  <dd>Vector constants are represented with notation similar to vector type
  definitions (a comma separated list of elements, surrounded by
  less-than/greater-than's (<tt>&lt;&gt;</tt>)).  For example: "<tt>&lt; i32 42,
  i32 11, i32 74, i32 100 &gt;</tt>".  Vector constants must have <a
  href="#t_vector">vector type</a>, and the number and types of elements must
  match those specified by the type.
  </dd>

  <dt><b>Zero initialization</b></dt>

  <dd>The string '<tt>zeroinitializer</tt>' can be used to zero initialize a
  value to zero of <em>any</em> type, including scalar and aggregate types.
  This is often used to avoid having to print large zero initializers (e.g. for
  large arrays) and is always exactly equivalent to using explicit zero
  initializers.
  </dd>
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="globalconstants">Global Variable and Function Addresses</a>
</div>

<div class="doc_text">

<p>The addresses of <a href="#globalvars">global variables</a> and <a
href="#functionstructure">functions</a> are always implicitly valid (link-time)
constants.  These constants are explicitly referenced when the <a
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 ]
</pre>
</div>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="undefvalues">Undefined Values</a></div>
<div class="doc_text">
  <p>The string '<tt>undef</tt>' is recognized as a type-less constant that has 
  no specific value.  Undefined values may be of any type and be used anywhere 
  a constant is permitted.</p>

  <p>Undefined values indicate to the compiler that the program is well defined
  no matter what value is used, giving the compiler more freedom to optimize.
  </p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="constantexprs">Constant Expressions</a>
</div>

<div class="doc_text">

<p>Constant expressions are used to allow expressions involving other constants
to be used as constants.  Constant expressions may be of any <a
href="#t_firstclass">first class</a> type and may involve any LLVM operation
that does not have side effects (e.g. load and call are not supported).  The
following is the syntax for constant expressions:</p>

<dl>
  <dt><b><tt>trunc ( CST to TYPE )</tt></b></dt>
  <dd>Truncate a constant to another type. The bit size of CST must be larger 
  than the bit size of TYPE. Both types must be integers.</dd>

  <dt><b><tt>zext ( CST to TYPE )</tt></b></dt>
  <dd>Zero extend a constant to another type. The bit size of CST must be 
  smaller or equal to the bit size of TYPE.  Both types must be integers.</dd>

  <dt><b><tt>sext ( CST to TYPE )</tt></b></dt>
  <dd>Sign extend a constant to another type. The bit size of CST must be 
  smaller or equal to the bit size of TYPE.  Both types must be integers.</dd>

  <dt><b><tt>fptrunc ( CST to TYPE )</tt></b></dt>
  <dd>Truncate a floating point constant to another floating point type. The 
  size of CST must be larger than the size of TYPE. Both types must be 
  floating point.</dd>

  <dt><b><tt>fpext ( CST to TYPE )</tt></b></dt>
  <dd>Floating point extend a constant to another type. The size of CST must be 
  smaller or equal to the size of TYPE. Both types must be floating point.</dd>

  <dt><b><tt>fptoui ( CST to TYPE )</tt></b></dt>
  <dd>Convert a floating point constant to the corresponding unsigned integer
  constant. TYPE must be a scalar or vector integer type. CST must be of scalar
  or vector floating point type. Both CST and TYPE must be scalars, or vectors
  of the same number of elements. If the  value won't fit in the integer type,
  the results are undefined.</dd>

  <dt><b><tt>fptosi ( CST to TYPE )</tt></b></dt>
  <dd>Convert a floating point constant to the corresponding signed integer
  constant.  TYPE must be a scalar or vector integer type. CST must be of scalar
  or vector floating point type. Both CST and TYPE must be scalars, or vectors
  of the same number of elements. If the  value won't fit in the integer type,
  the results are undefined.</dd>

  <dt><b><tt>uitofp ( CST to TYPE )</tt></b></dt>
  <dd>Convert an unsigned integer constant to the corresponding floating point
  constant. TYPE must be a scalar or vector floating point type. CST must be of
  scalar or vector integer type. Both CST and TYPE must be scalars, or vectors
  of the same number of elements. If the value won't fit in the floating point 
  type, the results are undefined.</dd>

  <dt><b><tt>sitofp ( CST to TYPE )</tt></b></dt>
  <dd>Convert a signed integer constant to the corresponding floating point
  constant. TYPE must be a scalar or vector floating point type. CST must be of
  scalar or vector integer type. Both CST and TYPE must be scalars, or vectors
  of the same number of elements. If the value won't fit in the floating point 
  type, the results are undefined.</dd>

  <dt><b><tt>ptrtoint ( CST to TYPE )</tt></b></dt>
  <dd>Convert a pointer typed constant to the corresponding integer constant
  TYPE must be an integer type. CST must be of pointer type. The CST value is
  zero extended, truncated, or unchanged to make it fit in TYPE.</dd>

  <dt><b><tt>inttoptr ( CST to TYPE )</tt></b></dt>
  <dd>Convert a integer constant to a pointer constant.  TYPE must be a
  pointer type.  CST must be of integer type. The CST value is zero extended, 
  truncated, or unchanged to make it fit in a pointer size. This one is 
  <i>really</i> dangerous!</dd>

  <dt><b><tt>bitcast ( CST to TYPE )</tt></b></dt>
  <dd>Convert a constant, CST, to another TYPE. The size of CST and TYPE must be
  identical (same number of bits). The conversion is done as if the CST value
  was stored to memory and read back as TYPE. In other words, no bits change 
  with this operator, just the type.  This can be used for conversion of
  vector types to any other type, as long as they have the same bit width. For
  pointers it is only valid to cast to another pointer type.
  </dd>

  <dt><b><tt>getelementptr ( CSTPTR, IDX0, IDX1, ... )</tt></b></dt>

  <dd>Perform the <a href="#i_getelementptr">getelementptr operation</a> on
  constants.  As with the <a href="#i_getelementptr">getelementptr</a>
  instruction, the index list may have zero or more indexes, which are required
  to make sense for the type of "CSTPTR".</dd>

  <dt><b><tt>select ( COND, VAL1, VAL2 )</tt></b></dt>

  <dd>Perform the <a href="#i_select">select operation</a> on
  constants.</dd>

  <dt><b><tt>icmp COND ( VAL1, VAL2 )</tt></b></dt>
  <dd>Performs the <a href="#i_icmp">icmp operation</a> on constants.</dd>

  <dt><b><tt>fcmp COND ( VAL1, VAL2 )</tt></b></dt>
  <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd>

  <dt><b><tt>extractelement ( VAL, IDX )</tt></b></dt>

  <dd>Perform the <a href="#i_extractelement">extractelement
  operation</a> on constants.

  <dt><b><tt>insertelement ( VAL, ELT, IDX )</tt></b></dt>

  <dd>Perform the <a href="#i_insertelement">insertelement
    operation</a> on constants.</dd>


  <dt><b><tt>shufflevector ( VEC1, VEC2, IDXMASK )</tt></b></dt>

  <dd>Perform the <a href="#i_shufflevector">shufflevector
    operation</a> on constants.</dd>

  <dt><b><tt>OPCODE ( LHS, RHS )</tt></b></dt>

  <dd>Perform the specified operation of the LHS and RHS constants. OPCODE may 
  be any of the <a href="#binaryops">binary</a> or <a href="#bitwiseops">bitwise
  binary</a> operations.  The constraints on operands are the same as those for
  the corresponding instruction (e.g. no bitwise operations on floating point
  values are allowed).</dd>
</dl>
</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="othervalues">Other Values</a> </div>
<!-- *********************************************************************** -->

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="inlineasm">Inline Assembler Expressions</a>
</div>

<div class="doc_text">

<p>
LLVM supports inline assembler expressions (as opposed to <a href="#moduleasm">
Module-Level Inline Assembly</a>) through the use of a special value.  This
value represents the inline assembler as a string (containing the instructions
to emit), a list of operand constraints (stored as a string), and a flag that 
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"
</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)
</pre>
</div>

<p>
Inline asms with side effects not visible in the constraint list must be marked
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", ""()
</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
need to be documented).
</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="instref">Instruction Reference</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM instruction set consists of several different
classifications of instructions: <a href="#terminators">terminator
instructions</a>, <a href="#binaryops">binary instructions</a>,
<a href="#bitwiseops">bitwise binary instructions</a>, <a
 href="#memoryops">memory instructions</a>, and <a href="#otherops">other
instructions</a>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="terminators">Terminator
Instructions</a> </div>

<div class="doc_text">

<p>As mentioned <a href="#functionstructure">previously</a>, every
basic block in a program ends with a "Terminator" instruction, which
indicates which block should be executed after the current block is
finished. These terminator instructions typically yield a '<tt>void</tt>'
value: they produce control flow, not values (the one exception being
the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
<p>There are six 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, 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>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  ret &lt;type&gt; &lt;value&gt;       <i>; Return a value from a non-void function</i>
  ret void                 <i>; Return from void function</i>
  ret &lt;type&gt; &lt;value&gt;, &lt;type&gt; &lt;value&gt;  <i>; Return two values from a non-void function </i>
</pre>

<h5>Overview:</h5>

<p>The '<tt>ret</tt>' instruction is used to return control flow (and a
value) from a function back to the caller.</p>
<p>There are two forms of the '<tt>ret</tt>' instruction: one that
returns value(s) and then causes control flow, and one that just causes
control flow to occur.</p>

<h5>Arguments:</h5>

<p>The '<tt>ret</tt>' instruction may return zero, one or multiple values. 
The type of each return value must be a '<a href="#t_firstclass">first 
class</a>' type.  Note that a function is not <a href="#wellformed">well 
formed</a> if there exists a '<tt>ret</tt>' instruction inside of the 
function that returns values that do not match the return type of the 
function.</p>

<h5>Semantics:</h5>

<p>When the '<tt>ret</tt>' instruction is executed, control flow
returns back to the calling function's context.  If the caller is a "<a
 href="#i_call"><tt>call</tt></a>" instruction, execution continues at
the instruction after the call.  If the caller was an "<a
 href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues
at the beginning of the "normal" destination block.  If the instruction
returns a value, that value shall set the call or invoke instruction's
return value. If the instruction returns multiple values then these 
values can only be accessed through a '<a href="#i_getresult"><tt>getresult</tt>
</a>' instruction.</p>

<h5>Example:</h5>

<pre>
  ret i32 5                       <i>; Return an integer value of 5</i>
  ret void                        <i>; Return from a void function</i>
  ret i32 4, i8 2                 <i>; Return two values 4 and 2 </i> 
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_br">'<tt>br</tt>' Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;<br>  br label &lt;dest&gt;          <i>; Unconditional branch</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>br</tt>' instruction is used to cause control flow to
transfer to a different basic block in the current function.  There are
two forms of this instruction, corresponding to a conditional branch
and an unconditional branch.</p>
<h5>Arguments:</h5>
<p>The conditional branch form of the '<tt>br</tt>' instruction takes a
single '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The
unconditional form of the '<tt>br</tt>' instruction takes a single 
'<tt>label</tt>' value as a target.</p>
<h5>Semantics:</h5>
<p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
argument is evaluated.  If the value is <tt>true</tt>, control flows
to the '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>
<h5>Example:</h5>
<pre>Test:<br>  %cond = <a href="#i_icmp">icmp</a> eq, i32 %a, %b<br>  br i1 %cond, label %IfEqual, label %IfUnequal<br>IfEqual:<br>  <a
 href="#i_ret">ret</a> i32 1<br>IfUnequal:<br>  <a href="#i_ret">ret</a> i32 0<br></pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
   <a name="i_switch">'<tt>switch</tt>' Instruction</a>
</div>

<div class="doc_text">
<h5>Syntax:</h5>

<pre>
  switch &lt;intty&gt; &lt;value&gt;, label &lt;defaultdest&gt; [ &lt;intty&gt; &lt;val&gt;, label &lt;dest&gt; ... ]
</pre>

<h5>Overview:</h5>

<p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of
several different places.  It is a generalization of the '<tt>br</tt>'
instruction, allowing a branch to occur to one of many possible
destinations.</p>


<h5>Arguments:</h5>

<p>The '<tt>switch</tt>' instruction uses three parameters: an integer
comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination, and
an array of pairs of comparison value constants and '<tt>label</tt>'s.  The
table is not allowed to contain duplicate constant entries.</p>

<h5>Semantics:</h5>

<p>The <tt>switch</tt> instruction specifies a table of values and
destinations. When the '<tt>switch</tt>' instruction is executed, this
table is searched for the given value.  If the value is found, control flow is
transfered to the corresponding destination; otherwise, control flow is
transfered to the default destination.</p>

<h5>Implementation:</h5>

<p>Depending on properties of the target machine and the particular
<tt>switch</tt> instruction, this instruction may be code generated in different
ways.  For example, it could be generated as a series of chained conditional
branches or with a lookup table.</p>

<h5>Example:</h5>

<pre>
 <i>; Emulate a conditional br instruction</i>
 %Val = <a href="#i_zext">zext</a> i1 %value to i32
 switch i32 %Val, label %truedest [i32 0, label %falsedest ]

 <i>; Emulate an unconditional br instruction</i>
 switch i32 0, label %dest [ ]

 <i>; Implement a jump table:</i>
 switch i32 %val, label %otherwise [ i32 0, label %onzero 
                                      i32 1, label %onone 
                                      i32 2, label %ontwo ]
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;result&gt; = invoke [<a href="#callingconv">cconv</a>] &lt;ptr to function ty&gt; &lt;function ptr val&gt;(&lt;function args&gt;) 
                to label &lt;normal label&gt; unwind label &lt;exception label&gt;
</pre>

<h5>Overview:</h5>

<p>The '<tt>invoke</tt>' instruction causes control to transfer to a specified
function, with the possibility of control flow transfer to either the
'<tt>normal</tt>' label or the
'<tt>exception</tt>' label.  If the callee function returns with the
"<tt><a href="#i_ret">ret</a></tt>" instruction, control flow will return to the
"normal" label.  If the callee (or any indirect callees) returns with the "<a
href="#i_unwind"><tt>unwind</tt></a>" instruction, control is interrupted and
continued at the dynamically nearest "exception" label. If the callee function 
returns multiple values then individual return values are only accessible through 
a '<tt><a href="#i_getresult">getresult</a></tt>' instruction.</p>

<h5>Arguments:</h5>

<p>This instruction requires several arguments:</p>

<ol>
  <li>
    The optional "cconv" marker indicates which <a href="#callingconv">calling
    convention</a> the call should use.  If none is specified, the call defaults
    to using C calling conventions.
  </li>
  <li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
  function value being invoked.  In most cases, this is a direct function
  invocation, but indirect <tt>invoke</tt>s are just as possible, branching off
  an arbitrary pointer to function value.
  </li>

  <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
  function to be invoked. </li>

  <li>'<tt>function args</tt>': argument list whose types match the function
  signature argument types.  If the function signature indicates the function
  accepts a variable number of arguments, the extra arguments can be
  specified. </li>

  <li>'<tt>normal label</tt>': the label reached when the called function
  executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li>

  <li>'<tt>exception label</tt>': the label reached when a callee returns with
  the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li>

</ol>

<h5>Semantics:</h5>

<p>This instruction is designed to operate as a standard '<tt><a
href="#i_call">call</a></tt>' instruction in most regards.  The primary
difference is that it establishes an association with a label, which is used by
the runtime library to unwind the stack.</p>

<p>This instruction is used in languages with destructors to ensure that proper
cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown
exception.  Additionally, this is important for implementation of
'<tt>catch</tt>' clauses in high-level languages that support them.</p>

<h5>Example:</h5>
<pre>
  %retval = invoke i32 @Test(i32 15) to label %Continue
              unwind label %TestCleanup              <i>; {i32}:retval set</i>
  %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue
              unwind label %TestCleanup              <i>; {i32}: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>' instruction 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>
  unreachable
</pre>

<h5>Overview:</h5>

<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>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 of the same type, 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 has 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>  &lt;result&gt; = add &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>
<p>If an integer sum has unsigned overflow, the result returned is the
mathematical result modulo 2<sup>n</sup>, where n is the bit width of
the result.</p>
<p>Because LLVM integers use a two's complement representation, this
instruction is appropriate for both signed and unsigned integers.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = sub &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>
<p>If an integer difference has unsigned overflow, the result returned is the
mathematical result modulo 2<sup>n</sup>, where n is the bit width of
the result.</p>
<p>Because LLVM integers use a two's complement representation, this
instruction is appropriate for both signed and unsigned integers.</p>
<h5>Example:</h5>
<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>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_mul">'<tt>mul</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = mul &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>If the result of an integer multiplication has unsigned overflow,
the result returned is the mathematical result modulo 
2<sup>n</sup>, where n is the bit width of the result.</p>
<p>Because LLVM integers use a two's complement representation, and the
result is the same width as the operands, this instruction returns the
correct result for both signed and unsigned integers.  If a full product
(e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands
should be sign-extended or zero-extended as appropriate to the
width of the full product.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = udiv &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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.</p>
<p>Note that unsigned integer division and signed integer division are distinct
operations; for signed integer division, use '<tt>sdiv</tt>'.</p>
<p>Division by zero leads to undefined behavior.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = sdiv &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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 rounded towards zero.</p>
<p>Note that signed integer division and unsigned integer division are distinct
operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>
<p>Division by zero leads to undefined behavior. Overflow also leads to
undefined behavior; this is a rare case, but can occur, for example,
by doing a 32-bit division of -2147483648 by -1.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = fdiv &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>fdiv</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 floating point values.</p>
<h5>Semantics:</h5>
<p>The value produced is the floating point quotient of the two operands.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = urem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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. 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>This instruction returns the unsigned integer <i>remainder</i> of a division.
This instruction always performs an unsigned division to get the remainder.</p>
<p>Note that unsigned integer remainder and signed integer remainder are
distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>
<p>Taking the remainder of a division by zero leads to undefined behavior.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = srem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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. 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>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://en.wikipedia.org/wiki/Modulo_operation">
Wikipedia: modulo operation</a>.</p>
<p>Note that signed integer remainder and unsigned integer remainder are
distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>
<p>Taking the remainder of a division by zero leads to undefined behavior.
Overflow also leads to undefined behavior; this is a rare case, but can occur,
for example, by taking the remainder of a 32-bit division of -2147483648 by -1.
(The remainder doesn't actually overflow, but this rule lets srem be 
implemented using instructions that return both the result of the division
and the remainder.)</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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>  &lt;result&gt; = frem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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.  This instruction can also take <a href="#t_vector">vector</a>
versions of floating point values.</p>
<h5>Semantics:</h5>
<p>This instruction returns the <i>remainder</i> of a division.
The remainder has the same sign as the dividend.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = 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 of the same type, execute an operation on them,
and produce a single value.  The resulting value is the same type as its operands.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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.  '<tt>var2</tt>' is treated as an
unsigned value.</p>
 
<h5>Semantics:</h5>

<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup> mod 2<sup>n</sup>,
where n is the width of the result.  If <tt>var2</tt> is (statically or dynamically) negative or
equal to or larger than the number of bits in <tt>var1</tt>, the result is undefined.</p>

<h5>Example:</h5><pre>
  &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
  &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
  &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
  &lt;result&gt; = shl i32 1, 32     <i>; undefined</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>  &lt;result&gt; = lshr &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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 with zero fill.</p>

<h5>Arguments:</h5>
<p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 
<a href="#t_integer">integer</a> type.  '<tt>var2</tt>' is treated as an
unsigned value.</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.  If <tt>var2</tt> is (statically or dynamically) equal to or larger than
the number of bits in <tt>var1</tt>, the result is undefined.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
  &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
  &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
  &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
  &lt;result&gt; = lshr i32 1, 32  <i>; undefined</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>  &lt;result&gt; = ashr &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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 with sign extension.</p>

<h5>Arguments:</h5>
<p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 
<a href="#t_integer">integer</a> type.  '<tt>var2</tt>' is treated as an
unsigned value.</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>.  If <tt>var2</tt> is (statically or dynamically) equal to or
larger than the number of bits in <tt>var1</tt>, the result is undefined.
</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
  &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
  &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
  &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
  &lt;result&gt; = ashr i32 1, 32  <i>; undefined</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>  &lt;result&gt; = and &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>  &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
  &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
  &lt;result&gt; = 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>  &lt;result&gt; = or &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>  &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
  &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
  &lt;result&gt; = 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>  &lt;result&gt; = xor &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <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>  &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
  &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
  &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
  &lt;result&gt; = 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.  These 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>
  &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</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 &lt;4 x i32&gt; %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>
  &lt;result&gt; = insertelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, &lt;ty&gt; &lt;elt&gt, i32 &lt;idx&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</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 &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</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>
  &lt;result&gt; = shufflevector &lt;n x &lt;ty&gt;&gt; &lt;v1&gt;, &lt;n x &lt;ty&gt;&gt; &lt;v2&gt;, &lt;n x i32&gt; &lt;mask&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</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 &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
                          &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
  %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef, 
                          &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</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>
  &lt;result&gt; = malloc &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <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. The object is always allocated in the generic 
address space (address space zero).</p>

<h5>Arguments:</h5>

<p>The '<tt>malloc</tt>' instruction allocates
<tt>sizeof(&lt;type&gt;)*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, otherwise "NumElements" is defaulted to be one.
If a constant 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.  The result of a zero byte allocattion is undefined.  The
result is null if there is insufficient memory available.</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 &lt;type&gt; &lt;value&gt;                              <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.  If the pointer is null, the operation
is a noop.</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>
  &lt;result&gt; = alloca &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
</pre>

<h5>Overview:</h5>

<p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
currently executing function, to be automatically released when this function
returns to its caller. The object is always allocated in the generic address 
space (address space zero).</p>

<h5>Arguments:</h5>

<p>The '<tt>alloca</tt>' instruction allocates <tt>sizeof(&lt;type&gt;)*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, otherwise "NumElements" is defaulted to be one.
If a constant 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.  The operation is undefiend if
there is insufficient stack space for the allocation.  '<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.  Allocating zero bytes
is legal, but the result is undefined.</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>  &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]<br>  &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]<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>
<p>
The optional constant "align" argument specifies the alignment of the operation
(that is, the alignment of the memory address). A value of 0 or an
omitted "align" argument means that the operation has the preferential
alignment for the target. It is the responsibility of the code emitter
to ensure that the alignment information is correct. Overestimating
the alignment results in an undefined behavior. Underestimating the
alignment may produce less efficient code. An alignment of 1 is always
safe.
</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 &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]                   <i>; yields {void}</i>
  volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]          <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 at which to store it.  The type of the '<tt>&lt;pointer&gt;</tt>'
operand must be a pointer to the <a href="#t_firstclass">first class</a> type
of the '<tt>&lt;value&gt;</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>
<p>
The optional constant "align" argument specifies the alignment of the operation
(that is, the alignment of the memory address). A value of 0 or an
omitted "align" argument means that the operation has the preferential
alignment for the target. It is the responsibility of the code emitter
to ensure that the alignment information is correct. Overestimating
the alignment results in an undefined behavior. Underestimating the
alignment may produce less efficient code. An alignment of 1 is always
safe.
</p>
<h5>Semantics:</h5>
<p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>'
at the location specified by the '<tt>&lt;pointer&gt;</tt>' operand.</p>
<h5>Example:</h5>
<pre>  %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
  store i32 3, i32* %ptr                          <i>; yields {void}</i>
  %val = <a href="#i_load">load</a> 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>
  &lt;result&gt; = getelementptr &lt;ty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
</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; 32-bit 
values will be sign extended to 64-bits if required.</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;
  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 }

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>

<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> and <a href="#t_pstruct">packed
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 rule 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>
  &lt;result&gt; = trunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>
  &lt;result&gt; = zext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>.</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>
  &lt;result&gt; = sext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>.</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>
  &lt;result&gt; = fptrunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>
  &lt;result&gt; = fpext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>
  &lt;result&gt; = fptoui &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fptoui</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>fptoui</tt>' instruction takes a value to cast, which must be a 
scalar or vector <a href="#t_floating">floating point</a> value, and a type 
to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> 
type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
vector integer type with the same number of elements as <tt>ty</tt></p>

<h5>Semantics:</h5>
<p> The '<tt>fptoui</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>

<h5>Example:</h5>
<pre>
  %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
  %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
  %X = fptoui 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>
  &lt;result&gt; = fptosi &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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 
scalar or vector <a href="#t_floating">floating point</a> value, and a type 
to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> 
type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
vector integer type with the same number of elements as <tt>ty</tt></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>

<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 undefined:1</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>
  &lt;result&gt; = uitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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 a
scalar or vector <a href="#t_integer">integer</a> value, and a type to cast it
to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a> 
type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
floating point type with the same number of elements as <tt>ty</tt></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>
  &lt;result&gt; = sitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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 a
scalar or vector <a href="#t_integer">integer</a> value, and a type to cast it
to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a> 
type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
floating point type with the same number of elements as <tt>ty</tt></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>
  &lt;result&gt; = ptrtoint &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <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>) other than a type
change.</p>

<h5>Example:</h5>
<pre>
  %X = ptrtoint i32* %X to i8           <i>; yields truncation on 32-bit architecture</i>
  %Y = ptrtoint i32* %x to i64          <i>; yields zero extension on 32-bit architecture</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
   <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
</div>
<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = inttoptr &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to 
a pointer type, <tt>ty2</tt>.</p>

<h5>Arguments:</h5>
<p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a>
value to cast, and a type to cast it to, which must be a 
<a href="#t_pointer">pointer</a> type.

<h5>Semantics:</h5>
<p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
<tt>ty2</tt> by applying either a zero extension or a truncation depending on
the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the
size of a pointer then a truncation is done. If <tt>value</tt> is smaller than
the size of a pointer then a zero extension is done. If they are the same size,
nothing is done (<i>no-op cast</i>).</p>

<h5>Example:</h5>
<pre>
  %X = inttoptr i32 255 to i32*          <i>; yields zero extension on 64-bit architecture</i>
  %X = inttoptr i32 255 to i32*          <i>; yields no-op on 32-bit architecture</i>
  %Y = inttoptr i64 0 to i32*            <i>; yields truncation on 32-bit architecture</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
   <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
</div>
<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = bitcast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
<tt>ty2</tt> without changing any bits.</p>

<h5>Arguments:</h5>
<p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be 
a first class value, and a type to cast it to, which must also be a <a
  href="#t_firstclass">first class</a> type. The bit sizes of <tt>value</tt>
and the destination type, <tt>ty2</tt>, must be identical. If the source
type is a pointer, the destination type must also be a pointer.</p>

<h5>Semantics:</h5>
<p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
<tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with 
this conversion.  The conversion is done as if the <tt>value</tt> had been 
stored to memory and read back as type <tt>ty2</tt>. Pointer types may only be
converted to other pointer types with this instruction. To convert pointers to 
other types, use the <a href="#i_inttoptr">inttoptr</a> or 
<a href="#i_ptrtoint">ptrtoint</a> instructions first.</p>

<h5>Example:</h5>
<pre>
  %X = bitcast i8 255 to i8              <i>; yields i8 :-1</i>
  %Y = bitcast i32* %x to sint*          <i>; yields sint*:%x</i>
  %Z = bitcast <2xint> %V to i64;        <i>; yields i64: %V</i>   
</pre>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>
<div class="doc_text">
<p>The instructions in this category are the "miscellaneous"
instructions, which defy better classification.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"><a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = icmp &lt;cond&gt; &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {i1}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>icmp</tt>' instruction returns a boolean value based on comparison
of its two integer or pointer operands.</p>
<h5>Arguments:</h5>
<p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
the condition code indicating the kind of comparison to perform. It is not
a value, just a keyword. The possible condition code are:
<ol>
  <li><tt>eq</tt>: equal</li>
  <li><tt>ne</tt>: not equal </li>
  <li><tt>ugt</tt>: unsigned greater than</li>
  <li><tt>uge</tt>: unsigned greater or equal</li>
  <li><tt>ult</tt>: unsigned less than</li>
  <li><tt>ule</tt>: unsigned less or equal</li>
  <li><tt>sgt</tt>: signed greater than</li>
  <li><tt>sge</tt>: signed greater or equal</li>
  <li><tt>slt</tt>: signed less than</li>
  <li><tt>sle</tt>: signed less or equal</li>
</ol>
<p>The remaining two arguments must be <a href="#t_integer">integer</a> or
<a href="#t_pointer">pointer</a> typed. They must also be identical types.</p>
<h5>Semantics:</h5>
<p>The '<tt>icmp</tt>' compares <tt>var1</tt> and <tt>var2</tt> according to 
the condition code given as <tt>cond</tt>. The comparison performed always
yields a <a href="#t_primitive">i1</a> result, as follows: 
<ol>
  <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal, 
  <tt>false</tt> otherwise. No sign interpretation is necessary or performed.
  </li>
  <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal, 
  <tt>false</tt> otherwise. No sign interpretation is necessary or performed.
  <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
  <tt>true</tt> if <tt>var1</tt> is greater than <tt>var2</tt>.</li>
  <li><tt>uge</tt>: interprets the operands as unsigned values and yields
  <tt>true</tt> if <tt>var1</tt> is greater than or equal to <tt>var2</tt>.</li>
  <li><tt>ult</tt>: interprets the operands as unsigned values and yields
  <tt>true</tt> if <tt>var1</tt> is less than <tt>var2</tt>.</li>
  <li><tt>ule</tt>: interprets the operands as unsigned values and yields
  <tt>true</tt> if <tt>var1</tt> is less than or equal to <tt>var2</tt>.</li>
  <li><tt>sgt</tt>: interprets the operands as signed values and yields
  <tt>true</tt> if <tt>var1</tt> is greater than <tt>var2</tt>.</li>
  <li><tt>sge</tt>: interprets the operands as signed values and yields
  <tt>true</tt> if <tt>var1</tt> is greater than or equal to <tt>var2</tt>.</li>
  <li><tt>slt</tt>: interprets the operands as signed values and yields
  <tt>true</tt> if <tt>var1</tt> is less than <tt>var2</tt>.</li>
  <li><tt>sle</tt>: interprets the operands as signed values and yields
  <tt>true</tt> if <tt>var1</tt> is less than or equal to <tt>var2</tt>.</li>
</ol>
<p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
values are compared as if they were integers.</p>

<h5>Example:</h5>
<pre>  &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
  &lt;result&gt; = icmp ne float* %X, %X     <i>; yields: result=false</i>
  &lt;result&gt; = icmp ult i16  4, 5        <i>; yields: result=true</i>
  &lt;result&gt; = icmp sgt i16  4, 5        <i>; yields: result=false</i>
  &lt;result&gt; = icmp ule i16 -4, 5        <i>; yields: result=false</i>
  &lt;result&gt; = icmp sge i16  4, 5        <i>; yields: result=false</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"><a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = fcmp &lt;cond&gt; &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;     <i>; yields {i1}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>fcmp</tt>' instruction returns a boolean value based on comparison
of its floating point operands.</p>
<h5>Arguments:</h5>
<p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
the condition code indicating the kind of comparison to perform. It is not
a value, just a keyword. The possible condition code are:
<ol>
  <li><tt>false</tt>: no comparison, always returns false</li>
  <li><tt>oeq</tt>: ordered and equal</li>
  <li><tt>ogt</tt>: ordered and greater than </li>
  <li><tt>oge</tt>: ordered and greater than or equal</li>
  <li><tt>olt</tt>: ordered and less than </li>
  <li><tt>ole</tt>: ordered and less than or equal</li>
  <li><tt>one</tt>: ordered and not equal</li>
  <li><tt>ord</tt>: ordered (no nans)</li>
  <li><tt>ueq</tt>: unordered or equal</li>
  <li><tt>ugt</tt>: unordered or greater than </li>
  <li><tt>uge</tt>: unordered or greater than or equal</li>
  <li><tt>ult</tt>: unordered or less than </li>
  <li><tt>ule</tt>: unordered or less than or equal</li>
  <li><tt>une</tt>: unordered or not equal</li>
  <li><tt>uno</tt>: unordered (either nans)</li>
  <li><tt>true</tt>: no comparison, always returns true</li>
</ol>
<p><i>Ordered</i> means that neither operand is a QNAN while
<i>unordered</i> means that either operand may be a QNAN.</p>
<p>The <tt>val1</tt> and <tt>val2</tt> arguments must be
<a href="#t_floating">floating point</a> typed.  They must have identical 
types.</p>
<h5>Semantics:</h5>
<p>The '<tt>fcmp</tt>' compares <tt>var1</tt> and <tt>var2</tt> according to 
the condition code given as <tt>cond</tt>. The comparison performed always
yields a <a href="#t_primitive">i1</a> result, as follows: 
<ol>
  <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>
  <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
  <tt>var1</tt> is equal to <tt>var2</tt>.</li>
  <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
  <tt>var1</tt> is greather than <tt>var2</tt>.</li>
  <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
  <tt>var1</tt> is greater than or equal to <tt>var2</tt>.</li>
  <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
  <tt>var1</tt> is less than <tt>var2</tt>.</li>
  <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
  <tt>var1</tt> is less than or equal to <tt>var2</tt>.</li>
  <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
  <tt>var1</tt> is not equal to <tt>var2</tt>.</li>
  <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>
  <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is equal to <tt>var2</tt>.</li>
  <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is greater than <tt>var2</tt>.</li>
  <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is greater than or equal to <tt>var2</tt>.</li>
  <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is less than <tt>var2</tt>.</li>
  <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is less than or equal to <tt>var2</tt>.</li>
  <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or 
  <tt>var1</tt> is not equal to <tt>var2</tt>.</li>
  <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
  <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
</ol>

<h5>Example:</h5>
<pre>  &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
  &lt;result&gt; = icmp one float 4.0, 5.0    <i>; yields: result=true</i>
  &lt;result&gt; = icmp olt float 4.0, 5.0    <i>; yields: result=true</i>
  &lt;result&gt; = icmp ueq double 1.0, 2.0   <i>; yields: result=false</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_phi">'<tt>phi</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...<br></pre>
<h5>Overview:</h5>
<p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in
the SSA graph representing the function.</p>
<h5>Arguments:</h5>
<p>The type of the incoming values is specified with the first type
field. After this, the '<tt>phi</tt>' instruction takes a list of pairs
as arguments, with one pair for each predecessor basic block of the
current block.  Only values of <a href="#t_firstclass">first class</a>
type may be used as the value arguments to the PHI node.  Only labels
may be used as the label arguments.</p>
<p>There must be no non-phi instructions between the start of a basic
block and the PHI instructions: i.e. PHI instructions must be first in
a basic block.</p>
<h5>Semantics:</h5>
<p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
specified by the pair corresponding to the predecessor basic block that executed
just prior to the current block.</p>
<h5>Example:</h5>
<pre>Loop:       ; Infinite loop that counts from 0 on up...<br>  %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]<br>  %nextindvar = add i32 %indvar, 1<br>  br label %Loop<br></pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
   <a name="i_select">'<tt>select</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;result&gt; = select i1 &lt;cond&gt;, &lt;ty&gt; &lt;val1&gt;, &lt;ty&gt; &lt;val2&gt;             <i>; yields ty</i>
</pre>

<h5>Overview:</h5>

<p>
The '<tt>select</tt>' instruction is used to choose one value based on a
condition, without branching.
</p>


<h5>Arguments:</h5>

<p>
The '<tt>select</tt>' instruction requires a boolean value indicating the condition, and two values of the same <a href="#t_firstclass">first class</a> type.
</p>

<h5>Semantics:</h5>

<p>
If the boolean condition evaluates to true, the instruction returns the first
value argument; otherwise, it returns the second value argument.
</p>

<h5>Example:</h5>

<pre>
  %X = select i1 true, i8 17, i8 42          <i>; yields i8:17</i>
</pre>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_call">'<tt>call</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = [tail] call [<a href="#callingconv">cconv</a>] &lt;ty&gt; [&lt;fnty&gt;*] &lt;fnptrval&gt;(&lt;param list&gt;)
</pre>

<h5>Overview:</h5>

<p>The '<tt>call</tt>' instruction represents a simple function call.</p>

<h5>Arguments:</h5>

<p>This instruction requires several arguments:</p>

<ol>
  <li>
    <p>The optional "tail" marker indicates whether the callee function accesses
    any allocas or varargs in the caller.  If the "tail" marker is present, the
    function call is eligible for tail call optimization.  Note that calls may
    be marked "tail" even if they do not occur before a <a
    href="#i_ret"><tt>ret</tt></a> instruction.
  </li>
  <li>
    <p>The optional "cconv" marker indicates which <a href="#callingconv">calling
    convention</a> the call should use.  If none is specified, the call defaults
    to using C calling conventions.
  </li>
  <li>
    <p>'<tt>ty</tt>': the type of the call instruction itself which is also
    the type of the return value.  Functions that return no value are marked
    <tt><a href="#t_void">void</a></tt>.</p>
  </li>
  <li>
    <p>'<tt>fnty</tt>': shall be the signature of the pointer to function
    value being invoked.  The argument types must match the types implied by
    this signature.  This type can be omitted if the function is not varargs
    and if the function type does not return a pointer to a function.</p>
  </li>
  <li>
    <p>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to
    be invoked. In most cases, this is a direct function invocation, but
    indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer
    to function value.</p>
  </li>
  <li>
    <p>'<tt>function args</tt>': argument list whose types match the
    function signature argument types. All arguments must be of 
    <a href="#t_firstclass">first class</a> type. If the function signature 
    indicates the function accepts a variable number of arguments, the extra 
    arguments can be specified.</p>
  </li>
</ol>

<h5>Semantics:</h5>

<p>The '<tt>call</tt>' instruction is used to cause control flow to
transfer to a specified function, with its incoming arguments bound to
the specified values. Upon a '<tt><a href="#i_ret">ret</a></tt>'
instruction in the called function, control flow continues with the
instruction after the function call, and the return value of the
function is bound to the result argument.  If the callee returns multiple 
values then the return values of the function are only accessible through 
the '<tt><a href="#i_getresult">getresult</a></tt>' instruction.</p>

<h5>Example:</h5>

<pre>
  %retval = call i32 @test(i32 %argc)
  call i32 (i8 *, ...)* @printf(i8 * %msg, i32 12, i8 42)      <i>; yields i32</i>
  %X = tail call i32 @foo()                                    <i>; yields i32</i>
  %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo()  <i>; yields i32</i>
  call void %foo(i8 97 signext)

  %struct.A = type { i32, i8 }
  %r = call %struct.A @foo()                     <i>; yields { 32, i8 }</i>
  %gr = getresult %struct.A %r, 0                <i>; yields i32</i>
  %gr1 = getresult %struct.A %r, 1               <i>; yields i8</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;resultval&gt; = va_arg &lt;va_list*&gt; &lt;arglist&gt;, &lt;argty&gt;
</pre>

<h5>Overview:</h5>

<p>The '<tt>va_arg</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>va_list*</tt> value and the type of
the argument. It returns a value of the specified argument type and
increments the <tt>va_list</tt> to point to the next argument.  The
actual type of <tt>va_list</tt> is target specific.</p>

<h5>Semantics:</h5>

<p>The '<tt>va_arg</tt>' instruction loads an argument of the specified
type from the specified <tt>va_list</tt> and causes the
<tt>va_list</tt> to point to the next argument.  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>va_arg</tt> is an LLVM instruction instead of an <a
href="#intrinsics">intrinsic function</a> because it takes a type as an
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_getresult">'<tt>getresult</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;resultval&gt; = getresult &lt;type&gt; &lt;retval&gt;, &lt;index&gt;
</pre>

<h5>Overview:</h5>

<p> The '<tt>getresult</tt>' instruction is used to extract individual values
from a '<tt><a href="#i_call">call</a></tt>' 
or '<tt><a href="#i_invoke">invoke</a></tt>' instruction that returns multiple
results.</p>

<h5>Arguments:</h5>

<p>The '<tt>getresult</tt>' instruction takes a call or invoke value as its 
first argument, or an undef value.  The value must have <a 
href="#t_struct">structure type</a>.  The second argument is a constant 
unsigned index value which must be in range for the number of values returned 
by the call.</p>

<h5>Semantics:</h5>

<p>The '<tt>getresult</tt>' instruction extracts the element identified by
'<tt>index</tt>' from the aggregate value.</p>

<h5>Example:</h5>

<pre>
  %struct.A = type { i32, i8 }

  %r = call %struct.A @foo()
  %gr = getresult %struct.A %r, 0    <i>; yields i32:%gr</i>
  %gr1 = getresult %struct.A %r, 1   <i>; yields i8:%gr1</i>
  add i32 %gr, 42
  add i8 %gr1, 41
</pre>

</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="intrinsics">Intrinsic Functions</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>LLVM supports the notion of an "intrinsic function".  These functions have
well known names and semantics and are required to follow certain restrictions.
Overall, these intrinsics represent an extension mechanism for the LLVM 
language that does not require changing all of the transformations in LLVM when 
adding to the language (or the bitcode reader/writer, the parser, etc...).</p>

<p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This
prefix is reserved in LLVM for intrinsic names; thus, function names may not
begin with this prefix.  Intrinsic functions must always be external functions:
you cannot define the body of intrinsic functions.  Intrinsic functions may
only be used in call or invoke instructions: it is illegal to take the address
of an intrinsic function.  Additionally, because intrinsic functions are part
of the LLVM language, it is required if any are added that they be documented
here.</p>

<p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents 
a family of functions that perform the same operation but on different data 
types. Because LLVM can represent over 8 million different integer types, 
overloading is used commonly to allow an intrinsic function to operate on any 
integer type. One or more of the argument types or the result type can be 
overloaded to accept any integer type. Argument types may also be defined as 
exactly matching a previous argument's type or the result type. This allows an 
intrinsic function which accepts multiple arguments, but needs all of them to 
be of the same type, to only be overloaded with respect to a single argument or 
the result.</p>

<p>Overloaded intrinsics will have the names of its overloaded argument types 
encoded into its function name, each preceded by a period. Only those types 
which are overloaded result in a name suffix. Arguments whose type is matched 
against another type do not. For example, the <tt>llvm.ctpop</tt> function can 
take an integer of any width and returns an integer of exactly the same integer 
width. This leads to a family of functions such as
<tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29 %val)</tt>.
Only one type, the return type, is overloaded, and only one type suffix is 
required. Because the argument's type is matched against the return type, it 
does not require its own name suffix.</p>

<p>To learn how to add an intrinsic function, please see the 
<a href="ExtendingLLVM.html">Extending LLVM Guide</a>.
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_varargs">Variable Argument Handling Intrinsics</a>
</div>

<div class="doc_text">

<p>Variable argument support is defined in LLVM with the <a
 href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three
intrinsic functions.  These functions are related to the similarly
named macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>

<p>All of these functions operate on arguments that use a
target-specific value type "<tt>va_list</tt>".  The LLVM assembly
language reference manual does not define what this type is, so all
transformations should be prepared to handle these functions regardless of
the type used.</p>

<p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
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
  %ap = alloca i8*
  %ap2 = bitcast i8** %ap to i8*
  call void @llvm.va_start(i8* %ap2)

  ; Read a single integer argument
  %tmp = va_arg i8** %ap, i32

  ; Demonstrate usage of llvm.va_copy and llvm.va_end
  %aq = alloca i8*
  %aq2 = bitcast i8** %aq to i8*
  call void @llvm.va_copy(i8* %aq2, i8* %ap2)
  call void @llvm.va_end(i8* %aq2)

  ; Stop processing of arguments.
  call void @llvm.va_end(i8* %ap2)
  ret i32 %tmp
}

declare void @llvm.va_start(i8*)
declare void @llvm.va_copy(i8*, i8*)
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>
</div>


<div class="doc_text">
<h5>Syntax:</h5>
<pre>  declare void %llvm.va_start(i8* &lt;arglist&gt;)<br></pre>
<h5>Overview:</h5>
<P>The '<tt>llvm.va_start</tt>' intrinsic initializes
<tt>*&lt;arglist&gt;</tt> for subsequent use by <tt><a
href="#i_va_arg">va_arg</a></tt>.</p>

<h5>Arguments:</h5>

<P>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>

<h5>Semantics:</h5>

<P>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
macro available in C.  In a target-dependent way, it initializes the
<tt>va_list</tt> element to which the argument points, so that the next call to
<tt>va_arg</tt> will produce the first variable argument passed to the function.
Unlike the C <tt>va_start</tt> macro, this intrinsic does not need to know the
last argument of the function as the compiler can figure that out.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
 <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
</div>

<div class="doc_text">
<h5>Syntax:</h5>
<pre>  declare void @llvm.va_end(i8* &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="#int_va_start">llvm.va_start</a></tt>
or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>

<h5>Arguments:</h5>

<p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p>

<h5>Semantics:</h5>

<p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
macro available in C.  In a target-dependent way, it destroys the
<tt>va_list</tt> element to which the argument points.  Calls to <a
href="#int_va_start"><tt>llvm.va_start</tt></a> and <a href="#int_va_copy">
<tt>llvm.va_copy</tt></a> must be matched exactly with calls to
<tt>llvm.va_end</tt>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
</pre>

<h5>Overview:</h5>

<p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
from the source argument list to the destination argument list.</p>

<h5>Arguments:</h5>

<p>The first argument is a pointer to a <tt>va_list</tt> element to initialize.
The second argument is a pointer to a <tt>va_list</tt> element to copy from.</p>


<h5>Semantics:</h5>

<p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
macro available in C.  In a target-dependent way, it copies the source
<tt>va_list</tt> element into the destination <tt>va_list</tt> element.  This
intrinsic is necessary because the <tt><a href="#int_va_start">
llvm.va_start</a></tt> intrinsic may be arbitrarily complex and require, for
example, memory allocation.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
</div>

<div class="doc_text">

<p>
LLVM support for <a href="GarbageCollection.html">Accurate Garbage
Collection</a> requires the implementation and generation of these intrinsics.
These intrinsics allow identification of <a href="#int_gcroot">GC roots on the
stack</a>, as well as garbage collector implementations that require <a
href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a> barriers.
Front-ends for type-safe garbage collected languages should generate these
intrinsics to make use of the LLVM garbage collectors.  For more details, see <a
href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>.
</p>

<p>The garbage collection intrinsics only operate on objects in the generic 
	address space (address space zero).</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
</pre>

<h5>Overview:</h5>

<p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to
the code generator, and allows some metadata to be associated with it.</p>

<h5>Arguments:</h5>

<p>The first argument specifies the address of a stack object that contains the
root pointer.  The second pointer (which must be either a constant or a global
value address) contains the meta-data to be associated with the root.</p>

<h5>Semantics:</h5>

<p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc"
location.  At compile-time, the code generator generates information to allow
the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>'
intrinsic may only be used in a function which <a href="#gc">specifies a GC
algorithm</a>.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
</pre>

<h5>Overview:</h5>

<p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
locations, allowing garbage collector implementations that require read
barriers.</p>

<h5>Arguments:</h5>

<p>The second argument is the address to read from, which should be an address
allocated from the garbage collector.  The first object is a pointer to the 
start of the referenced object, if needed by the language runtime (otherwise
null).</p>

<h5>Semantics:</h5>

<p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
instruction, but may be replaced with substantially more complex code by the
garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic
may only be used in a function which <a href="#gc">specifies a GC
algorithm</a>.</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
</pre>

<h5>Overview:</h5>

<p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
locations, allowing garbage collector implementations that require write
barriers (such as generational or reference counting collectors).</p>

<h5>Arguments:</h5>

<p>The first argument is the reference to store, the second is the start of the
object to store it to, and the third is the address of the field of Obj to 
store to.  If the runtime does not require a pointer to the object, Obj may be
null.</p>

<h5>Semantics:</h5>

<p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
instruction, but may be replaced with substantially more complex code by the
garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic
may only be used in a function which <a href="#gc">specifies a GC
algorithm</a>.</p>

</div>



<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_codegen">Code Generator Intrinsics</a>
</div>

<div class="doc_text">
<p>
These intrinsics are provided by LLVM to expose special features that may only
be implemented with code generator support.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a 
target-specific value indicating the return address of the current function 
or one of its callers.
</p>

<h5>Arguments:</h5>

<p>
The argument to this intrinsic indicates which function to return the address
for.  Zero indicates the calling function, one indicates its caller, etc.  The
argument is <b>required</b> to be a constant integer value.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer indicating
the return address of the specified call frame, or zero if it cannot be
identified.  The value returned by this intrinsic is likely to be incorrect or 0
for arguments other than zero, so it should only be used for debugging purposes.
</p>

<p>
Note that calling this intrinsic does not prevent function inlining or other
aggressive transformations, so the value returned may not be that of the obvious
source-language caller.
</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i8 *@llvm.frameaddress(i32 &lt;level&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the 
target-specific frame pointer value for the specified stack frame.
</p>

<h5>Arguments:</h5>

<p>
The argument to this intrinsic indicates which function to return the frame
pointer for.  Zero indicates the calling function, one indicates its caller,
etc.  The argument is <b>required</b> to be a constant integer value.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer indicating
the frame address of the specified call frame, or zero if it cannot be
identified.  The value returned by this intrinsic is likely to be incorrect or 0
for arguments other than zero, so it should only be used for debugging purposes.
</p>

<p>
Note that calling this intrinsic does not prevent function inlining or other
aggressive transformations, so the value returned may not be that of the obvious
source-language caller.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i8 *@llvm.stacksave()
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state of
the function stack, for use with <a href="#int_stackrestore">
<tt>llvm.stackrestore</tt></a>.  This is useful for implementing language
features like scoped automatic variable sized arrays in C99.
</p>

<h5>Semantics:</h5>

<p>
This intrinsic returns a opaque pointer value that can be passed to <a
href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>.  When an
<tt>llvm.stackrestore</tt> intrinsic is executed with a value saved from 
<tt>llvm.stacksave</tt>, it effectively restores the state of the stack to the
state it was in when the <tt>llvm.stacksave</tt> intrinsic executed.  In
practice, this pops any <a href="#i_alloca">alloca</a> blocks from the stack
that were allocated after the <tt>llvm.stacksave</tt> was executed.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.stackrestore(i8 * %ptr)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of
the function stack to the state it was in when the corresponding <a
href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic executed.  This is
useful for implementing language features like scoped automatic variable sized
arrays in C99.
</p>

<h5>Semantics:</h5>

<p>
See the description for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.
</p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;)
</pre>

<h5>Overview:</h5>


<p>
The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to insert
a prefetch instruction if supported; otherwise, it is a noop.  Prefetches have
no
effect on the behavior of the program but can change its performance
characteristics.
</p>

<h5>Arguments:</h5>

<p>
<tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the specifier
determining if the fetch should be for a read (0) or write (1), and
<tt>locality</tt> is a temporal locality specifier ranging from (0) - no
locality, to (3) - extremely local keep in cache.  The <tt>rw</tt> and
<tt>locality</tt> arguments must be constant integers.
</p>

<h5>Semantics:</h5>

<p>
This intrinsic does not modify the behavior of the program.  In particular,
prefetches cannot trap and do not produce a value.  On targets that support this
intrinsic, the prefetch can provide hints to the processor cache for better
performance.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.pcmarker(i32 &lt;id&gt;)
</pre>

<h5>Overview:</h5>


<p>
The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program Counter
(PC) in a region of 
code to simulators and other tools.  The method is target specific, but it is 
expected that the marker will use exported symbols to transmit the PC of the marker.
The marker makes no guarantees that it will remain with any specific instruction 
after optimizations.  It is possible that the presence of a marker will inhibit 
optimizations.  The intended use is to be inserted after optimizations to allow
correlations of simulation runs.
</p>

<h5>Arguments:</h5>

<p>
<tt>id</tt> is a numerical id identifying the marker.
</p>

<h5>Semantics:</h5>

<p>
This intrinsic does not modify the behavior of the program.  Backends that do not 
support this intrinisic may ignore it.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i64 @llvm.readcyclecounter( )
</pre>

<h5>Overview:</h5>


<p>
The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle 
counter register (or similar low latency, high accuracy clocks) on those targets
that support it.  On X86, it should map to RDTSC.  On Alpha, it should map to RPCC.
As the backing counters overflow quickly (on the order of 9 seconds on alpha), this
should only be used for small timings.  
</p>

<h5>Semantics:</h5>

<p>
When directly supported, reading the cycle counter should not modify any memory.  
Implementations are allowed to either return a application specific value or a
system wide value.  On backends without support, this is lowered to a constant 0.
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_libc">Standard C Library Intrinsics</a>
</div>

<div class="doc_text">
<p>
LLVM provides intrinsics for a few important standard C library functions.
These intrinsics allow source-language front-ends to pass information about the
alignment of the pointer arguments to the code generator, providing opportunity
for more efficient code generation.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.memcpy.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                i32 &lt;len&gt;, i32 &lt;align&gt;)
  declare void @llvm.memcpy.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                i64 &lt;len&gt;, i32 &lt;align&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the source
location to the destination location.
</p>

<p>
Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt> 
intrinsics do not return a value, and takes an extra alignment argument.
</p>

<h5>Arguments:</h5>

<p>
The first argument is a pointer to the destination, the second is a pointer to
the source.  The third argument is an integer argument
specifying the number of bytes to copy, and the fourth argument is the alignment
of the source and destination locations.
</p>

<p>
If the call to this intrinisic has an alignment value that is not 0 or 1, then
the caller guarantees that both the source and destination pointers are aligned
to that boundary.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the source
location to the destination location, which are not allowed to overlap.  It
copies "len" bytes of memory over.  If the argument is known to be aligned to
some boundary, this can be specified as the fourth argument, otherwise it should
be set to 0 or 1.
</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.memmove.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
  declare void @llvm.memmove.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the source
location to the destination location. It is similar to the
'<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to overlap.
</p>

<p>
Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt> 
intrinsics do not return a value, and takes an extra alignment argument.
</p>

<h5>Arguments:</h5>

<p>
The first argument is a pointer to the destination, the second is a pointer to
the source.  The third argument is an integer argument
specifying the number of bytes to copy, and the fourth argument is the alignment
of the source and destination locations.
</p>

<p>
If the call to this intrinisic has an alignment value that is not 0 or 1, then
the caller guarantees that the source and destination pointers are aligned to
that boundary.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the source
location to the destination location, which may overlap.  It
copies "len" bytes of memory over.  If the argument is known to be aligned to
some boundary, this can be specified as the fourth argument, otherwise it should
be set to 0 or 1.
</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.memset.i32(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
                                i32 &lt;len&gt;, i32 &lt;align&gt;)
  declare void @llvm.memset.i64(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
                                i64 &lt;len&gt;, i32 &lt;align&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a particular
byte value.
</p>

<p>
Note that, unlike the standard libc function, the <tt>llvm.memset</tt> intrinsic
does not return a value, and takes an extra alignment argument.
</p>

<h5>Arguments:</h5>

<p>
The first argument is a pointer to the destination to fill, the second is the
byte value to fill it with, the third argument is an integer
argument specifying the number of bytes to fill, and the fourth argument is the
known alignment of destination location.
</p>

<p>
If the call to this intrinisic has an alignment value that is not 0 or 1, then
the caller guarantees that the destination pointer is aligned to that boundary.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting at
the
destination location.  If the argument is known to be aligned to some boundary,
this can be specified as the fourth argument, otherwise it should be set to 0 or
1.
</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any 
floating point or vector of floating point type. Not all targets support all
types however.
<pre>
  declare float     @llvm.sqrt.f32(float %Val)
  declare double    @llvm.sqrt.f64(double %Val)
  declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
  declare fp128     @llvm.sqrt.f128(fp128 %Val)
  declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand,
returning the same value as the libm '<tt>sqrt</tt>' functions would.  Unlike
<tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined behavior for
negative numbers other than -0.0 (which allows for better optimization, because
there is no need to worry about errno being set).  <tt>llvm.sqrt(-0.0)</tt> is
defined to return -0.0 like IEEE sqrt.
</p>

<h5>Arguments:</h5>

<p>
The argument and return value are floating point numbers of the same type.
</p>

<h5>Semantics:</h5>

<p>
This function returns the sqrt of the specified operand if it is a nonnegative
floating point number.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any 
floating point or vector of floating point type. Not all targets support all
types however.
<pre>
  declare float     @llvm.powi.f32(float  %Val, i32 %power)
  declare double    @llvm.powi.f64(double %Val, i32 %power)
  declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
  declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
  declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the
specified (positive or negative) power.  The order of evaluation of
multiplications is not defined.  When a vector of floating point type is
used, the second argument remains a scalar integer value.
</p>

<h5>Arguments:</h5>

<p>
The second argument is an integer power, and the first is a value to raise to
that power.
</p>

<h5>Semantics:</h5>

<p>
This function returns the first value raised to the second power with an
unspecified sequence of rounding operations.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any 
floating point or vector of floating point type. Not all targets support all
types however.
<pre>
  declare float     @llvm.sin.f32(float  %Val)
  declare double    @llvm.sin.f64(double %Val)
  declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
  declare fp128     @llvm.sin.f128(fp128 %Val)
  declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.
</p>

<h5>Arguments:</h5>

<p>
The argument and return value are floating point numbers of the same type.
</p>

<h5>Semantics:</h5>

<p>
This function returns the sine of the specified operand, returning the
same values as the libm <tt>sin</tt> functions would, and handles error
conditions in the same way.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any 
floating point or vector of floating point type. Not all targets support all
types however.
<pre>
  declare float     @llvm.cos.f32(float  %Val)
  declare double    @llvm.cos.f64(double %Val)
  declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
  declare fp128     @llvm.cos.f128(fp128 %Val)
  declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.
</p>

<h5>Arguments:</h5>

<p>
The argument and return value are floating point numbers of the same type.
</p>

<h5>Semantics:</h5>

<p>
This function returns the cosine of the specified operand, returning the
same values as the libm <tt>cos</tt> functions would, and handles error
conditions in the same way.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any 
floating point or vector of floating point type. Not all targets support all
types however.
<pre>
  declare float     @llvm.pow.f32(float  %Val, float %Power)
  declare double    @llvm.pow.f64(double %Val, double %Power)
  declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
  declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
  declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the
specified (positive or negative) power.
</p>

<h5>Arguments:</h5>

<p>
The second argument is a floating point power, and the first is a value to
raise to that power.
</p>

<h5>Semantics:</h5>

<p>
This function returns the first value raised to the second power,
returning the
same values as the libm <tt>pow</tt> functions would, and handles error
conditions in the same way.</p>
</div>


<!-- ======================================================================= -->
<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 &lt;id&gt;)
  declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
  declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
</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  &lt;src&gt;)
  declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
  declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
  declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
  declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
</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  &lt;src&gt;)
  declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
  declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
  declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
  declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
</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>



<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any 
integer bit width. Not all targets support all bit widths however.
<pre>
  declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
  declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
  declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
  declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
  declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of 
trailing zeros.
</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.cttz</tt>' intrinsic counts the trailing (least 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.cttz(2) = 1</tt>.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_part_select">'<tt>llvm.part.select.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.part.select</tt> 
on any integer bit width.
<pre>
  declare i17 @llvm.part.select.i17 (i17 %val, i32 %loBit, i32 %hiBit)
  declare i29 @llvm.part.select.i29 (i29 %val, i32 %loBit, i32 %hiBit)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.part.select</tt>' family of intrinsic functions selects a
range of bits from an integer value and returns them in the same bit width as
the original value.</p>

<h5>Arguments:</h5>
<p>The first argument, <tt>%val</tt> and the result may be integer types of 
any bit width but they must have the same bit width. The second and third 
arguments must be <tt>i32</tt> type since they specify only a bit index.</p>

<h5>Semantics:</h5>
<p>The operation of the '<tt>llvm.part.select</tt>' intrinsic has two modes
of operation: forwards and reverse. If <tt>%loBit</tt> is greater than
<tt>%hiBits</tt> then the intrinsic operates in reverse mode. Otherwise it
operates in forward mode.</p>
<p>In forward mode, this intrinsic is the equivalent of shifting <tt>%val</tt>
right by <tt>%loBit</tt> bits and then ANDing it with a mask with
only the <tt>%hiBit - %loBit</tt> bits set, as follows:</p>
<ol>
  <li>The <tt>%val</tt> is shifted right (LSHR) by the number of bits specified
  by <tt>%loBits</tt>. This normalizes the value to the low order bits.</li>
  <li>The <tt>%loBits</tt> value is subtracted from the <tt>%hiBits</tt> value
  to determine the number of bits to retain.</li>
  <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 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">
  <a name="int_part_set">'<tt>llvm.part.set.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.part.set</tt> 
on any integer bit width.
<pre>
  declare i17 @llvm.part.set.i17.i9 (i17 %val, i9 %repl, i32 %lo, i32 %hi)
  declare i29 @llvm.part.set.i29.i9 (i29 %val, i9 %repl, i32 %lo, i32 %hi)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.part.set</tt>' family of intrinsic functions replaces a range
of bits in an integer value with another integer value. It returns the integer
with the replaced bits.</p>

<h5>Arguments:</h5>
<p>The first argument, <tt>%val</tt> and the result may be integer types of 
any bit width but they must have the same bit width. <tt>%val</tt> is the value
whose bits will be replaced.  The second argument, <tt>%repl</tt> may be an
integer of any bit width. The third and fourth arguments must be <tt>i32</tt> 
type since they specify only a bit index.</p>

<h5>Semantics:</h5>
<p>The operation of the '<tt>llvm.part.set</tt>' intrinsic has two modes
of operation: forwards and reverse. If <tt>%lo</tt> is greater than
<tt>%hi</tt> then the intrinsic operates in reverse mode. Otherwise it
operates in forward mode.</p>
<p>For both modes, the <tt>%repl</tt> value is prepared for use by either
truncating it down to the size of the replacement area or zero extending it 
up to that size.</p>
<p>In forward mode, the bits between <tt>%lo</tt> and <tt>%hi</tt> (inclusive)
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 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; 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>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_debugger">Debugger Intrinsics</a>
</div>

<div class="doc_text">
<p>
The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt> prefix),
are described in the <a
href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source Level
Debugging</a> document.
</p>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_eh">Exception Handling Intrinsics</a>
</div>

<div class="doc_text">
<p> The LLVM exception handling intrinsics (which all start with
<tt>llvm.eh.</tt> prefix), are described in the <a
href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
Handling</a> document. </p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_trampoline">Trampoline Intrinsic</a>
</div>

<div class="doc_text">
<p>
  This intrinsic makes it possible to excise one parameter, marked with
  the <tt>nest</tt> attribute, from a function.  The result is a callable
  function pointer lacking the nest parameter - the caller does not need
  to provide a value for it.  Instead, the value to use is stored in
  advance in a "trampoline", a block of memory usually allocated
  on the stack, which also contains code to splice the nest value into the
  argument list.  This is used to implement the GCC nested function address
  extension.
</p>
<p>
  For example, if the function is
  <tt>i32 f(i8* nest  %c, i32 %x, i32 %y)</tt> then the resulting function
  pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as follows:</p>
<pre>
  %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
  %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
  %p = call i8* @llvm.init.trampoline( i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval )
  %fp = bitcast i8* %p to i32 (i32, i32)*
</pre>
  <p>The call <tt>%val = call i32 %fp( i32 %x, i32 %y )</tt> is then equivalent
  to <tt>%val = call i32 %f( i8* %nval, i32 %x, i32 %y )</tt>.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>
declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
</pre>
<h5>Overview:</h5>
<p>
  This fills the memory pointed to by <tt>tramp</tt> with code
  and returns a function pointer suitable for executing it.
</p>
<h5>Arguments:</h5>
<p>
  The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
  pointers.  The <tt>tramp</tt> argument must point to a sufficiently large
  and sufficiently aligned block of memory; this memory is written to by the
  intrinsic.  Note that the size and the alignment are target-specific - LLVM
  currently provides no portable way of determining them, so a front-end that
  generates this intrinsic needs to have some target-specific knowledge.
  The <tt>func</tt> argument must hold a function bitcast to an <tt>i8*</tt>.
</p>
<h5>Semantics:</h5>
<p>
  The block of memory pointed to by <tt>tramp</tt> is filled with target
  dependent code, turning it into a function.  A pointer to this function is
  returned, but needs to be bitcast to an
  <a href="#int_trampoline">appropriate function pointer type</a>
  before being called.  The new function's signature is the same as that of
  <tt>func</tt> with any arguments marked with the <tt>nest</tt> attribute
  removed.  At most one such <tt>nest</tt> argument is allowed, and it must be
  of pointer type.  Calling the new function is equivalent to calling
  <tt>func</tt> with the same argument list, but with <tt>nval</tt> used for the
  missing <tt>nest</tt> argument.  If, after calling
  <tt>llvm.init.trampoline</tt>, the memory pointed to by <tt>tramp</tt> is
  modified, then the effect of any later call to the returned function pointer is
  undefined.
</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
</div>

<div class="doc_text">
<p>
  These intrinsic functions expand the "universal IR" of LLVM to represent 
  hardware constructs for atomic operations and memory synchronization.  This 
  provides an interface to the hardware, not an interface to the programmer. It 
  is aimed at a low enough level to allow any programming models or APIs which 
  need atomic behaviors to map cleanly onto it. It is also modeled primarily on 
  hardware behavior. Just as hardware provides a "universal IR" for source 
  languages, it also provides a starting point for developing a "universal" 
  atomic operation and synchronization IR.
</p>
<p>
  These do <em>not</em> form an API such as high-level threading libraries, 
  software transaction memory systems, atomic primitives, and intrinsic 
  functions as found in BSD, GNU libc, atomic_ops, APR, and other system and 
  application libraries.  The hardware interface provided by LLVM should allow 
  a clean implementation of all of these APIs and parallel programming models. 
  No one model or paradigm should be selected above others unless the hardware 
  itself ubiquitously does so.

</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>
declare void @llvm.memory.barrier( i1 &lt;ll&gt;, i1 &lt;ls&gt;, i1 &lt;sl&gt;, i1 &lt;ss&gt;, 
i1 &lt;device&gt; )

</pre>
<h5>Overview:</h5>
<p>
  The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between 
  specific pairs of memory access types.
</p>
<h5>Arguments:</h5>
<p>
  The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments. 
  The first four arguments enables a specific barrier as listed below.  The fith
  argument specifies that the barrier applies to io or device or uncached memory.

</p>
  <ul>
    <li><tt>ll</tt>: load-load barrier</li>
    <li><tt>ls</tt>: load-store barrier</li>
    <li><tt>sl</tt>: store-load barrier</li>
    <li><tt>ss</tt>: store-store barrier</li>
    <li><tt>device</tt>: barrier applies to device and uncached memory also.
  </ul>
<h5>Semantics:</h5>
<p>
  This intrinsic causes the system to enforce some ordering constraints upon 
  the loads and stores of the program. This barrier does not indicate 
  <em>when</em> any events will occur, it only enforces an <em>order</em> in 
  which they occur. For any of the specified pairs of load and store operations 
  (f.ex.  load-load, or store-load), all of the first operations preceding the 
  barrier will complete before any of the second operations succeeding the 
  barrier begin. Specifically the semantics for each pairing is as follows:
</p>
  <ul>
    <li><tt>ll</tt>: All loads before the barrier must complete before any load 
    after the barrier begins.</li>

    <li><tt>ls</tt>: All loads before the barrier must complete before any 
    store after the barrier begins.</li>
    <li><tt>ss</tt>: All stores before the barrier must complete before any 
    store after the barrier begins.</li>
    <li><tt>sl</tt>: All stores before the barrier must complete before any 
    load after the barrier begins.</li>
  </ul>
<p>
  These semantics are applied with a logical "and" behavior when more than  one 
  is enabled in a single memory barrier intrinsic.  
</p>
<p>
  Backends may implement stronger barriers than those requested when they do not
  support as fine grained a barrier as requested.  Some architectures do not
  need all types of barriers and on such architectures, these become noops.
</p>
<h5>Example:</h5>
<pre>
%ptr      = malloc i32
            store i32 4, %ptr

%result1  = load i32* %ptr      <i>; yields {i32}:result1 = 4</i>
            call void @llvm.memory.barrier( i1 false, i1 true, i1 false, i1 false )
                                <i>; guarantee the above finishes</i>
            store i32 8, %ptr   <i>; before this begins</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_atomic_lcs">'<tt>llvm.atomic.lcs.*</tt>' Intrinsic</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<p>
  This is an overloaded intrinsic. You can use <tt>llvm.atomic.lcs</tt> on any 
  integer bit width. Not all targets support all bit widths however.</p>

<pre>
declare i8 @llvm.atomic.lcs.i8( i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt; )
declare i16 @llvm.atomic.lcs.i16( i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt; )
declare i32 @llvm.atomic.lcs.i32( i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt; )
declare i64 @llvm.atomic.lcs.i64( i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt; )

</pre>
<h5>Overview:</h5>
<p>
  This loads a value in memory and compares it to a given value. If they are 
  equal, it stores a new value into the memory.
</p>
<h5>Arguments:</h5>
<p>
  The <tt>llvm.atomic.lcs</tt> intrinsic takes three arguments. The result as 
  well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the 
  same bit width. The <tt>ptr</tt> argument must be a pointer to a value of 
  this integer type. While any bit width integer may be used, targets may only 
  lower representations they support in hardware.

</p>
<h5>Semantics:</h5>
<p>
  This entire intrinsic must be executed atomically. It first loads the value 
  in memory pointed to by <tt>ptr</tt> and compares it with the value 
  <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the memory. The 
  loaded value is yielded in all cases. This provides the equivalent of an 
  atomic compare-and-swap operation within the SSA framework.
</p>
<h5>Examples:</h5>

<pre>
%ptr      = malloc i32
            store i32 4, %ptr

%val1     = add i32 4, 4
%result1  = call i32 @llvm.atomic.lcs.i32( i32* %ptr, i32 4, %val1 )
                                          <i>; yields {i32}:result1 = 4</i>
%stored1  = icmp eq i32 %result1, 4       <i>; yields {i1}:stored1 = true</i>
%memval1  = load i32* %ptr                <i>; yields {i32}:memval1 = 8</i>

%val2     = add i32 1, 1
%result2  = call i32 @llvm.atomic.lcs.i32( i32* %ptr, i32 5, %val2 )
                                          <i>; yields {i32}:result2 = 8</i>
%stored2  = icmp eq i32 %result2, 5       <i>; yields {i1}:stored2 = false</i>

%memval2  = load i32* %ptr                <i>; yields {i32}:memval2 = 8</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>

<p>
  This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any 
  integer bit width. Not all targets support all bit widths however.</p>
<pre>
declare i8 @llvm.atomic.swap.i8( i8* &lt;ptr&gt;, i8 &lt;val&gt; )
declare i16 @llvm.atomic.swap.i16( i16* &lt;ptr&gt;, i16 &lt;val&gt; )
declare i32 @llvm.atomic.swap.i32( i32* &lt;ptr&gt;, i32 &lt;val&gt; )
declare i64 @llvm.atomic.swap.i64( i64* &lt;ptr&gt;, i64 &lt;val&gt; )

</pre>
<h5>Overview:</h5>
<p>
  This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields 
  the value from memory. It then stores the value in <tt>val</tt> in the memory 
  at <tt>ptr</tt>.
</p>
<h5>Arguments:</h5>

<p>
  The <tt>llvm.atomic.ls</tt> intrinsic takes two arguments. Both the 
  <tt>val</tt> argument and the result must be integers of the same bit width. 
  The first argument, <tt>ptr</tt>, must be a pointer to a value of this 
  integer type. The targets may only lower integer representations they 
  support.
</p>
<h5>Semantics:</h5>
<p>
  This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and 
  stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the 
  equivalent of an atomic swap operation within the SSA framework.

</p>
<h5>Examples:</h5>
<pre>
%ptr      = malloc i32
            store i32 4, %ptr

%val1     = add i32 4, 4
%result1  = call i32 @llvm.atomic.swap.i32( i32* %ptr, i32 %val1 )
                                        <i>; yields {i32}:result1 = 4</i>
%stored1  = icmp eq i32 %result1, 4     <i>; yields {i1}:stored1 = true</i>
%memval1  = load i32* %ptr              <i>; yields {i32}:memval1 = 8</i>

%val2     = add i32 1, 1
%result2  = call i32 @llvm.atomic.swap.i32( i32* %ptr, i32 %val2 )
                                        <i>; yields {i32}:result2 = 8</i>

%stored2  = icmp eq i32 %result2, 8     <i>; yields {i1}:stored2 = true</i>
%memval2  = load i32* %ptr              <i>; yields {i32}:memval2 = 2</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_atomic_las">'<tt>llvm.atomic.las.*</tt>' Intrinsic</a>

</div>
<div class="doc_text">
<h5>Syntax:</h5>
<p>
  This is an overloaded intrinsic. You can use <tt>llvm.atomic.las</tt> on any 
  integer bit width. Not all targets support all bit widths however.</p>
<pre>
declare i8 @llvm.atomic.las.i8.( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
declare i16 @llvm.atomic.las.i16.( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
declare i32 @llvm.atomic.las.i32.( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
declare i64 @llvm.atomic.las.i64.( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )

</pre>
<h5>Overview:</h5>
<p>
  This intrinsic adds <tt>delta</tt> to the value stored in memory at 
  <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.
</p>
<h5>Arguments:</h5>
<p>

  The intrinsic takes two arguments, the first a pointer to an integer value 
  and the second an integer value. The result is also an integer value. These 
  integer types can have any bit width, but they must all have the same bit 
  width. The targets may only lower integer representations they support.
</p>
<h5>Semantics:</h5>
<p>
  This intrinsic does a series of operations atomically. It first loads the 
  value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result 
  to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.
</p>

<h5>Examples:</h5>
<pre>
%ptr      = malloc i32
        store i32 4, %ptr
%result1  = call i32 @llvm.atomic.las.i32( i32* %ptr, i32 4 )
                                <i>; yields {i32}:result1 = 4</i>
%result2  = call i32 @llvm.atomic.las.i32( i32* %ptr, i32 2 )
                                <i>; yields {i32}:result2 = 8</i>
%result3  = call i32 @llvm.atomic.las.i32( i32* %ptr, i32 5 )
                                <i>; yields {i32}:result3 = 10</i>
%memval   = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
</pre>
</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.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on 
any integer bit width. 
</p>
<pre>
  declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.annotation</tt>' intrinsic.
</p>

<h5>Arguments:</h5>

<p>
The first argument is an integer value (result of some expression), 
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.
It returns the value of the first argument.
</p>

<h5>Semantics:</h5>

<p>
This intrinsic allows annotations to be put on arbitrary expressions
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>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.trap()
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.trap</tt>' intrinsic
</p>

<h5>Arguments:</h5>

<p>
None
</p>

<h5>Semantics:</h5>

<p>
This intrinsics is lowered to the target dependent trap instruction. If the
target does not have a trap instruction, this intrinsic will be lowered to the
call of the abort() function.
</p>
</div>

<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
