<!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>
        <ol>
          <li><a href="#linkage_private">'<tt>private</tt>' Linkage</a></li>
          <li><a href="#linkage_linker_private">'<tt>linker_private</tt>' Linkage</a></li>
          <li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
          <li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
          <li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
          <li><a href="#linkage_common">'<tt>common</tt>' Linkage</a></li>
          <li><a href="#linkage_weak">'<tt>weak</tt>' Linkage</a></li>
          <li><a href="#linkage_appending">'<tt>appending</tt>' Linkage</a></li>
          <li><a href="#linkage_externweak">'<tt>extern_weak</tt>' Linkage</a></li>
          <li><a href="#linkage_linkonce_odr">'<tt>linkonce_odr</tt>' Linkage</a></li>
          <li><a href="#linkage_weak">'<tt>weak_odr</tt>' Linkage</a></li>
          <li><a href="#linkage_external">'<tt>externally visible</tt>' Linkage</a></li>
          <li><a href="#linkage_dllimport">'<tt>dllimport</tt>' Linkage</a></li>
          <li><a href="#linkage_dllexport">'<tt>dllexport</tt>' Linkage</a></li>
        </ol>
      </li>
      <li><a href="#callingconv">Calling Conventions</a></li>
      <li><a href="#namedtypes">Named Types</a></li>
      <li><a href="#globalvars">Global Variables</a></li>
      <li><a href="#functionstructure">Functions</a></li>
      <li><a href="#aliasstructure">Aliases</a></li>
      <li><a href="#paramattrs">Parameter Attributes</a></li>
      <li><a href="#fnattrs">Function Attributes</a></li>
      <li><a href="#gc">Garbage Collector Names</a></li>
      <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
      <li><a href="#datalayout">Data Layout</a></li>
      <li><a href="#pointeraliasing">Pointer Aliasing Rules</a></li>
    </ol>
  </li>
  <li><a href="#typesystem">Type System</a>
    <ol>
      <li><a href="#t_classifications">Type Classifications</a></li>
      <li><a href="#t_primitive">Primitive Types</a>    
        <ol>
          <li><a href="#t_integer">Integer Type</a></li>
          <li><a href="#t_floating">Floating Point Types</a></li>
          <li><a href="#t_void">Void Type</a></li>
          <li><a href="#t_label">Label Type</a></li>
          <li><a href="#t_metadata">Metadata Type</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_pstruct">Packed Structure Type</a></li>
          <li><a href="#t_vector">Vector Type</a></li>
          <li><a href="#t_opaque">Opaque Type</a></li>
        </ol>
      </li>
      <li><a href="#t_uprefs">Type Up-references</a></li>
    </ol>
  </li>
  <li><a href="#constants">Constants</a>
    <ol>
      <li><a href="#simpleconstants">Simple Constants</a></li>
      <li><a href="#complexconstants">Complex Constants</a></li>
      <li><a href="#globalconstants">Global Variable and Function Addresses</a></li>
      <li><a href="#undefvalues">Undefined Values</a></li>
      <li><a href="#blockaddress">Addresses of Basic Blocks</a></li>
      <li><a href="#constantexprs">Constant Expressions</a></li>
      <li><a href="#metadata">Embedded Metadata</a></li>
    </ol>
  </li>
  <li><a href="#othervalues">Other Values</a>
    <ol>
      <li><a href="#inlineasm">Inline Assembler Expressions</a></li>
    </ol>
  </li>
  <li><a href="#intrinsic_globals">Intrinsic Global Variables</a>
    <ol>
      <li><a href="#intg_used">The '<tt>llvm.used</tt>' Global Variable</a></li>
      <li><a href="#intg_compiler_used">The '<tt>llvm.compiler.used</tt>'
          Global Variable</a></li>
      <li><a href="#intg_global_ctors">The '<tt>llvm.global_ctors</tt>'
         Global Variable</a></li>
      <li><a href="#intg_global_dtors">The '<tt>llvm.global_dtors</tt>'
         Global Variable</a></li>
    </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_indirectbr">'<tt>indirectbr</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_fadd">'<tt>fadd</tt>' Instruction</a></li>
          <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
          <li><a href="#i_fsub">'<tt>fsub</tt>' Instruction</a></li>
          <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
          <li><a href="#i_fmul">'<tt>fmul</tt>' Instruction</a></li>
          <li><a href="#i_udiv">'<tt>udiv</tt>' Instruction</a></li>
          <li><a href="#i_sdiv">'<tt>sdiv</tt>' Instruction</a></li>
          <li><a href="#i_fdiv">'<tt>fdiv</tt>' Instruction</a></li>
          <li><a href="#i_urem">'<tt>urem</tt>' Instruction</a></li>
          <li><a href="#i_srem">'<tt>srem</tt>' Instruction</a></li>
          <li><a href="#i_frem">'<tt>frem</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#bitwiseops">Bitwise Binary Operations</a>
        <ol>
          <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
          <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
          <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#vectorops">Vector Operations</a>
        <ol>
          <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li>
          <li><a href="#i_insertelement">'<tt>insertelement</tt>' Instruction</a></li>
          <li><a href="#i_shufflevector">'<tt>shufflevector</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#aggregateops">Aggregate Operations</a>
        <ol>
          <li><a href="#i_extractvalue">'<tt>extractvalue</tt>' Instruction</a></li>
          <li><a href="#i_insertvalue">'<tt>insertvalue</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#memoryops">Memory Access and Addressing Operations</a>
        <ol>
          <li><a href="#i_alloca">'<tt>alloca</tt>'   Instruction</a></li>
         <li><a href="#i_load">'<tt>load</tt>'     Instruction</a></li>
         <li><a href="#i_store">'<tt>store</tt>'    Instruction</a></li>
         <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#convertops">Conversion Operations</a>
        <ol>
          <li><a href="#i_trunc">'<tt>trunc .. to</tt>' Instruction</a></li>
          <li><a href="#i_zext">'<tt>zext .. to</tt>' Instruction</a></li>
          <li><a href="#i_sext">'<tt>sext .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a></li>
          <li><a href="#i_fpext">'<tt>fpext .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a></li>
          <li><a href="#i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a></li>
          <li><a href="#i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a></li>
          <li><a href="#i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a></li>
          <li><a href="#i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a></li>
          <li><a href="#i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a></li>
          <li><a href="#i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#otherops">Other Operations</a>
        <ol>
          <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li>
          <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li>
          <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
          <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
          <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
          <li><a href="#i_va_arg">'<tt>va_arg</tt>'  Instruction</a></li>
        </ol>
      </li>
    </ol>
  </li>
  <li><a href="#intrinsics">Intrinsic Functions</a>
    <ol>
      <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
        <ol>
          <li><a href="#int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
          <li><a href="#int_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
          <li><a href="#int_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
        <ol>
          <li><a href="#int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
          <li><a href="#int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
          <li><a href="#int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_codegen">Code Generator Intrinsics</a>
        <ol>
          <li><a href="#int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
          <li><a href="#int_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
          <li><a href="#int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li>
          <li><a href="#int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li>
          <li><a href="#int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
          <li><a href="#int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
          <li><a href="#int_readcyclecounter"><tt>llvm.readcyclecounter</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_libc">Standard C Library Intrinsics</a>
        <ol>
          <li><a href="#int_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li>
          <li><a href="#int_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li>
          <li><a href="#int_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li>
          <li><a href="#int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li>
          <li><a href="#int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a></li>
          <li><a href="#int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a></li>
          <li><a href="#int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a></li>
          <li><a href="#int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_manip">Bit Manipulation Intrinsics</a>
        <ol>
          <li><a href="#int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a></li>
          <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li>
          <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li>
          <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li>
        </ol>
      </li>
      <li><a href="#int_overflow">Arithmetic with Overflow Intrinsics</a>
        <ol>
          <li><a href="#int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt> Intrinsics</a></li>
          <li><a href="#int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt> Intrinsics</a></li>
          <li><a href="#int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt> Intrinsics</a></li>
          <li><a href="#int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt> Intrinsics</a></li>
          <li><a href="#int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt> Intrinsics</a></li>
          <li><a href="#int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt> Intrinsics</a></li>
        </ol>
      </li>
      <li><a href="#int_debugger">Debugger intrinsics</a></li>
      <li><a href="#int_eh">Exception Handling intrinsics</a></li>
      <li><a href="#int_trampoline">Trampoline Intrinsic</a>
        <ol>
          <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_atomics">Atomic intrinsics</a>
        <ol>
          <li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
          <li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li>
          <li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
          <li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li>
          <li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li>
          <li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li>
          <li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li>
          <li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li>
          <li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li>
          <li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li>
          <li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li>
          <li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li>
          <li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li>
        </ol>
      </li>
      <li><a href="#int_memorymarkers">Memory Use Markers</a>
        <ol>
          <li><a href="#int_lifetime_start"><tt>llvm.lifetime.start</tt></a></li>
          <li><a href="#int_lifetime_end"><tt>llvm.lifetime.end</tt></a></li>
          <li><a href="#int_invariant_start"><tt>llvm.invariant.start</tt></a></li>
          <li><a href="#int_invariant_end"><tt>llvm.invariant.end</tt></a></li>
        </ol>
      </li>
      <li><a href="#int_general">General intrinsics</a>
        <ol>
          <li><a href="#int_var_annotation">
            '<tt>llvm.var.annotation</tt>' Intrinsic</a></li>
          <li><a href="#int_annotation">
            '<tt>llvm.annotation.*</tt>' Intrinsic</a></li>
          <li><a href="#int_trap">
            '<tt>llvm.trap</tt>' Intrinsic</a></li>
          <li><a href="#int_stackprotector">
            '<tt>llvm.stackprotector</tt>' Intrinsic</a></li>
	  <li><a href="#int_objectsize">
            '<tt>llvm.objectsize</tt>' Intrinsic</a></li>
        </ol>
      </li>
    </ol>
  </li>
</ol>

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

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

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

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

</div>

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

<div class="doc_text">

<p>It is important to note that this document describes 'well formed' LLVM
   assembly language.  There is a difference between what the parser accepts and
   what is considered 'well formed'.  For example, the following instruction is
   syntactically okay, but not well formed:</p>

<div class="doc_code">
<pre>
%x = <a href="#i_add">add</a> i32 1, %x
</pre>
</div>

<p>because the definition of <tt>%x</tt> does not dominate all of its uses. The
   LLVM infrastructure provides a verification pass that may be used to verify
   that an LLVM module is well formed.  This pass is automatically run by the
   parser after parsing input assembly and by the optimizer before it outputs
   bitcode.  The violations pointed out by the verifier pass indicate bugs in
   transformation passes or input to the parser.</p>

</div>

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

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

<div class="doc_text">

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

<ol>
  <li>Named values are represented as a string of characters with their prefix.
      For example, <tt>%foo</tt>, <tt>@DivisionByZero</tt>,
      <tt>%a.really.long.identifier</tt>. 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. Special
      characters may be escaped using <tt>"\xx"</tt> where <tt>xx</tt> is the
      ASCII code for the character in hexadecimal.  In this way, any character
      can be used in a name value, even quotes themselves.</li>

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

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

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

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

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

<p>The easy way:</p>

<div class="doc_code">
<pre>
%result = <a href="#i_mul">mul</a> i32 %X, 8
</pre>
</div>

<p>After strength reduction:</p>

<div class="doc_code">
<pre>
%result = <a href="#i_shl">shl</a> i32 %X, i8 3
</pre>
</div>

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

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

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

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

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

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

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

</div>

<!-- *********************************************************************** -->
<div class="doc_section"> <a name="highlevel">High Level Structure</a> </div>
<!-- *********************************************************************** -->

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="modulestructure">Module Structure</a>
</div>

<div class="doc_text">

<p>LLVM programs are composed of "Module"s, each of which is a translation unit
   of the input programs.  Each module consists of functions, global variables,
   and symbol table entries.  Modules may be combined together with the LLVM
   linker, which merges function (and global variable) definitions, resolves
   forward declarations, and merges symbol table entries. Here is an example of
   the "hello world" module:</p>

<div class="doc_code">
<pre>
<i>; Declare the string constant as a global constant.</i>
<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00"    <i>; [13 x i8]*</i>

<i>; External declaration of the puts function</i>
<a href="#functionstructure">declare</a> i32 @puts(i8 *)                                     <i>; i32(i8 *)* </i>

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

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

<p>This example is made up of a <a href="#globalvars">global variable</a> named
   "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function, and
   a <a href="#functionstructure">function definition</a> for
   "<tt>main</tt>".</p>

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

</div>

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

<div class="doc_text">

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

