<!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="#moduleasm">Module-Level Inline Assembly</a></li>
    </ol>
  </li>
  <li><a href="#typesystem">Type System</a>
    <ol>
      <li><a href="#t_primitive">Primitive Types</a>    
        <ol>
          <li><a href="#t_classifications">Type Classifications</a></li>
        </ol>
      </li>
      <li><a href="#t_derived">Derived Types</a>
        <ol>
          <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_packed">Packed 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_div">'<tt>div</tt>' Instruction</a></li>
          <li><a href="#i_rem">'<tt>rem</tt>' Instruction</a></li>
          <li><a href="#i_setcc">'<tt>set<i>cc</i></tt>' Instructions</a></li>
        </ol>
      </li>
      <li><a href="#bitwiseops">Bitwise Binary Operations</a>
        <ol>
          <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>
          <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
          <li><a href="#i_shr">'<tt>shr</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>
          <li><a href="#i_vsetint">'<tt>vsetint</tt>' Instruction</a></li>
          <li><a href="#i_vsetfp">'<tt>vsetfp</tt>' Instruction</a></li>
          <li><a href="#i_vselect">'<tt>vselect</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#memoryops">Memory Access 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="#otherops">Other Operations</a>
        <ol>
          <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
          <li><a href="#i_cast">'<tt>cast .. to</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>
        </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="#i_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
          <li><a href="#i_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
          <li><a href="#i_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="#i_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
          <li><a href="#i_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
          <li><a href="#i_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_codegen">Code Generator Intrinsics</a>
        <ol>
          <li><a href="#i_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
          <li><a href="#i_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
          <li><a href="#i_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li>
          <li><a href="#i_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li>
          <li><a href="#i_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
          <li><a href="#i_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
          <li><a href="#i_readcyclecounter"><tt>llvm.readcyclecounter</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_libc">Standard C Library Intrinsics</a>
        <ol>
          <li><a href="#i_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li>
          <li><a href="#i_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li>
          <li><a href="#i_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li>
          <li><a href="#i_isunordered">'<tt>llvm.isunordered.*</tt>' Intrinsic</a></li>
          <li><a href="#i_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li>

        </ol>
      </li>
      <li><a href="#int_manip">Bit Manipulation Intrinsics</a>
        <ol>
          <li><a href="#i_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>
        </ol>
      </li>
      <li><a href="#int_debugger">Debugger intrinsics</a></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 bytecode
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>

<pre>
  %x = <a href="#i_add">add</a> int 1, %x
</pre>

<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 bytecode.  The violations pointed out
by the verifier pass indicate bugs in transformation passes or input to
the parser.</p>

<!-- Describe the typesetting conventions here. --> </div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="identifiers">Identifiers</a> </div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>LLVM uses three different forms of identifiers, for different
purposes:</p>

<ol>
  <li>Named values are represented as a string of characters with a '%' 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>"</tt> character can be used
  in a name.</li>

  <li>Unnamed values are represented as an unsigned numeric value with a '%'
  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 '%' sign 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_cast">cast</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_uint">uint</a></tt>', etc...),
and others.  These reserved words cannot conflict with variable names, because
none of them start with a '%' character.</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>

<pre>
  %result = <a href="#i_mul">mul</a> uint %X, 8
</pre>

<p>After strength reduction:</p>

<pre>
  %result = <a href="#i_shl">shl</a> uint %X, ubyte 3
</pre>

<p>And the hard way:</p>

<pre>
  <a href="#i_add">add</a> uint %X, %X           <i>; yields {uint}:%0</i>
  <a href="#i_add">add</a> uint %0, %0           <i>; yields {uint}:%1</i>
  %result = <a href="#i_add">add</a> uint %1, %1
</pre>

<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>

<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 sbyte]</a> c"hello world\0A\00"          <i>; [13 x sbyte]*</i>

<i>; External declaration of the puts function</i>
<a href="#functionstructure">declare</a> int %puts(sbyte*)                                            <i>; int(sbyte*)* </i>

<i>; Global variable / Function body section separator</i>
implementation

<i>; Definition of main function</i>
int %main() {                                                        <i>; int()* </i>
        <i>; Convert [13x sbyte]* to sbyte *...</i>
        %cast210 = <a
 href="#i_getelementptr">getelementptr</a> [13 x sbyte]* %.LC0, long 0, long 0 <i>; sbyte*</i>

        <i>; Call puts function to write out the string to stdout...</i>
        <a
 href="#i_call">call</a> int %puts(sbyte* %cast210)                              <i>; int</i>
        <a
 href="#i_ret">ret</a> int 0<br>}<br></pre>

<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>

<p>Due to a limitation in the current LLVM assembly parser (it is limited by
one-token lookahead), modules are split into two pieces by the "implementation"
keyword.  Global variable prototypes and definitions must occur before the
keyword, and function definitions must occur after it.  Function prototypes may
occur either before or after it.  In the future, the implementation keyword may
become a noop, if the parser gets smarter.</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, or the idea of "anonymous namespaces" in C++.
  </dd>

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

  <dd>"<tt>linkonce</tt>" linkage is similar to <tt>internal</tt> linkage, with
  the twist that linking together two modules defining the same
  <tt>linkonce</tt> globals will cause one of the globals to be discarded.  This
  is typically used to implement inline functions.  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 to implement constructs 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_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><a name="linkage_external">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.  It is illegal for a function <i>declaration</i>
to have any linkage type other than "externally visible".</a></p>

</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>csretcc</tt>" - The C struct return calling convention</b>:</dt>

  <dd>This calling convention matches the target C calling conventions, except
  that functions with this convention are required to take a pointer as their
  first argument, and the return type of the function must be void.  This is
  used for C functions that return aggregates by-value.  In this case, the
  function has been transformed to take a pointer to the struct as the first
  argument to the function.  For targets where the ABI specifies specific
  behavior for structure-return calls, the calling convention can be used to
  distinguish between struct return functions and other functions that take a
  pointer to a struct as the first argument.
  </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 tail call optimization 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="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 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>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>

</div>


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

<div class="doc_text">

