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

<h1>LLVM Language Reference Manual</h1>
<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_linker_private_weak">'<tt>linker_private_weak</tt>' Linkage</a></li>
          <li><a href="#linkage_linker_private_weak_def_auto">'<tt>linker_private_weak_def_auto</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>external</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="#namedmetadatastructure">Named Metadata</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>
      <li><a href="#volatile">Volatile Memory Accesses</a></li>
      <li><a href="#memmodel">Memory Model for Concurrent Operations</a></li>
      <li><a href="#ordering">Atomic Memory Ordering Constraints</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_x86mmx">X86mmx Type</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_aggregate">Aggregate Types</a>
            <ol>
              <li><a href="#t_array">Array Type</a></li>
              <li><a href="#t_struct">Structure Type</a></li>
              <li><a href="#t_opaque">Opaque Structure Types</a></li>
              <li><a href="#t_vector">Vector Type</a></li>
            </ol>
          </li>
          <li><a href="#t_function">Function Type</a></li>
          <li><a href="#t_pointer">Pointer Type</a></li>
        </ol>
      </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="#trapvalues">Trap Values</a></li>
      <li><a href="#blockaddress">Addresses of Basic Blocks</a></li>
      <li><a href="#constantexprs">Constant Expressions</a></li>
    </ol>
  </li>
  <li><a href="#othervalues">Other Values</a>
    <ol>
      <li><a href="#inlineasm">Inline Assembler Expressions</a></li>
      <li><a href="#metadata">Metadata Nodes and Metadata Strings</a>
        <ol>
          <li><a href="#tbaa">'<tt>tbaa</tt>' Metadata</a></li>
          <li><a href="#fpaccuracy">'<tt>fpaccuracy</tt>' Metadata</a></li>
        </ol>
      </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_resume">'<tt>resume</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_fence">'<tt>fence</tt>' Instruction</a></li>
         <li><a href="#i_cmpxchg">'<tt>cmpxchg</tt>' Instruction</a></li>
         <li><a href="#i_atomicrmw">'<tt>atomicrmw</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>
          <li><a href="#i_landingpad">'<tt>landingpad</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>
          <li><a href="#int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a></li>
          <li><a href="#int_log">'<tt>llvm.log.*</tt>' Intrinsic</a></li>
          <li><a href="#int_fma">'<tt>llvm.fma.*</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_fp16">Half Precision Floating Point Intrinsics</a>
        <ol>
          <li><a href="#int_convert_to_fp16">'<tt>llvm.convert.to.fp16</tt>' Intrinsic</a></li>
          <li><a href="#int_convert_from_fp16">'<tt>llvm.convert.from.fp16</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_debugger">Debugger intrinsics</a></li>
      <li><a href="#int_eh">Exception Handling intrinsics</a></li>
      <li><a href="#int_trampoline">Trampoline Intrinsics</a>
        <ol>
          <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
          <li><a href="#int_at">'<tt>llvm.adjust.trampoline</tt>' Intrinsic</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>

<!-- *********************************************************************** -->
<h2><a name="abstract">Abstract</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- *********************************************************************** -->
<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="wellformed">Well-Formedness</a>
</h4>

<div>

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

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

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

</div>

</div>

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

<!-- *********************************************************************** -->
<h2><a name="identifiers">Identifiers</a></h2>
<!-- *********************************************************************** -->

<div>

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

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

<p>After strength reduction:</p>

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

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

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

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

<!-- *********************************************************************** -->
<h2><a name="highlevel">High Level Structure</a></h2>
<!-- *********************************************************************** -->
<div>
<!-- ======================================================================= -->
<h3>
  <a name="modulestructure">Module Structure</a>
</h3>

<div>

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

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

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

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

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

<i>; Named metadata</i>
!1 = metadata !{i32 41}
!foo = !{!1, null}
</pre>

<p>This example is made up of a <a href="#globalvars">global variable</a> named
   "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function,
   a <a href="#functionstructure">function definition</a> for
   "<tt>main</tt>" and <a href="#namedmetadatastructure">named metadata</a> 
   "<tt>foo"</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>

<!-- ======================================================================= -->
<h3>
  <a name="linkage">Linkage Types</a>
</h3>

<div>

<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 "<tt>private</tt>" 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 <tt>private</tt>, but the symbol is passed through the
      assembler and evaluated by the linker. 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_linker_private_weak">linker_private_weak</a></b></tt></dt>
  <dd>Similar to "<tt>linker_private</tt>", but the symbol is weak. Note that
      <tt>linker_private_weak</tt> symbols are subject to coalescing by the
      linker. The symbols are removed by the linker from the final linked image
      (executable or dynamic library).</dd>

  <dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt>
  <dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address
      of the object is not taken. For instance, functions that had an inline
      definition, but the compiler decided not to inline it. Note,
      unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>,
      <tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt>
      visibility.  The symbols 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 can be used to implement
      some forms of inline functions, templates, or other code which must be
      generated in each translation unit that uses it, but where the body may
      be overridden with a more definitive definition later.  Unreferenced
      <tt>linkonce</tt> globals are allowed to be discarded.  Note that
      <tt>linkonce</tt> linkage does not actually allow the optimizer to
      inline the body of this function into callers because it doesn't know if
      this definition of the function is the definitive definition within the
      program or whether it will be overridden by a stronger definition.
      To enable inlining and other optimizations, use "<tt>linkonce_odr</tt>"
      linkage.</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"
      &mdash; "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">external</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 <tt>external</tt>, <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>

<!-- ======================================================================= -->
<h3>
  <a name="callingconv">Calling Conventions</a>
</h3>

<div>

<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).
      <a href="CodeGenerator.html#tailcallopt">Tail calls can only be optimized
      when this or the GHC convention is used.</a>  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 <em>10</em></tt>" - GHC convention</b>:</dt>
  <dd>This calling convention has been implemented specifically for use by the
      <a href="http://www.haskell.org/ghc">Glasgow Haskell Compiler (GHC)</a>.
      It passes everything in registers, going to extremes to achieve this by
      disabling callee save registers. This calling convention should not be
      used lightly but only for specific situations such as an alternative to
      the <em>register pinning</em> performance technique often used when
      implementing functional programming languages.At the moment only X86
      supports this convention and it has the following limitations:
      <ul>
        <li>On <em>X86-32</em> only supports up to 4 bit type parameters. No
            floating point types are supported.</li>
        <li>On <em>X86-64</em> only supports up to 10 bit type parameters and
            6 floating point parameters.</li>
      </ul>
      This calling convention supports
      <a href="CodeGenerator.html#tailcallopt">tail call optimization</a> but
      requires both the caller and callee are using it.
  </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>

<!-- ======================================================================= -->
<h3>
  <a name="visibility">Visibility Styles</a>
</h3>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="namedtypes">Named Types</a>
</h3>

<div>

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

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

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

<!-- ======================================================================= -->
<h3>
  <a name="globalvars">Global Variables</a>
</h3>

<div>

<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>Global variables can be marked with <tt>unnamed_addr</tt> which indicates
  that the address is not significant, only the content. Constants marked
  like this can be merged with other constants if they have the same
  initializer. Note that a constant with significant address <em>can</em>
  be merged with a <tt>unnamed_addr</tt> constant, the result being a
  constant whose address is significant.</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, which must be a power
   of 2.  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 exactly that
   alignment.  Targets and optimizers are not allowed to over-align the global
   if the global has an assigned section.  In this case, the extra alignment
   could be observable: for example, code could assume that the globals are
   densely packed in their section and try to iterate over them as an array,
   alignment padding would break this iteration.</p>

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

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

</div>


<!-- ======================================================================= -->
<h3>
  <a name="functionstructure">Functions</a>
</h3>

<div>

<p>LLVM function definitions consist of the "<tt>define</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>,
   an optional <tt>unnamed_addr</tt> attribute, 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>,
   an optional <tt>unnamed_addr</tt> attribute, 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>

<p>If the <tt>unnamed_addr</tt> attribute is given, the address is know to not
   be significant and two identical functions can be merged.</p>

<h5>Syntax:</h5>
<pre class="doc_code">
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>

<!-- ======================================================================= -->
<h3>
  <a name="aliasstructure">Aliases</a>
</h3>

<div>

<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>
<pre class="doc_code">
@&lt;Name&gt; = alias [Linkage] [Visibility] &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
</pre>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="namedmetadatastructure">Named Metadata</a>
</h3>

<div>

<p>Named metadata is a collection of metadata. <a href="#metadata">Metadata
   nodes</a> (but not metadata strings) are the only valid operands for
   a named metadata.</p>

<h5>Syntax:</h5>
<pre class="doc_code">
; Some unnamed metadata nodes, which are referenced by the named metadata.
!0 = metadata !{metadata !"zero"}
!1 = metadata !{metadata !"one"}
!2 = metadata !{metadata !"two"}
; A named metadata.
!name = !{!0, !1, !2}
</pre>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="paramattrs">Parameter Attributes</a>
</h3>

<div>

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

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

<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 the extent required by the target's ABI (which
      is usually 32-bits, but is 8-bits for a i1 on x86-64) 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 the extent required by the target's ABI (which
      is usually 32-bits) 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><p>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.</p>
      
      <p>The byval attribute also supports specifying an alignment with
      the align attribute.  It indicates the alignment of the stack slot to
      form and the known alignment of the pointer specified to the call site. If
      the alignment is not specified, then the code generator makes a
      target-specific assumption.</p></dd>

  <dt><tt><b><a name="sret">sret</a></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><a name="noalias">noalias</a></b></tt></dt>
  <dd>This indicates that pointer values
      <a href="#pointeraliasing"><i>based</i></a> on the argument or return
      value do not alias pointer values which are not <i>based</i> on it,
      ignoring certain "irrelevant" dependencies.
      For a call to the parent function, dependencies between memory
      references from before or after the call and from those during the call
      are "irrelevant" to the <tt>noalias</tt> keyword for the arguments and
      return value used in that call.
      The caller shares the responsibility with the callee for ensuring that
      these requirements are met.
      For further details, please see the discussion of the NoAlias response in
      <a href="AliasAnalysis.html#MustMayNo">alias analysis</a>.<br>