<dl>
  <dt><tt><b><a name="linkage_private">private</a></b></tt></dt>
  <dd>Global values with private linkage are only directly accessible by objects
      in the current module.  In particular, linking code into a module with an
      private global value may cause the private to be renamed as necessary to
      avoid collisions.  Because the symbol is private to the module, all
      references can be updated. This doesn't show up in any symbol table in the
      object file.</dd>

  <dt><tt><b><a name="linkage_linker_private">linker_private</a></b></tt></dt>
  <dd>Similar to private, but the symbol is passed through the assembler and
      removed by the linker after evaluation.  Note that (unlike private
      symbols) linker_private symbols are subject to coalescing by the linker:
      weak symbols get merged and redefinitions are rejected.  However, unlike
      normal strong symbols, they are removed by the linker from the final
      linked image (executable or dynamic library).</dd>

  <dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt>
  <dd>Similar to private, but the value shows as a local symbol
      (<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
      corresponds to the notion of the '<tt>static</tt>' keyword in C.</dd>

  <dt><tt><b><a name="linkage_available_externally">available_externally</a></b></tt></dt>
  <dd>Globals with "<tt>available_externally</tt>" linkage are never emitted
      into the object file corresponding to the LLVM module.  They exist to
      allow inlining and other optimizations to take place given knowledge of
      the definition of the global, which is known to be somewhere outside the
      module.  Globals with <tt>available_externally</tt> linkage are allowed to
      be discarded at will, and are otherwise the same as <tt>linkonce_odr</tt>.
      This linkage type is only allowed on definitions, not declarations.</dd>

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

  <dt><tt><b><a name="linkage_weak">weak</a></b></tt></dt>
  <dd>"<tt>weak</tt>" linkage has the same merging semantics as
      <tt>linkonce</tt> linkage, except that unreferenced globals with
      <tt>weak</tt> linkage may not be discarded.  This is used for globals that
      are declared "weak" in C source code.</dd>

  <dt><tt><b><a name="linkage_common">common</a></b></tt></dt>
  <dd>"<tt>common</tt>" linkage is most similar to "<tt>weak</tt>" linkage, but
      they are used for tentative definitions in C, such as "<tt>int X;</tt>" at
      global scope.
      Symbols with "<tt>common</tt>" linkage are merged in the same way as
      <tt>weak symbols</tt>, and they may not be deleted if unreferenced.
      <tt>common</tt> symbols may not have an explicit section,
      must have a zero initializer, and may not be marked '<a 
      href="#globalvars"><tt>constant</tt></a>'.  Functions and aliases may not
      have common linkage.</dd>


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

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

  <dt><tt><b><a name="linkage_linkonce_odr">linkonce_odr</a></b></tt></dt>
  <dt><tt><b><a name="linkage_weak_odr">weak_odr</a></b></tt></dt>
  <dd>Some languages allow differing globals to be merged, such as two functions
      with different semantics.  Other languages, such as <tt>C++</tt>, ensure
      that only equivalent globals are ever merged (the "one definition rule" -
      "ODR").  Such languages can use the <tt>linkonce_odr</tt>
      and <tt>weak_odr</tt> linkage types to indicate that the global will only
      be merged with equivalent globals.  These linkage types are otherwise the
      same as their non-<tt>odr</tt> versions.</dd>

  <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
  <dd>If none of the above identifiers are used, the global is externally
      visible, meaning that it participates in linkage and can be used to
      resolve external symbol references.</dd>
</dl>

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

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

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

<p>For example, since the "<tt>.LC0</tt>" variable is defined to be internal, if
   another module defined a "<tt>.LC0</tt>" variable and was linked with this
   one, one of the two would be renamed, preventing a collision.  Since
   "<tt>main</tt>" and "<tt>puts</tt>" are external (i.e., lacking any linkage
   declarations), they are accessible outside of the current module.</p>

<p>It is illegal for a function <i>declaration</i> to have any linkage type
   other than "externally visible", <tt>dllimport</tt>
   or <tt>extern_weak</tt>.</p>

<p>Aliases can have only <tt>external</tt>, <tt>internal</tt>, <tt>weak</tt>
   or <tt>weak_odr</tt> linkages.</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>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
      (Application Binary Interface).  Implementations of this convention should
      allow arbitrary <a href="CodeGenerator.html#tailcallopt">tail call
      optimization</a> to be supported.  This calling convention does not
      support varargs and requires the prototype of all callees to exactly match
      the prototype of the function definition.</dd>

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

  <dt><b>"<tt>cc &lt;<em>n</em>&gt;</tt>" - Numbered convention</b>:</dt>
  <dd>Any calling convention may be specified by number, allowing
      target-specific calling conventions to be used.  Target specific calling
      conventions start at 64.</dd>
</dl>

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

</div>

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

<div class="doc_text">

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

<dl>
  <dt><b>"<tt>default</tt>" - Default style</b>:</dt>
  <dd>On targets that use the ELF object file format, default visibility means
      that the declaration is visible to other modules and, in shared libraries,
      means that the declared entity may be overridden. On Darwin, default
      visibility means that the declaration is visible to other modules. Default
      visibility corresponds to "external linkage" in the language.</dd>

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

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="namedtypes">Named Types</a>
</div>

<div class="doc_text">

<p>LLVM IR allows you to specify name aliases for certain types.  This can make
   it easier to read the IR and make the IR more condensed (particularly when
   recursive types are involved).  An example of a name specification is:</p>

<div class="doc_code">
<pre>
%mytype = type { %mytype*, i32 }
</pre>
</div>

<p>You may give a name to any <a href="#typesystem">type</a> except
   "<a href="t_void">void</a>".  Type name aliases may be used anywhere a type
   is expected with the syntax "%mytype".</p>

<p>Note that type names are aliases for the structural type that they indicate,
   and that you can therefore specify multiple names for the same type.  This
   often leads to confusing behavior when dumping out a .ll file.  Since LLVM IR
   uses structural typing, the name is not part of the type.  When printing out
   LLVM IR, the printer will pick <em>one name</em> to render all types of a
   particular shape.  This means that if you have code where two different
   source types end up having the same LLVM type, that the dumper will sometimes
   print the "wrong" or unexpected type.  This is an important design point and
   isn't going to change.</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 "thread_local", which
   means that it will not be shared by threads (each thread will have a
   separated copy of the variable).  A variable may be defined as a global
   "constant," which indicates that the contents of the variable
   will <b>never</b> be modified (enabling better optimization, allowing the
   global data to be placed in the read-only section of an executable, etc).
   Note that variables that need runtime initialization cannot be marked
   "constant" as there is a store to the variable.</p>

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

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

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

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

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

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

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

</div>


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

<div class="doc_text">

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

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

<p>A function definition contains a list of basic blocks, forming the CFG
   (Control Flow Graph) for the function.  Each basic block may optionally start
   with a label (giving the basic block a symbol table entry), contains a list
   of instructions, and ends with a <a href="#terminators">terminator</a>
   instruction (such as a branch or function return).</p>

<p>The first basic block in a function is special in two ways: it is immediately
   executed on entrance to the function, and it is not allowed to have
   predecessor basic blocks (i.e. there can not be any branches to the entry
   block of a function).  Because the block can have no predecessors, it also
   cannot have any <a href="#i_phi">PHI nodes</a>.</p>

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

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

<h5>Syntax:</h5>
<div class="doc_code">
<pre>
define [<a href="#linkage">linkage</a>] [<a href="#visibility">visibility</a>]
       [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>]
       &lt;ResultType&gt; @&lt;FunctionName&gt; ([argument list])
       [<a href="#fnattrs">fn Attrs</a>] [section "name"] [align N]
       [<a href="#gc">gc</a>] { ... }
</pre>
</div>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="aliasstructure">Aliases</a>
</div>

<div class="doc_text">

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

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="paramattrs">Parameter Attributes</a></div>

<div class="doc_text">

<p>The return type and each parameter of a function type may have a set of
   <i>parameter attributes</i> associated with them. Parameter attributes are
   used to communicate additional information about the result or parameters of
   a function. Parameter attributes are considered to be part of the function,
   not of the function type, so functions with different parameter attributes
   can have the same function type.</p>

<p>Parameter attributes are simple keywords that follow the type specified. If
   multiple parameter attributes are needed, they are space separated. For
   example:</p>

<div class="doc_code">
<pre>
declare i32 @printf(i8* noalias nocapture, ...)
declare i32 @atoi(i8 zeroext)
declare signext i8 @returns_signed_char()
</pre>
</div>

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

<p>Currently, only the following parameter attributes are defined:</p>

<dl>
  <dt><tt><b>zeroext</b></tt></dt>
  <dd>This indicates to the code generator that the parameter or return value
      should be zero-extended to a 32-bit value by the caller (for a parameter)
      or the callee (for a return value).</dd>

  <dt><tt><b>signext</b></tt></dt>
  <dd>This indicates to the code generator that the parameter or return value
      should be sign-extended to a 32-bit value by the caller (for a parameter)
      or the callee (for a return value).</dd>

  <dt><tt><b>inreg</b></tt></dt>
  <dd>This indicates that this parameter or return value should be treated in a
      special target-dependent fashion during while emitting code for a function
      call or return (usually, by putting it in a register as opposed to memory,
      though some targets use it to distinguish between two different kinds of
      registers).  Use of this attribute is target-specific.</dd>

  <dt><tt><b><a name="byval">byval</a></b></tt></dt>
  <dd>This indicates that the pointer parameter should really be passed by value
      to the function.  The attribute implies that a hidden copy of the pointee
      is made between the caller and the callee, so the callee is unable to
      modify the value in the callee.  This attribute is only valid on LLVM
      pointer arguments.  It is generally used to pass structs and arrays by
      value, but is also valid on pointers to scalars.  The copy is considered
      to belong to the caller not the callee (for example,
      <tt><a href="#readonly">readonly</a></tt> functions should not write to
      <tt>byval</tt> parameters). This is not a valid attribute for return
      values.  The byval attribute also supports specifying an alignment with
      the align attribute.  This has a target-specific effect on the code
      generator that usually indicates a desired alignment for the synthesized
      stack slot.</dd>

  <dt><tt><b>sret</b></tt></dt>
  <dd>This indicates that the pointer parameter specifies the address of a
      structure that is the return value of the function in the source program.
      This pointer must be guaranteed by the caller to be valid: loads and
      stores to the structure may be assumed by the callee to not to trap.  This
      may only be applied to the first parameter. This is not a valid attribute
      for return values. </dd>

  <dt><tt><b>noalias</b></tt></dt>
  <dd>This indicates that the pointer does not alias any global or any other
      parameter.  The caller is responsible for ensuring that this is the
      case. On a function return value, <tt>noalias</tt> additionally indicates
      that the pointer does not alias any other pointers visible to the
      caller. For further details, please see the discussion of the NoAlias
      response in
      <a href="http://llvm.org/docs/AliasAnalysis.html#MustMayNo">alias
      analysis</a>.</dd>

  <dt><tt><b>nocapture</b></tt></dt>
  <dd>This indicates that the callee does not make any copies of the pointer
      that outlive the callee itself. This is not a valid attribute for return
      values.</dd>

  <dt><tt><b>nest</b></tt></dt>
  <dd>This indicates that the pointer parameter can be excised using the
      <a href="#int_trampoline">trampoline intrinsics</a>. This is not a valid
      attribute for return values.</dd>
</dl>

</div>

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

<div class="doc_text">

<p>Each function may specify a garbage collector name, which is simply a
   string:</p>

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

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="fnattrs">Function Attributes</a>
</div>

<div class="doc_text">

<p>Function attributes are set to communicate additional information about a
   function. Function attributes are considered to be part of the function, not
   of the function type, so functions with different parameter attributes can
   have the same function type.</p>

<p>Function attributes are simple keywords that follow the type specified. If
   multiple attributes are needed, they are space separated. For example:</p>

<div class="doc_code">
<pre>
define void @f() noinline { ... }
define void @f() alwaysinline { ... }
define void @f() alwaysinline optsize { ... }
define void @f() optsize { ... }
</pre>
</div>

<dl>
  <dt><tt><b>alwaysinline</b></tt></dt>
  <dd>This attribute indicates that the inliner should attempt to inline this
      function into callers whenever possible, ignoring any active inlining size
      threshold for this caller.</dd>

  <dt><tt><b>inlinehint</b></tt></dt>
  <dd>This attribute indicates that the source code contained a hint that inlining
      this function is desirable (such as the "inline" keyword in C/C++).  It
      is just a hint; it imposes no requirements on the inliner.</dd>

  <dt><tt><b>noinline</b></tt></dt>
  <dd>This attribute indicates that the inliner should never inline this
      function in any situation. This attribute may not be used together with
      the <tt>alwaysinline</tt> attribute.</dd>

  <dt><tt><b>optsize</b></tt></dt>
  <dd>This attribute suggests that optimization passes and code generator passes
      make choices that keep the code size of this function low, and otherwise
      do optimizations specifically to reduce code size.</dd>

  <dt><tt><b>noreturn</b></tt></dt>
  <dd>This function attribute indicates that the function never returns
      normally.  This produces undefined behavior at runtime if the function
      ever does dynamically return.</dd>

  <dt><tt><b>nounwind</b></tt></dt>
  <dd>This function attribute indicates that the function never returns with an
      unwind or exceptional control flow.  If the function does unwind, its
      runtime behavior is undefined.</dd>

  <dt><tt><b>readnone</b></tt></dt>
  <dd>This attribute indicates that the function computes its result (or decides
      to unwind an exception) based strictly on its arguments, without
      dereferencing any pointer arguments or otherwise accessing any mutable
      state (e.g. memory, control registers, etc) visible to caller functions.
      It does not write through any pointer arguments
      (including <tt><a href="#byval">byval</a></tt> arguments) and never
      changes any state visible to callers.  This means that it cannot unwind
      exceptions by calling the <tt>C++</tt> exception throwing methods, but
      could use the <tt>unwind</tt> instruction.</dd>

  <dt><tt><b><a name="readonly">readonly</a></b></tt></dt>
  <dd>This attribute indicates that the function does not write through any
      pointer arguments (including <tt><a href="#byval">byval</a></tt>
      arguments) or otherwise modify any state (e.g. memory, control registers,
      etc) visible to caller functions.  It may dereference pointer arguments
      and read state that may be set in the caller.  A readonly function always
      returns the same value (or unwinds an exception identically) when called
      with the same set of arguments and global state.  It cannot unwind an
      exception by calling the <tt>C++</tt> exception throwing methods, but may
      use the <tt>unwind</tt> instruction.</dd>

  <dt><tt><b><a name="ssp">ssp</a></b></tt></dt>
  <dd>This attribute indicates that the function should emit a stack smashing
      protector. It is in the form of a "canary"&mdash;a random value placed on
      the stack before the local variables that's checked upon return from the
      function to see if it has been overwritten. A heuristic is used to
      determine if a function needs stack protectors or not.<br>
<br>
      If a function that has an <tt>ssp</tt> attribute is inlined into a
      function that doesn't have an <tt>ssp</tt> attribute, then the resulting
      function will have an <tt>ssp</tt> attribute.</dd>

  <dt><tt><b>sspreq</b></tt></dt>
  <dd>This attribute indicates that the function should <em>always</em> emit a
      stack smashing protector. This overrides
      the <tt><a href="#ssp">ssp</a></tt> function attribute.<br>
<br>
      If a function that has an <tt>sspreq</tt> attribute is inlined into a
      function that doesn't have an <tt>sspreq</tt> attribute or which has
      an <tt>ssp</tt> attribute, then the resulting function will have
      an <tt>sspreq</tt> attribute.</dd>

  <dt><tt><b>noredzone</b></tt></dt>
  <dd>This attribute indicates that the code generator should not use a red
      zone, even if the target-specific ABI normally permits it.</dd>

  <dt><tt><b>noimplicitfloat</b></tt></dt>
  <dd>This attributes disables implicit floating point instructions.</dd>

  <dt><tt><b>naked</b></tt></dt>
  <dd>This attribute disables prologue / epilogue emission for the function.
      This can have very system-specific consequences.</dd>
</dl>

</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 <tt>.ll</tt> file if desired.  The syntax is very simple:</p>

<div class="doc_code">
<pre>
module asm "inline asm code goes here"
module asm "more can go here"
</pre>
</div>

<p>The strings can contain any character by escaping non-printable characters.
   The escape sequence used is simply "\xx" where "xx" is the two digit hex code
   for the number.</p>

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

</div>

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

<div class="doc_text">

<p>A module may specify a target specific data layout string that specifies how
   data is to be laid out in memory. The syntax for the data layout is
   simply:</p>

<div class="doc_code">
<pre>
target datalayout = "<i>layout specification</i>"
</pre>
</div>

<p>The <i>layout specification</i> consists of a list of specifications
   separated by the minus sign character ('-').  Each specification starts with
   a letter and may include other information after the letter to define some
   aspect of the data layout.  The specifications accepted are as follows:</p>

<dl>
  <dt><tt>E</tt></dt>
  <dd>Specifies that the target lays out data in big-endian form. That is, the
      bits with the most significance have the lowest address location.</dd>

  <dt><tt>e</tt></dt>
  <dd>Specifies that the target lays out data in little-endian form. That is,
      the bits with the least significance have the lowest address
      location.</dd>

  <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and 
      <i>preferred</i> alignments. All sizes are in bits. Specifying
      the <i>pref</i> alignment is optional. If omitted, the
      preceding <tt>:</tt> should be omitted too.</dd>

  <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for an integer type of a given bit
      <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd>

  <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for a vector type of a given bit 
      <i>size</i>.</dd>

  <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for a floating point type of a given bit 
      <i>size</i>. The value of <i>size</i> must be either 32 (float) or 64
      (double).</dd>

  <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for an aggregate type of a given bit
      <i>size</i>.</dd>

  <dt><tt>s<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
  <dd>This specifies the alignment for a stack object of a given bit
      <i>size</i>.</dd>

  <dt><tt>n<i>size1</i>:<i>size2</i>:<i>size3</i>...</tt></dt>
  <dd>This specifies a set of native integer widths for the target CPU
      in bits.  For example, it might contain "n32" for 32-bit PowerPC,
      "n32:64" for PowerPC 64, or "n8:16:32:64" for X86-64.  Elements of
      this set are considered to support most general arithmetic 
      operations efficiently.</dd>
</dl>

<p>When constructing the data layout for a given target, LLVM starts with a
   default set of specifications which are then (possibly) overriden by the
   specifications in the <tt>datalayout</tt> keyword. The default specifications
   are given in this list:</p>

<ul>
  <li><tt>E</tt> - big endian</li>
  <li><tt>p:32:64:64</tt> - 32-bit pointers with 64-bit alignment</li>
  <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li>
  <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li>
  <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li>
  <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li>
  <li><tt>i64:32:64</tt> - i64 has ABI alignment of 32-bits but preferred
  alignment of 64-bits</li>
  <li><tt>f32:32:32</tt> - float is 32-bit aligned</li>
  <li><tt>f64:64:64</tt> - double is 64-bit aligned</li>
  <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li>
  <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li>
  <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li>
  <li><tt>s0:64:64</tt> - stack objects are 64-bit aligned</li>
</ul>

<p>When LLVM is determining the alignment for a given type, it uses the
   following rules:</p>

<ol>
  <li>If the type sought is an exact match for one of the specifications, that
      specification is used.</li>

  <li>If no match is found, and the type sought is an integer type, then the
      smallest integer type that is larger than the bitwidth of the sought type
      is used. If none of the specifications are larger than the bitwidth then
      the the largest integer type is used. For example, given the default
      specifications above, the i7 type will use the alignment of i8 (next
      largest) while both i65 and i256 will use the alignment of i64 (largest
      specified).</li>

  <li>If no match is found, and the type sought is a vector type, then the
      largest vector type that is smaller than the sought vector type will be
      used as a fall back.  This happens because &lt;128 x double&gt; can be
      implemented in terms of 64 &lt;2 x double&gt;, for example.</li>
</ol>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="pointeraliasing">Pointer Aliasing Rules</a>
</div>

<div class="doc_text">

<p>Any memory access must be done through a pointer value associated
with an address range of the memory access, otherwise the behavior
is undefined. Pointer values are associated with address ranges
according to the following rules:</p>

<ul>
  <li>A pointer value formed from a
      <tt><a href="#i_getelementptr">getelementptr</a></tt> instruction
      is associated with the addresses associated with the first operand
      of the <tt>getelementptr</tt>.</li>
  <li>An address of a global variable is associated with the address
      range of the variable's storage.</li>
  <li>The result value of an allocation instruction is associated with
      the address range of the allocated storage.</li>
  <li>A null pointer in the default address-space is associated with
      no address.</li>
  <li>A pointer value formed by an
      <tt><a href="#i_inttoptr">inttoptr</a></tt> is associated with all
      address ranges of all pointer values that contribute (directly or
      indirectly) to the computation of the pointer's value.</li>
  <li>The result value of a
      <tt><a href="#i_bitcast">bitcast</a></tt> is associated with all
      addresses associated with the operand of the <tt>bitcast</tt>.</li>
  <li>An integer constant other than zero or a pointer value returned
      from a function not defined within LLVM may be associated with address
      ranges allocated through mechanisms other than those provided by
      LLVM. Such ranges shall not overlap with any ranges of addresses
      allocated by mechanisms provided by LLVM.</li>
  </ul>

<p>LLVM IR does not associate types with memory. The result type of a
<tt><a href="#i_load">load</a></tt> merely indicates the size and
alignment of the memory from which to load, as well as the
interpretation of the value. The first operand of a
<tt><a href="#i_store">store</a></tt> similarly only indicates the size
and alignment of the store.</p>

<p>Consequently, type-based alias analysis, aka TBAA, aka
<tt>-fstrict-aliasing</tt>, is not applicable to general unadorned
LLVM IR. <a href="#metadata">Metadata</a> may be used to encode
additional information which specialized optimization passes may use
to implement type-based alias analysis.</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 intermediate representation directly, without having
   to do extra analyses on the side before the transformation.  A strong type
   system makes it easier to read the generated code and enables novel analyses
   and transformations that are not feasible to perform on normal three address
   code representations.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="t_classifications">Type
Classifications</a> </div>

<div class="doc_text">

<p>The types fall into a few useful classifications:</p>

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

</div>

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

<div class="doc_text">

<p>The primitive types are the fundamental building blocks of the LLVM
   system.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_integer">Integer Type</a> </div>

<div class="doc_text">

<h5>Overview:</h5>
<p>The integer type is a very simple type that simply specifies an arbitrary
   bit width for the integer type desired. Any bit width from 1 bit to
   2<sup>23</sup>-1 (about 8 million) can be specified.</p>

<h5>Syntax:</h5>
<pre>
  iN
</pre>

<p>The number of bits the integer will occupy is specified by the <tt>N</tt>
   value.</p>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>i1</tt></td>
    <td class="left">a single-bit integer.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i32</tt></td>
    <td class="left">a 32-bit integer.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i1942652</tt></td>
    <td class="left">a really big integer of over 1 million bits.</td>
  </tr>
</table>

</div>

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

<div class="doc_text">

<table>
  <tbody>
    <tr><th>Type</th><th>Description</th></tr>
    <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
    <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
    <tr><td><tt>fp128</tt></td><td>128-bit floating point value (112-bit mantissa)</td></tr>
    <tr><td><tt>x86_fp80</tt></td><td>80-bit floating point value (X87)</td></tr>
    <tr><td><tt>ppc_fp128</tt></td><td>128-bit floating point value (two 64-bits)</td></tr>
  </tbody>
</table>

</div>

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

<div class="doc_text">

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

<h5>Syntax:</h5>
<pre>
  void
</pre>

</div>

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

<div class="doc_text">

<h5>Overview:</h5>
<p>The label type represents code labels.</p>

<h5>Syntax:</h5>
<pre>
  label
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_metadata">Metadata Type</a> </div>

<div class="doc_text">

<h5>Overview:</h5>
<p>The metadata type represents embedded metadata. No derived types may be
   created from metadata except for <a href="#t_function">function</a>
   arguments.

<h5>Syntax:</h5>
<pre>
  metadata
</pre>

</div>


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

<div class="doc_text">

<p>The real power in LLVM comes from the derived types in the system.  This is
   what allows a programmer to represent arrays, functions, pointers, and other
   useful types.  Each of these types contain one or more element types which
   may be a primitive type, or another derived type.  For example, it is
   possible to have a two dimensional array, using an array as the element type
   of another 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; <tt>elementtype</tt> may
   be any type with a size.</p>

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

<p>There is no restriction on indexing beyond the end of the array implied by
   a static type (though there are restrictions on indexing beyond the bounds
   of an allocated object in some cases). This means that single-dimension
   'variable sized array' addressing can be implemented in LLVM with a zero
   length array type. An implementation of 'pascal style arrays' in LLVM could
   use the type "<tt>{ i32, [0 x float]}</tt>", for example.</p>

</div>

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

<div class="doc_text">

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

<h5>Syntax:</h5>
<pre>
  &lt;returntype&gt; (&lt;parameter list&gt;)
</pre>

<p>...where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of type
   specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
   which indicates that the function takes a variable number of arguments.
   Variable argument functions can access their arguments with
   the <a href="#int_varargs">variable argument handling intrinsic</a>
   functions.  '<tt>&lt;returntype&gt;</tt>' is a any type except
   <a href="#t_label">label</a>.</p>

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

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>{ i32, i32, i32 }</tt></td>
    <td class="left">A triple of three <tt>i32</tt> values</td>
  </tr><tr class="layout">
    <td class="left"><tt>{&nbsp;float,&nbsp;i32&nbsp;(i32)&nbsp;*&nbsp;}</tt></td>
    <td class="left">A pair, where the first element is a <tt>float</tt> and the
      second element is a <a href="#t_pointer">pointer</a> to a
      <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
      an <tt>i32</tt>.</td>
  </tr>
</table>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pstruct">Packed Structure Type</a>
</div>

<div class="doc_text">

<h5>Overview:</h5>
<p>The packed structure type is used to represent a collection of data members
   together in memory.  There is no padding between fields.  Further, the
   alignment of a packed structure is 1 byte.  The elements of a packed
   structure may be any type that has a size.</p>

<p>Structures are accessed using '<tt><a href="#i_load">load</a></tt> and
   '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
   the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>

<h5>Syntax:</h5>
<pre>
  &lt; { &lt;type list&gt; } &gt;
</pre>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>&lt; { i32, i32, i32 } &gt;</tt></td>
    <td class="left">A triple of three <tt>i32</tt> values</td>
  </tr><tr class="layout">
  <td class="left">
<tt>&lt;&nbsp;{&nbsp;float,&nbsp;i32&nbsp;(i32)*&nbsp;}&nbsp;&gt;</tt></td>
    <td class="left">A pair, where the first element is a <tt>float</tt> and the
      second element is a <a href="#t_pointer">pointer</a> to a
      <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
      an <tt>i32</tt>.</td>
  </tr>
</table>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>

<div class="doc_text">

<h5>Overview:</h5>
<p>As in many languages, the pointer type represents a pointer or reference to
   another object, which must live in memory. Pointer types may have an optional
   address space attribute defining the target-specific numbered address space
   where the pointed-to object resides. The default address space is zero.</p>

<p>Note that LLVM does not permit pointers to void (<tt>void*</tt>) nor does it
   permit pointers to labels (<tt>label*</tt>).  Use <tt>i8*</tt> instead.</p>

<h5>Syntax:</h5>
<pre>
  &lt;type&gt; *
</pre>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>[4 x i32]*</tt></td>
    <td class="left">A <a href="#t_pointer">pointer</a> to <a
                    href="#t_array">array</a> of four <tt>i32</tt> values.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i32 (i32 *) *</tt></td>
    <td class="left"> A <a href="#t_pointer">pointer</a> to a <a
      href="#t_function">function</a> that takes an <tt>i32*</tt>, returning an
      <tt>i32</tt>.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>i32 addrspace(5)*</tt></td>
    <td class="left">A <a href="#t_pointer">pointer</a> to an <tt>i32</tt> value
     that resides in address space #5.</td>
  </tr>
</table>

</div>

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

<div class="doc_text">

<h5>Overview:</h5>
<p>A vector type is a simple derived type that represents a vector of elements.
   Vector types are used when multiple primitive data are operated in parallel
   using a single instruction (SIMD).  A vector type requires a size (number of
   elements) and an underlying primitive data type.  Vector types are considered
   <a href="#t_firstclass">first class</a>.</p>

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

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

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

</div>

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

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

<h5>Syntax:</h5>
<pre>
  opaque
</pre>

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="t_uprefs">Type Up-references</a>
</div>

<div class="doc_text">

<h5>Overview:</h5>
<p>An "up reference" allows you to refer to a lexically enclosing type without
   requiring it to have a name. For instance, a structure declaration may
   contain a pointer to any of the types it is lexically a member of.  Example
   of up references (with their equivalent as named type declarations)
   include:</p>

<pre>
   { \2 * }                %x = type { %x* }
   { \2 }*                 %y = type { %y }*
   \1*                     %z = type %z*
</pre>

<p>An up reference is needed by the asmprinter for printing out cyclic types
   when there is no declared name for a type in the cycle.  Because the
   asmprinter does not want to print out an infinite type string, it needs a
   syntax to handle recursive types that have no names (all names are optional
   in llvm IR).</p>

<h5>Syntax:</h5>
<pre>
   \&lt;level&gt;
</pre>

<p>The level is the count of the lexical type that is being referred to.</p>

<h5>Examples:</h5>
<table class="layout">
  <tr class="layout">
    <td class="left"><tt>\1*</tt></td>
    <td class="left">Self-referential pointer.</td>
  </tr>
  <tr class="layout">
    <td class="left"><tt>{ { \3*, i8 }, i32 }</tt></td>
    <td class="left">Recursive structure where the upref refers to the out-most
                     structure.</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_integer">i1</a></tt> type.</dd>

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

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

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

<p>The one non-intuitive notation for constants is the 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 in a reasonable number of
   digits.  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>

<p>When using the hexadecimal form, constants of types float and double are
   represented using the 16-digit form shown above (which matches the IEEE754
   representation for double); float values must, however, be exactly
   representable as IEE754 single precision.  Hexadecimal format is always used
   for long double, and there are three forms of long double.  The 80-bit format
   used by x86 is represented as <tt>0xK</tt> followed by 20 hexadecimal digits.
   The 128-bit format used by PowerPC (two adjacent doubles) is represented
   by <tt>0xM</tt> followed by 32 hexadecimal digits.  The IEEE 128-bit format
   is represented by <tt>0xL</tt> followed by 32 hexadecimal digits; no
   currently supported target uses this format.  Long doubles will only work if
   they match the long double format on your target.  All hexadecimal formats
   are big-endian (sign bit at the left).</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="aggregateconstants"></a> <!-- old anchor -->
<a name="complexconstants">Complex Constants</a>
</div>

<div class="doc_text">

<p>Complex constants are a (potentially recursive) combination of simple
   constants and smaller complex constants.</p>

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

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

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

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

  <dt><b>Metadata node</b></dt>
  <dd>A metadata node is a structure-like constant with
      <a href="#t_metadata">metadata type</a>.  For example: "<tt>metadata !{
      i32 0, metadata !"test" }</tt>".  Unlike other constants that are meant to
      be interpreted as part of the instruction stream, metadata is a place to
      attach additional information such as debug info.</dd>