<p>LLVM function definitions consist of an optional <a href="#linkage">linkage
type</a>, an optional <a href="#callingconv">calling convention</a>, a return
type, a function name, a (possibly empty) argument list, an optional section,
an optional alignment, an opening curly brace,
a list of basic blocks, and a closing curly brace.  LLVM function declarations
are defined with the "<tt>declare</tt>" keyword, an optional <a
href="#callingconv">calling convention</a>, a return type, a function name,
a possibly empty list of arguments, and an optional alignment.</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 program 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 functions are identified by their name and type signature.  Hence, two
functions with the same name but different parameter lists or return values are
considered different functions, and LLVM will resolve references to each
appropriately.</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="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_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_primitive">Primitive Types</a> </div>
<div class="doc_text">
<p>The primitive types are the fundamental building blocks of the LLVM
system. The current set of primitive types is as follows:</p>

<table class="layout">
  <tr class="layout">
    <td class="left">
      <table>
        <tbody>
        <tr><th>Type</th><th>Description</th></tr>
        <tr><td><tt>void</tt></td><td>No value</td></tr>
        <tr><td><tt>ubyte</tt></td><td>Unsigned 8-bit value</td></tr>
        <tr><td><tt>ushort</tt></td><td>Unsigned 16-bit value</td></tr>
        <tr><td><tt>uint</tt></td><td>Unsigned 32-bit value</td></tr>
        <tr><td><tt>ulong</tt></td><td>Unsigned 64-bit value</td></tr>
        <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
        <tr><td><tt>label</tt></td><td>Branch destination</td></tr>
        </tbody>
      </table>
    </td>
    <td class="right">
      <table>
        <tbody>
          <tr><th>Type</th><th>Description</th></tr>
          <tr><td><tt>bool</tt></td><td>True or False value</td></tr>
          <tr><td><tt>sbyte</tt></td><td>Signed 8-bit value</td></tr>
          <tr><td><tt>short</tt></td><td>Signed 16-bit value</td></tr>
          <tr><td><tt>int</tt></td><td>Signed 32-bit value</td></tr>
          <tr><td><tt>long</tt></td><td>Signed 64-bit value</td></tr>
          <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
        </tbody>
      </table>
    </td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_classifications">Type
Classifications</a> </div>
<div class="doc_text">
<p>These different primitive 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 name="t_signed">signed</a></td>
      <td><tt>sbyte, short, int, long, float, double</tt></td>
    </tr>
    <tr>
      <td><a name="t_unsigned">unsigned</a></td>
      <td><tt>ubyte, ushort, uint, ulong</tt></td>
    </tr>
    <tr>
      <td><a name="t_integer">integer</a></td>
      <td><tt>ubyte, sbyte, ushort, short, uint, int, ulong, long</tt></td>
    </tr>
    <tr>
      <td><a name="t_integral">integral</a></td>
      <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long</tt>
      </td>
    </tr>
    <tr>
      <td><a name="t_floating">floating point</a></td>
      <td><tt>float, double</tt></td>
    </tr>
    <tr>
      <td><a name="t_firstclass">first class</a></td>
      <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long,<br> 
      float, double, <a href="#t_pointer">pointer</a>, 
      <a href="#t_packed">packed</a></tt></td>
    </tr>
  </tbody>
</table>

<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_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_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 int ]</tt><br/>
      <tt>[41 x int ]</tt><br/>
      <tt>[40 x uint]</tt><br/>
    </td>
    <td class="left">
      Array of 40 integer values.<br/>
      Array of 41 integer values.<br/>
      Array of 40 unsigned integer values.<br/>
    </td>
  </tr>
</table>
<p>Here are some examples of multidimensional arrays:</p>
<table class="layout">
  <tr class="layout">
    <td class="left">
      <tt>[3 x [4 x int]]</tt><br/>
      <tt>[12 x [10 x float]]</tt><br/>
      <tt>[2 x [3 x [4 x uint]]]</tt><br/>
    </td>
    <td class="left">
      3x4 array of integer values.<br/>
      12x10 array of single precision floating point values.<br/>
      2x3x4 array of unsigned integer values.<br/>
    </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 "{ int, [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. 
Function types are usually used to build virtual function tables
(which are structures of pointers to functions), for indirect function
calls, and when defining a function.</p>
<p>
The return type of a function type cannot be an aggregate type.
</p>
<h5>Syntax:</h5>
<pre>  &lt;returntype&gt; (&lt;parameter list&gt;)<br></pre>
<p>...where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of type
specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
which indicates that the function takes a variable number of arguments.
Variable argument functions can access their arguments with the <a
 href="#int_varargs">variable argument handling intrinsic</a> functions.</p>
<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left">
      <tt>int (int)</tt> <br/>
      <tt>float (int, int *) *</tt><br/>
      <tt>int (sbyte *, ...)</tt><br/>
    </td>
    <td class="left">
      function taking an <tt>int</tt>, returning an <tt>int</tt><br/>
      <a href="#t_pointer">Pointer</a> to a function that takes an
      <tt>int</tt> and a <a href="#t_pointer">pointer</a> to <tt>int</tt>,
      returning <tt>float</tt>.<br/>
      A vararg function that takes at least one <a href="#t_pointer">pointer</a> 
      to <tt>sbyte</tt> (signed char in C), which returns an integer.  This is 
      the signature for <tt>printf</tt> in LLVM.<br/>
    </td>
  </tr>
</table>

</div>
<!-- _______________________________________________________________________ -->
<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>{ int, int, int }</tt><br/>
      <tt>{ float, int (int) * }</tt><br/>
    </td>
    <td class="left">
      a triple of three <tt>int</tt> values<br/>
      A pair, where the first element is a <tt>float</tt> and the second element 
      is a <a href="#t_pointer">pointer</a> to a <a href="#t_function">function</a> 
      that takes an <tt>int</tt>, returning an <tt>int</tt>.<br/>
    </td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
<div class="doc_text">
<h5>Overview:</h5>
<p>As in many languages, the pointer type represents a pointer or
reference to another object, which must live in memory.</p>
<h5>Syntax:</h5>
<pre>  &lt;type&gt; *<br></pre>
<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left">
      <tt>[4x int]*</tt><br/>
      <tt>int (int *) *</tt><br/>
    </td>
    <td class="left">
      A <a href="#t_pointer">pointer</a> to <a href="#t_array">array</a> of
      four <tt>int</tt> values<br/>
      A <a href="#t_pointer">pointer</a> to a <a
      href="#t_function">function</a> that takes an <tt>int*</tt>, returning an
      <tt>int</tt>.<br/>
    </td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_packed">Packed Type</a> </div>