<br>
      Note that this definition of <tt>noalias</tt> is intentionally
      similar to the definition of <tt>restrict</tt> in C99 for function
      arguments, though it is slightly weaker.
<br>
      For function return values, C99's <tt>restrict</tt> is not meaningful,
      while LLVM's <tt>noalias</tt> is.
      </dd>

  <dt><tt><b><a name="nocapture">nocapture</a></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><a name="nest">nest</a></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>

<!-- ======================================================================= -->
<h3>
  <a name="gc">Garbage Collector Names</a>
</h3>

<div>

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

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

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

<!-- ======================================================================= -->
<h3>
  <a name="fnattrs">Function Attributes</a>
</h3>

<div>

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

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

<dl>
  <dt><tt><b>alignstack(&lt;<em>n</em>&gt;)</b></tt></dt>
  <dd>This attribute indicates that, when emitting the prologue and epilogue,
      the backend should forcibly align the stack pointer. Specify the
      desired alignment, which must be a power of two, in parentheses.

  <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>nonlazybind</b></tt></dt>
  <dd>This attribute suppresses lazy symbol binding for the function. This
      may make calls to the function faster, at the cost of extra program
      startup time if the function is not called during program startup.</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>naked</b></tt></dt>
  <dd>This attribute disables prologue / epilogue emission for the function.
      This can have very system-specific consequences.</dd>

  <dt><tt><b>noimplicitfloat</b></tt></dt>
  <dd>This attributes disables implicit floating point instructions.</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>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>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>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>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><a name="uwtable">uwtable</a></b></tt></dt>
  <dd>This attribute indicates that the ABI being targeted requires that
      an unwind table entry be produce for this function even if we can
      show that no exceptions passes by it. This is normally the case for
      the ELF x86-64 abi, but it can be disabled for some compilation
      units.</dd>

  <dt><tt><b><a name="returns_twice">returns_twice</a></b></tt></dt>
  <dd>This attribute indicates that this function can return
  twice. The C <code>setjmp</code> is an example of such a function.
  The compiler disables some optimizations (like tail calls) in the caller of
  these functions.</dd>
</dl>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="moduleasm">Module-Level Inline Assembly</a>
</h3>

<div>

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

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

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

<!-- ======================================================================= -->
<h3>
  <a name="datalayout">Data Layout</a>
</h3>

<div>

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

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

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

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

  <dt><tt>e</tt></dt>
  <dd>Specifies that 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>S<i>size</i></tt></dt>
  <dd>Specifies the natural alignment of the stack in bits. Alignment promotion
      of stack variables is limited to the natural stack alignment to avoid
      dynamic stack realignment. The stack alignment must be a multiple of
      8-bits. If omitted, the natural stack alignment defaults to "unspecified",
      which does not prevent any alignment promotions.</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>. Only values of <i>size</i> that are supported by the target
      will work.  32 (float) and 64 (double) are supported on all targets;
      80 or 128 (different flavors of long double) are also supported on some
      targets.

  <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) overridden 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:64:64:64</tt> - 64-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>

<p>The function of the data layout string may not be what you expect.  Notably,
   this is not a specification from the frontend of what alignment the code
   generator should use.</p>

<p>Instead, if specified, the target data layout is required to match what the 
   ultimate <em>code generator</em> expects.  This string is used by the 
   mid-level optimizers to
   improve code, and this only works if it matches what the ultimate code 
   generator uses.  If you would like to generate IR that does not embed this
   target-specific detail into the IR, then you don't have to specify the 
   string.  This will disable some optimizations that require precise layout
   information, but this also prevents those optimizations from introducing
   target specificity into the IR.</p>



</div>

<!-- ======================================================================= -->
<h3>
  <a name="pointeraliasing">Pointer Aliasing Rules</a>
</h3>

<div>

<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 is associated with the addresses associated with
      any value it is <i>based</i> on.
  <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>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>A pointer value is <i>based</i> on another pointer value according
   to the following rules:</p>

<ul>
  <li>A pointer value formed from a
      <tt><a href="#i_getelementptr">getelementptr</a></tt> operation
      is <i>based</i> on the first operand of the <tt>getelementptr</tt>.</li>
  <li>The result value of a
      <tt><a href="#i_bitcast">bitcast</a></tt> is <i>based</i> on the operand
      of the <tt>bitcast</tt>.</li>
  <li>A pointer value formed by an
      <tt><a href="#i_inttoptr">inttoptr</a></tt> is <i>based</i> on all
      pointer values that contribute (directly or indirectly) to the
      computation of the pointer's value.</li>
  <li>The "<i>based</i> on" relationship is transitive.</li>
</ul>

<p>Note that this definition of <i>"based"</i> is intentionally
   similar to the definition of <i>"based"</i> in C99, though it is
   slightly weaker.</p>

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

<!-- ======================================================================= -->
<h3>
  <a name="volatile">Volatile Memory Accesses</a>
</h3>

<div>

<p>Certain memory accesses, such as <a href="#i_load"><tt>load</tt></a>s, <a
href="#i_store"><tt>store</tt></a>s, and <a
href="#int_memcpy"><tt>llvm.memcpy</tt></a>s may be marked <tt>volatile</tt>.
The optimizers must not change the number of volatile operations or change their
order of execution relative to other volatile operations.  The optimizers
<i>may</i> change the order of volatile operations relative to non-volatile
operations.  This is not Java's "volatile" and has no cross-thread
synchronization behavior.</p>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="memmodel">Memory Model for Concurrent Operations</a>
</h3>

<div>

<p>The LLVM IR does not define any way to start parallel threads of execution
or to register signal handlers. Nonetheless, there are platform-specific
ways to create them, and we define LLVM IR's behavior in their presence. This
model is inspired by the C++0x memory model.</p>

<p>For a more informal introduction to this model, see the
<a href="Atomics.html">LLVM Atomic Instructions and Concurrency Guide</a>.

<p>We define a <i>happens-before</i> partial order as the least partial order
that</p>
<ul>
  <li>Is a superset of single-thread program order, and</li>
  <li>When a <i>synchronizes-with</i> <tt>b</tt>, includes an edge from
      <tt>a</tt> to <tt>b</tt>. <i>Synchronizes-with</i> pairs are introduced
      by platform-specific techniques, like pthread locks, thread
      creation, thread joining, etc., and by atomic instructions.
      (See also <a href="#ordering">Atomic Memory Ordering Constraints</a>).
      </li>
</ul>

<p>Note that program order does not introduce <i>happens-before</i> edges
between a thread and signals executing inside that thread.</p>

<p>Every (defined) read operation (load instructions, memcpy, atomic
loads/read-modify-writes, etc.) <var>R</var> reads a series of bytes written by
(defined) write operations (store instructions, atomic
stores/read-modify-writes, memcpy, etc.). For the purposes of this section,
initialized globals are considered to have a write of the initializer which is
atomic and happens before any other read or write of the memory in question.
For each byte of a read <var>R</var>, <var>R<sub>byte</sub></var> may see
any write to the same byte, except:</p>

<ul>
  <li>If <var>write<sub>1</sub></var> happens before
      <var>write<sub>2</sub></var>, and <var>write<sub>2</sub></var> happens
      before <var>R<sub>byte</sub></var>, then <var>R<sub>byte</sub></var>
      does not see <var>write<sub>1</sub></var>.
  <li>If <var>R<sub>byte</sub></var> happens before
      <var>write<sub>3</sub></var>, then <var>R<sub>byte</sub></var> does not
      see <var>write<sub>3</sub></var>.
</ul>

<p>Given that definition, <var>R<sub>byte</sub></var> is defined as follows:
<ul>
  <li>If <var>R</var> is volatile, the result is target-dependent. (Volatile
      is supposed to give guarantees which can support
      <code>sig_atomic_t</code> in C/C++, and may be used for accesses to
      addresses which do not behave like normal memory.  It does not generally
      provide cross-thread synchronization.)
  <li>Otherwise, if there is no write to the same byte that happens before
    <var>R<sub>byte</sub></var>, <var>R<sub>byte</sub></var> returns 
    <tt>undef</tt> for that byte.
  <li>Otherwise, if <var>R<sub>byte</sub></var> may see exactly one write,
      <var>R<sub>byte</sub></var> returns the value written by that
      write.</li>
  <li>Otherwise, if <var>R</var> is atomic, and all the writes
      <var>R<sub>byte</sub></var> may see are atomic, it chooses one of the
      values written.  See the <a href="#ordering">Atomic Memory Ordering
      Constraints</a> section for additional constraints on how the choice
      is made.
  <li>Otherwise <var>R<sub>byte</sub></var> returns <tt>undef</tt>.</li>
</ul>

<p><var>R</var> returns the value composed of the series of bytes it read.
This implies that some bytes within the value may be <tt>undef</tt>
<b>without</b> the entire value being <tt>undef</tt>. Note that this only
defines the semantics of the operation; it doesn't mean that targets will
emit more than one instruction to read the series of bytes.</p>

<p>Note that in cases where none of the atomic intrinsics are used, this model
places only one restriction on IR transformations on top of what is required
for single-threaded execution: introducing a store to a byte which might not
otherwise be stored is not allowed in general.  (Specifically, in the case
where another thread might write to and read from an address, introducing a
store can change a load that may see exactly one write into a load that may
see multiple writes.)</p>

<!-- FIXME: This model assumes all targets where concurrency is relevant have
a byte-size store which doesn't affect adjacent bytes.  As far as I can tell,
none of the backends currently in the tree fall into this category; however,
there might be targets which care.  If there are, we want a paragraph
like the following:

Targets may specify that stores narrower than a certain width are not
available; on such a target, for the purposes of this model, treat any
non-atomic write with an alignment or width less than the minimum width
as if it writes to the relevant surrounding bytes.
-->

</div>

<!-- ======================================================================= -->
<h3>
      <a name="ordering">Atomic Memory Ordering Constraints</a>
</h3>

<div>

<p>Atomic instructions (<a href="#i_cmpxchg"><code>cmpxchg</code></a>,
<a href="#i_atomicrmw"><code>atomicrmw</code></a>,
<a href="#i_fence"><code>fence</code></a>,
<a href="#i_load"><code>atomic load</code></a>, and
<a href="#i_store"><code>atomic store</code></a>) take an ordering parameter
that determines which other atomic instructions on the same address they
<i>synchronize with</i>.  These semantics are borrowed from Java and C++0x,
but are somewhat more colloquial. If these descriptions aren't precise enough,
check those specs (see spec references in the
<a href="Atomic.html#introduction">atomics guide</a>).
<a href="#i_fence"><code>fence</code></a> instructions
treat these orderings somewhat differently since they don't take an address.
See that instruction's documentation for details.</p>

<p>For a simpler introduction to the ordering constraints, see the
<a href="Atomics.html">LLVM Atomic Instructions and Concurrency Guide</a>.</p>

<dl>
<dt><code>unordered</code></dt>
<dd>The set of values that can be read is governed by the happens-before
partial order. A value cannot be read unless some operation wrote it.
This is intended to provide a guarantee strong enough to model Java's
non-volatile shared variables.  This ordering cannot be specified for
read-modify-write operations; it is not strong enough to make them atomic
in any interesting way.</dd>
<dt><code>monotonic</code></dt>
<dd>In addition to the guarantees of <code>unordered</code>, there is a single
total order for modifications by <code>monotonic</code> operations on each
address. All modification orders must be compatible with the happens-before
order. There is no guarantee that the modification orders can be combined to
a global total order for the whole program (and this often will not be
possible). The read in an atomic read-modify-write operation
(<a href="#i_cmpxchg"><code>cmpxchg</code></a> and
<a href="#i_atomicrmw"><code>atomicrmw</code></a>)
reads the value in the modification order immediately before the value it
writes. If one atomic read happens before another atomic read of the same
address, the later read must see the same value or a later value in the
address's modification order. This disallows reordering of
<code>monotonic</code> (or stronger) operations on the same address. If an
address is written <code>monotonic</code>ally by one thread, and other threads
<code>monotonic</code>ally read that address repeatedly, the other threads must
eventually see the write. This corresponds to the C++0x/C1x
<code>memory_order_relaxed</code>.</dd>
<dt><code>acquire</code></dt>
<dd>In addition to the guarantees of <code>monotonic</code>,
a <i>synchronizes-with</i> edge may be formed with a <code>release</code>
operation. This is intended to model C++'s <code>memory_order_acquire</code>.</dd>
<dt><code>release</code></dt>
<dd>In addition to the guarantees of <code>monotonic</code>, if this operation
writes a value which is subsequently read by an <code>acquire</code> operation,
it <i>synchronizes-with</i> that operation.  (This isn't a complete
description; see the C++0x definition of a release sequence.) This corresponds
to the C++0x/C1x <code>memory_order_release</code>.</dd>
<dt><code>acq_rel</code> (acquire+release)</dt><dd>Acts as both an
<code>acquire</code> and <code>release</code> operation on its address.
This corresponds to the C++0x/C1x <code>memory_order_acq_rel</code>.</dd>
<dt><code>seq_cst</code> (sequentially consistent)</dt><dd>
<dd>In addition to the guarantees of <code>acq_rel</code>
(<code>acquire</code> for an operation which only reads, <code>release</code>
for an operation which only writes), there is a global total order on all
sequentially-consistent operations on all addresses, which is consistent with
the <i>happens-before</i> partial order and with the modification orders of
all the affected addresses. Each sequentially-consistent read sees the last
preceding write to the same address in this global order. This corresponds
to the C++0x/C1x <code>memory_order_seq_cst</code> and Java volatile.</dd>
</dl>

<p id="singlethread">If an atomic operation is marked <code>singlethread</code>,
it only <i>synchronizes with</i> or participates in modification and seq_cst
total orderings with other operations running in the same thread (for example,
in signal handlers).</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="typesystem">Type System</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="t_classifications">Type Classifications</a>
</h3>

<div>

<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_integer">integer</a>,
          <a href="#t_floating">floating point</a>,
          <a href="#t_x86mmx">x86mmx</a>,
          <a href="#t_metadata">metadata</a>.</td>
    </tr>
    <tr>
      <td><a href="#t_derived">derived</a></td>
      <td><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_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>

<!-- ======================================================================= -->
<h3>
  <a name="t_primitive">Primitive Types</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_integer">Integer Type</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_floating">Floating Point Types</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_x86mmx">X86mmx Type</a>
</h4>

<div>

<h5>Overview:</h5>
<p>The x86mmx type represents a value held in an MMX register on an x86 machine.  The operations allowed on it are quite limited:  parameters and return values, load and store, and bitcast.  User-specified MMX instructions are represented as intrinsic or asm calls with arguments and/or results of this type.  There are no arrays, vectors or constants of this type.</p>

<h5>Syntax:</h5>
<pre>
  x86mmx
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_void">Void Type</a>
</h4>

<div>

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

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

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_label">Label Type</a>
</h4>

<div>

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

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

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_metadata">Metadata Type</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="t_derived">Derived Types</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_aggregate">Aggregate Types</a>
</h4>

<div>

<p>Aggregate Types are a subset of derived types that can contain multiple
  member types. <a href="#t_array">Arrays</a>,
  <a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are
  aggregate types.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_array">Array Type</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_function">Function Type</a>
</h4>

<div>

<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 first class type or a void type.</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 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;i32&nbsp;*)&nbsp;*
    </tt></td>
    <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes
      an <tt>i16</tt> 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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_struct">Structure Type</a>
</h4>

<div>

<h5>Overview:</h5>
<p>The structure type is used to represent a collection of data members together
  in memory.  The elements of a structure may be any type that has a size.</p>

<p>Structures in memory 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.
   Structures in registers are accessed using the
   '<tt><a href="#i_extractvalue">extractvalue</a></tt>' and
   '<tt><a href="#i_insertvalue">insertvalue</a></tt>' instructions.</p>
  
<p>Structures may optionally be "packed" structures, which indicate that the 
  alignment of the struct is one byte, and that there is no padding between
  the elements.  In non-packed structs, padding between field types is inserted
  as defined by the TargetData string in the module, which is required to match
  what the underlying code generator expects.</p>

<p>Structures can either be "literal" or "identified".  A literal structure is
  defined inline with other types (e.g. <tt>{i32, i32}*</tt>) whereas identified
  types are always defined at the top level with a name.  Literal types are
  uniqued by their contents and can never be recursive or opaque since there is
  no way to write one.  Identified types can be recursive, can be opaqued, and are
  never uniqued.
</p>
  
<h5>Syntax:</h5>
<pre>
  %T1 = type { &lt;type list&gt; }     <i>; Identified normal struct type</i>
  %T2 = type &lt;{ &lt;type list&gt; }&gt;   <i>; Identified packed struct type</i>
</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>
  <tr class="layout">
    <td class="left"><tt>&lt;{ i8, i32 }&gt;</tt></td>
    <td class="left">A packed struct known to be 5 bytes in size.</td>
  </tr>
</table>

</div>
  
<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_opaque">Opaque Structure Types</a>
</h4>

<div>

<h5>Overview:</h5>
<p>Opaque structure types are used to represent named structure types that do
   not have a body specified.  This corresponds (for example) to the C notion of
   a forward declared structure.</p>

<h5>Syntax:</h5>
<pre>
  %X = type opaque
  %52 = type 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>



<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_pointer">Pointer Type</a>
</h4>

<div>

<h5>Overview:</h5>
<p>The pointer type is used to specify memory locations.
   Pointers are commonly used to reference objects in memory.</p>
   
<p>Pointer types may have an optional address space attribute defining the
   numbered address space where the pointed-to object resides. The default
   address space is number zero. The semantics of non-zero address
   spaces are target-specific.</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="t_vector">Vector Type</a>
</h4>

<div>

<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 larger than 0; elementtype
   may be any integer or floating point type.  Vectors of size zero are not
   allowed, and pointers are not allowed as the element 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>

</div>

<!-- *********************************************************************** -->
<h2><a name="constants">Constants</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="simpleconstants">Simple Constants</a>
</h3>

<div>

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

<p>There are no constants of type x86mmx.</p>
</div>

<!-- ======================================================================= -->
<h3>
<a name="aggregateconstants"></a> <!-- old anchor -->
<a name="complexconstants">Complex Constants</a>
</h3>

<div>

<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
      <a href="#t_aggregate">aggregate</a> 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>

<!-- ======================================================================= -->
<h3>
  <a name="globalconstants">Global Variable and Function Addresses</a>
</h3>

<div>

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

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

</div>

<!-- ======================================================================= -->
<h3>
  <a name="undefvalues">Undefined Values</a>
</h3>

<div>

<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 '<tt>label</tt>'
   or '<tt>void</tt>') 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>


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

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

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

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

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

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

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

<p>This example points out that two '<tt>undef</tt>' operands are not
   necessarily the same. This can be surprising to people (and also matches C
   semantics) where they assume that "<tt>X^X</tt>" is always zero, even
   if <tt>X</tt> is undefined. This isn't true for a number of reasons, but the
   short answer is that an '<tt>undef</tt>' "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, <tt>%A</tt> and <tt>%C</tt>
   need to have the same semantics or the core LLVM "replace all uses with"
   concept would not hold.</p>

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