</dl>

</div>

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

<div class="doc_text">

<p>The addresses of <a href="#globalvars">global variables</a>
   and <a href="#functionstructure">functions</a> are always implicitly valid
   (link-time) constants.  These constants are explicitly referenced when
   the <a href="#identifiers">identifier for the global</a> is used and always
   have <a href="#t_pointer">pointer</a> type. For example, the following is a
   legal LLVM file:</p>

<div class="doc_code">
<pre>
@X = global i32 17
@Y = global i32 42
@Z = global [2 x i32*] [ i32* @X, i32* @Y ]
</pre>
</div>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="undefvalues">Undefined Values</a></div>
<div class="doc_text">

<p>The string '<tt>undef</tt>' can be used anywhere a constant is expected, and
   indicates that the user of the value may receive an unspecified bit-pattern.
   Undefined values may be of any type (other than label or void) and be used
   anywhere a constant is permitted.</p>

<p>Undefined values are useful because they indicate to the compiler that the
   program is well defined no matter what value is used.  This gives the
   compiler more freedom to optimize.  Here are some examples of (potentially
   surprising) transformations that are valid (in pseudo IR):</p>


<div class="doc_code">
<pre>
  %A = add %X, undef
  %B = sub %X, undef
  %C = xor %X, undef
Safe:
  %A = undef
  %B = undef
  %C = undef
</pre>
</div>

<p>This is safe because all of the output bits are affected by the undef bits.
Any output bit can have a zero or one depending on the input bits.</p>

<div class="doc_code">
<pre>
  %A = or %X, undef
  %B = and %X, undef
Safe:
  %A = -1
  %B = 0
Unsafe:
  %A = undef
  %B = undef
</pre>
</div>

<p>These logical operations have bits that are not always affected by the input.
For example, if "%X" has a zero bit, then the output of the 'and' operation will
always be a zero, no matter what the corresponding bit from the undef is.  As
such, it is unsafe to optimize or assume that the result of the and is undef.
However, it is safe to assume that all bits of the undef could be 0, and 
optimize the and to 0.  Likewise, it is safe to assume that all the bits of 
the undef operand to the or could be set, allowing the or to be folded to 
-1.</p>

<div class="doc_code">
<pre>
  %A = select undef, %X, %Y
  %B = select undef, 42, %Y
  %C = select %X, %Y, undef
Safe:
  %A = %X     (or %Y)
  %B = 42     (or %Y)
  %C = %Y
Unsafe:
  %A = undef
  %B = undef
  %C = undef
</pre>
</div>

<p>This set of examples show that undefined select (and conditional branch)
conditions can go "either way" but they have to come from one of the two
operands.  In the %A example, if %X and %Y were both known to have a clear low
bit, then %A would have to have a cleared low bit.  However, in the %C example,
the optimizer is allowed to assume that the undef operand could be the same as
%Y, allowing the whole select to be eliminated.</p>