<div class="doc_text">

<h5>Overview:</h5>

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

<h5>Syntax:</h5>

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

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

<h5>Examples:</h5>

<table class="layout">
  <tr class="layout">
    <td class="left">
      <tt>&lt;4 x int&gt;</tt><br/>
      <tt>&lt;8 x float&gt;</tt><br/>
      <tt>&lt;2 x uint&gt;</tt><br/>
    </td>
    <td class="left">
      Packed vector of 4 integer values.<br/>
      Packed vector of 8 floating-point values.<br/>
      Packed vector of 2 unsigned integer values.<br/>
    </td>
  </tr>
</table>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_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 foward 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.<br/>
    </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">bool</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 signed
  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).  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>{ int 4, float 17.0, int* %G }</tt>",
  where "<tt>%G</tt>" is declared as "<tt>%G = external global int</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>[ int 42, int 11, int 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>Packed constants</b></dt>

  <dd>Packed constants are represented with notation similar to packed type
  definitions (a comma separated list of elements, surrounded by
  less-than/greater-than's (<tt>&lt;&gt;</tt>)).  For example: "<tt>&lt; int 42,
  int 11, int 74, int 100 &gt;</tt>".  Packed constants must have <a
  href="#t_packed">packed 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>

<pre>
  %X = global int 17
  %Y = global int 42
  %Z = global [2 x int*] [ int* %X, int* %Y ]
</pre>

</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>cast ( CST to TYPE )</tt></b></dt>

  <dd>Cast a constant to another 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.

  <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.


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

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

  <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>

<pre>
  int(int) asm "bswap $0", "=r,r"
</pre>

<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>

<pre>
  %X = call int asm "<a href="#i_bswap">bswap</a> $0", "=r,r"(int %Y)
</pre>

<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>

<pre>
  call void asm sideeffect "eieio", ""()
</pre>

<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>
</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 a value 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 any '<a
 href="#t_firstclass">first class</a>' type.  Notice 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 a value that does 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.</p>
<h5>Example:</h5>
<pre>  ret int 5                       <i>; Return an integer value of 5</i>
  ret void                        <i>; Return from a void function</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 bool &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>bool</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>bool</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_setcc">seteq</a> int %a, %b<br>  br bool %cond, label %IfEqual, label %IfUnequal<br>IfEqual:<br>  <a
 href="#i_ret">ret</a> int 1<br>IfUnequal:<br>  <a href="#i_ret">ret</a> int 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_cast">cast</a> bool %value to int
 switch int %Val, label %truedest [int 0, label %falsedest ]

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

 <i>; Implement a jump table:</i>
 switch uint %val, label %otherwise [ uint 0, label %onzero 
                                      uint 1, label %onone 
                                      uint 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.</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 int %Test(int 15)             to label %Continue
              unwind label %TestCleanup     <i>; {int}:retval set</i>
  %retval = invoke <a href="#callingconv">coldcc</a> int %Test(int 15)             to label %Continue
              unwind label %TestCleanup     <i>; {int}:retval set</i>
</pre>
</div>


<!-- _______________________________________________________________________ -->

<div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
Instruction</a> </div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  unwind
</pre>

<h5>Overview:</h5>

<p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow
at the first callee in the dynamic call stack which used an <a
href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call.  This is
primarily used to implement exception handling.</p>

<h5>Semantics:</h5>

<p>The '<tt>unwind</tt>' intrinsic causes execution of the current function to
immediately halt.  The dynamic call stack is then searched for the first <a
href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack.  Once found,
execution continues at the "exceptional" destination block specified by the
<tt>invoke</tt> instruction.  If there is no <tt>invoke</tt> instruction in the
dynamic call chain, undefined behavior results.</p>
</div>

<!-- _______________________________________________________________________ -->

<div class="doc_subsubsection"> <a name="i_unreachable">'<tt>unreachable</tt>'
Instruction</a> </div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  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, 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_packed">packed</a> data type. 
The result value of a binary operator is not
necessarily the same type as its operands.</p>
<p>There are several different binary operators:</p>
</div>
<!-- _______________________________________________________________________ -->
<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_packed">packed</a> versions of the values.
Both arguments must have identical types.</p>
<h5>Semantics:</h5>
<p>The value produced is the integer or floating point sum of the two
operands.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = add int 4, %var          <i>; yields {int}: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_packed">packed</a> versions of the values.
Both arguments must have identical types.</p>
<h5>Semantics:</h5>
<p>The value produced is the integer or floating point difference of
the two operands.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = sub int 4, %var          <i>; yields {int}:result = 4 - %var</i>
  &lt;result&gt; = sub int 0, %val          <i>; yields {int}: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_packed">packed</a> versions of the values.
Both arguments must have identical types.</p>
<h5>Semantics:</h5>
<p>The value produced is the integer or floating point product of the
two operands.</p>
<p>There is no signed vs unsigned multiplication.  The appropriate
action is taken based on the type of the operand.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = mul int 4, %var          <i>; yields {int}:result = 4 * %var</i>
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_div">'<tt>div</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = div &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>div</tt>' instruction returns the quotient of its two
operands.</p>
<h5>Arguments:</h5>
<p>The two arguments to the '<tt>div</tt>' instruction must be either <a
 href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
values. 
This instruction can also take <a href="#t_packed">packed</a> versions of the values.
Both arguments must have identical types.</p>
<h5>Semantics:</h5>
<p>The value produced is the integer or floating point quotient of the
two operands.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = div int 4, %var          <i>; yields {int}:result = 4 / %var</i>
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_rem">'<tt>rem</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = rem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>rem</tt>' instruction returns the remainder from the
division of its two operands.</p>
<h5>Arguments:</h5>
<p>The two arguments to the '<tt>rem</tt>' instruction must be either <a
 href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
values. 
This instruction can also take <a href="#t_packed">packed</a> versions of the values.
Both arguments must have identical types.</p>
<h5>Semantics:</h5>
<p>This returns the <i>remainder</i> of a division (where the result
has the same sign as the divisor), not the <i>modulus</i> (where the
result has the same sign as the dividend) 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>.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = rem int 4, %var          <i>; yields {int}:result = 4 % %var</i>
</pre>

</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_setcc">'<tt>set<i>cc</i></tt>'
Instructions</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = seteq &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
  &lt;result&gt; = setne &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
  &lt;result&gt; = setlt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
  &lt;result&gt; = setgt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
  &lt;result&gt; = setle &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
  &lt;result&gt; = setge &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>set<i>cc</i></tt>' family of instructions returns a boolean
value based on a comparison of their two operands.</p>
<h5>Arguments:</h5>
<p>The two arguments to the '<tt>set<i>cc</i></tt>' instructions must
be of <a href="#t_firstclass">first class</a> type (it is not possible
to compare '<tt>label</tt>'s, '<tt>array</tt>'s, '<tt>structure</tt>'
or '<tt>void</tt>' values, etc...).  Both arguments must have identical
types.</p>
<h5>Semantics:</h5>
<p>The '<tt>seteq</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if both operands are equal.<br>
The '<tt>setne</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if both operands are unequal.<br>
The '<tt>setlt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if the first operand is less than the second operand.<br>
The '<tt>setgt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if the first operand is greater than the second operand.<br>
The '<tt>setle</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if the first operand is less than or equal to the second operand.<br>
The '<tt>setge</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
value if the first operand is greater than or equal to the second
operand.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = seteq int   4, 5        <i>; yields {bool}:result = false</i>
  &lt;result&gt; = setne float 4, 5        <i>; yields {bool}:result = true</i>
  &lt;result&gt; = setlt uint  4, 5        <i>; yields {bool}:result = true</i>
  &lt;result&gt; = setgt sbyte 4, 5        <i>; yields {bool}:result = false</i>
  &lt;result&gt; = setle sbyte 4, 5        <i>; yields {bool}:result = true</i>
  &lt;result&gt; = setge sbyte 4, 5        <i>; yields {bool}:result = false</i>
</pre>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
Operations</a> </div>
<div class="doc_text">
<p>Bitwise binary operators are used to do various forms of
bit-twiddling in a program.  They are generally very efficient
instructions and can commonly be strength reduced from other
instructions.  They require two operands, execute an operation on them,
and produce a single value.  The resulting value of the bitwise binary
operators is always the same type as its first operand.</p>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_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_integral">integral</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 int 4, %var         <i>; yields {int}:result = 4 &amp; %var</i>
  &lt;result&gt; = and int 15, 40          <i>; yields {int}:result = 8</i>
  &lt;result&gt; = and int 4, 8            <i>; yields {int}: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_integral">integral</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 int 4, %var         <i>; yields {int}:result = 4 | %var</i>
  &lt;result&gt; = or int 15, 40          <i>; yields {int}:result = 47</i>
  &lt;result&gt; = or int 4, 8            <i>; yields {int}: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_integral">integral</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 int 4, %var         <i>; yields {int}:result = 4 ^ %var</i>
  &lt;result&gt; = xor int 15, 40          <i>; yields {int}:result = 39</i>
  &lt;result&gt; = xor int 4, 8            <i>; yields {int}:result = 12</i>
  &lt;result&gt; = xor int %V, -1          <i>; yields {int}:result = ~%V</i>
</pre>
</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;, ubyte &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>The first argument to the '<tt>shl</tt>' instruction must be an <a
 href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
type.</p>
<h5>Semantics:</h5>
<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = shl int 4, ubyte %var   <i>; yields {int}:result = 4 &lt;&lt; %var</i>
  &lt;result&gt; = shl int 4, ubyte 2      <i>; yields {int}:result = 16</i>
  &lt;result&gt; = shl int 1, ubyte 10     <i>; yields {int}:result = 1024</i>
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_shr">'<tt>shr</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = shr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>shr</tt>' instruction returns the first operand shifted to
the right a specified number of bits.</p>
<h5>Arguments:</h5>
<p>The first argument to the '<tt>shr</tt>' instruction must be an <a
 href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
type.</p>
<h5>Semantics:</h5>
<p>If the first argument is a <a href="#t_signed">signed</a> type, the
most significant bit is duplicated in the newly free'd bit positions. 
If the first argument is unsigned, zero bits shall fill the empty
positions.</p>
<h5>Example:</h5>
<pre>  &lt;result&gt; = shr int 4, ubyte %var   <i>; yields {int}:result = 4 &gt;&gt; %var</i>
  &lt;result&gt; = shr uint 4, ubyte 1     <i>; yields {uint}:result = 2</i>
  &lt;result&gt; = shr int 4, ubyte 2      <i>; yields {int}:result = 1</i>
  &lt;result&gt; = shr sbyte 4, ubyte 3    <i>; yields {sbyte}:result = 0</i>
  &lt;result&gt; = shr sbyte -2, ubyte 1   <i>; yields {sbyte}:result = -1</i>
</pre>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> 
  <a name="vectorops">Vector Operations</a>
</div>

<div class="doc_text">

<p>LLVM supports several instructions to represent vector operations in a
target-independent manner.  This instructions cover the element-access and
vector-specific operations needed to process vectors effectively.  While LLVM
does directly support these vector operations, many sophisticated algorithms
will want to use target-specific intrinsics to take full advantage of a specific
target.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, uint &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 packed 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_packed">packed</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 int&gt; %vec, uint 0    <i>; yields int</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, uint &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 packed 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_packed">packed</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 packed 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 int&gt; %vec, int 1, uint 0    <i>; yields &lt;4 x int&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 uint&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 'uint'.
</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 int&gt; %v1, &lt;4 x int&gt; %v2, 
                          &lt;4 x uint&gt; &lt;uint 0, uint 4, uint 1, uint 5&gt;    <i>; yields &lt;4 x int&gt;</i>
  %result = shufflevector &lt;4 x int&gt; %v1, &lt;4 x int&gt; undef, 
                          &lt;4 x uint&gt; &lt;uint 0, uint 1, uint 2, uint 3&gt;  <i>; yields &lt;4 x int&gt;</i> - Identity shuffle.
</pre>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_vsetint">'<tt>vsetint</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>&lt;result&gt; = vsetint &lt;op&gt;, &lt;n x &lt;ty&gt;&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields &lt;n x bool&gt;</i>
</pre>

<h5>Overview:</h5>

<p>The '<tt>vsetint</tt>' instruction takes two integer vectors and
returns a vector of boolean values representing, at each position, the
result of the comparison between the values at that position in the
two operands.</p>

<h5>Arguments:</h5>

<p>The arguments to a '<tt>vsetint</tt>' instruction are a comparison
operation and two value arguments.  The value arguments must be of <a
href="#t_integral">integral</a> <a href="#t_packed">packed</a> type,
and they must have identical types.  The operation argument must be
one of <tt>eq</tt>, <tt>ne</tt>, <tt>slt</tt>, <tt>sgt</tt>,
<tt>sle</tt>, <tt>sge</tt>, <tt>ult</tt>, <tt>ugt</tt>, <tt>ule</tt>,
<tt>uge</tt>, <tt>true</tt>, and <tt>false</tt>.  The result is a
packed <tt>bool</tt> value with the same length as each operand.</p>

<h5>Semantics:</h5>

<p>The following table shows the semantics of '<tt>vsetint</tt>'.  For
each position of the result, the comparison is done on the
corresponding positions of the two value arguments.  Note that the
signedness of the comparison depends on the comparison opcode and
<i>not</i> on the signedness of the value operands.  E.g., <tt>vsetint
slt <4 x unsigned> %x, %y</tt> does an elementwise <i>signed</i>
comparison of <tt>%x</tt> and <tt>%y</tt>.</p>

<table  border="1" cellspacing="0" cellpadding="4">
  <tbody>
    <tr><th>Operation</th><th>Result is true iff</th><th>Comparison is</th></tr>
    <tr><td><tt>eq</tt></td><td>var1 == var2</td><td>--</td></tr>
    <tr><td><tt>ne</tt></td><td>var1 != var2</td><td>--</td></tr>
    <tr><td><tt>slt</tt></td><td>var1 &lt; var2</td><td>signed</td></tr>
    <tr><td><tt>sgt</tt></td><td>var1 &gt; var2</td><td>signed</td></tr>
    <tr><td><tt>sle</tt></td><td>var1 &lt;= var2</td><td>signed</td></tr>
    <tr><td><tt>sge</tt></td><td>var1 &gt;= var2</td><td>signed</td></tr>
    <tr><td><tt>ult</tt></td><td>var1 &lt; var2</td><td>unsigned</td></tr>
    <tr><td><tt>ugt</tt></td><td>var1 &gt; var2</td><td>unsigned</td></tr>
    <tr><td><tt>ule</tt></td><td>var1 &lt;= var2</td><td>unsigned</td></tr>
    <tr><td><tt>uge</tt></td><td>var1 &gt;= var2</td><td>unsigned</td></tr>
    <tr><td><tt>true</tt></td><td>always</td><td>--</td></tr>
    <tr><td><tt>false</tt></td><td>never</td><td>--</td></tr>
  </tbody>
</table>

<h5>Example:</h5>
<pre>  &lt;result&gt; = vsetint eq &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, false</i>
  &lt;result&gt; = vsetint ne &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, true</i>
  &lt;result&gt; = vsetint slt &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, false</i>
  &lt;result&gt; = vsetint sgt &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, true</i>
  &lt;result&gt; = vsetint sle &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, false</i>
  &lt;result&gt; = vsetint sge &lt;2 x int&gt; &lt;int 0, int 1&gt;, &lt;int 1, int 0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, true</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_vsetfp">'<tt>vsetfp</tt>'
Instruction</a> </div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>&lt;result&gt; = vsetfp &lt;op&gt;, &lt;n x &lt;ty&gt;&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields &lt;n x bool&gt;</i>
</pre>

<h5>Overview:</h5>

<p>The '<tt>vsetfp</tt>' instruction takes two floating point vector
arguments and returns a vector of boolean values representing, at each
position, the result of the comparison between the values at that
position in the two operands.</p>

<h5>Arguments:</h5>

<p>The arguments to a '<tt>vsetfp</tt>' instruction are a comparison
operation and two value arguments.  The value arguments must be of <a
href="t_floating">floating point</a> <a href="#t_packed">packed</a>
type, and they must have identical types.  The operation argument must
be one of <tt>eq</tt>, <tt>ne</tt>, <tt>lt</tt>, <tt>gt</tt>,
<tt>le</tt>, <tt>ge</tt>, <tt>oeq</tt>, <tt>one</tt>, <tt>olt</tt>,
<tt>ogt</tt>, <tt>ole</tt>, <tt>oge</tt>, <tt>ueq</tt>, <tt>une</tt>,
<tt>ult</tt>, <tt>ugt</tt>, <tt>ule</tt>, <tt>uge</tt>, <tt>o</tt>,
<tt>u</tt>, <tt>true</tt>, and <tt>false</tt>.  The result is a packed
<tt>bool</tt> value with the same length as each operand.</p>

<h5>Semantics:</h5>

<p>The following table shows the semantics of '<tt>vsetfp</tt>' for
floating point types.  If either operand is a floating point Not a
Number (NaN) value, the operation is unordered, and the value in the
first column below is produced at that position.  Otherwise, the
operation is ordered, and the value in the second column is
produced.</p>

<table  border="1" cellspacing="0" cellpadding="4">
  <tbody>
    <tr><th>Operation</th><th>If unordered<th>Otherwise true iff</th></tr>
    <tr><td><tt>eq</tt></td><td>undefined</td><td>var1 == var2</td></tr>
    <tr><td><tt>ne</tt></td><td>undefined</td><td>var1 != var2</td></tr>
    <tr><td><tt>lt</tt></td><td>undefined</td><td>var1 &lt; var2</td></tr>
    <tr><td><tt>gt</tt></td><td>undefined</td><td>var1 &gt; var2</td></tr>
    <tr><td><tt>le</tt></td><td>undefined</td><td>var1 &lt;= var2</td></tr>
    <tr><td><tt>ge</tt></td><td>undefined</td><td>var1 &gt;= var2</td></tr>
    <tr><td><tt>oeq</tt></td><td>false</td><td>var1 == var2</td></tr>
    <tr><td><tt>one</tt></td><td>false</td><td>var1 != var2</td></tr>
    <tr><td><tt>olt</tt></td><td>false</td><td>var1 &lt; var2</td></tr>
    <tr><td><tt>ogt</tt></td><td>false</td><td>var1 &gt; var2</td></tr>
    <tr><td><tt>ole</tt></td><td>false</td><td>var1 &lt;= var2</td></tr>
    <tr><td><tt>oge</tt></td><td>false</td><td>var1 &gt;= var2</td></tr>
    <tr><td><tt>ueq</tt></td><td>true</td><td>var1 == var2</td></tr>
    <tr><td><tt>une</tt></td><td>true</td><td>var1 != var2</td></tr>
    <tr><td><tt>ult</tt></td><td>true</td><td>var1 &lt; var2</td></tr>
    <tr><td><tt>ugt</tt></td><td>true</td><td>var1 &gt; var2</td></tr>
    <tr><td><tt>ule</tt></td><td>true</td><td>var1 &lt;= var2</td></tr>
    <tr><td><tt>uge</tt></td><td>true</td><td>var1 &gt;= var2</td></tr>
    <tr><td><tt>o</tt></td><td>false</td><td>always</td></tr>
    <tr><td><tt>u</tt></td><td>true</td><td>never</td></tr>
    <tr><td><tt>true</tt></td><td>true</td><td>always</td></tr>
    <tr><td><tt>false</tt></td><td>false</td><td>never</td></tr>
  </tbody>
</table>

<h5>Example:</h5>
<pre>  &lt;result&gt; = vsetfp eq &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, false</i>
  &lt;result&gt; = vsetfp ne &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, true</i>
  &lt;result&gt; = vsetfp lt &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, false</i>
  &lt;result&gt; = vsetfp gt &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, true</i>
  &lt;result&gt; = vsetfp le &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = true, false</i>
  &lt;result&gt; = vsetfp ge &lt;2 x float&gt; &lt;float 0.0, float 1.0&gt;, &lt;float 1.0, float 0.0&gt;      <i>; yields {&lt;2 x bool&gt;}:result = false, true</i>
</pre>
</div>

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

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;result&gt; = vselect &lt;n x bool&gt; &lt;cond&gt;, &lt;n x &lt;ty&gt;&gt; &lt;val1&gt;, &lt;n x &lt;ty&gt;&gt; &lt;val2&gt; <i>; yields &lt;n x &lt;ty&gt;&gt;</i>
</pre>

<h5>Overview:</h5>

<p>
The '<tt>vselect</tt>' instruction chooses one value at each position
of a vector based on a condition.
</p>


<h5>Arguments:</h5>

<p>
The '<tt>vselect</tt>' instruction requires a <a
href="#t_packed">packed</a> <tt>bool</tt> value indicating the
condition at each vector position, and two values of the same packed
type.  All three operands must have the same length.  The type of the
result is the same as the type of the two value operands.</p>

<h5>Semantics:</h5>

<p>
At each position where the <tt>bool</tt> vector is true, that position
of the result gets its value from the first value argument; otherwise,
it gets its value from the second value argument.
</p>

<h5>Example:</h5>

<pre>
  %X = vselect bool &lt;2 x bool&gt; &lt;bool true, bool false&gt;, &lt;2 x ubyte&gt; &lt;ubyte 17, ubyte 17&gt;, 
    &lt;2 x ubyte&gt; &lt;ubyte 42, ubyte 42&gt;      <i>; yields &lt;2 x ubyte&gt;:17, 42</i>
</pre>
</div>



<!-- ======================================================================= -->
<div class="doc_subsection"> 
  <a name="memoryops">Memory Access 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;[, uint &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.</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.  If an alignment is specified, the value result
of the allocation is guaranteed to be aligned to at least that boundary.  If
not specified, or if zero, the target can choose to align the allocation on any
convenient boundary.</p>

<p>'<tt>type</tt>' must be a sized type.</p>

<h5>Semantics:</h5>

<p>Memory is allocated using the system "<tt>malloc</tt>" function, and
a pointer is returned.</p>

<h5>Example:</h5>

<pre>
  %array  = malloc [4 x ubyte ]                    <i>; yields {[%4 x ubyte]*}:array</i>

  %size   = <a href="#i_add">add</a> uint 2, 2                          <i>; yields {uint}:size = uint 4</i>
  %array1 = malloc ubyte, uint 4                   <i>; yields {ubyte*}:array1</i>
  %array2 = malloc [12 x ubyte], uint %size        <i>; yields {[12 x ubyte]*}:array2</i>
  %array3 = malloc int, uint 4, align 1024         <i>; yields {int*}:array3</i>
  %array4 = malloc int, align 1024                 <i>; yields {int*}: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.</p>

<h5>Example:</h5>

<pre>
  %array  = <a href="#i_malloc">malloc</a> [4 x ubyte]                    <i>; yields {[4 x ubyte]*}:array</i>
            free   [4 x ubyte]* %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;[, uint &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 current
stack frame of the procedure that is live until the current function
returns to its caller.</p>

<h5>Arguments:</h5>

<p>The '<tt>alloca</tt>' instruction allocates <tt>sizeof(&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.  If an alignment is specified, the value result
of the allocation is guaranteed to be aligned to at least that boundary.  If
not specified, or if zero, the target can choose to align the allocation on any
convenient boundary.</p>

<p>'<tt>type</tt>' may be any sized type.</p>

<h5>Semantics:</h5>

<p>Memory is allocated; a pointer is returned.  '<tt>alloca</tt>'d
memory is automatically released when the function returns.  The '<tt>alloca</tt>'
instruction is commonly used to represent automatic variables that must
have an address available.  When the function returns (either with the <tt><a
 href="#i_ret">ret</a></tt> or <tt><a href="#i_unwind">unwind</a></tt>
instructions), the memory is reclaimed.</p>

<h5>Example:</h5>

<pre>
  %ptr = alloca int                              <i>; yields {int*}:ptr</i>
  %ptr = alloca int, uint 4                      <i>; yields {int*}:ptr</i>
  %ptr = alloca int, uint 4, align 1024          <i>; yields {int*}:ptr</i>
  %ptr = alloca int, align 1024                  <i>; yields {int*}: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;<br>  &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&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>
<h5>Semantics:</h5>
<p>The location of memory pointed to is loaded.</p>
<h5>Examples:</h5>
<pre>  %ptr = <a href="#i_alloca">alloca</a> int                               <i>; yields {int*}:ptr</i>
  <a
 href="#i_store">store</a> int 3, int* %ptr                          <i>; yields {void}</i>
  %val = load int* %ptr                           <i>; yields {int}:val = int 3</i>
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
Instruction</a> </div>
<h5>Syntax:</h5>
<pre>  store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;                   <i>; yields {void}</i>
  volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&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 in which to store it.  The type of the '<tt>&lt;pointer&gt;</tt>'
operand must be a pointer to the 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>
<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> int                               <i>; yields {int*}:ptr</i>
  <a
 href="#i_store">store</a> int 3, int* %ptr                          <i>; yields {void}</i>
  %val = load int* %ptr                           <i>; yields {int}:val = int 3</i>
</pre>
<!-- _______________________________________________________________________ -->
<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 constants 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>uint</tt>
integer constants are allowed.  When indexing into an array or pointer,
<tt>int</tt> and <tt>long</tt> indexes are allowed of any sign.</p>

<p>For example, let's consider a C code fragment and how it gets
compiled to LLVM:</p>

<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>

<p>The LLVM code generated by the GCC frontend is:</p>

<pre>
  %RT = type { sbyte, [10 x [20 x int]], sbyte }
  %ST = type { int, double, %RT }

  implementation

  int* %foo(%ST* %s) {
  entry:
    %reg = getelementptr %ST* %s, int 1, uint 2, uint 1, int 5, int 13
    ret int* %reg
  }
</pre>

<h5>Semantics:</h5>

<p>The index types specified for the '<tt>getelementptr</tt>' instruction depend
on the pointer type that is being indexed into. <a href="#t_pointer">Pointer</a>
and <a href="#t_array">array</a> types require <tt>uint</tt>, <tt>int</tt>,
<tt>ulong</tt>, or <tt>long</tt> values, and <a href="#t_struct">structure</a>
types require <tt>uint</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>{ int, double, %RT
}</tt>' type, a structure.  The second index indexes into the third element of
the structure, yielding a '<tt>%RT</tt>' = '<tt>{ sbyte, [10 x [20 x int]],
sbyte }</tt>' type, another structure.  The third index indexes into the second
element of the structure, yielding a '<tt>[10 x [20 x int]]</tt>' type, an
array.  The two dimensions of the array are subscripted into, yielding an
'<tt>int</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a pointer
to this element, thus computing a value of '<tt>int*</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>
  int* %foo(%ST* %s) {
    %t1 = getelementptr %ST* %s, int 1                        <i>; yields %ST*:%t1</i>
    %t2 = getelementptr %ST* %t1, int 0, uint 2               <i>; yields %RT*:%t2</i>
    %t3 = getelementptr %RT* %t2, int 0, uint 1               <i>; yields [10 x [20 x int]]*:%t3</i>
    %t4 = getelementptr [10 x [20 x int]]* %t3, int 0, int 5  <i>; yields [20 x int]*:%t4</i>
    %t5 = getelementptr [20 x int]* %t4, int 0, int 13        <i>; yields int*:%t5</i>
    ret int* %t5
  }
</pre>

<p>Note that it is undefined to access an array out of bounds: array and 
pointer indexes must always be within the defined bounds of the array type.
The one exception for this rules is zero length arrays.  These arrays are
defined to be accessible as variable length arrays, which requires access
beyond the zero'th element.</p>

<h5>Example:</h5>

<pre>
    <i>; yields [12 x ubyte]*:aptr</i>
    %aptr = getelementptr {int, [12 x ubyte]}* %sptr, long 0, uint 1
</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_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 are 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 parameter, depending on which basic block we
came from in the last <a href="#terminators">terminator</a> instruction.</p>
<h5>Example:</h5>
<pre>Loop:       ; Infinite loop that counts from 0 on up...<br>  %indvar = phi uint [ 0, %LoopHeader ], [ %nextindvar, %Loop ]<br>  %nextindvar = add uint %indvar, 1<br>  br label %Loop<br></pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
   <a name="i_cast">'<tt>cast .. to</tt>' Instruction</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  &lt;result&gt; = cast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
</pre>

<h5>Overview:</h5>

<p>
The '<tt>cast</tt>' instruction is used as the primitive means to convert
integers to floating point, change data type sizes, and break type safety (by
casting pointers).
</p>


<h5>Arguments:</h5>

<p>
The '<tt>cast</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.
</p>

<h5>Semantics:</h5>

<p>
This instruction follows the C rules for explicit casts when determining how the
data being cast must change to fit in its new container.
</p>

<p>
When casting to bool, any value that would be considered true in the context of
a C '<tt>if</tt>' condition is converted to the boolean '<tt>true</tt>' values,
all else are '<tt>false</tt>'.
</p>

<p>
When extending an integral value from a type of one signness to another (for
example '<tt>sbyte</tt>' to '<tt>ulong</tt>'), the value is sign-extended if the
<b>source</b> value is signed, and zero-extended if the source value is
unsigned. <tt>bool</tt> values are always zero extended into either zero or
one.
</p>

<h5>Example:</h5>

<pre>
  %X = cast int 257 to ubyte              <i>; yields ubyte:1</i>
  %Y = cast int 123 to bool               <i>; yields bool:true</i>
</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 bool &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 bool true, ubyte 17, ubyte 42          <i>; yields ubyte: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;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>': 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.  This is a simpler case of
the <a href="#i_invoke">invoke</a> instruction.</p>

<h5>Example:</h5>

<pre>
  %retval = call int %test(int %argc)
  call int(sbyte*, ...) *%printf(sbyte* %msg, int 12, sbyte 42);
  %X = tail call int %foo()
  %Y = tail call <a href="#callingconv">fastcc</a> int %foo()
</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.  Again, 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_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 instructions represent an extension mechanism for
the LLVM language that does not require changing all of the transformations in
LLVM to add to the language (or the bytecode 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, functions may not be named
this.  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 that they all be documented here if any are added.</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 intrinsics with any 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>

<pre>
int %test(int %X, ...) {
  ; Initialize variable argument processing
  %ap = alloca sbyte*
  call void %<a href="#i_va_start">llvm.va_start</a>(sbyte** %ap)

  ; Read a single integer argument
  %tmp = va_arg sbyte** %ap, int

  ; Demonstrate usage of llvm.va_copy and llvm.va_end
  %aq = alloca sbyte*
  call void %<a href="#i_va_copy">llvm.va_copy</a>(sbyte** %aq, sbyte** %ap)
  call void %<a href="#i_va_end">llvm.va_end</a>(sbyte** %aq)

  ; Stop processing of arguments.
  call void %<a href="#i_va_end">llvm.va_end</a>(sbyte** %ap)
  ret int %tmp
}
</pre>
</div>

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


<div class="doc_text">
<h5>Syntax:</h5>
<pre>  declare void %llvm.va_start(&lt;va_list&gt;* &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 the argument points to, 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, the compiler can figure that out.</p>

</div>

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

<div class="doc_text">
<h5>Syntax:</h5>
<pre>  declare void %llvm.va_end(&lt;va_list*&gt; &lt;arglist&gt;)<br></pre>
<h5>Overview:</h5>
<p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>&lt;arglist&gt;</tt>
which has been initialized previously with <tt><a href="#i_va_start">llvm.va_start</a></tt>
or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
<h5>Arguments:</h5>
<p>The argument is 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>.
Calls to <a href="#i_va_start"><tt>llvm.va_start</tt></a> and <a
 href="#i_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="i_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void %llvm.va_copy(&lt;va_list&gt;* &lt;destarglist&gt;,
                                          &lt;va_list&gt;* &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 list.  This intrinsic is necessary
because the <tt><a href="i_va_begin">llvm.va_begin</a></tt> intrinsic may be
arbitrarily complex and require memory allocation, for example.</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="#i_gcroot">GC roots on the
stack</a>, as well as garbage collector implementations that require <a
href="#i_gcread">read</a> and <a href="#i_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>
</div>

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

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void %llvm.gcroot(&lt;ty&gt;** %ptrloc, &lt;ty2&gt;* %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 intrinsics 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.
</p>

</div>


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

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare sbyte* %llvm.gcread(sbyte* %ObjPtr, sbyte** %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.</p>

</div>


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

<div class="doc_text">

<h5>Syntax:</h5>

<pre>
  declare void %llvm.gcwrite(sbyte* %P1, sbyte* %Obj, sbyte** %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.</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="i_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare sbyte *%llvm.returnaddress(uint &lt;level&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.returnaddress</tt>' intrinsic returns 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="i_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare sbyte *%llvm.frameaddress(uint &lt;level&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.frameaddress</tt>' intrinsic returns 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="i_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare sbyte *%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="#i_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="#i_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="i_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.stackrestore(sbyte* %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="#llvm.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="#i_stacksave"><tt>llvm.stacksave</tt></a>.
</p>

</div>


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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.prefetch(sbyte * &lt;address&gt;,
                                uint &lt;rw&gt;, uint &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="i_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.pcmarker( uint &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="i_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare ulong %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="i_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.memcpy.i32(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
                                uint &lt;len&gt;, uint &lt;align&gt;)
  declare void %llvm.memcpy.i64(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
                                ulong &lt;len&gt;, uint &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="i_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.memmove.i32(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
                                 uint &lt;len&gt;, uint &lt;align&gt;)
  declare void %llvm.memmove.i64(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
                                 ulong &lt;len&gt;, uint &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.memcmp</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="i_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.memset.i32(sbyte* &lt;dest&gt;, ubyte &lt;val&gt;,
                                uint &lt;len&gt;, uint &lt;align&gt;)
  declare void %llvm.memset.i64(sbyte* &lt;dest&gt;, ubyte &lt;val&gt;,
                                ulong &lt;len&gt;, uint &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="i_isunordered">'<tt>llvm.isunordered.*</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare bool %llvm.isunordered.f32(float Val1, float  Val2)
  declare bool %llvm.isunordered.f64(double Val1, double Val2)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.isunordered</tt>' intrinsics return true if either or both of the
specified floating point values is a NAN.
</p>

<h5>Arguments:</h5>

<p>
The arguments are floating point numbers of the same type.
</p>

<h5>Semantics:</h5>

<p>
If either or both of the arguments is a SNAN or QNAN, it returns true, otherwise
false.
</p>
</div>


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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare double %llvm.sqrt.f32(float Val)
  declare double %llvm.sqrt.f64(double 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>' function would.  Unlike
<tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined behavior for
negative numbers (which allows for better optimization).
</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 positive
floating point number.
</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="i_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare ushort %llvm.bswap.i16(ushort &lt;id&gt;)
  declare uint   %llvm.bswap.i32(uint &lt;id&gt;)
  declare ulong  %llvm.bswap.i64(ulong &lt;id&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.bwsap</tt>' family of intrinsics is used to byteswap a 16, 32 or
64 bit quantity.  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.16</tt> intrinsic returns a ushort value that has the high and low
byte of the input ushort swapped.  Similarly, the <tt>llvm.bswap.i32</tt> intrinsic
returns a uint value that has the four bytes of the input uint swapped, so that 
if the input bytes are numbered 0, 1, 2, 3 then the returned uint will have its
bytes in 3, 2, 1, 0 order.  The <tt>llvm.bswap.i64</tt> intrinsic extends this concept
to 64 bits.
</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare ubyte  %llvm.ctpop.i8 (ubyte &lt;src&gt;)
  declare ushort %llvm.ctpop.i16(ushort &lt;src&gt;)
  declare uint   %llvm.ctpop.i32(uint &lt;src&gt;)
  declare ulong  %llvm.ctpop.i64(ulong &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
unsigned 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>
<pre>
  declare ubyte  %llvm.ctlz.i8 (ubyte &lt;src&gt;)
  declare ushort %llvm.ctlz.i16(ushort &lt;src&gt;)
  declare uint   %llvm.ctlz.i32(uint &lt;src&gt;)
  declare ulong  %llvm.ctlz.i64(ulong &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
unsigned 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(int 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>
<pre>
  declare ubyte  %llvm.cttz.i8 (ubyte &lt;src&gt;)
  declare ushort %llvm.cttz.i16(ushort &lt;src&gt;)
  declare uint   %llvm.cttz.i32(uint &lt;src&gt;)
  declare ulong  %llvm.cttz.i64(ulong &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
unsigned 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_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>


<!-- *********************************************************************** -->
<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>