<p>These examples show the crucial difference between an <em>undefined
  value</em> and <em>undefined behavior</em>. An undefined value (like
  '<tt>undef</tt>') is allowed to have an arbitrary bit-pattern. This means that
  the <tt>%A</tt> operation can be constant folded to '<tt>undef</tt>', because
  the '<tt>undef</tt>' could be an SNaN, and <tt>fdiv</tt> is not (currently)
  defined on SNaN's. However, in the second example, we can make a more
  aggressive assumption: because the <tt>undef</tt> 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. Because the undefined operation "can't happen", the
  optimizer can assume that it occurs in dead code.</p>

<pre class="doc_code">
a:  store undef -> %X
b:  store %X -> undef
Safe:
a: &lt;deleted&gt;
b: unreachable
</pre>

<p>These examples reiterate the <tt>fdiv</tt> example: a store <em>of</em> 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 <em>to</em> an undefined location could clobber arbitrary
   memory, therefore, it has undefined behavior.</p>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="trapvalues">Trap Values</a>
</h3>

<div>

<p>Trap values are similar to <a href="#undefvalues">undef values</a>, however
   instead of representing an unspecified bit pattern, they represent the
   fact that an instruction or constant expression which cannot evoke side
   effects has nevertheless detected a condition which results in undefined
   behavior.</p>

<p>There is currently no way of representing a trap value in the IR; they
   only exist when produced by operations such as
   <a href="#i_add"><tt>add</tt></a> with the <tt>nsw</tt> flag.</p>

<p>Trap value behavior is defined in terms of value <i>dependence</i>:</p>

<ul>
<li>Values other than <a href="#i_phi"><tt>phi</tt></a> nodes depend on
    their operands.</li>

<li><a href="#i_phi"><tt>Phi</tt></a> nodes depend on the operand corresponding
    to their dynamic predecessor basic block.</li>

<li>Function arguments depend on the corresponding actual argument values in
    the dynamic callers of their functions.</li>

<li><a href="#i_call"><tt>Call</tt></a> instructions depend on the
    <a href="#i_ret"><tt>ret</tt></a> instructions that dynamically transfer
    control back to them.</li>

<li><a href="#i_invoke"><tt>Invoke</tt></a> instructions depend on the
    <a href="#i_ret"><tt>ret</tt></a>, <a href="#i_unwind"><tt>unwind</tt></a>,
    or exception-throwing call instructions that dynamically transfer control
    back to them.</li>

<li>Non-volatile loads and stores depend on the most recent stores to all of the
    referenced memory addresses, following the order in the IR
    (including loads and stores implied by intrinsics such as
    <a href="#int_memcpy"><tt>@llvm.memcpy</tt></a>.)</li>

<!-- TODO: In the case of multiple threads, this only applies if the store
     "happens-before" the load or store. -->

<!-- TODO: floating-point exception state -->

<li>An instruction with externally visible side effects depends on the most
    recent preceding instruction with externally visible side effects, following
    the order in the IR. (This includes
    <a href="#volatile">volatile operations</a>.)</li>

<li>An instruction <i>control-depends</i> on a
    <a href="#terminators">terminator instruction</a>
    if the terminator instruction has multiple successors and the instruction
    is always executed when control transfers to one of the successors, and
    may not be executed when control is transferred to another.</li>

<li>Additionally, an instruction also <i>control-depends</i> on a terminator
    instruction if the set of instructions it otherwise depends on would be
    different if the terminator had transferred control to a different
    successor.</li>

<li>Dependence is transitive.</li>

</ul>

<p>Whenever a trap value is generated, all values which depend on it evaluate
   to trap. If they have side effects, they evoke their side effects as if each
   operand with a trap value were undef. If they have externally-visible side
   effects, the behavior is undefined.</p>

<p>Here are some examples:</p>

<pre class="doc_code">
entry:
  %trap = sub nuw i32 0, 1           ; Results in a trap value.
  %still_trap = and i32 %trap, 0     ; Whereas (and i32 undef, 0) would return 0.
  %trap_yet_again = getelementptr i32* @h, i32 %still_trap
  store i32 0, i32* %trap_yet_again  ; undefined behavior

  store i32 %trap, i32* @g           ; Trap value conceptually stored to memory.
  %trap2 = load i32* @g              ; Returns a trap value, not just undef.

  store volatile i32 %trap, i32* @g  ; External observation; undefined behavior.

  %narrowaddr = bitcast i32* @g to i16*
  %wideaddr = bitcast i32* @g to i64*
  %trap3 = load i16* %narrowaddr     ; Returns a trap value.
  %trap4 = load i64* %wideaddr       ; Returns a trap value.

  %cmp = icmp slt i32 %trap, 0       ; Returns a trap value.
  br i1 %cmp, label %true, label %end ; Branch to either destination.

true:
  store volatile i32 0, i32* @g      ; This is control-dependent on %cmp, so
                                     ; it has undefined behavior.
  br label %end

end:
  %p = phi i32 [ 0, %entry ], [ 1, %true ]
                                     ; Both edges into this PHI are
                                     ; control-dependent on %cmp, so this
                                     ; always results in a trap value.

  store volatile i32 0, i32* @g      ; This would depend on the store in %true
                                     ; if %cmp is true, or the store in %entry
                                     ; otherwise, so this is undefined behavior.

  br i1 %cmp, label %second_true, label %second_end
                                     ; The same branch again, but this time the
                                     ; true block doesn't have side effects.

second_true:
  ; No side effects!
  ret void

second_end:
  store volatile i32 0, i32* @g      ; This time, the instruction always depends
                                     ; on the store in %end. Also, it is
                                     ; control-equivalent to %end, so this is
                                     ; well-defined (again, ignoring earlier
                                     ; undefined behavior in this example).
</pre>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="blockaddress">Addresses of Basic Blocks</a>
</h3>

<div>

<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
   results in undefined behavior &mdash; though, again, comparison against null
   is ok, and no label is equal to the null pointer. This may 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>
   instruction.</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>


<!-- ======================================================================= -->
<h3>
  <a name="constantexprs">Constant Expressions</a>
</h3>

<div>

<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 than 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 than 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>extractvalue (VAL, IDX0, IDX1, ...)</tt></b></dt>
  <dd>Perform the <a href="#i_extractvalue">extractvalue operation</a> on
    constants. The index list is interpreted in a similar manner as indices in
    a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one
    index value must be specified.</dd>

  <dt><b><tt>insertvalue (VAL, ELT, IDX0, IDX1, ...)</tt></b></dt>
  <dd>Perform the <a href="#i_insertvalue">insertvalue operation</a> on
    constants. The index list is interpreted in a similar manner as indices in
    a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one
    index value must be specified.</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>

<!-- *********************************************************************** -->
<h2><a name="othervalues">Other Values</a></h2>
<!-- *********************************************************************** -->
<div>
<!-- ======================================================================= -->
<h3>
<a name="inlineasm">Inline Assembler Expressions</a>
</h3>

<div>

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

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

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

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

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

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

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

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

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

<h4>
<a name="inlineasm_md">Inline Asm Metadata</a>
</h4>

<div>

<p>The call instructions that wrap inline asm nodes may have a "!srcloc" MDNode
   attached to it that contains a list of constant integers.  If present, the
  code generator will use the integer as the location cookie value when report
   errors through the LLVMContext error reporting mechanisms.  This allows a
   front-end to correlate backend errors that occur with inline asm back to the
   source code that produced it.  For example:</p>

<pre class="doc_code">
call void asm sideeffect "something bad", ""()<b>, !srcloc !42</b>
...
!42 = !{ i32 1234567 }
</pre>

<p>It is up to the front-end to make sense of the magic numbers it places in the
   IR.  If the MDNode contains multiple constants, the code generator will use
   the one that corresponds to the line of the asm that the error occurs on.</p>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="metadata">Metadata Nodes and Metadata Strings</a>
</h3>

<div>

<p>LLVM IR allows metadata to be attached to instructions in the program that
   can convey extra information about the code to the optimizers and code
   generator.  One example application of metadata is source-level debug
   information.  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>".  Metadata nodes can have any values as their operand.</p>

<p>A <a href="#namedmetadatastructure">named metadata</a> is a collection of 
   metadata nodes, which can be looked up in the module symbol table. For
   example: "<tt>!foo =  metadata !{!4, !3}</tt>".

<p>Metadata can be used as function arguments. Here <tt>llvm.dbg.value</tt> 
   function is using two metadata arguments.</p>

<div class="doc_code">
<pre>
call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
</pre>
</div>

<p>Metadata can be attached with an instruction. Here metadata <tt>!21</tt> is
   attached with <tt>add</tt> instruction using <tt>!dbg</tt> identifier.</p>

<div class="doc_code">
<pre>
%indvar.next = add i64 %indvar, 1, !dbg !21
</pre>
</div>

<p>More information about specific metadata nodes recognized by the optimizers
   and code generator is found below.</p>

<h4>
  <a name="tbaa">'<tt>tbaa</tt>' Metadata</a>
</h4>

<div>

<p>In LLVM IR, memory does not have types, so LLVM's own type system is not
   suitable for doing TBAA. Instead, metadata is added to the IR to describe
   a type system of a higher level language. This can be used to implement
   typical C/C++ TBAA, but it can also be used to implement custom alias
   analysis behavior for other languages.</p>

<p>The current metadata format is very simple. TBAA metadata nodes have up to
   three fields, e.g.:</p>

<div class="doc_code">
<pre>
!0 = metadata !{ metadata !"an example type tree" }
!1 = metadata !{ metadata !"int", metadata !0 }
!2 = metadata !{ metadata !"float", metadata !0 }
!3 = metadata !{ metadata !"const float", metadata !2, i64 1 }
</pre>
</div>

<p>The first field is an identity field. It can be any value, usually
   a metadata string, which uniquely identifies the type. The most important
   name in the tree is the name of the root node. Two trees with
   different root node names are entirely disjoint, even if they
   have leaves with common names.</p>