<div class="doc_code">
<pre>
  %A = xor undef, undef
  
  %B = undef
  %C = xor %B, %B

  %D = undef
  %E = icmp lt %D, 4
  %F = icmp gte %D, 4

Safe:
  %A = undef
  %B = undef
  %C = undef
  %D = undef
  %E = undef
  %F = undef
</pre>
</div>

<p>This example points out that two undef operands are not necessarily the same.
This can be surprising to people (and also matches C semantics) where they
assume that "X^X" is always zero, even if X is undef.  This isn't true for a
number of reasons, but the short answer is that an undef "variable" can
arbitrarily change its value over its "live range".  This is true because the
"variable" doesn't actually <em>have a live range</em>.  Instead, the value is
logically read from arbitrary registers that happen to be around when needed,
so the value is not necessarily consistent over time.  In fact, %A and %C need
to have the same semantics or the core LLVM "replace all uses with" concept
would not hold.</p>

<div class="doc_code">
<pre>
  %A = fdiv undef, %X
  %B = fdiv %X, undef
Safe:
  %A = undef
b: unreachable
</pre>
</div>

<p>These examples show the crucial difference between an <em>undefined
value</em> and <em>undefined behavior</em>.  An undefined value (like undef) is
allowed to have an arbitrary bit-pattern.  This means that the %A operation
can be constant folded to undef because the undef could be an SNaN, and fdiv is
not (currently) defined on SNaN's.  However, in the second example, we can make
a more aggressive assumption: because the undef is allowed to be an arbitrary
value, we are allowed to assume that it could be zero.  Since a divide by zero
has <em>undefined behavior</em>, we are allowed to assume that the operation
does not execute at all.  This allows us to delete the divide and all code after
it: since the undefined operation "can't happen", the optimizer can assume that
it occurs in dead code.
</p>
 
<div class="doc_code">
<pre>
a:  store undef -> %X
b:  store %X -> undef
Safe:
a: &lt;deleted&gt;
b: unreachable
</pre>
</div>

<p>These examples reiterate the fdiv example: a store "of" an undefined value
can be assumed to not have any effect: we can assume that the value is 
overwritten with bits that happen to match what was already there.  However, a
store "to" an undefined location could clobber arbitrary memory, therefore, it
has undefined behavior.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="blockaddress">Addresses of Basic
    Blocks</a></div>
<div class="doc_text">

<p><b><tt>blockaddress(@function, %block)</tt></b></p>

<p>The '<tt>blockaddress</tt>' constant computes the address of the specified
   basic block in the specified function, and always has an i8* type.  Taking
   the address of the entry block is illegal.</p>
     
<p>This value only has defined behavior when used as an operand to the
   '<a href="#i_indirectbr"><tt>indirectbr</tt></a>' instruction or for comparisons
   against null.  Pointer equality tests between labels addresses is undefined
   behavior - though, again, comparison against null is ok, and no label is
   equal to the null pointer.  This may also be passed around as an opaque
   pointer sized value as long as the bits are not inspected.  This allows
   <tt>ptrtoint</tt> and arithmetic to be performed on these values so long as
   the original value is reconstituted before the <tt>indirectbr</tt>.</p>
   
<p>Finally, some targets may provide defined semantics when
   using the value as the operand to an inline assembly, but that is target
   specific.
   </p>

</div>


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

<div class="doc_text">

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

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

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

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

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

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

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

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

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

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

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

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

  <dt><b><tt>bitcast ( CST to TYPE )</tt></b></dt>
  <dd>Convert a constant, CST, to another TYPE. The constraints of the operands
      are the same as those for the <a href="#i_bitcast">bitcast
      instruction</a>.</dd>

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

  <dt><b><tt>select ( COND, VAL1, VAL2 )</tt></b></dt>
  <dd>Perform the <a href="#i_select">select operation</a> on constants.</dd>

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

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

  <dt><b><tt>extractelement ( VAL, IDX )</tt></b></dt>
  <dd>Perform the <a href="#i_extractelement">extractelement operation</a> on
      constants.</dd>

  <dt><b><tt>insertelement ( VAL, ELT, IDX )</tt></b></dt>
  <dd>Perform the <a href="#i_insertelement">insertelement operation</a> on
    constants.</dd>

  <dt><b><tt>shufflevector ( VEC1, VEC2, IDXMASK )</tt></b></dt>
  <dd>Perform the <a href="#i_shufflevector">shufflevector operation</a> on
      constants.</dd>

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="metadata">Embedded Metadata</a>
</div>

<div class="doc_text">

<p>Embedded metadata provides a way to attach arbitrary data to the instruction
   stream without affecting the behaviour of the program.  There are two
   metadata primitives, strings and nodes. All metadata has the
   <tt>metadata</tt> type and is identified in syntax by a preceding exclamation
   point ('<tt>!</tt>').</p>

<p>A metadata string is a string surrounded by double quotes.  It can contain
   any character by escaping non-printable characters with "\xx" where "xx" is
   the two digit hex code.  For example: "<tt>!"test\00"</tt>".</p>

<p>Metadata nodes are represented with notation similar to structure constants
   (a comma separated list of elements, surrounded by braces and preceded by an
   exclamation point).  For example: "<tt>!{ metadata !"test\00", i32
   10}</tt>".</p>

<p>A metadata node will attempt to track changes to the values it holds. In the
   event that a value is deleted, it will be replaced with a typeless
   "<tt>null</tt>", such as "<tt>metadata !{null, i32 10}</tt>".</p>

<p>Optimizations may rely on metadata to provide additional information about
   the program that isn't available in the instructions, or that isn't easily
   computable. Similarly, the code generator may expect a certain metadata
   format to be used to express debugging information.</p>

</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), a flag that indicates whether or not the inline asm
   expression has side effects, and a flag indicating whether the function
   containing the asm needs to align its stack conservatively.  An example
   inline assembler expression is:</p>

<div class="doc_code">
<pre>
i32 (i32) asm "bswap $0", "=r,r"
</pre>
</div>

<p>Inline assembler expressions may <b>only</b> be used as the callee operand of
   a <a href="#i_call"><tt>call</tt> instruction</a>.  Thus, typically we
   have:</p>

<div class="doc_code">
<pre>
%X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
</pre>
</div>

<p>Inline asms with side effects not visible in the constraint list must be
   marked as having side effects.  This is done through the use of the
   '<tt>sideeffect</tt>' keyword, like so:</p>

<div class="doc_code">
<pre>
call void asm sideeffect "eieio", ""()
</pre>
</div>

<p>In some cases inline asms will contain code that will not work unless the
   stack is aligned in some way, such as calls or SSE instructions on x86,
   yet will not contain code that does that alignment within the asm.
   The compiler should make conservative assumptions about what the asm might
   contain and should generate its usual stack alignment code in the prologue
   if the '<tt>alignstack</tt>' keyword is present:</p>

<div class="doc_code">
<pre>
call void asm alignstack "eieio", ""()
</pre>
</div>

<p>If both keywords appear the '<tt>sideeffect</tt>' keyword must come
   first.</p>

<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).  This is probably best done by reference to
   another document that covers inline asm from a holistic perspective.</p>

</div>


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="intrinsic_globals">Intrinsic Global Variables</a>
</div>
<!-- *********************************************************************** -->

<p>LLVM has a number of "magic" global variables that contain data that affect
code generation or other IR semantics.  These are documented here.  All globals
of this sort should have a section specified as "<tt>llvm.metadata</tt>".  This
section and all globals that start with "<tt>llvm.</tt>" are reserved for use
by LLVM.</p>

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a>
</div>

<div class="doc_text">

<p>The <tt>@llvm.used</tt> global is an array with i8* element type which has <a
href="#linkage_appending">appending linkage</a>.  This array contains a list of
pointers to global variables and functions which may optionally have a pointer
cast formed of bitcast or getelementptr.  For example, a legal use of it is:</p>

<pre>
  @X = global i8 4
  @Y = global i32 123

  @llvm.used = appending global [2 x i8*] [
     i8* @X,
     i8* bitcast (i32* @Y to i8*)
  ], section "llvm.metadata"
</pre>

<p>If a global variable appears in the <tt>@llvm.used</tt> list, then the
compiler, assembler, and linker are required to treat the symbol as if there is
a reference to the global that it cannot see.  For example, if a variable has
internal linkage and no references other than that from the <tt>@llvm.used</tt>
list, it cannot be deleted.  This is commonly used to represent references from
inline asms and other things the compiler cannot "see", and corresponds to
"attribute((used))" in GNU C.</p>

<p>On some targets, the code generator must emit a directive to the assembler or
object file to prevent the assembler and linker from molesting the symbol.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="intg_compiler_used">The '<tt>llvm.compiler.used</tt>' Global Variable</a>
</div>

<div class="doc_text">

<p>The <tt>@llvm.compiler.used</tt> directive is the same as the
<tt>@llvm.used</tt> directive, except that it only prevents the compiler from
touching the symbol.  On targets that support it, this allows an intelligent
linker to optimize references to the symbol without being impeded as it would be
by <tt>@llvm.used</tt>.</p>

<p>This is a rare construct that should only be used in rare circumstances, and
should not be exposed to source languages.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a>
</div>

<div class="doc_text">

<p>TODO: Describe this.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a>
</div>

<div class="doc_text">

<p>TODO: Describe this.</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_indirectbr">'<tt>indirectbr</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 optionally
   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 optionally accepts a single argument, the
   return value. The type of the return value must be a
   '<a href="#t_firstclass">first class</a>' type.</p>

<p>A function is not <a href="#wellformed">well formed</a> if it it has a
   non-void return type and contains a '<tt>ret</tt>' instruction with no return
   value or a return value with a type that does not match its type, or if it
   has a void return type and contains a '<tt>ret</tt>' instruction with a
   return value.</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 i32 5                       <i>; Return an integer value of 5</i>
  ret void                        <i>; Return from a void function</i>
  ret { i32, i8 } { i32 4, i8 2 } <i>; Return a struct of values 4 and 2</i>
</pre>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;<br>  br label &lt;dest&gt;          <i>; Unconditional branch</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>br</tt>' instruction is used to cause control flow to transfer to a
   different basic block in the current function.  There are two forms of this
   instruction, corresponding to a conditional branch and an unconditional
   branch.</p>

<h5>Arguments:</h5>
<p>The conditional branch form of the '<tt>br</tt>' instruction takes a single
   '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The unconditional form
   of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a
   target.</p>

<h5>Semantics:</h5>
<p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
   argument is evaluated.  If the value is <tt>true</tt>, control flows to the
   '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
   control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>

<h5>Example:</h5>
<pre>
Test:
  %cond = <a href="#i_icmp">icmp</a> eq i32 %a, %b
  br i1 %cond, label %IfEqual, label %IfUnequal
IfEqual:
  <a href="#i_ret">ret</a> i32 1
IfUnequal:
  <a href="#i_ret">ret</a> i32 0
</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
   transferred to the corresponding destination; otherwise, control flow is
   transferred to the default destination.</p>

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

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

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

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

</div>


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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  indirectbr &lt;somety&gt;* &lt;address&gt;, [ label &lt;dest1&gt;, label &lt;dest2&gt;, ... ]
</pre>

<h5>Overview:</h5>

<p>The '<tt>indirectbr</tt>' instruction implements an indirect branch to a label
   within the current function, whose address is specified by
   "<tt>address</tt>".  Address must be derived from a <a
   href="#blockaddress">blockaddress</a> constant.</p>

<h5>Arguments:</h5>

<p>The '<tt>address</tt>' argument is the address of the label to jump to.  The
   rest of the arguments indicate the full set of possible destinations that the
   address may point to.  Blocks are allowed to occur multiple times in the
   destination list, though this isn't particularly useful.</p>
   
<p>This destination list is required so that dataflow analysis has an accurate
   understanding of the CFG.</p>

<h5>Semantics:</h5>

<p>Control transfers to the block specified in the address argument.  All
   possible destination blocks must be listed in the label list, otherwise this
   instruction has undefined behavior.  This implies that jumps to labels
   defined in other functions have undefined behavior as well.</p>

<h5>Implementation:</h5>

<p>This is typically implemented with a jump through a register.</p>

<h5>Example:</h5>
<pre>
 indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ]
</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>] [<a href="#paramattrs">ret attrs</a>] &lt;ptr to function ty&gt; &lt;function ptr val&gt;(&lt;function args&gt;) [<a href="#fnattrs">fn attrs</a>]
                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>The optional <a href="#paramattrs">Parameter Attributes</a> list for
      return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
      '<tt>inreg</tt>' attributes are valid here.</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>

  <li>The optional <a href="#fnattrs">function attributes</a> list. Only
      '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
      '<tt>readnone</tt>' attributes are valid here.</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>

<p>For the purposes of the SSA form, the definition of the value returned by the
   '<tt>invoke</tt>' instruction is deemed to occur on the edge from the current
   block to the "normal" label. If the callee unwinds then no return value is
   available.</p>

<h5>Example:</h5>
<pre>
  %retval = invoke i32 @Test(i32 15) to label %Continue
              unwind label %TestCleanup              <i>; {i32}:retval set</i>
  %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue
              unwind label %TestCleanup              <i>; {i32}:retval set</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->

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

<div class="doc_text">

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

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

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

</div>

<!-- _______________________________________________________________________ -->

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  unreachable
</pre>

<h5>Overview:</h5>
<p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
   instruction is used to inform the optimizer that a particular portion of the
   code is not reachable.  This can be used to indicate that the code after a
   no-return function cannot be reached, and other facts.</p>

<h5>Semantics:</h5>
<p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>

<div class="doc_text">

<p>Binary operators are used to do most of the computation in a program.  They
   require two operands of the same type, execute an operation on them, and
   produce a single value.  The operands might represent multiple data, as is
   the case with the <a href="#t_vector">vector</a> data type.  The result value
   has the same type as its operands.</p>

<p>There are several different binary operators:</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
  &lt;result&gt; = add nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = add nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = add nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&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 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
   integer values. Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the integer sum of the two operands.</p>

<p>If the sum has unsigned overflow, the result returned is the mathematical
   result modulo 2<sup>n</sup>, where n is the bit width of the result.</p>

<p>Because LLVM integers use a two's complement representation, this instruction
   is appropriate for both signed and unsigned integers.</p>

<p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
   and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
   <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt>
   is undefined if unsigned and/or signed overflow, respectively, occurs.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = add i32 4, %var          <i>; yields {i32}:result = 4 + %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = fadd &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>fadd</tt>' instruction must be
   <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
   floating point values. Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the floating point sum of the two operands.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = fadd float 4.0, %var          <i>; yields {float}:result = 4.0 + %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;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
  &lt;result&gt; = sub nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = sub nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = sub nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&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 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
   integer values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the integer difference of the two operands.</p>

<p>If the difference has unsigned overflow, the result returned is the
   mathematical result modulo 2<sup>n</sup>, where n is the bit width of the
   result.</p>

<p>Because LLVM integers use a two's complement representation, this instruction
   is appropriate for both signed and unsigned integers.</p>

<p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
   and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
   <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt>
   is undefined if unsigned and/or signed overflow, respectively, occurs.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
  &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = fsub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fsub</tt>' instruction returns the difference of its two
   operands.</p>

<p>Note that the '<tt>fsub</tt>' instruction is used to represent the
   '<tt>fneg</tt>' instruction present in most other intermediate
   representations.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>fsub</tt>' instruction must be
   <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
   floating point values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the floating point difference of the two operands.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = fsub float 4.0, %var           <i>; yields {float}:result = 4.0 - %var</i>
  &lt;result&gt; = fsub float -0.0, %val          <i>; yields {float}: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;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
  &lt;result&gt; = mul nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = mul nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
  &lt;result&gt; = mul nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&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 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
   integer values.  Both arguments must have identical types.</p>
 
<h5>Semantics:</h5>
<p>The value produced is the integer product of the two operands.</p>

<p>If the result of the multiplication has unsigned overflow, the result
   returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit
   width of the result.</p>

<p>Because LLVM integers use a two's complement representation, and the result
   is the same width as the operands, this instruction returns the correct
   result for both signed and unsigned integers.  If a full product
   (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should
   be sign-extended or zero-extended as appropriate to the width of the full
   product.</p>

<p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
   and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
   <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt>
   is undefined if unsigned and/or signed overflow, respectively, occurs.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = mul i32 4, %var          <i>; yields {i32}:result = 4 * %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = fmul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>fmul</tt>' instruction must be
   <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
   floating point values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the floating point product of the two operands.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = fmul float 4.0, %var          <i>; yields {float}:result = 4.0 * %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>udiv</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the unsigned integer quotient of the two operands.</p>

<p>Note that unsigned integer division and signed integer division are distinct
   operations; for signed integer division, use '<tt>sdiv</tt>'.</p>

<p>Division by zero leads to undefined behavior.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = udiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
  &lt;result&gt; = sdiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>sdiv</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the signed integer quotient of the two operands rounded
   towards zero.</p>

<p>Note that signed integer division and unsigned integer division are distinct
   operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>

<p>Division by zero leads to undefined behavior. Overflow also leads to
   undefined behavior; this is a rare case, but can occur, for example, by doing
   a 32-bit division of -2147483648 by -1.</p>

<p>If the <tt>exact</tt> keyword is present, the result value of the
   <tt>sdiv</tt> is undefined if the result would be rounded or if overflow
   would occur.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = sdiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = fdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>fdiv</tt>' instruction must be
   <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
   floating point values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The value produced is the floating point quotient of the two operands.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = fdiv float 4.0, %var          <i>; yields {float}:result = 4.0 / %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = urem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned
   division of its two arguments.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>urem</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>This instruction returns the unsigned integer <i>remainder</i> of a division.
   This instruction always performs an unsigned division to get the
   remainder.</p>

<p>Note that unsigned integer remainder and signed integer remainder are
   distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>

<p>Taking the remainder of a division by zero leads to undefined behavior.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = urem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = srem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>srem</tt>' instruction returns the remainder from the signed
   division of its two operands. This instruction can also take
   <a href="#t_vector">vector</a> versions of the values in which case the
   elements must be integers.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>srem</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>This instruction returns the <i>remainder</i> of a division (where the result
   has the same sign as the dividend, <tt>op1</tt>), not the <i>modulo</i>
   operator (where the result has the same sign as the divisor, <tt>op2</tt>) of
   a value.  For more information about the difference,
   see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
   Math Forum</a>. For a table of how this is implemented in various languages,
   please see <a href="http://en.wikipedia.org/wiki/Modulo_operation">
   Wikipedia: modulo operation</a>.</p>

<p>Note that signed integer remainder and unsigned integer remainder are
   distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>

<p>Taking the remainder of a division by zero leads to undefined behavior.
   Overflow also leads to undefined behavior; this is a rare case, but can
   occur, for example, by taking the remainder of a 32-bit division of
   -2147483648 by -1.  (The remainder doesn't actually overflow, but this rule
   lets srem be implemented using instructions that return both the result of
   the division and the remainder.)</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = frem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>frem</tt>' instruction returns the remainder from the division of
   its two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>frem</tt>' instruction must be
   <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
   floating point values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>This instruction returns the <i>remainder</i> of a division.  The remainder
   has the same sign as the dividend.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = frem float 4.0, %var          <i>; yields {float}:result = 4.0 % %var</i>
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
Operations</a> </div>

<div class="doc_text">

<p>Bitwise binary operators are used to do various forms of bit-twiddling in a
   program.  They are generally very efficient instructions and can commonly be
   strength reduced from other instructions.  They require two operands of the
   same type, execute an operation on them, and produce a single value.  The
   resulting value is the same type as its operands.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left
   a specified number of bits.</p>

<h5>Arguments:</h5>
<p>Both arguments to the '<tt>shl</tt>' instruction must be the
    same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
    integer type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
 
<h5>Semantics:</h5>
<p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod
   2<sup>n</sup>, where <tt>n</tt> is the width of the result.  If <tt>op2</tt>
   is (statically or dynamically) negative or equal to or larger than the number
   of bits in <tt>op1</tt>, the result is undefined.  If the arguments are
   vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
   shift amount in <tt>op2</tt>.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
  &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
  &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
  &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
  &lt;result&gt; = shl &lt;2 x i32&gt; &lt; i32 1, i32 1&gt;, &lt; i32 1, i32 2&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 2, i32 4&gt;</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
   operand shifted to the right a specified number of bits with zero fill.</p>

<h5>Arguments:</h5>
<p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   type. '<tt>op2</tt>' is treated as an unsigned value.</p>

<h5>Semantics:</h5>
<p>This instruction always performs a logical shift right operation. The most
   significant bits of the result will be filled with zero bits after the shift.
   If <tt>op2</tt> is (statically or dynamically) equal to or larger than the
   number of bits in <tt>op1</tt>, the result is undefined. If the arguments are
   vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
   shift amount in <tt>op2</tt>.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
  &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
  &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
  &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
  &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
  &lt;result&gt; = lshr &lt;2 x i32&gt; &lt; i32 -2, i32 4&gt;, &lt; i32 1, i32 2&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 0x7FFFFFFF, i32 1&gt;</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
Instruction</a> </div>
<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
   operand shifted to the right a specified number of bits with sign
   extension.</p>

<h5>Arguments:</h5>
<p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   type.  '<tt>op2</tt>' is treated as an unsigned value.</p>

<h5>Semantics:</h5>
<p>This instruction always performs an arithmetic shift right operation, The
   most significant bits of the result will be filled with the sign bit
   of <tt>op1</tt>.  If <tt>op2</tt> is (statically or dynamically) equal to or
   larger than the number of bits in <tt>op1</tt>, the result is undefined. If
   the arguments are vectors, each vector element of <tt>op1</tt> is shifted by
   the corresponding shift amount in <tt>op2</tt>.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
  &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
  &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
  &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
  &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
  &lt;result&gt; = ashr &lt;2 x i32&gt; &lt; i32 -2, i32 4&gt;, &lt; i32 1, i32 3&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 -1, i32 0&gt;</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = and &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two
   operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>and</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The truth table used for the '<tt>and</tt>' instruction is:</p>

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

<h5>Example:</h5>
<pre>
  &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
  &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
  &lt;result&gt; = and i32 4, 8            <i>; yields {i32}:result = 0</i>
</pre>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = or &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its
   two operands.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>or</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The truth table used for the '<tt>or</tt>' instruction is:</p>

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

<h5>Example:</h5>
<pre>
  &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
  &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
  &lt;result&gt; = or i32 4, 8            <i>; yields {i32}:result = 12</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = xor &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of
   its two operands.  The <tt>xor</tt> is used to implement the "one's
   complement" operation, which is the "~" operator in C.</p>

<h5>Arguments:</h5>
<p>The two arguments to the '<tt>xor</tt>' instruction must be 
   <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
   values.  Both arguments must have identical types.</p>

<h5>Semantics:</h5>
<p>The truth table used for the '<tt>xor</tt>' instruction is:</p>

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

<h5>Example:</h5>
<pre>
  &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
  &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
  &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
  &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
</pre>

</div>

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>extractelement</tt>' instruction extracts a single scalar element
   from a vector at a specified index.</p>


<h5>Arguments:</h5>
<p>The first operand of an '<tt>extractelement</tt>' instruction is a value
   of <a href="#t_vector">vector</a> type.  The second operand is an index
   indicating the position from which to extract the element.  The index may be
   a variable.</p>

<h5>Semantics:</h5>
<p>The result is a scalar of the same type as the element type of
   <tt>val</tt>.  Its value is the value at position <tt>idx</tt> of
   <tt>val</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
   results are undefined.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = extractelement &lt;4 x i32&gt; %vec, i32 0    <i>; yields i32</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = insertelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, &lt;ty&gt; &lt;elt&gt;, i32 &lt;idx&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a
   vector at a specified index.</p>

<h5>Arguments:</h5>
<p>The first operand of an '<tt>insertelement</tt>' instruction is a value
   of <a href="#t_vector">vector</a> type.  The second operand is a scalar value
   whose type must equal the element type of the first operand.  The third
   operand is an index indicating the position at which to insert the value.
   The index may be a variable.</p>

<h5>Semantics:</h5>
<p>The result is a vector of the same type as <tt>val</tt>.  Its element values
   are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the
   value <tt>elt</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
   results are undefined.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = insertelement &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = shufflevector &lt;n x &lt;ty&gt;&gt; &lt;v1&gt;, &lt;n x &lt;ty&gt;&gt; &lt;v2&gt;, &lt;m x i32&gt; &lt;mask&gt;    <i>; yields &lt;m 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 with the same element type as the
   input and length that is the same as the shuffle mask.</p>

<h5>Arguments:</h5>
<p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
   with types that match each other. The third argument is a shuffle mask whose
   element type is always 'i32'.  The result of the instruction is a vector
   whose length is the same as the shuffle mask and whose element type is the
   same as the element type of the first two operands.</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 vectors 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>
  &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
                          &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
  &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef, 
                          &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i> - Identity shuffle.
  &lt;result&gt; = shufflevector &lt;8 x i32&gt; %v1, &lt;8 x i32&gt; undef, 
                          &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i>
  &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
                          &lt;8 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 &gt;  <i>; yields &lt;8 x i32&gt;</i>
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> 
  <a name="aggregateops">Aggregate Operations</a>
</div>

<div class="doc_text">

<p>LLVM supports several instructions for working with aggregate values.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = extractvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;idx&gt;{, &lt;idx&gt;}*
</pre>

<h5>Overview:</h5>
<p>The '<tt>extractvalue</tt>' instruction extracts the value of a struct field
   or array element from an aggregate value.</p>

<h5>Arguments:</h5>
<p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
   of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
   operands are constant indices to specify which value to extract in a similar
   manner as indices in a
   '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>

<h5>Semantics:</h5>
<p>The result is the value at the position in the aggregate specified by the
   index operands.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = extractvalue {i32, float} %agg, 0    <i>; yields i32</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = insertvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;ty&gt; &lt;val&gt;, &lt;idx&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>insertvalue</tt>' instruction inserts a value into a struct field or
   array element in an aggregate.</p>


<h5>Arguments:</h5>
<p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
   of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
   second operand is a first-class value to insert.  The following operands are
   constant indices indicating the position at which to insert the value in a
   similar manner as indices in a
   '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.  The
   value to insert must have the same type as the value identified by the
   indices.</p>

<h5>Semantics:</h5>
<p>The result is an aggregate of the same type as <tt>val</tt>.  Its value is
   that of <tt>val</tt> except that the value at the position specified by the
   indices is that of <tt>elt</tt>.</p>

<h5>Example:</h5>
<pre>
  &lt;result&gt; = insertvalue {i32, float} %agg, i32 1, 0    <i>; yields {i32, float}</i>
</pre>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection"> 
  <a name="memoryops">Memory Access and Addressing Operations</a>
</div>

<div class="doc_text">

<p>A key design point of an SSA-based representation is how it represents
   memory.  In LLVM, no memory locations are in SSA form, which makes things
   very simple.  This section describes how to read, write, and allocate
   memory in LLVM.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = alloca &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
</pre>

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

<h5>Arguments:</h5>
<p>The '<tt>alloca</tt>' instruction
   allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the
   runtime stack, returning a pointer of the appropriate type to the program.
   If "NumElements" is specified, it is the number of elements allocated,
   otherwise "NumElements" is defaulted to be one.  If a constant alignment is
   specified, the value result of the allocation is guaranteed to be aligned to
   at least that boundary.  If not specified, or if zero, the target can choose
   to align the allocation on any convenient boundary compatible with the
   type.</p>

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

<h5>Semantics:</h5>
<p>Memory is allocated; a pointer is returned.  The operation is undefined if
   there is insufficient stack space for the allocation.  '<tt>alloca</tt>'d
   memory is automatically released when the function returns.  The
   '<tt>alloca</tt>' instruction is commonly used to represent automatic
   variables that must have an address available.  When the function returns
   (either with the <tt><a href="#i_ret">ret</a></tt>
   or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is
   reclaimed.  Allocating zero bytes is legal, but the result is undefined.</p>

<h5>Example:</h5>
<pre>
  %ptr = alloca i32                             <i>; yields {i32*}:ptr</i>
  %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
  %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
  %ptr = alloca i32, align 1024                 <i>; yields {i32*}:ptr</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
  &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
</pre>

<h5>Overview:</h5>
<p>The '<tt>load</tt>' instruction is used to read from memory.</p>

<h5>Arguments:</h5>
<p>The argument to the '<tt>load</tt>' instruction specifies the memory address
   from which to load.  The pointer must point to
   a <a href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
   marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the
   number or order of execution of this <tt>load</tt> with other
   volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
   instructions. </p>

<p>The optional constant "align" argument specifies the alignment of the
   operation (that is, the alignment of the memory address). A value of 0 or an
   omitted "align" argument means that the operation has the preferential
   alignment for the target. It is the responsibility of the code emitter to
   ensure that the alignment information is correct. Overestimating the
   alignment results in an undefined behavior. Underestimating the alignment may
   produce less efficient code. An alignment of 1 is always safe.</p>

<h5>Semantics:</h5>
<p>The location of memory pointed to is loaded.  If the value being loaded is of
   scalar type then the number of bytes read does not exceed the minimum number
   of bytes needed to hold all bits of the type.  For example, loading an
   <tt>i24</tt> reads at most three bytes.  When loading a value of a type like
   <tt>i20</tt> with a size that is not an integral number of bytes, the result
   is undefined if the value was not originally written using a store of the
   same type.</p>

<h5>Examples:</h5>
<pre>
  %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
  <a href="#i_store">store</a> i32 3, i32* %ptr                          <i>; yields {void}</i>
  %val = load i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]                   <i>; yields {void}</i>
  volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]          <i>; yields {void}</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>store</tt>' instruction is used to write to memory.</p>

<h5>Arguments:</h5>
<p>There are two arguments to the '<tt>store</tt>' instruction: a value to store
   and an address at which to store it.  The type of the
   '<tt>&lt;pointer&gt;</tt>' operand must be a pointer to
   the <a href="#t_firstclass">first class</a> type of the
   '<tt>&lt;value&gt;</tt>' operand. If the <tt>store</tt> is marked
   as <tt>volatile</tt>, then the optimizer is not allowed to modify the number
   or order of execution of this <tt>store</tt> with other
   volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
   instructions.</p>

<p>The optional constant "align" argument specifies the alignment of the
   operation (that is, the alignment of the memory address). A value of 0 or an
   omitted "align" argument means that the operation has the preferential
   alignment for the target. It is the responsibility of the code emitter to
   ensure that the alignment information is correct. Overestimating the
   alignment results in an undefined behavior. Underestimating the alignment may
   produce less efficient code. An alignment of 1 is always safe.</p>

<h5>Semantics:</h5>
<p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>' at the
   location specified by the '<tt>&lt;pointer&gt;</tt>' operand.  If
   '<tt>&lt;value&gt;</tt>' is of scalar type then the number of bytes written
   does not exceed the minimum number of bytes needed to hold all bits of the
   type.  For example, storing an <tt>i24</tt> writes at most three bytes.  When
   writing a value of a type like <tt>i20</tt> with a size that is not an
   integral number of bytes, it is unspecified what happens to the extra bits
   that do not belong to the type, but they will typically be overwritten.</p>