<p>The second field identifies the type's parent node in the tree, or
   is null or omitted for a root node. A type is considered to alias
   all of its descendants and all of its ancestors in the tree. Also,
   a type is considered to alias all types in other trees, so that
   bitcode produced from multiple front-ends is handled conservatively.</p>

<p>If the third field is present, it's an integer which if equal to 1
   indicates that the type is "constant" (meaning
   <tt>pointsToConstantMemory</tt> should return true; see
   <a href="AliasAnalysis.html#OtherItfs">other useful
   <tt>AliasAnalysis</tt> methods</a>).</p>

</div>

<h4>
  <a name="fpaccuracy">'<tt>fpaccuracy</tt>' Metadata</a>
</h4>
 
<div>

<p><tt>fpaccuracy</tt> metadata may be attached to any instruction of floating
   point type.  It expresses the maximum relative error of the result of
   that instruction, in ULPs. ULP is defined as follows:</p>

<blockquote>

<p>If <tt>x</tt> is a real number that lies between two finite consecutive
   floating-point numbers <tt>a</tt> and <tt>b</tt>, without being equal to one
   of them, then <tt>ulp(x) = |b - a|</tt>, otherwise <tt>ulp(x)</tt> is the
   distance between the two non-equal finite floating-point numbers nearest
   <tt>x</tt>. Moreover, <tt>ulp(NaN)</tt> is <tt>NaN</tt>.</p>

</blockquote>

<p>The maximum relative error may be any rational number.  The metadata node
   shall consist of a pair of unsigned integers respectively representing
   the numerator and denominator.  For example, 2.5 ULP:</p>

<div class="doc_code">
<pre>
!0 = metadata !{ i32 5, i32 2 }
</pre>
</div>

</div>

</div>

</div>

<!-- *********************************************************************** -->
<h2>
  <a name="intrinsic_globals">Intrinsic Global Variables</a>
</h2>
<!-- *********************************************************************** -->
<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>

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

<div>

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

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

<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 "<tt>attribute((used))</tt>" 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>

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

<div>

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

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

<div>

<div class="doc_code">
<pre>
%0 = type { i32, void ()* }
@llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor }]
</pre>
</div>

<p>The <tt>@llvm.global_ctors</tt> array contains a list of constructor
   functions and associated priorities.  The functions referenced by this array
   will be called in ascending order of priority (i.e. lowest first) when the
   module is loaded.  The order of functions with the same priority is not
   defined.</p>

</div>

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

<div>

<div class="doc_code">
<pre>
%0 = type { i32, void ()* }
@llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor }]
</pre>
</div>

<p>The <tt>@llvm.global_dtors</tt> array contains a list of destructor functions
   and associated priorities.  The functions referenced by this array will be
   called in descending order of priority (i.e. highest first) when the module
   is loaded.  The order of functions with the same priority is not defined.</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="instref">Instruction Reference</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="terminators">Terminator Instructions</a>
</h3>

<div>

<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>The terminator instructions are: 
   '<a href="#i_ret"><tt>ret</tt></a>', 
   '<a href="#i_br"><tt>br</tt></a>',
   '<a href="#i_switch"><tt>switch</tt></a>', 
   '<a href="#i_indirectbr"><tt>indirectbr</tt></a>',
   '<a href="#i_invoke"><tt>invoke</tt></a>', 
   '<a href="#i_unwind"><tt>unwind</tt></a>',
   '<a href="#i_resume"><tt>resume</tt></a>', and 
   '<a href="#i_unreachable"><tt>unreachable</tt></a>'.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_ret">'<tt>ret</tt>' Instruction</a>
</h4>

<div>

<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>
<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_br">'<tt>br</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;
  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>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_switch">'<tt>switch</tt>' Instruction</a>
</h4>

<div>

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


<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_indirectbr">'<tt>indirectbr</tt>' Instruction</a>
</h4>

<div>

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


<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
</h4>

<div>

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

<p>The '<tt>exception</tt>' label is a
   <i><a href="ExceptionHandling.html#overview">landing pad</a></i> for the
   exception. As such, '<tt>exception</tt>' label is required to have the
   "<a href="#i_landingpad"><tt>landingpad</tt></a>" instruction, which contains
   the information about about the behavior of the program after unwinding
   happens, as its first non-PHI instruction. The restrictions on the
   "<tt>landingpad</tt>" instruction's tightly couples it to the
   "<tt>invoke</tt>" instruction, so that the important information contained
   within the "<tt>landingpad</tt>" instruction can't be lost through normal
   code motion.</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 and parameter attributes. 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>'<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>

<p>Note that the code generator does not yet completely support unwind, and
that the invoke/unwind semantics are likely to change in future versions.</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>

<!-- _______________________________________________________________________ -->

<h4>
  <a name="i_unwind">'<tt>unwind</tt>' Instruction</a>
</h4>

<div>

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

<p>Note that the code generator does not yet completely support unwind, and
that the invoke/unwind semantics are likely to change in future versions.</p>

</div>

 <!-- _______________________________________________________________________ -->
 
<h4>
  <a name="i_resume">'<tt>resume</tt>' Instruction</a>
</h4>

<div>

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

<h5>Overview:</h5>
<p>The '<tt>resume</tt>' instruction is a terminator instruction that has no
   successors.</p>

<h5>Arguments:</h5>
<p>The '<tt>resume</tt>' instruction requires one argument, which must have the
   same type as the result of any '<tt>landingpad</tt>' instruction in the same
   function.</p>

<h5>Semantics:</h5>
<p>The '<tt>resume</tt>' instruction resumes propagation of an existing
   (in-flight) exception whose unwinding was interrupted with
   a <a href="#i_landingpad"><tt>landingpad</tt></a> instruction.</p>

<h5>Example:</h5>
<pre>
  resume { i8*, i32 } %exn
</pre>

</div>

<!-- _______________________________________________________________________ -->

<h4>
  <a name="i_unreachable">'<tt>unreachable</tt>' Instruction</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="binaryops">Binary Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_add">'<tt>add</tt>' Instruction</a>
</h4>

<div>

<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 a <a href="#trapvalues">trap value</a> 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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_sub">'<tt>sub</tt>' Instruction</a>
</h4>

<div>

<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 a <a href="#trapvalues">trap value</a> 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>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_mul">'<tt>mul</tt>' Instruction</a>
</h4>

<div>

<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 a <a href="#trapvalues">trap value</a> 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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_udiv">'<tt>udiv</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
  &lt;result&gt; = udiv exact &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>

<p>If the <tt>exact</tt> keyword is present, the result value of the
   <tt>udiv</tt> is a <a href="#trapvalues">trap value</a> if %op1 is not a
  multiple of %op2 (as such, "((a udiv exact b) mul b) == a").</p>


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

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_sdiv">'<tt>sdiv</tt>' Instruction</a>
</h4>

<div>

<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 a <a href="#trapvalues">trap value</a> if the result would
   be rounded.</p>

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

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_fdiv">'<tt>fdiv</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_urem">'<tt>urem</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_srem">'<tt>srem</tt>' Instruction</a>
</h4>

<div>