<h5>Example:</h5>
<pre>
  %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
  store i32 3, i32* %ptr                          <i>; yields {void}</i>
  %val = <a href="#i_load">load</a> i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
</pre>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = getelementptr &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
  &lt;result&gt; = getelementptr inbounds &lt;pty&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. It performs address calculation
   only and does not access memory.</p>

<h5>Arguments:</h5>
<p>The first argument is always a pointer, and forms the basis of the
   calculation. The remaining arguments are indices that indicate which of the
   elements of the aggregate object are indexed. The interpretation of each
   index is dependent on the type being indexed into. The first index always
   indexes the pointer value given as the first argument, the second index
   indexes a value of the type pointed to (not necessarily the value directly
   pointed to, since the first index can be non-zero), etc. The first type
   indexed into must be a pointer value, subsequent types can be arrays, vectors
   and structs. Note that subsequent types being indexed into can never be
   pointers, since that would require loading the pointer before continuing
   calculation.</p>

<p>The type of each index argument depends on the type it is indexing into.
   When indexing into a (optionally packed) structure, only <tt>i32</tt> integer
   <b>constants</b> are allowed.  When indexing into an array, pointer or
   vector, integers of any width are allowed, and they are not required to be
   constant.</p>

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

<div class="doc_code">
<pre>
struct RT {
  char A;
  int B[10][20];
  char C;
};
struct ST {
  int X;
  double Y;
  struct RT Z;
};

int *foo(struct ST *s) {
  return &amp;s[1].Z.B[5][13];
}
</pre>
</div>

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

<div class="doc_code">
<pre>
%RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8  }
%ST = <a href="#namedtypes">type</a> { i32, double, %RT }

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

<h5>Semantics:</h5>
<p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
   type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
   }</tt>' type, a structure.  The second index indexes into the third element
   of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
   i8 }</tt>' type, another structure.  The third index indexes into the second
   element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
   array.  The two dimensions of the array are subscripted into, yielding an
   '<tt>i32</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a
   pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p>

<p>Note that it is perfectly legal to index partially through a structure,
   returning a pointer to an inner element.  Because of this, the LLVM code for
   the given testcase is equivalent to:</p>

<pre>
  define i32* @foo(%ST* %s) {
    %t1 = getelementptr %ST* %s, i32 1                        <i>; yields %ST*:%t1</i>
    %t2 = getelementptr %ST* %t1, i32 0, i32 2                <i>; yields %RT*:%t2</i>
    %t3 = getelementptr %RT* %t2, i32 0, i32 1                <i>; yields [10 x [20 x i32]]*:%t3</i>
    %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  <i>; yields [20 x i32]*:%t4</i>
    %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        <i>; yields i32*:%t5</i>
    ret i32* %t5
  }
</pre>

<p>If the <tt>inbounds</tt> keyword is present, the result value of the
   <tt>getelementptr</tt> is undefined if the base pointer is not an
   <i>in bounds</i> address of an allocated object, or if any of the addresses
   that would be formed by successive addition of the offsets implied by the
   indices to the base address with infinitely precise arithmetic are not an
   <i>in bounds</i> address of that allocated object.
   The <i>in bounds</i> addresses for an allocated object are all the addresses
   that point into the object, plus the address one byte past the end.</p>

<p>If the <tt>inbounds</tt> keyword is not present, the offsets are added to
   the base address with silently-wrapping two's complement arithmetic, and
   the result value of the <tt>getelementptr</tt> may be outside the object
   pointed to by the base pointer. The result value may not necessarily be
   used to access memory though, even if it happens to point into allocated
   storage. See the <a href="#pointeraliasing">Pointer Aliasing Rules</a>
   section for more information.</p>

<p>The getelementptr instruction is often confusing.  For some more insight into
   how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p>

<h5>Example:</h5>
<pre>
    <i>; yields [12 x i8]*:aptr</i>
    %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
    <i>; yields i8*:vptr</i>
    %vptr = getelementptr {i32, &lt;2 x i8&gt;}* %svptr, i64 0, i32 1, i32 1
    <i>; yields i8*:eptr</i>
    %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
    <i>; yields i32*:iptr</i>
    %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="convertops">Conversion Operations</a>
</div>

<div class="doc_text">

<p>The instructions in this category are the conversion instructions (casting)
   which all take a single operand and a type. They perform various bit
   conversions on the operand.</p>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>trunc</tt>' instruction truncates its operand to the
   type <tt>ty2</tt>.</p>

<h5>Arguments:</h5>
<p>The '<tt>trunc</tt>' instruction takes a <tt>value</tt> to trunc, which must
   be an <a href="#t_integer">integer</a> type, and a type that specifies the
   size and type of the result, which must be
   an <a href="#t_integer">integer</a> type. The bit size of <tt>value</tt> must
   be larger than the bit size of <tt>ty2</tt>. Equal sized types are not
   allowed.</p>

<h5>Semantics:</h5>
<p>The '<tt>trunc</tt>' instruction truncates the high order bits
   in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the
   source size must be larger than the destination size, <tt>trunc</tt> cannot
   be a <i>no-op cast</i>.  It will always truncate bits.</p>

<h5>Example:</h5>
<pre>
  %X = trunc i32 257 to i8              <i>; yields i8:1</i>
  %Y = trunc i32 123 to i1              <i>; yields i1:true</i>
  %Z = trunc i32 122 to i1              <i>; yields i1:false</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>zext</tt>' instruction zero extends its operand to type 
   <tt>ty2</tt>.</p>


<h5>Arguments:</h5>
<p>The '<tt>zext</tt>' instruction takes a value to cast, which must be of 
   <a href="#t_integer">integer</a> type, and a type to cast it to, which must
   also be of <a href="#t_integer">integer</a> type. The bit size of the
   <tt>value</tt> must be smaller than the bit size of the destination type, 
   <tt>ty2</tt>.</p>

<h5>Semantics:</h5>
<p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
   bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>

<p>When zero extending from i1, the result will always be either 0 or 1.</p>

<h5>Example:</h5>
<pre>
  %X = zext i32 257 to i64              <i>; yields i64:257</i>
  %Y = zext i1 true to i32              <i>; yields i32:1</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>

<h5>Arguments:</h5>
<p>The '<tt>sext</tt>' instruction takes a value to cast, which must be of 
   <a href="#t_integer">integer</a> type, and a type to cast it to, which must
   also be of <a href="#t_integer">integer</a> type.  The bit size of the
   <tt>value</tt> must be smaller than the bit size of the destination type, 
   <tt>ty2</tt>.</p>

<h5>Semantics:</h5>
<p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
   bit (highest order bit) of the <tt>value</tt> until it reaches the bit size
   of the type <tt>ty2</tt>.</p>

<p>When sign extending from i1, the extension always results in -1 or 0.</p>

<h5>Example:</h5>
<pre>
  %X = sext i8  -1 to i16              <i>; yields i16   :65535</i>
  %Y = sext i1 true to i32             <i>; yields i32:-1</i>
</pre>

</div>

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

<div class="doc_text">

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

<h5>Overview:</h5>
<p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
   <tt>ty2</tt>.</p>

<h5>Arguments:</h5>
<p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
   point</a> value to cast and a <a href="#t_floating">floating point</a> type
   to cast it to. The size of <tt>value</tt> must be larger than the size of
   <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a 
   <i>no-op cast</i>.</p>

<h5>Semantics:</h5>
<p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
   <a href="#t_floating">floating point</a> type to a smaller 
   <a href="#t_floating">floating point</a> type.  If the value cannot fit
   within the destination type, <tt>ty2</tt>, then the results are
   undefined.</p>

<h5>Example:</h5>
<pre>
  %X = fptrunc double 123.0 to float         <i>; yields float:123.0</i>
  %Y = fptrunc double 1.0E+300 to float      <i>; yields undefined</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
   floating point value.</p>

<h5>Arguments:</h5>
<p>The '<tt>fpext</tt>' instruction takes a 
   <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and
   a <a href="#t_floating">floating point</a> type to cast it to. The source
   type must be smaller than the destination type.</p>

<h5>Semantics:</h5>
<p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
   <a href="#t_floating">floating point</a> type to a larger
   <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
   used to make a <i>no-op cast</i> because it always changes bits. Use
   <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>

<h5>Example:</h5>
<pre>
  %X = fpext float 3.1415 to double        <i>; yields double:3.1415</i>
  %Y = fpext float 1.0 to float            <i>; yields float:1.0 (no-op)</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its
   unsigned integer equivalent of type <tt>ty2</tt>.</p>

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

<h5>Semantics:</h5>
<p>The '<tt>fptoui</tt>' instruction converts its 
   <a href="#t_floating">floating point</a> operand into the nearest (rounding
   towards zero) unsigned integer value. If the value cannot fit
   in <tt>ty2</tt>, the results are undefined.</p>

<h5>Example:</h5>
<pre>
  %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
  %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
  %Z = fptoui float 1.04E+17 to i8     <i>; yields undefined:1</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>fptosi</tt>' instruction converts 
   <a href="#t_floating">floating point</a> <tt>value</tt> to
   type <tt>ty2</tt>.</p>

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

<h5>Semantics:</h5>
<p>The '<tt>fptosi</tt>' instruction converts its 
   <a href="#t_floating">floating point</a> operand into the nearest (rounding
   towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
   the results are undefined.</p>

<h5>Example:</h5>
<pre>
  %X = fptosi double -123.0 to i32      <i>; yields i32:-123</i>
  %Y = fptosi float 1.0E-247 to i1      <i>; yields undefined:1</i>
  %Z = fptosi float 1.04E+17 to i8      <i>; yields undefined:1</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
   integer and converts that value to the <tt>ty2</tt> type.</p>

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

<h5>Semantics:</h5>
<p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
   integer quantity and converts it to the corresponding floating point
   value. If the value cannot fit in the floating point value, the results are
   undefined.</p>

<h5>Example:</h5>
<pre>
  %X = uitofp i32 257 to float         <i>; yields float:257.0</i>
  %Y = uitofp i8 -1 to double          <i>; yields double:255.0</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer
   and converts that value to the <tt>ty2</tt> type.</p>

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

<h5>Semantics:</h5>
<p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer
   quantity and converts it to the corresponding floating point value. If the
   value cannot fit in the floating point value, the results are undefined.</p>

<h5>Example:</h5>
<pre>
  %X = sitofp i32 257 to float         <i>; yields float:257.0</i>
  %Y = sitofp i8 -1 to double          <i>; yields double:-1.0</i>
</pre>

</div>

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

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

<h5>Overview:</h5>
<p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
   the integer type <tt>ty2</tt>.</p>

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

<h5>Semantics:</h5>
<p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
   <tt>ty2</tt> by interpreting the pointer value as an integer and either
   truncating or zero extending that value to the size of the integer type. If
   <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
   <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
   are the same size, then nothing is done (<i>no-op cast</i>) other than a type
   change.</p>

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

</div>

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

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

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

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

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

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

</div>

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

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

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

<h5>Arguments:</h5>
<p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a
   non-aggregate first class value, and a type to cast it to, which must also be
   a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes
   of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be
   identical. If the source type is a pointer, the destination type must also be
   a pointer.  This instruction supports bitwise conversion of vectors to
   integers and to vectors of other types (as long as they have the same
   size).</p>

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

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>

<div class="doc_text">

<p>The instructions in this category are the "miscellaneous" instructions, which
   defy better classification.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = icmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {i1} or {&lt;N x i1&gt;}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of
   boolean values based on comparison of its two integer, integer vector, or
   pointer operands.</p>

<h5>Arguments:</h5>
<p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
   the condition code indicating the kind of comparison to perform. It is not a
   value, just a keyword. The possible condition code are:</p>

<ol>
  <li><tt>eq</tt>: equal</li>
  <li><tt>ne</tt>: not equal </li>
  <li><tt>ugt</tt>: unsigned greater than</li>
  <li><tt>uge</tt>: unsigned greater or equal</li>
  <li><tt>ult</tt>: unsigned less than</li>
  <li><tt>ule</tt>: unsigned less or equal</li>
  <li><tt>sgt</tt>: signed greater than</li>
  <li><tt>sge</tt>: signed greater or equal</li>
  <li><tt>slt</tt>: signed less than</li>
  <li><tt>sle</tt>: signed less or equal</li>
</ol>

<p>The remaining two arguments must be <a href="#t_integer">integer</a> or
   <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a>
   typed.  They must also be identical types.</p>

<h5>Semantics:</h5>
<p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the
   condition code given as <tt>cond</tt>. The comparison performed always yields
   either an <a href="#t_integer"><tt>i1</tt></a> or vector of <tt>i1</tt>
   result, as follows:</p>

<ol>
  <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal, 
      <tt>false</tt> otherwise. No sign interpretation is necessary or
      performed.</li>

  <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal, 
      <tt>false</tt> otherwise. No sign interpretation is necessary or
      performed.</li>

  <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
      <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>

  <li><tt>uge</tt>: interprets the operands as unsigned values and yields
      <tt>true</tt> if <tt>op1</tt> is greater than or equal
      to <tt>op2</tt>.</li>

  <li><tt>ult</tt>: interprets the operands as unsigned values and yields
      <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>

  <li><tt>ule</tt>: interprets the operands as unsigned values and yields
      <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>

  <li><tt>sgt</tt>: interprets the operands as signed values and yields
      <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>

  <li><tt>sge</tt>: interprets the operands as signed values and yields
      <tt>true</tt> if <tt>op1</tt> is greater than or equal
      to <tt>op2</tt>.</li>

  <li><tt>slt</tt>: interprets the operands as signed values and yields
      <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>

  <li><tt>sle</tt>: interprets the operands as signed values and yields
      <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
</ol>

<p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
   values are compared as if they were integers.</p>

<p>If the operands are integer vectors, then they are compared element by
   element. The result is an <tt>i1</tt> vector with the same number of elements
   as the values being compared.  Otherwise, the result is an <tt>i1</tt>.</p>

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

<p>Note that the code generator does not yet support vector types with
   the <tt>icmp</tt> instruction.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = fcmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;     <i>; yields {i1} or {&lt;N x i1&gt;}:result</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean
   values based on comparison of its operands.</p>

<p>If the operands are floating point scalars, then the result type is a boolean
(<a href="#t_integer"><tt>i1</tt></a>).</p>

<p>If the operands are floating point vectors, then the result type is a vector
   of boolean with the same number of elements as the operands being
   compared.</p>

<h5>Arguments:</h5>
<p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
   the condition code indicating the kind of comparison to perform. It is not a
   value, just a keyword. The possible condition code are:</p>

<ol>
  <li><tt>false</tt>: no comparison, always returns false</li>
  <li><tt>oeq</tt>: ordered and equal</li>
  <li><tt>ogt</tt>: ordered and greater than </li>
  <li><tt>oge</tt>: ordered and greater than or equal</li>
  <li><tt>olt</tt>: ordered and less than </li>
  <li><tt>ole</tt>: ordered and less than or equal</li>
  <li><tt>one</tt>: ordered and not equal</li>
  <li><tt>ord</tt>: ordered (no nans)</li>
  <li><tt>ueq</tt>: unordered or equal</li>
  <li><tt>ugt</tt>: unordered or greater than </li>
  <li><tt>uge</tt>: unordered or greater than or equal</li>
  <li><tt>ult</tt>: unordered or less than </li>
  <li><tt>ule</tt>: unordered or less than or equal</li>
  <li><tt>une</tt>: unordered or not equal</li>
  <li><tt>uno</tt>: unordered (either nans)</li>
  <li><tt>true</tt>: no comparison, always returns true</li>
</ol>

<p><i>Ordered</i> means that neither operand is a QNAN while
   <i>unordered</i> means that either operand may be a QNAN.</p>

<p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either
   a <a href="#t_floating">floating point</a> type or
   a <a href="#t_vector">vector</a> of floating point type.  They must have
   identical types.</p>

<h5>Semantics:</h5>
<p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
   according to the condition code given as <tt>cond</tt>.  If the operands are
   vectors, then the vectors are compared element by element.  Each comparison
   performed always yields an <a href="#t_integer">i1</a> result, as
   follows:</p>

<ol>
  <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>

  <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
      <tt>op1</tt> is equal to <tt>op2</tt>.</li>

  <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
      <tt>op1</tt> is greather than <tt>op2</tt>.</li>

  <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
      <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>

  <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
      <tt>op1</tt> is less than <tt>op2</tt>.</li>

  <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
      <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>

  <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
      <tt>op1</tt> is not equal to <tt>op2</tt>.</li>

  <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>

  <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is equal to <tt>op2</tt>.</li>

  <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is greater than <tt>op2</tt>.</li>

  <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>

  <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is less than <tt>op2</tt>.</li>

  <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>

  <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or 
      <tt>op1</tt> is not equal to <tt>op2</tt>.</li>

  <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>

  <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
</ol>

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

<p>Note that the code generator does not yet support vector types with
   the <tt>fcmp</tt> instruction.</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;], ...
</pre>

<h5>Overview:</h5>
<p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in the
   SSA graph representing the function.</p>

<h5>Arguments:</h5>
<p>The type of the incoming values is specified with the first type field. After
   this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
   one pair for each predecessor basic block of the current block.  Only values
   of <a href="#t_firstclass">first class</a> type may be used as the value
   arguments to the PHI node.  Only labels may be used as the label
   arguments.</p>

<p>There must be no non-phi instructions between the start of a basic block and
   the PHI instructions: i.e. PHI instructions must be first in a basic
   block.</p>

<p>For the purposes of the SSA form, the use of each incoming value is deemed to
   occur on the edge from the corresponding predecessor block to the current
   block (but after any definition of an '<tt>invoke</tt>' instruction's return
   value on the same edge).</p>

<h5>Semantics:</h5>
<p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
   specified by the pair corresponding to the predecessor basic block that
   executed just prior to the current block.</p>

<h5>Example:</h5>
<pre>
Loop:       ; Infinite loop that counts from 0 on up...
  %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
  %nextindvar = add i32 %indvar, 1
  br label %Loop
</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 <i>selty</i> &lt;cond&gt;, &lt;ty&gt; &lt;val1&gt;, &lt;ty&gt; &lt;val2&gt;             <i>; yields ty</i>

  <i>selty</i> is either i1 or {&lt;N x i1&gt;}
</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 an 'i1' value or a vector of 'i1'
   values indicating the condition, and two values of the
   same <a href="#t_firstclass">first class</a> type.  If the val1/val2 are
   vectors and the condition is a scalar, then entire vectors are selected, not
   individual elements.</p>

<h5>Semantics:</h5>
<p>If the condition is an i1 and it evaluates to 1, the instruction returns the
   first value argument; otherwise, it returns the second value argument.</p>

<p>If the condition is a vector of i1, then the value arguments must be vectors
   of the same size, and the selection is done element by element.</p>

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

<p>Note that the code generator does not yet support conditions
   with vector type.</p>

</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>] [<a href="#paramattrs">ret attrs</a>] &lt;ty&gt; [&lt;fnty&gt;*] &lt;fnptrval&gt;(&lt;function args&gt;) [<a href="#fnattrs">fn attrs</a>]
</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>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>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>The optional <a href="#paramattrs">Parameter Attributes</a> list for
      return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
      '<tt>inreg</tt>' attributes are valid here.</li>

  <li>'<tt>ty</tt>': the type of the call instruction itself which is also the
      type of the return value.  Functions that return no value are marked
      <tt><a href="#t_void">void</a></tt>.</li>

  <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value
      being invoked.  The argument types must match the types implied by this
      signature.  This type can be omitted if the function is not varargs and if
      the function type does not return a pointer to a function.</li>

  <li>'<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.</li>

  <li>'<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.</li>

  <li>The optional <a href="#fnattrs">function attributes</a> list. Only
      '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
      '<tt>readnone</tt>' attributes are valid here.</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.</p>

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

  %struct.A = type { i32, i8 }
  %r = call %struct.A @foo()                        <i>; yields { 32, i8 }</i>
  %gr = extractvalue %struct.A %r, 0                <i>; yields i32</i>
  %gr1 = extractvalue %struct.A %r, 1               <i>; yields i8</i>
  %Z = call void @foo() noreturn                    <i>; indicates that %foo never returns normally</i>
  %ZZ = call zeroext i32 @bar()                     <i>; Return value is %zero extended</i>
</pre>

<p>llvm treats calls to some functions with names and arguments that match the
standard C99 library as being the C99 library functions, and may perform
optimizations or generate code for them under that assumption.  This is
something we'd like to change in the future to provide better support for
freestanding environments and non-C-based langauges.</p>

</div>

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

<div class="doc_text">

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

<h5>Overview:</h5>
<p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through
   the "variable argument" area of a function call.  It is used to implement the
   <tt>va_arg</tt> macro in C.</p>

<h5>Arguments:</h5>
<p>This instruction takes a <tt>va_list*</tt> value and the type of the
   argument. It returns a value of the specified argument type and increments
   the <tt>va_list</tt> to point to the next argument.  The actual type
   of <tt>va_list</tt> is target specific.</p>

<h5>Semantics:</h5>
<p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type
   from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point
   to the next argument.  For more information, see the variable argument
   handling <a href="#int_varargs">Intrinsic Functions</a>.</p>

<p>It is legal for this instruction to be called in a function which does not
   take a variable number of arguments, for example, the <tt>vfprintf</tt>
   function.</p>

<p><tt>va_arg</tt> is an LLVM instruction instead of
   an <a href="#intrinsics">intrinsic function</a> because it takes a type as an
   argument.</p>

<h5>Example:</h5>
<p>See the <a href="#int_varargs">variable argument processing</a> section.</p>

<p>Note that the code generator does not yet fully support va_arg on many
   targets. Also, it does not currently support va_arg with aggregate types on
   any target.</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 intrinsics represent an extension mechanism for
   the LLVM language that does not require changing all of the transformations
   in LLVM when adding to the language (or the bitcode reader/writer, the
   parser, etc...).</p>

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

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

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

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

</div>

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

<div class="doc_text">

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

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

<p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
   instruction and the variable argument handling intrinsic functions are
   used.</p>

<div class="doc_code">
<pre>
define i32 @test(i32 %X, ...) {
  ; Initialize variable argument processing
  %ap = alloca i8*
  %ap2 = bitcast i8** %ap to i8*
  call void @llvm.va_start(i8* %ap2)

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

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

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

declare void @llvm.va_start(i8*)
declare void @llvm.va_copy(i8*, i8*)
declare void @llvm.va_end(i8*)
</pre>
</div>

</div>

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


<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.va_start(i8* &lt;arglist&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*&lt;arglist&gt;</tt>
   for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p>

<h5>Arguments:</h5>
<p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.va_end(i8* &lt;arglist&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*&lt;arglist&gt;</tt>,
   which has been initialized previously
   with <tt><a href="#int_va_start">llvm.va_start</a></tt>
   or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

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

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

</div>

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

<div class="doc_text">

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

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

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

</div>

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

<div class="doc_text">

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

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

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

</div>

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any
   integer bit width. Not all targets support all bit widths however.</p>

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

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

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

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
   width. Not all targets support all bit widths however.</p>

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

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

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

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
   width. Not all targets support all bit widths however.</p>

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

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

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

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any
   floating point or vector of floating point type. Not all targets support all
   types however.</p>

<pre>
  declare float     @llvm.sqrt.f32(float %Val)
  declare double    @llvm.sqrt.f64(double %Val)
  declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
  declare fp128     @llvm.sqrt.f128(fp128 %Val)
  declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
</pre>

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any
   floating point or vector of floating point type. Not all targets support all
   types however.</p>

<pre>
  declare float     @llvm.powi.f32(float  %Val, i32 %power)
  declare double    @llvm.powi.f64(double %Val, i32 %power)
  declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
  declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
  declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
</pre>

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any
   floating point or vector of floating point type. Not all targets support all
   types however.</p>

<pre>
  declare float     @llvm.sin.f32(float  %Val)
  declare double    @llvm.sin.f64(double %Val)
  declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
  declare fp128     @llvm.sin.f128(fp128 %Val)
  declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
</pre>

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any
   floating point or vector of floating point type. Not all targets support all
   types however.</p>

<pre>
  declare float     @llvm.cos.f32(float  %Val)
  declare double    @llvm.cos.f64(double %Val)
  declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
  declare fp128     @llvm.cos.f128(fp128 %Val)
  declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
</pre>

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

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

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any
   floating point or vector of floating point type. Not all targets support all
   types however.</p>

<pre>
  declare float     @llvm.pow.f32(float  %Val, float %Power)
  declare double    @llvm.pow.f64(double %Val, double %Power)
  declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
  declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
  declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
</pre>

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

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

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

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_manip">Bit Manipulation Intrinsics</a>
</div>

<div class="doc_text">

<p>LLVM provides intrinsics for a few important bit manipulation operations.
   These allow efficient code generation for some algorithms.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic function. You can use bswap on any integer
   type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p>

<pre>
  declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
  declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
  declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
   values with an even number of bytes (positive multiple of 16 bits).  These
   are useful for performing operations on data that is not in the target's
   native byte order.</p>

<h5>Semantics:</h5>
<p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
   and low byte of the input i16 swapped.  Similarly,
   the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four
   bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1,
   2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order.
   The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics
   extend this concept to additional even-byte lengths (6 bytes, 8 bytes and
   more, respectively).</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
   width. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.ctpop.i8(i8  &lt;src&gt;)
  declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
  declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
  declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
  declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set
   in a value.</p>

<h5>Arguments:</h5>
<p>The only argument is the value to be counted.  The argument may be of any
   integer type.  The return type must match the argument type.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
   integer bit width. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.ctlz.i8 (i8  &lt;src&gt;)
  declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
  declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
  declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
  declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
   leading zeros in a variable.</p>

<h5>Arguments:</h5>
<p>The only argument is the value to be counted.  The argument may be of any
   integer type. The return type must match the argument type.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant)
   zeros in a variable.  If the src == 0 then the result is the size in bits of
   the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
   integer bit width. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
  declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
  declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
  declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
  declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of
   trailing zeros.</p>

<h5>Arguments:</h5>
<p>The only argument is the value to be counted.  The argument may be of any
   integer type.  The return type must match the argument type.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant)
   zeros in a variable.  If the src == 0 then the result is the size in bits of
   the type of src.  For example, <tt>llvm.cttz(2) = 1</tt>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
</div>

<div class="doc_text">

<p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
   a signed addition of the two arguments, and indicate whether an overflow
   occurred during the signed summation.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo signed addition.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
   a signed addition of the two variables. They return a structure &mdash; the
   first element of which is the signed summation, and the second element of
   which is a bit specifying if the signed summation resulted in an
   overflow.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %overflow, label %normal
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
   an unsigned addition of the two arguments, and indicate whether a carry
   occurred during the unsigned summation.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo unsigned addition.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
   an unsigned addition of the two arguments. They return a structure &mdash;
   the first element of which is the sum, and the second element of which is a
   bit specifying if the unsigned summation resulted in a carry.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %carry, label %normal
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
   a signed subtraction of the two arguments, and indicate whether an overflow
   occurred during the signed subtraction.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo signed subtraction.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
   a signed subtraction of the two arguments. They return a structure &mdash;
   the first element of which is the subtraction, and the second element of
   which is a bit specifying if the signed subtraction resulted in an
   overflow.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %overflow, label %normal
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
   an unsigned subtraction of the two arguments, and indicate whether an
   overflow occurred during the unsigned subtraction.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo unsigned subtraction.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
   an unsigned subtraction of the two arguments. They return a structure &mdash;
   the first element of which is the subtraction, and the second element of
   which is a bit specifying if the unsigned subtraction resulted in an
   overflow.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %overflow, label %normal
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>

<p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
   a signed multiplication of the two arguments, and indicate whether an
   overflow occurred during the signed multiplication.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo signed multiplication.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
   a signed multiplication of the two arguments. They return a structure &mdash;
   the first element of which is the multiplication, and the second element of
   which is a bit specifying if the signed multiplication resulted in an
   overflow.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %overflow, label %normal
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt>' Intrinsics</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt>
   on any integer bit width.</p>

<pre>
  declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
  declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
  declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
   a unsigned multiplication of the two arguments, and indicate whether an
   overflow occurred during the unsigned multiplication.</p>

<h5>Arguments:</h5>
<p>The arguments (%a and %b) and the first element of the result structure may
   be of integer types of any bit width, but they must have the same bit
   width. The second element of the result structure must be of
   type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
   undergo unsigned multiplication.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
   an unsigned multiplication of the two arguments. They return a structure
   &mdash; the first element of which is the multiplication, and the second
   element of which is a bit specifying if the unsigned multiplication resulted
   in an overflow.</p>

<h5>Examples:</h5>
<pre>
  %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
  %sum = extractvalue {i32, i1} %res, 0
  %obit = extractvalue {i32, i1} %res, 1
  br i1 %obit, label %overflow, label %normal
</pre>

</div>

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

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

</div>

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

<div class="doc_text">

<p>This intrinsic makes it possible to excise one parameter, marked with
   the <tt>nest</tt> attribute, from a function.  The result is a callable
   function pointer lacking the nest parameter - the caller does not need to
   provide a value for it.  Instead, the value to use is stored in advance in a
   "trampoline", a block of memory usually allocated on the stack, which also
   contains code to splice the nest value into the argument list.  This is used
   to implement the GCC nested function address extension.</p>

<p>For example, if the function is
   <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
   pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
   follows:</p>

<div class="doc_code">
<pre>
  %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
  %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
  %p = call i8* @llvm.init.trampoline( i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval )
  %fp = bitcast i8* %p to i32 (i32, i32)*
</pre>
</div>

<p>The call <tt>%val = call i32 %fp( i32 %x, i32 %y )</tt> is then equivalent
   to <tt>%val = call i32 %f( i8* %nval, i32 %x, i32 %y )</tt>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
</pre>

<h5>Overview:</h5>
<p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a
   function pointer suitable for executing it.</p>

<h5>Arguments:</h5>
<p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
   pointers.  The <tt>tramp</tt> argument must point to a sufficiently large and
   sufficiently aligned block of memory; this memory is written to by the
   intrinsic.  Note that the size and the alignment are target-specific - LLVM
   currently provides no portable way of determining them, so a front-end that
   generates this intrinsic needs to have some target-specific knowledge.
   The <tt>func</tt> argument must hold a function bitcast to
   an <tt>i8*</tt>.</p>

<h5>Semantics:</h5>
<p>The block of memory pointed to by <tt>tramp</tt> is filled with target
   dependent code, turning it into a function.  A pointer to this function is
   returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate
   function pointer type</a> before being called.  The new function's signature
   is the same as that of <tt>func</tt> with any arguments marked with
   the <tt>nest</tt> attribute removed.  At most one such <tt>nest</tt> argument
   is allowed, and it must be of pointer type.  Calling the new function is
   equivalent to calling <tt>func</tt> with the same argument list, but
   with <tt>nval</tt> used for the missing <tt>nest</tt> argument.  If, after
   calling <tt>llvm.init.trampoline</tt>, the memory pointed to
   by <tt>tramp</tt> is modified, then the effect of any later call to the
   returned function pointer is undefined.</p>

</div>

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

<div class="doc_text">

<p>These intrinsic functions expand the "universal IR" of LLVM to represent
   hardware constructs for atomic operations and memory synchronization.  This
   provides an interface to the hardware, not an interface to the programmer. It
   is aimed at a low enough level to allow any programming models or APIs
   (Application Programming Interfaces) which need atomic behaviors to map
   cleanly onto it. It is also modeled primarily on hardware behavior. Just as
   hardware provides a "universal IR" for source languages, it also provides a
   starting point for developing a "universal" atomic operation and
   synchronization IR.</p>

<p>These do <em>not</em> form an API such as high-level threading libraries,
   software transaction memory systems, atomic primitives, and intrinsic
   functions as found in BSD, GNU libc, atomic_ops, APR, and other system and
   application libraries.  The hardware interface provided by LLVM should allow
   a clean implementation of all of these APIs and parallel programming models.
   No one model or paradigm should be selected above others unless the hardware
   itself ubiquitously does so.</p>

</div>

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

<h5>Overview:</h5>
<p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between
   specific pairs of memory access types.</p>

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

<ul>
  <li><tt>ll</tt>: load-load barrier</li>
  <li><tt>ls</tt>: load-store barrier</li>
  <li><tt>sl</tt>: store-load barrier</li>
  <li><tt>ss</tt>: store-store barrier</li>
  <li><tt>device</tt>: barrier applies to device and uncached memory also.</li>
</ul>

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

<ul>
  <li><tt>ll</tt>: All loads before the barrier must complete before any load
      after the barrier begins.</li>
  <li><tt>ls</tt>: All loads before the barrier must complete before any 
      store after the barrier begins.</li>
  <li><tt>ss</tt>: All stores before the barrier must complete before any 
      store after the barrier begins.</li>
  <li><tt>sl</tt>: All stores before the barrier must complete before any 
      load after the barrier begins.</li>
</ul>

<p>These semantics are applied with a logical "and" behavior when more than one
   is enabled in a single memory barrier intrinsic.</p>

<p>Backends may implement stronger barriers than those requested when they do
   not support as fine grained a barrier as requested.  Some architectures do
   not need all types of barriers and on such architectures, these become
   noops.</p>

<h5>Example:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 4, %ptr

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on
   any integer bit width and for different address spaces. Not all targets
   support all bit widths however.</p>

<pre>
  declare i8 @llvm.atomic.cmp.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt; )
  declare i16 @llvm.atomic.cmp.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt; )
  declare i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt; )
  declare i64 @llvm.atomic.cmp.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt; )