<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
   is either zero or has the same sign as the dividend, <tt>op1</tt>), not the
   <i>modulo</i> operator (where the result is either zero or 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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_frem">'<tt>frem</tt>' Instruction</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="bitwiseops">Bitwise Binary Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_shl">'<tt>shl</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;           <i>; yields {ty}:result</i>
  &lt;result&gt; = shl nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
  &lt;result&gt; = shl nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
  &lt;result&gt; = shl nuw nsw &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>

<p>If the <tt>nuw</tt> keyword is present, then the shift produces a 
   <a href="#trapvalues">trap value</a> if it shifts out any non-zero bits.  If
   the <tt>nsw</tt> keyword is present, then the shift produces a
   <a href="#trapvalues">trap value</a> if it shifts out any bits that disagree
   with the resultant sign bit.  As such, NUW/NSW have the same semantics as
   they would if the shift were expressed as a mul instruction with the same
   nsw/nuw bits in (mul %op1, (shl 1, %op2)).</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_lshr">'<tt>lshr</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
  &lt;result&gt; = lshr exact &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>

<p>If the <tt>exact</tt> keyword is present, the result value of the
   <tt>lshr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
   shifted out are non-zero.</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_ashr">'<tt>ashr</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
  &lt;result&gt; = ashr exact &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>

<p>If the <tt>exact</tt> keyword is present, the result value of the
   <tt>ashr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
   shifted out are non-zero.</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_and">'<tt>and</tt>' Instruction</a>
</h4>

<div>

<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>
<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_or">'<tt>or</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_xor">'<tt>xor</tt>' Instruction</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="vectorops">Vector Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="aggregateops">Aggregate Operations</a>
</h3>

<div>

<p>LLVM supports several instructions for working with
  <a href="#t_aggregate">aggregate</a> values.</p>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
</h4>

<div>

<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 member field
   from an <a href="#t_aggregate">aggregate</a> 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>
   <p>The major differences to <tt>getelementptr</tt> indexing are:</p>
     <ul>
       <li>Since the value being indexed is not a pointer, the first index is
           omitted and assumed to be zero.</li>
       <li>At least one index must be specified.</li>
       <li>Not only struct indices but also array indices must be in
           bounds.</li>
     </ul>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = insertvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;ty&gt; &lt;elt&gt;, &lt;idx&gt;{, &lt;idx&gt;}*    <i>; yields &lt;aggregate type&gt;</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>insertvalue</tt>' instruction inserts a value into a member field
   in an <a href="#t_aggregate">aggregate</a> value.</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_extractvalue">extractvalue</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>
  %agg1 = insertvalue {i32, float} undef, i32 1, 0              <i>; yields {i32 1, float undef}</i>
  %agg2 = insertvalue {i32, float} %agg1, float %val, 1         <i>; yields {i32 1, float %val}</i>
  %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0    <i>; yields {i32 1, float %val}</i>
</pre>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="memoryops">Memory Access and Addressing Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = alloca &lt;type&gt;[, &lt;ty&gt; &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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_load">'<tt>load</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;result&gt; = load [volatile] &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]
  &lt;result&gt; = load atomic [volatile] &lt;ty&gt;* &lt;pointer&gt; [singlethread] &lt;ordering&gt;, align &lt;alignment&gt;
  !&lt;index&gt; = !{ i32 1 }
</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 <a
   href="#volatile">volatile operations</a>.</p>

<p>If the <code>load</code> is marked as <code>atomic</code>, it takes an extra
   <a href="#ordering">ordering</a> and optional <code>singlethread</code>
   argument.  The <code>release</code> and <code>acq_rel</code> orderings are
   not valid on <code>load</code> instructions.  Atomic loads produce <a
   href="#memorymodel">defined</a> results when they may see multiple atomic
   stores.  The type of the pointee must be an integer type whose bit width
   is a power of two greater than or equal to eight and less than or equal
   to a target-specific size limit. <code>align</code> must be explicitly 
   specified on atomic loads, and the load has undefined behavior if the
   alignment is not set to a value which is at least the size in bytes of
   the pointee. <code>!nontemporal</code> does not have any defined semantics
   for atomic loads.</p>

<p>The optional constant <tt>align</tt> argument specifies the alignment of the
   operation (that is, the alignment of the memory address). A value of 0 or an
   omitted <tt>align</tt> 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 undefined behavior. Underestimating the alignment may
   produce less efficient code. An alignment of 1 is always safe.</p>

<p>The optional <tt>!nontemporal</tt> metadata must reference a single
   metatadata name &lt;index&gt; corresponding to a metadata node with
   one <tt>i32</tt> entry of value 1.  The existence of
   the <tt>!nontemporal</tt> metatadata on the instruction tells the optimizer
   and code generator that this load is not expected to be reused in the cache.
   The code generator may select special instructions to save cache bandwidth,
   such as the <tt>MOVNT</tt> instruction on x86.</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_store">'<tt>store</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  store [volatile] &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]                   <i>; yields {void}</i>
  store atomic [volatile] &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt; [singlethread] &lt;ordering&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 <a
   href="#volatile">volatile operations</a>.</p>

<p>If the <code>store</code> is marked as <code>atomic</code>, it takes an extra
   <a href="#ordering">ordering</a> and optional <code>singlethread</code>
   argument.  The <code>acquire</code> and <code>acq_rel</code> orderings aren't
   valid on <code>store</code> instructions.  Atomic loads produce <a
   href="#memorymodel">defined</a> results when they may see multiple atomic
   stores. The type of the pointee must be an integer type whose bit width
   is a power of two greater than or equal to eight and less than or equal
   to a target-specific size limit. <code>align</code> must be explicitly 
   specified on atomic stores, and the store has undefined behavior if the
   alignment is not set to a value which is at least the size in bytes of
   the pointee. <code>!nontemporal</code> does not have any defined semantics
   for atomic stores.</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>

<p>The optional !nontemporal metadata must reference a single metatadata
   name &lt;index&gt; corresponding to a metadata node with one i32 entry of
   value 1.  The existence of the !nontemporal metatadata on the
   instruction tells the optimizer and code generator that this load is
   not expected to be reused in the cache.  The code generator may
   select special instructions to save cache bandwidth, such as the
   MOVNT instruction on x86.</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>

<!-- _______________________________________________________________________ -->
<h4>
<a name="i_fence">'<tt>fence</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  fence [singlethread] &lt;ordering&gt;                   <i>; yields {void}</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>fence</tt>' instruction is used to introduce happens-before edges
between operations.</p>

<h5>Arguments:</h5> <p>'<code>fence</code>' instructions take an <a
href="#ordering">ordering</a> argument which defines what
<i>synchronizes-with</i> edges they add.  They can only be given
<code>acquire</code>, <code>release</code>, <code>acq_rel</code>, and
<code>seq_cst</code> orderings.</p>

<h5>Semantics:</h5>
<p>A fence <var>A</var> which has (at least) <code>release</code> ordering
semantics <i>synchronizes with</i> a fence <var>B</var> with (at least)
<code>acquire</code> ordering semantics if and only if there exist atomic
operations <var>X</var> and <var>Y</var>, both operating on some atomic object
<var>M</var>, such that <var>A</var> is sequenced before <var>X</var>,
<var>X</var> modifies <var>M</var> (either directly or through some side effect
of a sequence headed by <var>X</var>), <var>Y</var> is sequenced before
<var>B</var>, and <var>Y</var> observes <var>M</var>. This provides a
<i>happens-before</i> dependency between <var>A</var> and <var>B</var>. Rather
than an explicit <code>fence</code>, one (but not both) of the atomic operations
<var>X</var> or <var>Y</var> might provide a <code>release</code> or
<code>acquire</code> (resp.) ordering constraint and still
<i>synchronize-with</i> the explicit <code>fence</code> and establish the
<i>happens-before</i> edge.</p>

<p>A <code>fence</code> which has <code>seq_cst</code> ordering, in addition to
having both <code>acquire</code> and <code>release</code> semantics specified
above, participates in the global program order of other <code>seq_cst</code>
operations and/or fences.</p>

<p>The optional "<a href="#singlethread"><code>singlethread</code></a>" argument
specifies that the fence only synchronizes with other fences in the same
thread.  (This is useful for interacting with signal handlers.)</p>

<h5>Example:</h5>
<pre>
  fence acquire                          <i>; yields {void}</i>
  fence singlethread seq_cst             <i>; yields {void}</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
<a name="i_cmpxchg">'<tt>cmpxchg</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  cmpxchg [volatile] &lt;ty&gt;* &lt;pointer&gt;, &lt;ty&gt; &lt;cmp&gt;, &lt;ty&gt; &lt;new&gt; [singlethread] &lt;ordering&gt;                   <i>; yields {ty}</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>cmpxchg</tt>' instruction is used to atomically modify memory.
It 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>There are three arguments to the '<code>cmpxchg</code>' instruction: an
address to operate on, a value to compare to the value currently be at that
address, and a new value to place at that address if the compared values are
equal.  The type of '<var>&lt;cmp&gt;</var>' must be an integer type whose
bit width is a power of two greater than or equal to eight and less than
or equal to a target-specific size limit. '<var>&lt;cmp&gt;</var>' and
'<var>&lt;new&gt;</var>' must have the same type, and the type of
'<var>&lt;pointer&gt;</var>' must be a pointer to that type. If the
<code>cmpxchg</code> is marked as <code>volatile</code>, then the
optimizer is not allowed to modify the number or order of execution
of this <code>cmpxchg</code> with other <a href="#volatile">volatile
operations</a>.</p>

<!-- FIXME: Extend allowed types. -->

<p>The <a href="#ordering"><var>ordering</var></a> argument specifies how this
<code>cmpxchg</code> synchronizes with other atomic operations.</p>

<p>The optional "<code>singlethread</code>" argument declares that the
<code>cmpxchg</code> is only atomic with respect to code (usually signal
handlers) running in the same thread as the <code>cmpxchg</code>.  Otherwise the
cmpxchg is atomic with respect to all other code in the system.</p>

<p>The pointer passed into cmpxchg must have alignment greater than or equal to
the size in memory of the operand.

<h5>Semantics:</h5>
<p>The contents of memory at the location specified by the
'<tt>&lt;pointer&gt;</tt>' operand is read and compared to
'<tt>&lt;cmp&gt;</tt>'; if the read value is the equal,
'<tt>&lt;new&gt;</tt>' is written.  The original value at the location
is returned.

<p>A successful <code>cmpxchg</code> is a read-modify-write instruction for the
purpose of identifying <a href="#release_sequence">release sequences</a>.  A
failed <code>cmpxchg</code> is equivalent to an atomic load with an ordering
parameter determined by dropping any <code>release</code> part of the
<code>cmpxchg</code>'s ordering.</p>

<!--
FIXME: Is compare_exchange_weak() necessary?  (Consider after we've done
optimization work on ARM.)

FIXME: Is a weaker ordering constraint on failure helpful in practice?
-->

<h5>Example:</h5>
<pre>
entry:
  %orig = atomic <a href="#i_load">load</a> i32* %ptr unordered                       <i>; yields {i32}</i>
  <a href="#i_br">br</a> label %loop

loop:
  %cmp = <a href="#i_phi">phi</a> i32 [ %orig, %entry ], [%old, %loop]
  %squared = <a href="#i_mul">mul</a> i32 %cmp, %cmp
  %old = cmpxchg i32* %ptr, i32 %cmp, i32 %squared                       <i>; yields {i32}</i>
  %success = <a href="#i_icmp">icmp</a> eq i32 %cmp, %old
  <a href="#i_br">br</a> i1 %success, label %done, label %loop

done:
  ...
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
<a name="i_atomicrmw">'<tt>atomicrmw</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  atomicrmw [volatile] &lt;operation&gt; &lt;ty&gt;* &lt;pointer&gt;, &lt;ty&gt; &lt;value&gt; [singlethread] &lt;ordering&gt;                   <i>; yields {ty}</i>
</pre>

<h5>Overview:</h5>
<p>The '<tt>atomicrmw</tt>' instruction is used to atomically modify memory.</p>

<h5>Arguments:</h5>
<p>There are three arguments to the '<code>atomicrmw</code>' instruction: an
operation to apply, an address whose value to modify, an argument to the
operation.  The operation must be one of the following keywords:</p>
<ul>
  <li>xchg</li>
  <li>add</li>
  <li>sub</li>
  <li>and</li>
  <li>nand</li>
  <li>or</li>
  <li>xor</li>
  <li>max</li>
  <li>min</li>
  <li>umax</li>
  <li>umin</li>
</ul>

<p>The type of '<var>&lt;value&gt;</var>' must be an integer type whose
bit width is a power of two greater than or equal to eight and less than
or equal to a target-specific size limit.  The type of the
'<code>&lt;pointer&gt;</code>' operand must be a pointer to that type.
If the <code>atomicrmw</code> is marked as <code>volatile</code>, then the
optimizer is not allowed to modify the number or order of execution of this
<code>atomicrmw</code> with other <a href="#volatile">volatile
  operations</a>.</p>

<!-- FIXME: Extend allowed types. -->

<h5>Semantics:</h5>
<p>The contents of memory at the location specified by the
'<tt>&lt;pointer&gt;</tt>' operand are atomically read, modified, and written
back.  The original value at the location is returned.  The modification is
specified by the <var>operation</var> argument:</p>

<ul>
  <li>xchg: <code>*ptr = val</code></li>
  <li>add: <code>*ptr = *ptr + val</code></li>
  <li>sub: <code>*ptr = *ptr - val</code></li>
  <li>and: <code>*ptr = *ptr &amp; val</code></li>
  <li>nand: <code>*ptr = ~(*ptr &amp; val)</code></li>
  <li>or: <code>*ptr = *ptr | val</code></li>
  <li>xor: <code>*ptr = *ptr ^ val</code></li>
  <li>max: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using a signed comparison)</li>
  <li>min: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using a signed comparison)</li>
  <li>umax: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using an unsigned comparison)</li>
  <li>umin: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using an unsigned comparison)</li>
</ul>

<h5>Example:</h5>
<pre>
  %old = atomicrmw add i32* %ptr, i32 1 acquire                        <i>; yields {i32}</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
</h4>

<div>

<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 <a href="#t_aggregate">aggregate</a> 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.  These integers are treated as signed values where relevant.</p>

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

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

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

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

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

<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 a <a href="#trapvalues">trap value</a> 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 signed 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. If the
   offsets have a different width from the pointer, they are sign-extended or
   truncated to the width of the pointer. 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>

<!-- ======================================================================= -->
<h3>
  <a name="convertops">Conversion Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
</h4>

<div>

<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 value to trunc, and a type to trunc it to.
   Both types must be of <a href="#t_integer">integer</a> types, or vectors
   of the same number of integers.
   The bit size of the <tt>value</tt> must be larger than
   the bit size of the destination type, <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>
  %W = trunc &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i8&gt; <i>; yields &lt;i8 8, i8 7&gt;</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
</h4>

<div>

<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, and a type to cast it to.
   Both types must be of <a href="#t_integer">integer</a> types, or vectors
   of the same number of integers.
   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>
  %Z = zext &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i32&gt; <i>; yields &lt;i32 8, i32 7&gt;</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
</h4>

<div>

<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, and a type to cast it to.
   Both types must be of <a href="#t_integer">integer</a> types, or vectors
   of the same number of integers.
   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>
  %Z = sext &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i32&gt; <i>; yields &lt;i32 8, i32 7&gt;</i>
</pre>

</div>

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

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
</h4>

<div>

<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.125 to double         <i>; yields double:3.125000e+00</i>
  %Y = fpext double %X to fp128            <i>; yields fp128:0xL00000000000000004000900000000000</i>
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="otherops">Other Operations</a>
</h3>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_phi">'<tt>phi</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
   <a name="i_select">'<tt>select</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_call">'<tt>call</tt>' Instruction</a>
</h4>

<div>

<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 that the callee function does not
      access any allocas or varargs in the caller.  Note that calls may be
      marked "tail" even if they do not occur before
      a <a href="#i_ret"><tt>ret</tt></a> instruction.  If the "tail" marker is
      present, the function call is eligible for tail call optimization,
      but <a href="CodeGenerator.html#tailcallopt">might not in fact be
      optimized into a jump</a>.  The code generator may optimize calls marked
      "tail" with either 1) automatic <a href="CodeGenerator.html#sibcallopt">
      sibling call optimization</a> when the caller and callee have
      matching signatures, or 2) forced tail call optimization when the
      following extra requirements are met:
      <ul>
        <li>Caller and callee both have the calling
            convention <tt>fastcc</tt>.</li>
        <li>The call is in tail position (ret immediately follows call and ret
            uses value of call or is void).</li>
        <li>Option <tt>-tailcallopt</tt> is enabled,
            or <code>llvm::GuaranteedTailCallOpt</code> is <code>true</code>.</li>
        <li><a href="CodeGenerator.html#tailcallopt">Platform specific
            constraints are met.</a></li>
      </ul>
  </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.  The calling convention of the
      call must match the calling convention of the target function, or else the
      behavior is undefined.</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 and parameter attributes. 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 languages.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="i_landingpad">'<tt>landingpad</tt>' Instruction</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  &lt;resultval&gt; = landingpad &lt;somety&gt; personality &lt;type&gt; &lt;pers_fn&gt; &lt;clause&gt;+
  &lt;resultval&gt; = landingpad &lt;somety&gt; personality &lt;type&gt; &lt;pers_fn&gt; cleanup &lt;clause&gt;*

  &lt;clause&gt; := catch &lt;type&gt; &lt;value&gt;
  &lt;clause&gt; := filter &lt;array constant type&gt; &lt;array constant&gt;
</pre>

<h5>Overview:</h5>
<p>The '<tt>landingpad</tt>' instruction is used by
   <a href="ExceptionHandling.html#overview">LLVM's exception handling
   system</a> to specify that a basic block is a landing pad &mdash; one where
   the exception lands, and corresponds to the code found in the
   <i><tt>catch</tt></i> portion of a <i><tt>try/catch</tt></i> sequence. It
   defines values supplied by the personality function (<tt>pers_fn</tt>) upon
   re-entry to the function. The <tt>resultval</tt> has the
   type <tt>somety</tt>.</p>

<h5>Arguments:</h5>
<p>This instruction takes a <tt>pers_fn</tt> value. This is the personality
   function associated with the unwinding mechanism. The optional
   <tt>cleanup</tt> flag indicates that the landing pad block is a cleanup.</p>

<p>A <tt>clause</tt> begins with the clause type &mdash; <tt>catch</tt>
   or <tt>filter</tt> &mdash; and contains the global variable representing the
   "type" that may be caught or filtered respectively. Unlike the
   <tt>catch</tt> clause, the <tt>filter</tt> clause takes an array constant as
   its argument. Use "<tt>[0 x i8**] undef</tt>" for a filter which cannot
   throw. The '<tt>landingpad</tt>' instruction must contain <em>at least</em>
   one <tt>clause</tt> or the <tt>cleanup</tt> flag.</p>

<h5>Semantics:</h5>
<p>The '<tt>landingpad</tt>' instruction defines the values which are set by the
   personality function (<tt>pers_fn</tt>) upon re-entry to the function, and
   therefore the "result type" of the <tt>landingpad</tt> instruction. As with
   calling conventions, how the personality function results are represented in
   LLVM IR is target specific.</p>

<p>The clauses are applied in order from top to bottom. If two
   <tt>landingpad</tt> instructions are merged together through inlining, the
   clauses from the calling function are appended to the list of clauses.</p>

<p>The <tt>landingpad</tt> instruction has several restrictions:</p>

<ul>
  <li>A landing pad block is a basic block which is the unwind destination of an
      '<tt>invoke</tt>' instruction.</li>
  <li>A landing pad block must have a '<tt>landingpad</tt>' instruction as its
      first non-PHI instruction.</li>
  <li>There can be only one '<tt>landingpad</tt>' instruction within the landing
      pad block.</li>
  <li>A basic block that is not a landing pad block may not include a
      '<tt>landingpad</tt>' instruction.</li>
  <li>All '<tt>landingpad</tt>' instructions in a function must have the same
      personality function.</li>
</ul>

<h5>Example:</h5>
<pre>
  ;; A landing pad which can catch an integer.
  %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
           catch i8** @_ZTIi
  ;; A landing pad that is a cleanup.
  %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
           cleanup
  ;; A landing pad which can catch an integer and can only throw a double.
  %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
           catch i8** @_ZTIi
           filter [1 x i8**] [@_ZTId]
</pre>

</div>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="intrinsics">Intrinsic Functions</a></h2>
<!-- *********************************************************************** -->

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_varargs">Variable Argument Handling Intrinsics</a>
</h3>

<div>

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

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

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


<div>

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

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

<div>

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

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

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
</h3>

<div>

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

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

<div>

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

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

<div>

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

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

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_codegen">Code Generator Intrinsics</a>
</h3>

<div>

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

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

<div>

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

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

<div>

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

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

<div>

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

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

<div>

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

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

<div>

<h5>Syntax:</h5>
<pre>
  declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;, i32 &lt;cache type&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>cache type</tt>
   specifies whether the prefetch is performed on the data (1) or instruction (0)
   cache. The <tt>rw</tt>, <tt>locality</tt> and <tt>cache type</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>

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

<div>

<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 intrinsic may ignore it.</p>

</div>

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

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_libc">Standard C Library Intrinsics</a>
</h3>

<div>

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

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

<div>

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

<pre>
  declare void @llvm.memcpy.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
                                          i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
  declare void @llvm.memcpy.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
                                          i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&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, takes extra alignment/isvolatile arguments
   and the pointers can be in specified address spaces.</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, the fourth argument is the alignment of the
   source and destination locations, and the fifth is a boolean indicating a
   volatile access.</p>

<p>If the call to this intrinsic 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>

<p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
   <tt>llvm.memcpy</tt> call is a <a href="#volatile">volatile operation</a>.
   The detailed access behavior is not very cleanly specified and it is unwise
   to depend on it.</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>

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

<div>

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

<pre>
  declare void @llvm.memmove.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
                                           i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
  declare void @llvm.memmove.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
                                           i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&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, takes extra alignment/isvolatile arguments
   and the pointers can be in specified address spaces.</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, the fourth argument is the alignment of the
   source and destination locations, and the fifth is a boolean indicating a
   volatile access.</p>

<p>If the call to this intrinsic 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>

<p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
   <tt>llvm.memmove</tt> call is a <a href="#volatile">volatile operation</a>.
   The detailed access behavior is not very cleanly specified and it is unwise
   to depend on it.</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>

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