</pre>

<h5>Overview:</h5>
<p>This loads a value in memory and compares it to a given value. If they are
   equal, it stores a new value into the memory.</p>

<h5>Arguments:</h5>
<p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result
   as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the
   same bit width. The <tt>ptr</tt> argument must be a pointer to a value of
   this integer type. While any bit width integer may be used, targets may only
   lower representations they support in hardware.</p>

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

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 4, %ptr

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

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

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

</div>

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

<p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any
   integer bit width. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.atomic.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;val&gt; )
  declare i16 @llvm.atomic.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;val&gt; )
  declare i32 @llvm.atomic.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;val&gt; )
  declare i64 @llvm.atomic.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;val&gt; )
</pre>

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

<h5>Arguments:</h5>
<p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both
  the <tt>val</tt> argument and the result must be integers of the same bit
  width.  The first argument, <tt>ptr</tt>, must be a pointer to a value of this
  integer type. The targets may only lower integer representations they
  support.</p>

<h5>Semantics:</h5>
<p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and
   stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the
   equivalent of an atomic swap operation within the SSA framework.</p>

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 4, %ptr

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

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

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

</div>

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

</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on
   any integer bit width. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.atomic.load.add.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.add.i16..p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.add.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.add.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

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

<h5>Arguments:</h5>
<p>The intrinsic takes two arguments, the first a pointer to an integer value
   and the second an integer value. The result is also an integer value. These
   integer types can have any bit width, but they must all have the same bit
   width. The targets may only lower integer representations they support.</p>

<h5>Semantics:</h5>
<p>This intrinsic does a series of operations atomically. It first loads the
   value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result
   to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p>

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 4, %ptr
%result1  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 4 )
                                <i>; yields {i32}:result1 = 4</i>
%result2  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 2 )
                                <i>; yields {i32}:result2 = 8</i>
%result3  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 5 )
                                <i>; yields {i32}:result3 = 10</i>
%memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
</pre>

</div>

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

</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on
   any integer bit width and for different address spaces. Not all targets
   support all bit widths however.</p>

<pre>
  declare i8 @llvm.atomic.load.sub.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.sub.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.sub.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.sub.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

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

<h5>Arguments:</h5>
<p>The intrinsic takes two arguments, the first a pointer to an integer value
   and the second an integer value. The result is also an integer value. These
   integer types can have any bit width, but they must all have the same bit
   width. The targets may only lower integer representations they support.</p>

<h5>Semantics:</h5>
<p>This intrinsic does a series of operations atomically. It first loads the
   value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the
   result to <tt>ptr</tt>. It yields the original value stored
   at <tt>ptr</tt>.</p>

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 8, %ptr
%result1  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 4 )
                                <i>; yields {i32}:result1 = 8</i>
%result2  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 2 )
                                <i>; yields {i32}:result2 = 4</i>
%result3  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 5 )
                                <i>; yields {i32}:result3 = 2</i>
%memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = -3</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_atomic_load_and">'<tt>llvm.atomic.load.and.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_nand">'<tt>llvm.atomic.load.nand.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_or">'<tt>llvm.atomic.load.or.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_xor">'<tt>llvm.atomic.load.xor.*</tt>' Intrinsic</a><br>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>These are overloaded intrinsics. You can
  use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>,
  <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer
  bit width and for different address spaces. Not all targets support all bit
  widths however.</p>

<pre>
  declare i8 @llvm.atomic.load.and.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.and.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.and.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.and.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.or.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.or.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.or.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.or.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.nand.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.nand.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.nand.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.nand.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.xor.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.xor.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.xor.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.xor.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<h5>Overview:</h5>
<p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to
   the value stored in memory at <tt>ptr</tt>. It yields the original value
   at <tt>ptr</tt>.</p>

<h5>Arguments:</h5>
<p>These intrinsics take two arguments, the first a pointer to an integer value
   and the second an integer value. The result is also an integer value. These
   integer types can have any bit width, but they must all have the same bit
   width. The targets may only lower integer representations they support.</p>

<h5>Semantics:</h5>
<p>These intrinsics does a series of operations atomically. They first load the
   value stored at <tt>ptr</tt>. They then do the bitwise
   operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the
   original value stored at <tt>ptr</tt>.</p>

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 0x0F0F, %ptr
%result0  = call i32 @llvm.atomic.load.nand.i32.p0i32( i32* %ptr, i32 0xFF )
                                <i>; yields {i32}:result0 = 0x0F0F</i>
%result1  = call i32 @llvm.atomic.load.and.i32.p0i32( i32* %ptr, i32 0xFF )
                                <i>; yields {i32}:result1 = 0xFFFFFFF0</i>
%result2  = call i32 @llvm.atomic.load.or.i32.p0i32( i32* %ptr, i32 0F )
                                <i>; yields {i32}:result2 = 0xF0</i>
%result3  = call i32 @llvm.atomic.load.xor.i32.p0i32( i32* %ptr, i32 0F )
                                <i>; yields {i32}:result3 = FF</i>
%memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = F0</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_atomic_load_max">'<tt>llvm.atomic.load.max.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_min">'<tt>llvm.atomic.load.min.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_umax">'<tt>llvm.atomic.load.umax.*</tt>' Intrinsic</a><br>
  <a name="int_atomic_load_umin">'<tt>llvm.atomic.load.umin.*</tt>' Intrinsic</a><br>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>,
   <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and
   <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different
   address spaces. Not all targets support all bit widths however.</p>

<pre>
  declare i8 @llvm.atomic.load.max.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.max.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.max.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.max.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.min.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.min.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.min.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.min.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.umax.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.umax.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.umax.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.umax.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<pre>
  declare i8 @llvm.atomic.load.umin.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
  declare i16 @llvm.atomic.load.umin.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
  declare i32 @llvm.atomic.load.umin.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
  declare i64 @llvm.atomic.load.umin.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
</pre>

<h5>Overview:</h5>
<p>These intrinsics takes the signed or unsigned minimum or maximum of 
   <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the
   original value at <tt>ptr</tt>.</p>

<h5>Arguments:</h5>
<p>These intrinsics take two arguments, the first a pointer to an integer value
   and the second an integer value. The result is also an integer value. These
   integer types can have any bit width, but they must all have the same bit
   width. The targets may only lower integer representations they support.</p>

<h5>Semantics:</h5>
<p>These intrinsics does a series of operations atomically. They first load the
   value stored at <tt>ptr</tt>. They then do the signed or unsigned min or
   max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They
   yield the original value stored at <tt>ptr</tt>.</p>

<h5>Examples:</h5>
<pre>
%mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
%ptr      = bitcast i8* %mallocP to i32*
            store i32 7, %ptr
%result0  = call i32 @llvm.atomic.load.min.i32.p0i32( i32* %ptr, i32 -2 )
                                <i>; yields {i32}:result0 = 7</i>
%result1  = call i32 @llvm.atomic.load.max.i32.p0i32( i32* %ptr, i32 8 )
                                <i>; yields {i32}:result1 = -2</i>
%result2  = call i32 @llvm.atomic.load.umin.i32.p0i32( i32* %ptr, i32 10 )
                                <i>; yields {i32}:result2 = 8</i>
%result3  = call i32 @llvm.atomic.load.umax.i32.p0i32( i32* %ptr, i32 30 )
                                <i>; yields {i32}:result3 = 8</i>
%memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 30</i>
</pre>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_memorymarkers">Memory Use Markers</a>
</div>

<div class="doc_text">

<p>This class of intrinsics exists to information about the lifetime of memory
   objects and ranges where variables are immutable.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.lifetime.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.lifetime.start</tt>' intrinsic specifies the start of a memory
   object's lifetime.</p>

<h5>Arguments:</h5>
<p>The first argument is a constant integer representing the size of the
   object, or -1 if it is variable sized.  The second argument is a pointer to
   the object.</p>

<h5>Semantics:</h5>
<p>This intrinsic indicates that before this point in the code, the value of the
   memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
   never be used and has an undefined value.  A load from the pointer that
   precedes this intrinsic can be replaced with
   <tt>'<a href="#undefvalues">undef</a>'</tt>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.lifetime.end(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.lifetime.end</tt>' intrinsic specifies the end of a memory
   object's lifetime.</p>

<h5>Arguments:</h5>
<p>The first argument is a constant integer representing the size of the
   object, or -1 if it is variable sized.  The second argument is a pointer to
   the object.</p>

<h5>Semantics:</h5>
<p>This intrinsic indicates that after this point in the code, the value of the
   memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
   never be used and has an undefined value.  Any stores into the memory object
   following this intrinsic may be removed as dead.

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare {}* @llvm.invariant.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;) readonly
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.invariant.start</tt>' intrinsic specifies that the contents of
   a memory object will not change.</p>

<h5>Arguments:</h5>
<p>The first argument is a constant integer representing the size of the
   object, or -1 if it is variable sized.  The second argument is a pointer to
   the object.</p>

<h5>Semantics:</h5>
<p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses
   the return value, the referenced memory location is constant and
   unchanging.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.invariant.end({}* &lt;start&gt;, i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.invariant.end</tt>' intrinsic specifies that the contents of
   a memory object are mutable.</p>

<h5>Arguments:</h5>
<p>The first argument is the matching <tt>llvm.invariant.start</tt> intrinsic.
   The second argument is a constant integer representing the size of the
   object, or -1 if it is variable sized and the third argument is a pointer
   to the object.</p>

<h5>Semantics:</h5>
<p>This intrinsic indicates that the memory is mutable again.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_general">General Intrinsics</a>
</div>

<div class="doc_text">

<p>This class of intrinsics is designed to be generic and has no specific
   purpose.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p>

<h5>Arguments:</h5>
<p>The first argument is a pointer to a value, the second is a pointer to a
   global string, the third is a pointer to a global string which is the source
   file name, and the last argument is the line number.</p>

<h5>Semantics:</h5>
<p>This intrinsic allows annotation of local variables with arbitrary strings.
   This can be useful for special purpose optimizations that want to look for
   these annotations.  These have no other defined use, they are ignored by code
   generation and optimization.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on
   any integer bit width.</p>

<pre>
  declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
  declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.annotation</tt>' intrinsic.</p>

<h5>Arguments:</h5>
<p>The first argument is an integer value (result of some expression), the
   second is a pointer to a global string, the third is a pointer to a global
   string which is the source file name, and the last argument is the line
   number.  It returns the value of the first argument.</p>

<h5>Semantics:</h5>
<p>This intrinsic allows annotations to be put on arbitrary expressions with
   arbitrary strings.  This can be useful for special purpose optimizations that
   want to look for these annotations.  These have no other defined use, they
   are ignored by code generation and optimization.</p>

</div>

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

<div class="doc_text">

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

<h5>Overview:</h5>
<p>The '<tt>llvm.trap</tt>' intrinsic.</p>

<h5>Arguments:</h5>
<p>None.</p>

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

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void @llvm.stackprotector( i8* &lt;guard&gt;, i8** &lt;slot&gt; )
</pre>

<h5>Overview:</h5>
<p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and
   stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to
   ensure that it is placed on the stack before local variables.</p>

<h5>Arguments:</h5>
<p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer
   arguments. The first argument is the value loaded from the stack
   guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt>
   that has enough space to hold the value of the guard.</p>

<h5>Semantics:</h5>
<p>This intrinsic causes the prologue/epilogue inserter to force the position of
   the <tt>AllocaInst</tt> stack slot to be before local variables on the
   stack. This is to ensure that if a local variable on the stack is
   overwritten, it will destroy the value of the guard. When the function exits,
   the guard on the stack is checked against the original guard. If they're
   different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
   function.</p>

</div>

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

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare i32 @llvm.objectsize.i32( i8* &lt;ptr&gt;, i32 &lt;type&gt; )
  declare i64 @llvm.objectsize.i64( i8* &lt;ptr&gt;, i32 &lt;type&gt; )
</pre>

<h5>Overview:</h5>
<p>The <tt>llvm.objectsize</tt> intrinsic returns the constant number of bytes
   from <tt>ptr</tt> to the end of the object <tt>ptr</tt> points to if it
   can deduce this at compile time.  If there are any side-effects in evaluating
   the argument or it cannot deduce which objects <tt>ptr</tt> points to at compile
   time the intrinsic returns <tt>(size_t) -1</tt> for <tt>type</tt> 0
   or 1 and <tt>(size_t) 0</tt> for <tt>type</tt> 2 or 3.</p>

<h5>Arguments:</h5>
<p>The <tt>llvm.objectsize</tt> intrinsic takes two arguments.  The first
   argument is a pointer to the object <tt>ptr</tt> and an integer <tt>type</tt>.
   <tt>type</tt> is an integer ranging from 0 to 3. The lsb corresponds to
   a return value based on whole objects, the second bit whether or not we
   return the maximum or minimum remaining bytes computed.</p>

<h5>Semantics:</h5>
<p>The <tt>llvm.objectsize</tt> intrinsic is lowered to either a constant
   representing the size of the object concerned or <tt>(size_t) -1</tt> if
   it cannot be determined at compile time.</p>

</div>

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