<div>

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
   width and for different address spaces. However, not all targets support all
   bit widths.</p>

<pre>
  declare void @llvm.memset.p0i8.i32(i8* &lt;dest&gt;, i8 &lt;val&gt;,
                                     i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
  declare void @llvm.memset.p0i8.i64(i8* &lt;dest&gt;, i8 &lt;val&gt;,
                                     i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&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 extra alignment/volatile
   arguments.  Also, the destination can be in an arbitrary address space.</p>

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

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

<p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
   <tt>llvm.memset</tt> call is a <a href="#volatile">volatile operation</a>.
   The detailed access behavior is not very cleanly specified and it is unwise
   to depend on it.</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>

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

<div>

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

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

<div>

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

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

<div>

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

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

<div>

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

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

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a>
</h4>

<div>

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

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

<h5>Overview:</h5>
<p>The '<tt>llvm.exp.*</tt>' intrinsics perform the exp function.</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 same values as the libm <tt>exp</tt> functions
   would, and handles error conditions in the same way.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_log">'<tt>llvm.log.*</tt>' Intrinsic</a>
</h4>

<div>

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

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

<h5>Overview:</h5>
<p>The '<tt>llvm.log.*</tt>' intrinsics perform the log function.</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 same values as the libm <tt>log</tt> functions
   would, and handles error conditions in the same way.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a>
</h4>

<div>

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

<pre>
  declare float     @llvm.fma.f32(float  %a, float  %b, float  %c)
  declare double    @llvm.fma.f64(double %a, double %b, double %c)
  declare x86_fp80  @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
  declare fp128     @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
  declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.fma.*</tt>' intrinsics perform the fused multiply-add
   operation.</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 same values as the libm <tt>fma</tt> functions
   would.</p>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="int_manip">Bit Manipulation Intrinsics</a>
</h3>

<div>

<p>LLVM provides intrinsics for a few important bit manipulation operations.
   These allow efficient code generation for some algorithms.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
</h4>

<div>

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

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

<div>

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
   width, or on any vector with integer elements. Not all targets support all
  bit widths or vector types, 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;)
  declare &lt;2 x i32&gt; @llvm.ctpop.v2i32(&lt;2 x i32&gt; &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, or a vector with integer elements.
   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, or within each
   element of a vector.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
</h4>

<div>

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
   integer bit width, or any vector whose elements are integers. Not all
   targets support all bit widths or vector types, 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;)
  declare &lt;2 x i32&gt; @llvm.ctlz.v2i32(&lt;2 x i32&gt; &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, or any vector type with integer element 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, or within each element of the vector if the operation
   is of vector type.  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>

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

<div>

<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
   integer bit width, or any vector of integer elements. Not all targets
   support all bit widths or vector types, 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;)
  declase &lt;2 x i32&gt; @llvm.cttz.v2i32(&lt;2 x i32&gt; &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, or a vectory with integer element 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, or within each element of a vector.
   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>

<!-- ======================================================================= -->
<h3>
  <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
</h3>

<div>

<p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_sadd_overflow">
    '<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_uadd_overflow">
    '<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_ssub_overflow">
    '<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_usub_overflow">
    '<tt>llvm.usub.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_smul_overflow">
    '<tt>llvm.smul.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_umul_overflow">
    '<tt>llvm.umul.with.overflow.*</tt>' Intrinsics
  </a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_fp16">Half Precision Floating Point Intrinsics</a>
</h3>

<div>

<p>Half precision floating point is a storage-only format. This means that it is
   a dense encoding (in memory) but does not support computation in the
   format.</p>
   
<p>This means that code must first load the half-precision floating point
   value as an i16, then convert it to float with <a
   href="#int_convert_from_fp16"><tt>llvm.convert.from.fp16</tt></a>.
   Computation can then be performed on the float value (including extending to
   double etc).  To store the value back to memory, it is first converted to
   float if needed, then converted to i16 with
   <a href="#int_convert_to_fp16"><tt>llvm.convert.to.fp16</tt></a>, then
   storing as an i16 value.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_convert_to_fp16">
    '<tt>llvm.convert.to.fp16</tt>' Intrinsic
  </a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare i16 @llvm.convert.to.fp16(f32 %a)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
   a conversion from single precision floating point format to half precision
   floating point format.</p>

<h5>Arguments:</h5>
<p>The intrinsic function contains single argument - the value to be
   converted.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
   a conversion from single precision floating point format to half precision
   floating point format. The return value is an <tt>i16</tt> which
   contains the converted number.</p>

<h5>Examples:</h5>
<pre>
  %res = call i16 @llvm.convert.to.fp16(f32 %a)
  store i16 %res, i16* @x, align 2
</pre>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_convert_from_fp16">
    '<tt>llvm.convert.from.fp16</tt>' Intrinsic
  </a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare f32 @llvm.convert.from.fp16(i16 %a)
</pre>

<h5>Overview:</h5>
<p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs
   a conversion from half precision floating point format to single precision
   floating point format.</p>

<h5>Arguments:</h5>
<p>The intrinsic function contains single argument - the value to be
   converted.</p>

<h5>Semantics:</h5>
<p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs a
   conversion from half single precision floating point format to single
   precision floating point format. The input half-float value is represented by
   an <tt>i16</tt> value.</p>

<h5>Examples:</h5>
<pre>
  %a = load i16* @x, align 2
  %res = call f32 @llvm.convert.from.fp16(i16 %a)
</pre>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="int_debugger">Debugger Intrinsics</a>
</h3>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_eh">Exception Handling Intrinsics</a>
</h3>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_trampoline">Trampoline Intrinsics</a>
</h3>

<div>

<p>These intrinsics make it possible to excise one parameter, marked with
   the <a href="#nest"><tt>nest</tt></a> attribute, from a function.
   The result is a callable
   function pointer lacking the nest parameter - the caller does not need to
   provide a value for it.  Instead, the value to use is stored in advance in a
   "trampoline", a block of memory usually allocated on the stack, which also
   contains code to splice the nest value into the argument list.  This is used
   to implement the GCC nested function address extension.</p>

<p>For example, if the function is
   <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
   pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
   follows:</p>

<pre class="doc_code">
  %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
  %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
  call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8*, i32, i32)* @f to i8*), i8* %nval)
  %p = call i8* @llvm.adjust.trampoline(i8* %tramp1)
  %fp = bitcast i8* %p to i32 (i32, i32)*
</pre>

<p>The call <tt>%val = call i32 %fp(i32 %x, i32 %y)</tt> is then equivalent
   to <tt>%val = call i32 %f(i8* %nval, i32 %x, i32 %y)</tt>.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_it">
    '<tt>llvm.init.trampoline</tt>' Intrinsic
  </a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare void @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 executable code,
   turning it into a trampoline.</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.  Then <tt>tramp</tt> needs to be
   passed to <a href="#int_at">llvm.adjust.trampoline</a> to get a pointer
   which can be <a href="#int_trampoline">bitcast (to a new function) and
   called</a>.  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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_at">
    '<tt>llvm.adjust.trampoline</tt>' Intrinsic
  </a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare i8* @llvm.adjust.trampoline(i8* &lt;tramp&gt;)
</pre>

<h5>Overview:</h5>
<p>This performs any required machine-specific adjustment to the address of a
   trampoline (passed as <tt>tramp</tt>).</p>

<h5>Arguments:</h5>
<p><tt>tramp</tt> must point to a block of memory which already has trampoline code
   filled in by a previous call to <a href="#int_it"><tt>llvm.init.trampoline</tt>
   </a>.</p>

<h5>Semantics:</h5>
<p>On some architectures the address of the code to be executed needs to be
   different to the address where the trampoline is actually stored.  This
   intrinsic returns the executable address corresponding to <tt>tramp</tt>
   after performing the required machine specific adjustments.
   The pointer returned can then be <a href="#int_trampoline"> bitcast and
   executed</a>.
</p>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="int_memorymarkers">Memory Use Markers</a>
</h3>

<div>

<p>This class of intrinsics exists to information about the lifetime of memory
   objects and ranges where variables are immutable.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
</h4>

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare {}* @llvm.invariant.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
</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>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
</h4>

<div>

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

<!-- ======================================================================= -->
<h3>
  <a name="int_general">General Intrinsics</a>
</h3>

<div>

<p>This class of intrinsics is designed to be generic and has no specific
   purpose.</p>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
</h4>

<div>

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

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

<div>

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

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

<div>

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

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
</h4>

<div>

<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 are
   different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
   function.</p>

</div>

<!-- _______________________________________________________________________ -->
<h4>
  <a name="int_objectsize">'<tt>llvm.objectsize</tt>' Intrinsic</a>
</h4>

<div>

<h5>Syntax:</h5>
<pre>
  declare i32 @llvm.objectsize.i32(i8* &lt;object&gt;, i1 &lt;type&gt;)
  declare i64 @llvm.objectsize.i64(i8* &lt;object&gt;, i1 &lt;type&gt;)
</pre>

<h5>Overview:</h5>
<p>The <tt>llvm.objectsize</tt> intrinsic is designed to provide information to
   the optimizers to determine at compile time whether a) an operation (like
   memcpy) will overflow a buffer that corresponds to an object, or b) that a
   runtime check for overflow isn't necessary. An object in this context means
   an allocation of a specific class, structure, array, or other object.</p>

<h5>Arguments:</h5>
<p>The <tt>llvm.objectsize</tt> intrinsic takes two arguments. The first
   argument is a pointer to or into the <tt>object</tt>. The second argument
   is a boolean 0 or 1. This argument determines whether you want the 
   maximum (0) or minimum (1) bytes remaining. This needs to be a literal 0 or
   1, variables are not allowed.</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>i32/i64 -1 or 0</tt>,
   depending on the <tt>type</tt> argument, if the size cannot be determined at
   compile time.</p>

</div>

</div>

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