Home | History | Annotate | Download | only in docs
      1 ==============================
      2 LLVM Language Reference Manual
      3 ==============================
      4 
      5 .. contents::
      6    :local:
      7    :depth: 4
      8 
      9 Abstract
     10 ========
     11 
     12 This document is a reference manual for the LLVM assembly language. LLVM
     13 is a Static Single Assignment (SSA) based representation that provides
     14 type safety, low-level operations, flexibility, and the capability of
     15 representing 'all' high-level languages cleanly. It is the common code
     16 representation used throughout all phases of the LLVM compilation
     17 strategy.
     18 
     19 Introduction
     20 ============
     21 
     22 The LLVM code representation is designed to be used in three different
     23 forms: as an in-memory compiler IR, as an on-disk bitcode representation
     24 (suitable for fast loading by a Just-In-Time compiler), and as a human
     25 readable assembly language representation. This allows LLVM to provide a
     26 powerful intermediate representation for efficient compiler
     27 transformations and analysis, while providing a natural means to debug
     28 and visualize the transformations. The three different forms of LLVM are
     29 all equivalent. This document describes the human readable
     30 representation and notation.
     31 
     32 The LLVM representation aims to be light-weight and low-level while
     33 being expressive, typed, and extensible at the same time. It aims to be
     34 a "universal IR" of sorts, by being at a low enough level that
     35 high-level ideas may be cleanly mapped to it (similar to how
     36 microprocessors are "universal IR's", allowing many source languages to
     37 be mapped to them). By providing type information, LLVM can be used as
     38 the target of optimizations: for example, through pointer analysis, it
     39 can be proven that a C automatic variable is never accessed outside of
     40 the current function, allowing it to be promoted to a simple SSA value
     41 instead of a memory location.
     42 
     43 .. _wellformed:
     44 
     45 Well-Formedness
     46 ---------------
     47 
     48 It is important to note that this document describes 'well formed' LLVM
     49 assembly language. There is a difference between what the parser accepts
     50 and what is considered 'well formed'. For example, the following
     51 instruction is syntactically okay, but not well formed:
     52 
     53 .. code-block:: llvm
     54 
     55     %x = add i32 1, %x
     56 
     57 because the definition of ``%x`` does not dominate all of its uses. The
     58 LLVM infrastructure provides a verification pass that may be used to
     59 verify that an LLVM module is well formed. This pass is automatically
     60 run by the parser after parsing input assembly and by the optimizer
     61 before it outputs bitcode. The violations pointed out by the verifier
     62 pass indicate bugs in transformation passes or input to the parser.
     63 
     64 .. _identifiers:
     65 
     66 Identifiers
     67 ===========
     68 
     69 LLVM identifiers come in two basic types: global and local. Global
     70 identifiers (functions, global variables) begin with the ``'@'``
     71 character. Local identifiers (register names, types) begin with the
     72 ``'%'`` character. Additionally, there are three different formats for
     73 identifiers, for different purposes:
     74 
     75 #. Named values are represented as a string of characters with their
     76    prefix. For example, ``%foo``, ``@DivisionByZero``,
     77    ``%a.really.long.identifier``. The actual regular expression used is
     78    '``[%@][a-zA-Z$._][a-zA-Z$._0-9]*``'. Identifiers which require other
     79    characters in their names can be surrounded with quotes. Special
     80    characters may be escaped using ``"\xx"`` where ``xx`` is the ASCII
     81    code for the character in hexadecimal. In this way, any character can
     82    be used in a name value, even quotes themselves.
     83 #. Unnamed values are represented as an unsigned numeric value with
     84    their prefix. For example, ``%12``, ``@2``, ``%44``.
     85 #. Constants, which are described in the section  Constants_ below.
     86 
     87 LLVM requires that values start with a prefix for two reasons: Compilers
     88 don't need to worry about name clashes with reserved words, and the set
     89 of reserved words may be expanded in the future without penalty.
     90 Additionally, unnamed identifiers allow a compiler to quickly come up
     91 with a temporary variable without having to avoid symbol table
     92 conflicts.
     93 
     94 Reserved words in LLVM are very similar to reserved words in other
     95 languages. There are keywords for different opcodes ('``add``',
     96 '``bitcast``', '``ret``', etc...), for primitive type names ('``void``',
     97 '``i32``', etc...), and others. These reserved words cannot conflict
     98 with variable names, because none of them start with a prefix character
     99 (``'%'`` or ``'@'``).
    100 
    101 Here is an example of LLVM code to multiply the integer variable
    102 '``%X``' by 8:
    103 
    104 The easy way:
    105 
    106 .. code-block:: llvm
    107 
    108     %result = mul i32 %X, 8
    109 
    110 After strength reduction:
    111 
    112 .. code-block:: llvm
    113 
    114     %result = shl i32 %X, 3
    115 
    116 And the hard way:
    117 
    118 .. code-block:: llvm
    119 
    120     %0 = add i32 %X, %X           ; yields i32:%0
    121     %1 = add i32 %0, %0           ; yields i32:%1
    122     %result = add i32 %1, %1
    123 
    124 This last way of multiplying ``%X`` by 8 illustrates several important
    125 lexical features of LLVM:
    126 
    127 #. Comments are delimited with a '``;``' and go until the end of line.
    128 #. Unnamed temporaries are created when the result of a computation is
    129    not assigned to a named value.
    130 #. Unnamed temporaries are numbered sequentially (using a per-function
    131    incrementing counter, starting with 0). Note that basic blocks are
    132    included in this numbering. For example, if the entry basic block is not
    133    given a label name, then it will get number 0.
    134 
    135 It also shows a convention that we follow in this document. When
    136 demonstrating instructions, we will follow an instruction with a comment
    137 that defines the type and name of value produced.
    138 
    139 High Level Structure
    140 ====================
    141 
    142 Module Structure
    143 ----------------
    144 
    145 LLVM programs are composed of ``Module``'s, each of which is a
    146 translation unit of the input programs. Each module consists of
    147 functions, global variables, and symbol table entries. Modules may be
    148 combined together with the LLVM linker, which merges function (and
    149 global variable) definitions, resolves forward declarations, and merges
    150 symbol table entries. Here is an example of the "hello world" module:
    151 
    152 .. code-block:: llvm
    153 
    154     ; Declare the string constant as a global constant.
    155     @.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"
    156 
    157     ; External declaration of the puts function
    158     declare i32 @puts(i8* nocapture) nounwind
    159 
    160     ; Definition of main function
    161     define i32 @main() {   ; i32()*
    162       ; Convert [13 x i8]* to i8  *...
    163       %cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0
    164 
    165       ; Call puts function to write out the string to stdout.
    166       call i32 @puts(i8* %cast210)
    167       ret i32 0
    168     }
    169 
    170     ; Named metadata
    171     !1 = metadata !{i32 42}
    172     !foo = !{!1, null}
    173 
    174 This example is made up of a :ref:`global variable <globalvars>` named
    175 "``.str``", an external declaration of the "``puts``" function, a
    176 :ref:`function definition <functionstructure>` for "``main``" and
    177 :ref:`named metadata <namedmetadatastructure>` "``foo``".
    178 
    179 In general, a module is made up of a list of global values (where both
    180 functions and global variables are global values). Global values are
    181 represented by a pointer to a memory location (in this case, a pointer
    182 to an array of char, and a pointer to a function), and have one of the
    183 following :ref:`linkage types <linkage>`.
    184 
    185 .. _linkage:
    186 
    187 Linkage Types
    188 -------------
    189 
    190 All Global Variables and Functions have one of the following types of
    191 linkage:
    192 
    193 ``private``
    194     Global values with "``private``" linkage are only directly
    195     accessible by objects in the current module. In particular, linking
    196     code into a module with an private global value may cause the
    197     private to be renamed as necessary to avoid collisions. Because the
    198     symbol is private to the module, all references can be updated. This
    199     doesn't show up in any symbol table in the object file.
    200 ``internal``
    201     Similar to private, but the value shows as a local symbol
    202     (``STB_LOCAL`` in the case of ELF) in the object file. This
    203     corresponds to the notion of the '``static``' keyword in C.
    204 ``available_externally``
    205     Globals with "``available_externally``" linkage are never emitted
    206     into the object file corresponding to the LLVM module. They exist to
    207     allow inlining and other optimizations to take place given knowledge
    208     of the definition of the global, which is known to be somewhere
    209     outside the module. Globals with ``available_externally`` linkage
    210     are allowed to be discarded at will, and are otherwise the same as
    211     ``linkonce_odr``. This linkage type is only allowed on definitions,
    212     not declarations.
    213 ``linkonce``
    214     Globals with "``linkonce``" linkage are merged with other globals of
    215     the same name when linkage occurs. This can be used to implement
    216     some forms of inline functions, templates, or other code which must
    217     be generated in each translation unit that uses it, but where the
    218     body may be overridden with a more definitive definition later.
    219     Unreferenced ``linkonce`` globals are allowed to be discarded. Note
    220     that ``linkonce`` linkage does not actually allow the optimizer to
    221     inline the body of this function into callers because it doesn't
    222     know if this definition of the function is the definitive definition
    223     within the program or whether it will be overridden by a stronger
    224     definition. To enable inlining and other optimizations, use
    225     "``linkonce_odr``" linkage.
    226 ``weak``
    227     "``weak``" linkage has the same merging semantics as ``linkonce``
    228     linkage, except that unreferenced globals with ``weak`` linkage may
    229     not be discarded. This is used for globals that are declared "weak"
    230     in C source code.
    231 ``common``
    232     "``common``" linkage is most similar to "``weak``" linkage, but they
    233     are used for tentative definitions in C, such as "``int X;``" at
    234     global scope. Symbols with "``common``" linkage are merged in the
    235     same way as ``weak symbols``, and they may not be deleted if
    236     unreferenced. ``common`` symbols may not have an explicit section,
    237     must have a zero initializer, and may not be marked
    238     ':ref:`constant <globalvars>`'. Functions and aliases may not have
    239     common linkage.
    240 
    241 .. _linkage_appending:
    242 
    243 ``appending``
    244     "``appending``" linkage may only be applied to global variables of
    245     pointer to array type. When two global variables with appending
    246     linkage are linked together, the two global arrays are appended
    247     together. This is the LLVM, typesafe, equivalent of having the
    248     system linker append together "sections" with identical names when
    249     .o files are linked.
    250 ``extern_weak``
    251     The semantics of this linkage follow the ELF object file model: the
    252     symbol is weak until linked, if not linked, the symbol becomes null
    253     instead of being an undefined reference.
    254 ``linkonce_odr``, ``weak_odr``
    255     Some languages allow differing globals to be merged, such as two
    256     functions with different semantics. Other languages, such as
    257     ``C++``, ensure that only equivalent globals are ever merged (the
    258     "one definition rule" --- "ODR").  Such languages can use the
    259     ``linkonce_odr`` and ``weak_odr`` linkage types to indicate that the
    260     global will only be merged with equivalent globals. These linkage
    261     types are otherwise the same as their non-``odr`` versions.
    262 ``external``
    263     If none of the above identifiers are used, the global is externally
    264     visible, meaning that it participates in linkage and can be used to
    265     resolve external symbol references.
    266 
    267 It is illegal for a function *declaration* to have any linkage type
    268 other than ``external`` or ``extern_weak``.
    269 
    270 .. _callingconv:
    271 
    272 Calling Conventions
    273 -------------------
    274 
    275 LLVM :ref:`functions <functionstructure>`, :ref:`calls <i_call>` and
    276 :ref:`invokes <i_invoke>` can all have an optional calling convention
    277 specified for the call. The calling convention of any pair of dynamic
    278 caller/callee must match, or the behavior of the program is undefined.
    279 The following calling conventions are supported by LLVM, and more may be
    280 added in the future:
    281 
    282 "``ccc``" - The C calling convention
    283     This calling convention (the default if no other calling convention
    284     is specified) matches the target C calling conventions. This calling
    285     convention supports varargs function calls and tolerates some
    286     mismatch in the declared prototype and implemented declaration of
    287     the function (as does normal C).
    288 "``fastcc``" - The fast calling convention
    289     This calling convention attempts to make calls as fast as possible
    290     (e.g. by passing things in registers). This calling convention
    291     allows the target to use whatever tricks it wants to produce fast
    292     code for the target, without having to conform to an externally
    293     specified ABI (Application Binary Interface). `Tail calls can only
    294     be optimized when this, the GHC or the HiPE convention is
    295     used. <CodeGenerator.html#id80>`_ This calling convention does not
    296     support varargs and requires the prototype of all callees to exactly
    297     match the prototype of the function definition.
    298 "``coldcc``" - The cold calling convention
    299     This calling convention attempts to make code in the caller as
    300     efficient as possible under the assumption that the call is not
    301     commonly executed. As such, these calls often preserve all registers
    302     so that the call does not break any live ranges in the caller side.
    303     This calling convention does not support varargs and requires the
    304     prototype of all callees to exactly match the prototype of the
    305     function definition. Furthermore the inliner doesn't consider such function
    306     calls for inlining.
    307 "``cc 10``" - GHC convention
    308     This calling convention has been implemented specifically for use by
    309     the `Glasgow Haskell Compiler (GHC) <http://www.haskell.org/ghc>`_.
    310     It passes everything in registers, going to extremes to achieve this
    311     by disabling callee save registers. This calling convention should
    312     not be used lightly but only for specific situations such as an
    313     alternative to the *register pinning* performance technique often
    314     used when implementing functional programming languages. At the
    315     moment only X86 supports this convention and it has the following
    316     limitations:
    317 
    318     -  On *X86-32* only supports up to 4 bit type parameters. No
    319        floating point types are supported.
    320     -  On *X86-64* only supports up to 10 bit type parameters and 6
    321        floating point parameters.
    322 
    323     This calling convention supports `tail call
    324     optimization <CodeGenerator.html#id80>`_ but requires both the
    325     caller and callee are using it.
    326 "``cc 11``" - The HiPE calling convention
    327     This calling convention has been implemented specifically for use by
    328     the `High-Performance Erlang
    329     (HiPE) <http://www.it.uu.se/research/group/hipe/>`_ compiler, *the*
    330     native code compiler of the `Ericsson's Open Source Erlang/OTP
    331     system <http://www.erlang.org/download.shtml>`_. It uses more
    332     registers for argument passing than the ordinary C calling
    333     convention and defines no callee-saved registers. The calling
    334     convention properly supports `tail call
    335     optimization <CodeGenerator.html#id80>`_ but requires that both the
    336     caller and the callee use it. It uses a *register pinning*
    337     mechanism, similar to GHC's convention, for keeping frequently
    338     accessed runtime components pinned to specific hardware registers.
    339     At the moment only X86 supports this convention (both 32 and 64
    340     bit).
    341 "``webkit_jscc``" - WebKit's JavaScript calling convention
    342     This calling convention has been implemented for `WebKit FTL JIT
    343     <https://trac.webkit.org/wiki/FTLJIT>`_. It passes arguments on the
    344     stack right to left (as cdecl does), and returns a value in the
    345     platform's customary return register.
    346 "``anyregcc``" - Dynamic calling convention for code patching
    347     This is a special convention that supports patching an arbitrary code
    348     sequence in place of a call site. This convention forces the call
    349     arguments into registers but allows them to be dynamcially
    350     allocated. This can currently only be used with calls to
    351     llvm.experimental.patchpoint because only this intrinsic records
    352     the location of its arguments in a side table. See :doc:`StackMaps`.
    353 "``preserve_mostcc``" - The `PreserveMost` calling convention
    354     This calling convention attempts to make the code in the caller as little
    355     intrusive as possible. This calling convention behaves identical to the `C`
    356     calling convention on how arguments and return values are passed, but it
    357     uses a different set of caller/callee-saved registers. This alleviates the
    358     burden of saving and recovering a large register set before and after the
    359     call in the caller. If the arguments are passed in callee-saved registers,
    360     then they will be preserved by the callee across the call. This doesn't
    361     apply for values returned in callee-saved registers.
    362 
    363     - On X86-64 the callee preserves all general purpose registers, except for
    364       R11. R11 can be used as a scratch register. Floating-point registers
    365       (XMMs/YMMs) are not preserved and need to be saved by the caller.
    366 
    367     The idea behind this convention is to support calls to runtime functions
    368     that have a hot path and a cold path. The hot path is usually a small piece
    369     of code that doesn't many registers. The cold path might need to call out to
    370     another function and therefore only needs to preserve the caller-saved
    371     registers, which haven't already been saved by the caller. The
    372     `PreserveMost` calling convention is very similar to the `cold` calling
    373     convention in terms of caller/callee-saved registers, but they are used for
    374     different types of function calls. `coldcc` is for function calls that are
    375     rarely executed, whereas `preserve_mostcc` function calls are intended to be
    376     on the hot path and definitely executed a lot. Furthermore `preserve_mostcc`
    377     doesn't prevent the inliner from inlining the function call.
    378 
    379     This calling convention will be used by a future version of the ObjectiveC
    380     runtime and should therefore still be considered experimental at this time.
    381     Although this convention was created to optimize certain runtime calls to
    382     the ObjectiveC runtime, it is not limited to this runtime and might be used
    383     by other runtimes in the future too. The current implementation only
    384     supports X86-64, but the intention is to support more architectures in the
    385     future.
    386 "``preserve_allcc``" - The `PreserveAll` calling convention
    387     This calling convention attempts to make the code in the caller even less
    388     intrusive than the `PreserveMost` calling convention. This calling
    389     convention also behaves identical to the `C` calling convention on how
    390     arguments and return values are passed, but it uses a different set of
    391     caller/callee-saved registers. This removes the burden of saving and
    392     recovering a large register set before and after the call in the caller. If
    393     the arguments are passed in callee-saved registers, then they will be
    394     preserved by the callee across the call. This doesn't apply for values
    395     returned in callee-saved registers.
    396 
    397     - On X86-64 the callee preserves all general purpose registers, except for
    398       R11. R11 can be used as a scratch register. Furthermore it also preserves
    399       all floating-point registers (XMMs/YMMs).
    400 
    401     The idea behind this convention is to support calls to runtime functions
    402     that don't need to call out to any other functions.
    403 
    404     This calling convention, like the `PreserveMost` calling convention, will be
    405     used by a future version of the ObjectiveC runtime and should be considered
    406     experimental at this time.
    407 "``cc <n>``" - Numbered convention
    408     Any calling convention may be specified by number, allowing
    409     target-specific calling conventions to be used. Target specific
    410     calling conventions start at 64.
    411 
    412 More calling conventions can be added/defined on an as-needed basis, to
    413 support Pascal conventions or any other well-known target-independent
    414 convention.
    415 
    416 .. _visibilitystyles:
    417 
    418 Visibility Styles
    419 -----------------
    420 
    421 All Global Variables and Functions have one of the following visibility
    422 styles:
    423 
    424 "``default``" - Default style
    425     On targets that use the ELF object file format, default visibility
    426     means that the declaration is visible to other modules and, in
    427     shared libraries, means that the declared entity may be overridden.
    428     On Darwin, default visibility means that the declaration is visible
    429     to other modules. Default visibility corresponds to "external
    430     linkage" in the language.
    431 "``hidden``" - Hidden style
    432     Two declarations of an object with hidden visibility refer to the
    433     same object if they are in the same shared object. Usually, hidden
    434     visibility indicates that the symbol will not be placed into the
    435     dynamic symbol table, so no other module (executable or shared
    436     library) can reference it directly.
    437 "``protected``" - Protected style
    438     On ELF, protected visibility indicates that the symbol will be
    439     placed in the dynamic symbol table, but that references within the
    440     defining module will bind to the local symbol. That is, the symbol
    441     cannot be overridden by another module.
    442 
    443 A symbol with ``internal`` or ``private`` linkage must have ``default``
    444 visibility.
    445 
    446 .. _dllstorageclass:
    447 
    448 DLL Storage Classes
    449 -------------------
    450 
    451 All Global Variables, Functions and Aliases can have one of the following
    452 DLL storage class:
    453 
    454 ``dllimport``
    455     "``dllimport``" causes the compiler to reference a function or variable via
    456     a global pointer to a pointer that is set up by the DLL exporting the
    457     symbol. On Microsoft Windows targets, the pointer name is formed by
    458     combining ``__imp_`` and the function or variable name.
    459 ``dllexport``
    460     "``dllexport``" causes the compiler to provide a global pointer to a pointer
    461     in a DLL, so that it can be referenced with the ``dllimport`` attribute. On
    462     Microsoft Windows targets, the pointer name is formed by combining
    463     ``__imp_`` and the function or variable name. Since this storage class
    464     exists for defining a dll interface, the compiler, assembler and linker know
    465     it is externally referenced and must refrain from deleting the symbol.
    466 
    467 .. _tls_model:
    468 
    469 Thread Local Storage Models
    470 ---------------------------
    471 
    472 A variable may be defined as ``thread_local``, which means that it will
    473 not be shared by threads (each thread will have a separated copy of the
    474 variable). Not all targets support thread-local variables. Optionally, a
    475 TLS model may be specified:
    476 
    477 ``localdynamic``
    478     For variables that are only used within the current shared library.
    479 ``initialexec``
    480     For variables in modules that will not be loaded dynamically.
    481 ``localexec``
    482     For variables defined in the executable and only used within it.
    483 
    484 If no explicit model is given, the "general dynamic" model is used.
    485 
    486 The models correspond to the ELF TLS models; see `ELF Handling For
    487 Thread-Local Storage <http://people.redhat.com/drepper/tls.pdf>`_ for
    488 more information on under which circumstances the different models may
    489 be used. The target may choose a different TLS model if the specified
    490 model is not supported, or if a better choice of model can be made.
    491 
    492 A model can also be specified in a alias, but then it only governs how
    493 the alias is accessed. It will not have any effect in the aliasee.
    494 
    495 .. _namedtypes:
    496 
    497 Structure Types
    498 ---------------
    499 
    500 LLVM IR allows you to specify both "identified" and "literal" :ref:`structure
    501 types <t_struct>`.  Literal types are uniqued structurally, but identified types
    502 are never uniqued.  An :ref:`opaque structural type <t_opaque>` can also be used
    503 to forward declare a type which is not yet available.
    504 
    505 An example of a identified structure specification is:
    506 
    507 .. code-block:: llvm
    508 
    509     %mytype = type { %mytype*, i32 }
    510 
    511 Prior to the LLVM 3.0 release, identified types were structurally uniqued.  Only
    512 literal types are uniqued in recent versions of LLVM.
    513 
    514 .. _globalvars:
    515 
    516 Global Variables
    517 ----------------
    518 
    519 Global variables define regions of memory allocated at compilation time
    520 instead of run-time.
    521 
    522 Global variables definitions must be initialized.
    523 
    524 Global variables in other translation units can also be declared, in which
    525 case they don't have an initializer.
    526 
    527 Either global variable definitions or declarations may have an explicit section
    528 to be placed in and may have an optional explicit alignment specified.
    529 
    530 A variable may be defined as a global ``constant``, which indicates that
    531 the contents of the variable will **never** be modified (enabling better
    532 optimization, allowing the global data to be placed in the read-only
    533 section of an executable, etc). Note that variables that need runtime
    534 initialization cannot be marked ``constant`` as there is a store to the
    535 variable.
    536 
    537 LLVM explicitly allows *declarations* of global variables to be marked
    538 constant, even if the final definition of the global is not. This
    539 capability can be used to enable slightly better optimization of the
    540 program, but requires the language definition to guarantee that
    541 optimizations based on the 'constantness' are valid for the translation
    542 units that do not include the definition.
    543 
    544 As SSA values, global variables define pointer values that are in scope
    545 (i.e. they dominate) all basic blocks in the program. Global variables
    546 always define a pointer to their "content" type because they describe a
    547 region of memory, and all memory objects in LLVM are accessed through
    548 pointers.
    549 
    550 Global variables can be marked with ``unnamed_addr`` which indicates
    551 that the address is not significant, only the content. Constants marked
    552 like this can be merged with other constants if they have the same
    553 initializer. Note that a constant with significant address *can* be
    554 merged with a ``unnamed_addr`` constant, the result being a constant
    555 whose address is significant.
    556 
    557 A global variable may be declared to reside in a target-specific
    558 numbered address space. For targets that support them, address spaces
    559 may affect how optimizations are performed and/or what target
    560 instructions are used to access the variable. The default address space
    561 is zero. The address space qualifier must precede any other attributes.
    562 
    563 LLVM allows an explicit section to be specified for globals. If the
    564 target supports it, it will emit globals to the section specified.
    565 Additionally, the global can placed in a comdat if the target has the necessary
    566 support.
    567 
    568 By default, global initializers are optimized by assuming that global
    569 variables defined within the module are not modified from their
    570 initial values before the start of the global initializer.  This is
    571 true even for variables potentially accessible from outside the
    572 module, including those with external linkage or appearing in
    573 ``@llvm.used`` or dllexported variables. This assumption may be suppressed
    574 by marking the variable with ``externally_initialized``.
    575 
    576 An explicit alignment may be specified for a global, which must be a
    577 power of 2. If not present, or if the alignment is set to zero, the
    578 alignment of the global is set by the target to whatever it feels
    579 convenient. If an explicit alignment is specified, the global is forced
    580 to have exactly that alignment. Targets and optimizers are not allowed
    581 to over-align the global if the global has an assigned section. In this
    582 case, the extra alignment could be observable: for example, code could
    583 assume that the globals are densely packed in their section and try to
    584 iterate over them as an array, alignment padding would break this
    585 iteration.
    586 
    587 Globals can also have a :ref:`DLL storage class <dllstorageclass>`.
    588 
    589 Variables and aliasaes can have a
    590 :ref:`Thread Local Storage Model <tls_model>`.
    591 
    592 Syntax::
    593 
    594     [@<GlobalVarName> =] [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal]
    595                          [unnamed_addr] [AddrSpace] [ExternallyInitialized]
    596                          <global | constant> <Type> [<InitializerConstant>]
    597                          [, section "name"] [, align <Alignment>]
    598 
    599 For example, the following defines a global in a numbered address space
    600 with an initializer, section, and alignment:
    601 
    602 .. code-block:: llvm
    603 
    604     @G = addrspace(5) constant float 1.0, section "foo", align 4
    605 
    606 The following example just declares a global variable
    607 
    608 .. code-block:: llvm
    609 
    610    @G = external global i32
    611 
    612 The following example defines a thread-local global with the
    613 ``initialexec`` TLS model:
    614 
    615 .. code-block:: llvm
    616 
    617     @G = thread_local(initialexec) global i32 0, align 4
    618 
    619 .. _functionstructure:
    620 
    621 Functions
    622 ---------
    623 
    624 LLVM function definitions consist of the "``define``" keyword, an
    625 optional :ref:`linkage type <linkage>`, an optional :ref:`visibility
    626 style <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`,
    627 an optional :ref:`calling convention <callingconv>`,
    628 an optional ``unnamed_addr`` attribute, a return type, an optional
    629 :ref:`parameter attribute <paramattrs>` for the return type, a function
    630 name, a (possibly empty) argument list (each with optional :ref:`parameter
    631 attributes <paramattrs>`), optional :ref:`function attributes <fnattrs>`,
    632 an optional section, an optional alignment,
    633 an optional :ref:`comdat <langref_comdats>`,
    634 an optional :ref:`garbage collector name <gc>`, an optional :ref:`prefix <prefixdata>`, an opening
    635 curly brace, a list of basic blocks, and a closing curly brace.
    636 
    637 LLVM function declarations consist of the "``declare``" keyword, an
    638 optional :ref:`linkage type <linkage>`, an optional :ref:`visibility
    639 style <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`,
    640 an optional :ref:`calling convention <callingconv>`,
    641 an optional ``unnamed_addr`` attribute, a return type, an optional
    642 :ref:`parameter attribute <paramattrs>` for the return type, a function
    643 name, a possibly empty list of arguments, an optional alignment, an optional
    644 :ref:`garbage collector name <gc>` and an optional :ref:`prefix <prefixdata>`.
    645 
    646 A function definition contains a list of basic blocks, forming the CFG (Control
    647 Flow Graph) for the function. Each basic block may optionally start with a label
    648 (giving the basic block a symbol table entry), contains a list of instructions,
    649 and ends with a :ref:`terminator <terminators>` instruction (such as a branch or
    650 function return). If an explicit label is not provided, a block is assigned an
    651 implicit numbered label, using the next value from the same counter as used for
    652 unnamed temporaries (:ref:`see above<identifiers>`). For example, if a function
    653 entry block does not have an explicit label, it will be assigned label "%0",
    654 then the first unnamed temporary in that block will be "%1", etc.
    655 
    656 The first basic block in a function is special in two ways: it is
    657 immediately executed on entrance to the function, and it is not allowed
    658 to have predecessor basic blocks (i.e. there can not be any branches to
    659 the entry block of a function). Because the block can have no
    660 predecessors, it also cannot have any :ref:`PHI nodes <i_phi>`.
    661 
    662 LLVM allows an explicit section to be specified for functions. If the
    663 target supports it, it will emit functions to the section specified.
    664 Additionally, the function can placed in a COMDAT.
    665 
    666 An explicit alignment may be specified for a function. If not present,
    667 or if the alignment is set to zero, the alignment of the function is set
    668 by the target to whatever it feels convenient. If an explicit alignment
    669 is specified, the function is forced to have at least that much
    670 alignment. All alignments must be a power of 2.
    671 
    672 If the ``unnamed_addr`` attribute is given, the address is know to not
    673 be significant and two identical functions can be merged.
    674 
    675 Syntax::
    676 
    677     define [linkage] [visibility] [DLLStorageClass]
    678            [cconv] [ret attrs]
    679            <ResultType> @<FunctionName> ([argument list])
    680            [unnamed_addr] [fn Attrs] [section "name"] [comdat $<ComdatName>]
    681            [align N] [gc] [prefix Constant] { ... }
    682 
    683 .. _langref_aliases:
    684 
    685 Aliases
    686 -------
    687 
    688 Aliases, unlike function or variables, don't create any new data. They
    689 are just a new symbol and metadata for an existing position.
    690 
    691 Aliases have a name and an aliasee that is either a global value or a
    692 constant expression.
    693 
    694 Aliases may have an optional :ref:`linkage type <linkage>`, an optional
    695 :ref:`visibility style <visibility>`, an optional :ref:`DLL storage class
    696 <dllstorageclass>` and an optional :ref:`tls model <tls_model>`.
    697 
    698 Syntax::
    699 
    700     @<Name> = [Visibility] [DLLStorageClass] [ThreadLocal] [unnamed_addr] alias [Linkage] <AliaseeTy> @<Aliasee>
    701 
    702 The linkage must be one of ``private``, ``internal``, ``linkonce``, ``weak``,
    703 ``linkonce_odr``, ``weak_odr``, ``external``. Note that some system linkers
    704 might not correctly handle dropping a weak symbol that is aliased.
    705 
    706 Alias that are not ``unnamed_addr`` are guaranteed to have the same address as
    707 the aliasee expression. ``unnamed_addr`` ones are only guaranteed to point
    708 to the same content.
    709 
    710 Since aliases are only a second name, some restrictions apply, of which
    711 some can only be checked when producing an object file:
    712 
    713 * The expression defining the aliasee must be computable at assembly
    714   time. Since it is just a name, no relocations can be used.
    715 
    716 * No alias in the expression can be weak as the possibility of the
    717   intermediate alias being overridden cannot be represented in an
    718   object file.
    719 
    720 * No global value in the expression can be a declaration, since that
    721   would require a relocation, which is not possible.
    722 
    723 .. _langref_comdats:
    724 
    725 Comdats
    726 -------
    727 
    728 Comdat IR provides access to COFF and ELF object file COMDAT functionality.
    729 
    730 Comdats have a name which represents the COMDAT key.  All global objects which
    731 specify this key will only end up in the final object file if the linker chooses
    732 that key over some other key.  Aliases are placed in the same COMDAT that their
    733 aliasee computes to, if any.
    734 
    735 Comdats have a selection kind to provide input on how the linker should
    736 choose between keys in two different object files.
    737 
    738 Syntax::
    739 
    740     $<Name> = comdat SelectionKind
    741 
    742 The selection kind must be one of the following:
    743 
    744 ``any``
    745     The linker may choose any COMDAT key, the choice is arbitrary.
    746 ``exactmatch``
    747     The linker may choose any COMDAT key but the sections must contain the
    748     same data.
    749 ``largest``
    750     The linker will choose the section containing the largest COMDAT key.
    751 ``noduplicates``
    752     The linker requires that only section with this COMDAT key exist.
    753 ``samesize``
    754     The linker may choose any COMDAT key but the sections must contain the
    755     same amount of data.
    756 
    757 Note that the Mach-O platform doesn't support COMDATs and ELF only supports
    758 ``any`` as a selection kind.
    759 
    760 Here is an example of a COMDAT group where a function will only be selected if
    761 the COMDAT key's section is the largest:
    762 
    763 .. code-block:: llvm
    764 
    765    $foo = comdat largest
    766    @foo = global i32 2, comdat $foo
    767 
    768    define void @bar() comdat $foo {
    769      ret void
    770    }
    771 
    772 In a COFF object file, this will create a COMDAT section with selection kind
    773 ``IMAGE_COMDAT_SELECT_LARGEST`` containing the contents of the ``@foo`` symbol
    774 and another COMDAT section with selection kind
    775 ``IMAGE_COMDAT_SELECT_ASSOCIATIVE`` which is associated with the first COMDAT
    776 section and contains the contents of the ``@baz`` symbol.
    777 
    778 There are some restrictions on the properties of the global object.
    779 It, or an alias to it, must have the same name as the COMDAT group when
    780 targeting COFF.
    781 The contents and size of this object may be used during link-time to determine
    782 which COMDAT groups get selected depending on the selection kind.
    783 Because the name of the object must match the name of the COMDAT group, the
    784 linkage of the global object must not be local; local symbols can get renamed
    785 if a collision occurs in the symbol table.
    786 
    787 The combined use of COMDATS and section attributes may yield surprising results.
    788 For example:
    789 
    790 .. code-block:: llvm
    791 
    792    $foo = comdat any
    793    $bar = comdat any
    794    @g1 = global i32 42, section "sec", comdat $foo
    795    @g2 = global i32 42, section "sec", comdat $bar
    796 
    797 From the object file perspective, this requires the creation of two sections
    798 with the same name.  This is necessary because both globals belong to different
    799 COMDAT groups and COMDATs, at the object file level, are represented by
    800 sections.
    801 
    802 Note that certain IR constructs like global variables and functions may create
    803 COMDATs in the object file in addition to any which are specified using COMDAT
    804 IR.  This arises, for example, when a global variable has linkonce_odr linkage.
    805 
    806 .. _namedmetadatastructure:
    807 
    808 Named Metadata
    809 --------------
    810 
    811 Named metadata is a collection of metadata. :ref:`Metadata
    812 nodes <metadata>` (but not metadata strings) are the only valid
    813 operands for a named metadata.
    814 
    815 Syntax::
    816 
    817     ; Some unnamed metadata nodes, which are referenced by the named metadata.
    818     !0 = metadata !{metadata !"zero"}
    819     !1 = metadata !{metadata !"one"}
    820     !2 = metadata !{metadata !"two"}
    821     ; A named metadata.
    822     !name = !{!0, !1, !2}
    823 
    824 .. _paramattrs:
    825 
    826 Parameter Attributes
    827 --------------------
    828 
    829 The return type and each parameter of a function type may have a set of
    830 *parameter attributes* associated with them. Parameter attributes are
    831 used to communicate additional information about the result or
    832 parameters of a function. Parameter attributes are considered to be part
    833 of the function, not of the function type, so functions with different
    834 parameter attributes can have the same function type.
    835 
    836 Parameter attributes are simple keywords that follow the type specified.
    837 If multiple parameter attributes are needed, they are space separated.
    838 For example:
    839 
    840 .. code-block:: llvm
    841 
    842     declare i32 @printf(i8* noalias nocapture, ...)
    843     declare i32 @atoi(i8 zeroext)
    844     declare signext i8 @returns_signed_char()
    845 
    846 Note that any attributes for the function result (``nounwind``,
    847 ``readonly``) come immediately after the argument list.
    848 
    849 Currently, only the following parameter attributes are defined:
    850 
    851 ``zeroext``
    852     This indicates to the code generator that the parameter or return
    853     value should be zero-extended to the extent required by the target's
    854     ABI (which is usually 32-bits, but is 8-bits for a i1 on x86-64) by
    855     the caller (for a parameter) or the callee (for a return value).
    856 ``signext``
    857     This indicates to the code generator that the parameter or return
    858     value should be sign-extended to the extent required by the target's
    859     ABI (which is usually 32-bits) by the caller (for a parameter) or
    860     the callee (for a return value).
    861 ``inreg``
    862     This indicates that this parameter or return value should be treated
    863     in a special target-dependent fashion during while emitting code for
    864     a function call or return (usually, by putting it in a register as
    865     opposed to memory, though some targets use it to distinguish between
    866     two different kinds of registers). Use of this attribute is
    867     target-specific.
    868 ``byval``
    869     This indicates that the pointer parameter should really be passed by
    870     value to the function. The attribute implies that a hidden copy of
    871     the pointee is made between the caller and the callee, so the callee
    872     is unable to modify the value in the caller. This attribute is only
    873     valid on LLVM pointer arguments. It is generally used to pass
    874     structs and arrays by value, but is also valid on pointers to
    875     scalars. The copy is considered to belong to the caller not the
    876     callee (for example, ``readonly`` functions should not write to
    877     ``byval`` parameters). This is not a valid attribute for return
    878     values.
    879 
    880     The byval attribute also supports specifying an alignment with the
    881     align attribute. It indicates the alignment of the stack slot to
    882     form and the known alignment of the pointer specified to the call
    883     site. If the alignment is not specified, then the code generator
    884     makes a target-specific assumption.
    885 
    886 .. _attr_inalloca:
    887 
    888 ``inalloca``
    889 
    890     The ``inalloca`` argument attribute allows the caller to take the
    891     address of outgoing stack arguments.  An ``inalloca`` argument must
    892     be a pointer to stack memory produced by an ``alloca`` instruction.
    893     The alloca, or argument allocation, must also be tagged with the
    894     inalloca keyword.  Only the past argument may have the ``inalloca``
    895     attribute, and that argument is guaranteed to be passed in memory.
    896 
    897     An argument allocation may be used by a call at most once because
    898     the call may deallocate it.  The ``inalloca`` attribute cannot be
    899     used in conjunction with other attributes that affect argument
    900     storage, like ``inreg``, ``nest``, ``sret``, or ``byval``.  The
    901     ``inalloca`` attribute also disables LLVM's implicit lowering of
    902     large aggregate return values, which means that frontend authors
    903     must lower them with ``sret`` pointers.
    904 
    905     When the call site is reached, the argument allocation must have
    906     been the most recent stack allocation that is still live, or the
    907     results are undefined.  It is possible to allocate additional stack
    908     space after an argument allocation and before its call site, but it
    909     must be cleared off with :ref:`llvm.stackrestore
    910     <int_stackrestore>`.
    911 
    912     See :doc:`InAlloca` for more information on how to use this
    913     attribute.
    914 
    915 ``sret``
    916     This indicates that the pointer parameter specifies the address of a
    917     structure that is the return value of the function in the source
    918     program. This pointer must be guaranteed by the caller to be valid:
    919     loads and stores to the structure may be assumed by the callee
    920     not to trap and to be properly aligned. This may only be applied to
    921     the first parameter. This is not a valid attribute for return
    922     values.
    923 
    924 .. _noalias:
    925 
    926 ``noalias``
    927     This indicates that pointer values :ref:`based <pointeraliasing>` on
    928     the argument or return value do not alias pointer values which are
    929     not *based* on it, ignoring certain "irrelevant" dependencies. For a
    930     call to the parent function, dependencies between memory references
    931     from before or after the call and from those during the call are
    932     "irrelevant" to the ``noalias`` keyword for the arguments and return
    933     value used in that call. The caller shares the responsibility with
    934     the callee for ensuring that these requirements are met. For further
    935     details, please see the discussion of the NoAlias response in :ref:`alias
    936     analysis <Must, May, or No>`.
    937 
    938     Note that this definition of ``noalias`` is intentionally similar
    939     to the definition of ``restrict`` in C99 for function arguments,
    940     though it is slightly weaker.
    941 
    942     For function return values, C99's ``restrict`` is not meaningful,
    943     while LLVM's ``noalias`` is.
    944 ``nocapture``
    945     This indicates that the callee does not make any copies of the
    946     pointer that outlive the callee itself. This is not a valid
    947     attribute for return values.
    948 
    949 .. _nest:
    950 
    951 ``nest``
    952     This indicates that the pointer parameter can be excised using the
    953     :ref:`trampoline intrinsics <int_trampoline>`. This is not a valid
    954     attribute for return values and can only be applied to one parameter.
    955 
    956 ``returned``
    957     This indicates that the function always returns the argument as its return
    958     value. This is an optimization hint to the code generator when generating
    959     the caller, allowing tail call optimization and omission of register saves
    960     and restores in some cases; it is not checked or enforced when generating
    961     the callee. The parameter and the function return type must be valid
    962     operands for the :ref:`bitcast instruction <i_bitcast>`. This is not a
    963     valid attribute for return values and can only be applied to one parameter.
    964 
    965 ``nonnull``
    966     This indicates that the parameter or return pointer is not null. This
    967     attribute may only be applied to pointer typed parameters. This is not
    968     checked or enforced by LLVM, the caller must ensure that the pointer
    969     passed in is non-null, or the callee must ensure that the returned pointer 
    970     is non-null.
    971 
    972 .. _gc:
    973 
    974 Garbage Collector Names
    975 -----------------------
    976 
    977 Each function may specify a garbage collector name, which is simply a
    978 string:
    979 
    980 .. code-block:: llvm
    981 
    982     define void @f() gc "name" { ... }
    983 
    984 The compiler declares the supported values of *name*. Specifying a
    985 collector which will cause the compiler to alter its output in order to
    986 support the named garbage collection algorithm.
    987 
    988 .. _prefixdata:
    989 
    990 Prefix Data
    991 -----------
    992 
    993 Prefix data is data associated with a function which the code generator
    994 will emit immediately before the function body.  The purpose of this feature
    995 is to allow frontends to associate language-specific runtime metadata with
    996 specific functions and make it available through the function pointer while
    997 still allowing the function pointer to be called.  To access the data for a
    998 given function, a program may bitcast the function pointer to a pointer to
    999 the constant's type.  This implies that the IR symbol points to the start
   1000 of the prefix data.
   1001 
   1002 To maintain the semantics of ordinary function calls, the prefix data must
   1003 have a particular format.  Specifically, it must begin with a sequence of
   1004 bytes which decode to a sequence of machine instructions, valid for the
   1005 module's target, which transfer control to the point immediately succeeding
   1006 the prefix data, without performing any other visible action.  This allows
   1007 the inliner and other passes to reason about the semantics of the function
   1008 definition without needing to reason about the prefix data.  Obviously this
   1009 makes the format of the prefix data highly target dependent.
   1010 
   1011 Prefix data is laid out as if it were an initializer for a global variable
   1012 of the prefix data's type.  No padding is automatically placed between the
   1013 prefix data and the function body.  If padding is required, it must be part
   1014 of the prefix data.
   1015 
   1016 A trivial example of valid prefix data for the x86 architecture is ``i8 144``,
   1017 which encodes the ``nop`` instruction:
   1018 
   1019 .. code-block:: llvm
   1020 
   1021     define void @f() prefix i8 144 { ... }
   1022 
   1023 Generally prefix data can be formed by encoding a relative branch instruction
   1024 which skips the metadata, as in this example of valid prefix data for the
   1025 x86_64 architecture, where the first two bytes encode ``jmp .+10``:
   1026 
   1027 .. code-block:: llvm
   1028 
   1029     %0 = type <{ i8, i8, i8* }>
   1030 
   1031     define void @f() prefix %0 <{ i8 235, i8 8, i8* @md}> { ... }
   1032 
   1033 A function may have prefix data but no body.  This has similar semantics
   1034 to the ``available_externally`` linkage in that the data may be used by the
   1035 optimizers but will not be emitted in the object file.
   1036 
   1037 .. _attrgrp:
   1038 
   1039 Attribute Groups
   1040 ----------------
   1041 
   1042 Attribute groups are groups of attributes that are referenced by objects within
   1043 the IR. They are important for keeping ``.ll`` files readable, because a lot of
   1044 functions will use the same set of attributes. In the degenerative case of a
   1045 ``.ll`` file that corresponds to a single ``.c`` file, the single attribute
   1046 group will capture the important command line flags used to build that file.
   1047 
   1048 An attribute group is a module-level object. To use an attribute group, an
   1049 object references the attribute group's ID (e.g. ``#37``). An object may refer
   1050 to more than one attribute group. In that situation, the attributes from the
   1051 different groups are merged.
   1052 
   1053 Here is an example of attribute groups for a function that should always be
   1054 inlined, has a stack alignment of 4, and which shouldn't use SSE instructions:
   1055 
   1056 .. code-block:: llvm
   1057 
   1058    ; Target-independent attributes:
   1059    attributes #0 = { alwaysinline alignstack=4 }
   1060 
   1061    ; Target-dependent attributes:
   1062    attributes #1 = { "no-sse" }
   1063 
   1064    ; Function @f has attributes: alwaysinline, alignstack=4, and "no-sse".
   1065    define void @f() #0 #1 { ... }
   1066 
   1067 .. _fnattrs:
   1068 
   1069 Function Attributes
   1070 -------------------
   1071 
   1072 Function attributes are set to communicate additional information about
   1073 a function. Function attributes are considered to be part of the
   1074 function, not of the function type, so functions with different function
   1075 attributes can have the same function type.
   1076 
   1077 Function attributes are simple keywords that follow the type specified.
   1078 If multiple attributes are needed, they are space separated. For
   1079 example:
   1080 
   1081 .. code-block:: llvm
   1082 
   1083     define void @f() noinline { ... }
   1084     define void @f() alwaysinline { ... }
   1085     define void @f() alwaysinline optsize { ... }
   1086     define void @f() optsize { ... }
   1087 
   1088 ``alignstack(<n>)``
   1089     This attribute indicates that, when emitting the prologue and
   1090     epilogue, the backend should forcibly align the stack pointer.
   1091     Specify the desired alignment, which must be a power of two, in
   1092     parentheses.
   1093 ``alwaysinline``
   1094     This attribute indicates that the inliner should attempt to inline
   1095     this function into callers whenever possible, ignoring any active
   1096     inlining size threshold for this caller.
   1097 ``builtin``
   1098     This indicates that the callee function at a call site should be
   1099     recognized as a built-in function, even though the function's declaration
   1100     uses the ``nobuiltin`` attribute. This is only valid at call sites for
   1101     direct calls to functions which are declared with the ``nobuiltin``
   1102     attribute.
   1103 ``cold``
   1104     This attribute indicates that this function is rarely called. When
   1105     computing edge weights, basic blocks post-dominated by a cold
   1106     function call are also considered to be cold; and, thus, given low
   1107     weight.
   1108 ``inlinehint``
   1109     This attribute indicates that the source code contained a hint that
   1110     inlining this function is desirable (such as the "inline" keyword in
   1111     C/C++). It is just a hint; it imposes no requirements on the
   1112     inliner.
   1113 ``jumptable``
   1114     This attribute indicates that the function should be added to a
   1115     jump-instruction table at code-generation time, and that all address-taken
   1116     references to this function should be replaced with a reference to the
   1117     appropriate jump-instruction-table function pointer. Note that this creates
   1118     a new pointer for the original function, which means that code that depends
   1119     on function-pointer identity can break. So, any function annotated with
   1120     ``jumptable`` must also be ``unnamed_addr``.
   1121 ``minsize``
   1122     This attribute suggests that optimization passes and code generator
   1123     passes make choices that keep the code size of this function as small
   1124     as possible and perform optimizations that may sacrifice runtime
   1125     performance in order to minimize the size of the generated code.
   1126 ``naked``
   1127     This attribute disables prologue / epilogue emission for the
   1128     function. This can have very system-specific consequences.
   1129 ``nobuiltin``
   1130     This indicates that the callee function at a call site is not recognized as
   1131     a built-in function. LLVM will retain the original call and not replace it
   1132     with equivalent code based on the semantics of the built-in function, unless
   1133     the call site uses the ``builtin`` attribute. This is valid at call sites
   1134     and on function declarations and definitions.
   1135 ``noduplicate``
   1136     This attribute indicates that calls to the function cannot be
   1137     duplicated. A call to a ``noduplicate`` function may be moved
   1138     within its parent function, but may not be duplicated within
   1139     its parent function.
   1140 
   1141     A function containing a ``noduplicate`` call may still
   1142     be an inlining candidate, provided that the call is not
   1143     duplicated by inlining. That implies that the function has
   1144     internal linkage and only has one call site, so the original
   1145     call is dead after inlining.
   1146 ``noimplicitfloat``
   1147     This attributes disables implicit floating point instructions.
   1148 ``noinline``
   1149     This attribute indicates that the inliner should never inline this
   1150     function in any situation. This attribute may not be used together
   1151     with the ``alwaysinline`` attribute.
   1152 ``nonlazybind``
   1153     This attribute suppresses lazy symbol binding for the function. This
   1154     may make calls to the function faster, at the cost of extra program
   1155     startup time if the function is not called during program startup.
   1156 ``noredzone``
   1157     This attribute indicates that the code generator should not use a
   1158     red zone, even if the target-specific ABI normally permits it.
   1159 ``noreturn``
   1160     This function attribute indicates that the function never returns
   1161     normally. This produces undefined behavior at runtime if the
   1162     function ever does dynamically return.
   1163 ``nounwind``
   1164     This function attribute indicates that the function never returns
   1165     with an unwind or exceptional control flow. If the function does
   1166     unwind, its runtime behavior is undefined.
   1167 ``optnone``
   1168     This function attribute indicates that the function is not optimized
   1169     by any optimization or code generator passes with the
   1170     exception of interprocedural optimization passes.
   1171     This attribute cannot be used together with the ``alwaysinline``
   1172     attribute; this attribute is also incompatible
   1173     with the ``minsize`` attribute and the ``optsize`` attribute.
   1174 
   1175     This attribute requires the ``noinline`` attribute to be specified on
   1176     the function as well, so the function is never inlined into any caller.
   1177     Only functions with the ``alwaysinline`` attribute are valid
   1178     candidates for inlining into the body of this function.
   1179 ``optsize``
   1180     This attribute suggests that optimization passes and code generator
   1181     passes make choices that keep the code size of this function low,
   1182     and otherwise do optimizations specifically to reduce code size as
   1183     long as they do not significantly impact runtime performance.
   1184 ``readnone``
   1185     On a function, this attribute indicates that the function computes its
   1186     result (or decides to unwind an exception) based strictly on its arguments,
   1187     without dereferencing any pointer arguments or otherwise accessing
   1188     any mutable state (e.g. memory, control registers, etc) visible to
   1189     caller functions. It does not write through any pointer arguments
   1190     (including ``byval`` arguments) and never changes any state visible
   1191     to callers. This means that it cannot unwind exceptions by calling
   1192     the ``C++`` exception throwing methods.
   1193 
   1194     On an argument, this attribute indicates that the function does not
   1195     dereference that pointer argument, even though it may read or write the
   1196     memory that the pointer points to if accessed through other pointers.
   1197 ``readonly``
   1198     On a function, this attribute indicates that the function does not write
   1199     through any pointer arguments (including ``byval`` arguments) or otherwise
   1200     modify any state (e.g. memory, control registers, etc) visible to
   1201     caller functions. It may dereference pointer arguments and read
   1202     state that may be set in the caller. A readonly function always
   1203     returns the same value (or unwinds an exception identically) when
   1204     called with the same set of arguments and global state. It cannot
   1205     unwind an exception by calling the ``C++`` exception throwing
   1206     methods.
   1207 
   1208     On an argument, this attribute indicates that the function does not write
   1209     through this pointer argument, even though it may write to the memory that
   1210     the pointer points to.
   1211 ``returns_twice``
   1212     This attribute indicates that this function can return twice. The C
   1213     ``setjmp`` is an example of such a function. The compiler disables
   1214     some optimizations (like tail calls) in the caller of these
   1215     functions.
   1216 ``sanitize_address``
   1217     This attribute indicates that AddressSanitizer checks
   1218     (dynamic address safety analysis) are enabled for this function.
   1219 ``sanitize_memory``
   1220     This attribute indicates that MemorySanitizer checks (dynamic detection
   1221     of accesses to uninitialized memory) are enabled for this function.
   1222 ``sanitize_thread``
   1223     This attribute indicates that ThreadSanitizer checks
   1224     (dynamic thread safety analysis) are enabled for this function.
   1225 ``ssp``
   1226     This attribute indicates that the function should emit a stack
   1227     smashing protector. It is in the form of a "canary" --- a random value
   1228     placed on the stack before the local variables that's checked upon
   1229     return from the function to see if it has been overwritten. A
   1230     heuristic is used to determine if a function needs stack protectors
   1231     or not. The heuristic used will enable protectors for functions with:
   1232 
   1233     - Character arrays larger than ``ssp-buffer-size`` (default 8).
   1234     - Aggregates containing character arrays larger than ``ssp-buffer-size``.
   1235     - Calls to alloca() with variable sizes or constant sizes greater than
   1236       ``ssp-buffer-size``.
   1237 
   1238     Variables that are identified as requiring a protector will be arranged
   1239     on the stack such that they are adjacent to the stack protector guard.
   1240 
   1241     If a function that has an ``ssp`` attribute is inlined into a
   1242     function that doesn't have an ``ssp`` attribute, then the resulting
   1243     function will have an ``ssp`` attribute.
   1244 ``sspreq``
   1245     This attribute indicates that the function should *always* emit a
   1246     stack smashing protector. This overrides the ``ssp`` function
   1247     attribute.
   1248 
   1249     Variables that are identified as requiring a protector will be arranged
   1250     on the stack such that they are adjacent to the stack protector guard.
   1251     The specific layout rules are:
   1252 
   1253     #. Large arrays and structures containing large arrays
   1254        (``>= ssp-buffer-size``) are closest to the stack protector.
   1255     #. Small arrays and structures containing small arrays
   1256        (``< ssp-buffer-size``) are 2nd closest to the protector.
   1257     #. Variables that have had their address taken are 3rd closest to the
   1258        protector.
   1259 
   1260     If a function that has an ``sspreq`` attribute is inlined into a
   1261     function that doesn't have an ``sspreq`` attribute or which has an
   1262     ``ssp`` or ``sspstrong`` attribute, then the resulting function will have
   1263     an ``sspreq`` attribute.
   1264 ``sspstrong``
   1265     This attribute indicates that the function should emit a stack smashing
   1266     protector. This attribute causes a strong heuristic to be used when
   1267     determining if a function needs stack protectors.  The strong heuristic
   1268     will enable protectors for functions with:
   1269 
   1270     - Arrays of any size and type
   1271     - Aggregates containing an array of any size and type.
   1272     - Calls to alloca().
   1273     - Local variables that have had their address taken.
   1274 
   1275     Variables that are identified as requiring a protector will be arranged
   1276     on the stack such that they are adjacent to the stack protector guard.
   1277     The specific layout rules are:
   1278 
   1279     #. Large arrays and structures containing large arrays
   1280        (``>= ssp-buffer-size``) are closest to the stack protector.
   1281     #. Small arrays and structures containing small arrays
   1282        (``< ssp-buffer-size``) are 2nd closest to the protector.
   1283     #. Variables that have had their address taken are 3rd closest to the
   1284        protector.
   1285 
   1286     This overrides the ``ssp`` function attribute.
   1287 
   1288     If a function that has an ``sspstrong`` attribute is inlined into a
   1289     function that doesn't have an ``sspstrong`` attribute, then the
   1290     resulting function will have an ``sspstrong`` attribute.
   1291 ``uwtable``
   1292     This attribute indicates that the ABI being targeted requires that
   1293     an unwind table entry be produce for this function even if we can
   1294     show that no exceptions passes by it. This is normally the case for
   1295     the ELF x86-64 abi, but it can be disabled for some compilation
   1296     units.
   1297 
   1298 .. _moduleasm:
   1299 
   1300 Module-Level Inline Assembly
   1301 ----------------------------
   1302 
   1303 Modules may contain "module-level inline asm" blocks, which corresponds
   1304 to the GCC "file scope inline asm" blocks. These blocks are internally
   1305 concatenated by LLVM and treated as a single unit, but may be separated
   1306 in the ``.ll`` file if desired. The syntax is very simple:
   1307 
   1308 .. code-block:: llvm
   1309 
   1310     module asm "inline asm code goes here"
   1311     module asm "more can go here"
   1312 
   1313 The strings can contain any character by escaping non-printable
   1314 characters. The escape sequence used is simply "\\xx" where "xx" is the
   1315 two digit hex code for the number.
   1316 
   1317 The inline asm code is simply printed to the machine code .s file when
   1318 assembly code is generated.
   1319 
   1320 .. _langref_datalayout:
   1321 
   1322 Data Layout
   1323 -----------
   1324 
   1325 A module may specify a target specific data layout string that specifies
   1326 how data is to be laid out in memory. The syntax for the data layout is
   1327 simply:
   1328 
   1329 .. code-block:: llvm
   1330 
   1331     target datalayout = "layout specification"
   1332 
   1333 The *layout specification* consists of a list of specifications
   1334 separated by the minus sign character ('-'). Each specification starts
   1335 with a letter and may include other information after the letter to
   1336 define some aspect of the data layout. The specifications accepted are
   1337 as follows:
   1338 
   1339 ``E``
   1340     Specifies that the target lays out data in big-endian form. That is,
   1341     the bits with the most significance have the lowest address
   1342     location.
   1343 ``e``
   1344     Specifies that the target lays out data in little-endian form. That
   1345     is, the bits with the least significance have the lowest address
   1346     location.
   1347 ``S<size>``
   1348     Specifies the natural alignment of the stack in bits. Alignment
   1349     promotion of stack variables is limited to the natural stack
   1350     alignment to avoid dynamic stack realignment. The stack alignment
   1351     must be a multiple of 8-bits. If omitted, the natural stack
   1352     alignment defaults to "unspecified", which does not prevent any
   1353     alignment promotions.
   1354 ``p[n]:<size>:<abi>:<pref>``
   1355     This specifies the *size* of a pointer and its ``<abi>`` and
   1356     ``<pref>``\erred alignments for address space ``n``. All sizes are in
   1357     bits. The address space, ``n`` is optional, and if not specified,
   1358     denotes the default address space 0.  The value of ``n`` must be
   1359     in the range [1,2^23).
   1360 ``i<size>:<abi>:<pref>``
   1361     This specifies the alignment for an integer type of a given bit
   1362     ``<size>``. The value of ``<size>`` must be in the range [1,2^23).
   1363 ``v<size>:<abi>:<pref>``
   1364     This specifies the alignment for a vector type of a given bit
   1365     ``<size>``.
   1366 ``f<size>:<abi>:<pref>``
   1367     This specifies the alignment for a floating point type of a given bit
   1368     ``<size>``. Only values of ``<size>`` that are supported by the target
   1369     will work. 32 (float) and 64 (double) are supported on all targets; 80
   1370     or 128 (different flavors of long double) are also supported on some
   1371     targets.
   1372 ``a:<abi>:<pref>``
   1373     This specifies the alignment for an object of aggregate type.
   1374 ``m:<mangling>``
   1375     If present, specifies that llvm names are mangled in the output. The
   1376     options are
   1377 
   1378     * ``e``: ELF mangling: Private symbols get a ``.L`` prefix.
   1379     * ``m``: Mips mangling: Private symbols get a ``$`` prefix.
   1380     * ``o``: Mach-O mangling: Private symbols get ``L`` prefix. Other
   1381       symbols get a ``_`` prefix.
   1382     * ``w``: Windows COFF prefix:  Similar to Mach-O, but stdcall and fastcall
   1383       functions also get a suffix based on the frame size.
   1384 ``n<size1>:<size2>:<size3>...``
   1385     This specifies a set of native integer widths for the target CPU in
   1386     bits. For example, it might contain ``n32`` for 32-bit PowerPC,
   1387     ``n32:64`` for PowerPC 64, or ``n8:16:32:64`` for X86-64. Elements of
   1388     this set are considered to support most general arithmetic operations
   1389     efficiently.
   1390 
   1391 On every specification that takes a ``<abi>:<pref>``, specifying the
   1392 ``<pref>`` alignment is optional. If omitted, the preceding ``:``
   1393 should be omitted too and ``<pref>`` will be equal to ``<abi>``.
   1394 
   1395 When constructing the data layout for a given target, LLVM starts with a
   1396 default set of specifications which are then (possibly) overridden by
   1397 the specifications in the ``datalayout`` keyword. The default
   1398 specifications are given in this list:
   1399 
   1400 -  ``E`` - big endian
   1401 -  ``p:64:64:64`` - 64-bit pointers with 64-bit alignment.
   1402 -  ``p[n]:64:64:64`` - Other address spaces are assumed to be the
   1403    same as the default address space.
   1404 -  ``S0`` - natural stack alignment is unspecified
   1405 -  ``i1:8:8`` - i1 is 8-bit (byte) aligned
   1406 -  ``i8:8:8`` - i8 is 8-bit (byte) aligned
   1407 -  ``i16:16:16`` - i16 is 16-bit aligned
   1408 -  ``i32:32:32`` - i32 is 32-bit aligned
   1409 -  ``i64:32:64`` - i64 has ABI alignment of 32-bits but preferred
   1410    alignment of 64-bits
   1411 -  ``f16:16:16`` - half is 16-bit aligned
   1412 -  ``f32:32:32`` - float is 32-bit aligned
   1413 -  ``f64:64:64`` - double is 64-bit aligned
   1414 -  ``f128:128:128`` - quad is 128-bit aligned
   1415 -  ``v64:64:64`` - 64-bit vector is 64-bit aligned
   1416 -  ``v128:128:128`` - 128-bit vector is 128-bit aligned
   1417 -  ``a:0:64`` - aggregates are 64-bit aligned
   1418 
   1419 When LLVM is determining the alignment for a given type, it uses the
   1420 following rules:
   1421 
   1422 #. If the type sought is an exact match for one of the specifications,
   1423    that specification is used.
   1424 #. If no match is found, and the type sought is an integer type, then
   1425    the smallest integer type that is larger than the bitwidth of the
   1426    sought type is used. If none of the specifications are larger than
   1427    the bitwidth then the largest integer type is used. For example,
   1428    given the default specifications above, the i7 type will use the
   1429    alignment of i8 (next largest) while both i65 and i256 will use the
   1430    alignment of i64 (largest specified).
   1431 #. If no match is found, and the type sought is a vector type, then the
   1432    largest vector type that is smaller than the sought vector type will
   1433    be used as a fall back. This happens because <128 x double> can be
   1434    implemented in terms of 64 <2 x double>, for example.
   1435 
   1436 The function of the data layout string may not be what you expect.
   1437 Notably, this is not a specification from the frontend of what alignment
   1438 the code generator should use.
   1439 
   1440 Instead, if specified, the target data layout is required to match what
   1441 the ultimate *code generator* expects. This string is used by the
   1442 mid-level optimizers to improve code, and this only works if it matches
   1443 what the ultimate code generator uses. If you would like to generate IR
   1444 that does not embed this target-specific detail into the IR, then you
   1445 don't have to specify the string. This will disable some optimizations
   1446 that require precise layout information, but this also prevents those
   1447 optimizations from introducing target specificity into the IR.
   1448 
   1449 .. _langref_triple:
   1450 
   1451 Target Triple
   1452 -------------
   1453 
   1454 A module may specify a target triple string that describes the target
   1455 host. The syntax for the target triple is simply:
   1456 
   1457 .. code-block:: llvm
   1458 
   1459     target triple = "x86_64-apple-macosx10.7.0"
   1460 
   1461 The *target triple* string consists of a series of identifiers delimited
   1462 by the minus sign character ('-'). The canonical forms are:
   1463 
   1464 ::
   1465 
   1466     ARCHITECTURE-VENDOR-OPERATING_SYSTEM
   1467     ARCHITECTURE-VENDOR-OPERATING_SYSTEM-ENVIRONMENT
   1468 
   1469 This information is passed along to the backend so that it generates
   1470 code for the proper architecture. It's possible to override this on the
   1471 command line with the ``-mtriple`` command line option.
   1472 
   1473 .. _pointeraliasing:
   1474 
   1475 Pointer Aliasing Rules
   1476 ----------------------
   1477 
   1478 Any memory access must be done through a pointer value associated with
   1479 an address range of the memory access, otherwise the behavior is
   1480 undefined. Pointer values are associated with address ranges according
   1481 to the following rules:
   1482 
   1483 -  A pointer value is associated with the addresses associated with any
   1484    value it is *based* on.
   1485 -  An address of a global variable is associated with the address range
   1486    of the variable's storage.
   1487 -  The result value of an allocation instruction is associated with the
   1488    address range of the allocated storage.
   1489 -  A null pointer in the default address-space is associated with no
   1490    address.
   1491 -  An integer constant other than zero or a pointer value returned from
   1492    a function not defined within LLVM may be associated with address
   1493    ranges allocated through mechanisms other than those provided by
   1494    LLVM. Such ranges shall not overlap with any ranges of addresses
   1495    allocated by mechanisms provided by LLVM.
   1496 
   1497 A pointer value is *based* on another pointer value according to the
   1498 following rules:
   1499 
   1500 -  A pointer value formed from a ``getelementptr`` operation is *based*
   1501    on the first operand of the ``getelementptr``.
   1502 -  The result value of a ``bitcast`` is *based* on the operand of the
   1503    ``bitcast``.
   1504 -  A pointer value formed by an ``inttoptr`` is *based* on all pointer
   1505    values that contribute (directly or indirectly) to the computation of
   1506    the pointer's value.
   1507 -  The "*based* on" relationship is transitive.
   1508 
   1509 Note that this definition of *"based"* is intentionally similar to the
   1510 definition of *"based"* in C99, though it is slightly weaker.
   1511 
   1512 LLVM IR does not associate types with memory. The result type of a
   1513 ``load`` merely indicates the size and alignment of the memory from
   1514 which to load, as well as the interpretation of the value. The first
   1515 operand type of a ``store`` similarly only indicates the size and
   1516 alignment of the store.
   1517 
   1518 Consequently, type-based alias analysis, aka TBAA, aka
   1519 ``-fstrict-aliasing``, is not applicable to general unadorned LLVM IR.
   1520 :ref:`Metadata <metadata>` may be used to encode additional information
   1521 which specialized optimization passes may use to implement type-based
   1522 alias analysis.
   1523 
   1524 .. _volatile:
   1525 
   1526 Volatile Memory Accesses
   1527 ------------------------
   1528 
   1529 Certain memory accesses, such as :ref:`load <i_load>`'s,
   1530 :ref:`store <i_store>`'s, and :ref:`llvm.memcpy <int_memcpy>`'s may be
   1531 marked ``volatile``. The optimizers must not change the number of
   1532 volatile operations or change their order of execution relative to other
   1533 volatile operations. The optimizers *may* change the order of volatile
   1534 operations relative to non-volatile operations. This is not Java's
   1535 "volatile" and has no cross-thread synchronization behavior.
   1536 
   1537 IR-level volatile loads and stores cannot safely be optimized into
   1538 llvm.memcpy or llvm.memmove intrinsics even when those intrinsics are
   1539 flagged volatile. Likewise, the backend should never split or merge
   1540 target-legal volatile load/store instructions.
   1541 
   1542 .. admonition:: Rationale
   1543 
   1544  Platforms may rely on volatile loads and stores of natively supported
   1545  data width to be executed as single instruction. For example, in C
   1546  this holds for an l-value of volatile primitive type with native
   1547  hardware support, but not necessarily for aggregate types. The
   1548  frontend upholds these expectations, which are intentionally
   1549  unspecified in the IR. The rules above ensure that IR transformation
   1550  do not violate the frontend's contract with the language.
   1551 
   1552 .. _memmodel:
   1553 
   1554 Memory Model for Concurrent Operations
   1555 --------------------------------------
   1556 
   1557 The LLVM IR does not define any way to start parallel threads of
   1558 execution or to register signal handlers. Nonetheless, there are
   1559 platform-specific ways to create them, and we define LLVM IR's behavior
   1560 in their presence. This model is inspired by the C++0x memory model.
   1561 
   1562 For a more informal introduction to this model, see the :doc:`Atomics`.
   1563 
   1564 We define a *happens-before* partial order as the least partial order
   1565 that
   1566 
   1567 -  Is a superset of single-thread program order, and
   1568 -  When a *synchronizes-with* ``b``, includes an edge from ``a`` to
   1569    ``b``. *Synchronizes-with* pairs are introduced by platform-specific
   1570    techniques, like pthread locks, thread creation, thread joining,
   1571    etc., and by atomic instructions. (See also :ref:`Atomic Memory Ordering
   1572    Constraints <ordering>`).
   1573 
   1574 Note that program order does not introduce *happens-before* edges
   1575 between a thread and signals executing inside that thread.
   1576 
   1577 Every (defined) read operation (load instructions, memcpy, atomic
   1578 loads/read-modify-writes, etc.) R reads a series of bytes written by
   1579 (defined) write operations (store instructions, atomic
   1580 stores/read-modify-writes, memcpy, etc.). For the purposes of this
   1581 section, initialized globals are considered to have a write of the
   1582 initializer which is atomic and happens before any other read or write
   1583 of the memory in question. For each byte of a read R, R\ :sub:`byte`
   1584 may see any write to the same byte, except:
   1585 
   1586 -  If write\ :sub:`1`  happens before write\ :sub:`2`, and
   1587    write\ :sub:`2` happens before R\ :sub:`byte`, then
   1588    R\ :sub:`byte` does not see write\ :sub:`1`.
   1589 -  If R\ :sub:`byte` happens before write\ :sub:`3`, then
   1590    R\ :sub:`byte` does not see write\ :sub:`3`.
   1591 
   1592 Given that definition, R\ :sub:`byte` is defined as follows:
   1593 
   1594 -  If R is volatile, the result is target-dependent. (Volatile is
   1595    supposed to give guarantees which can support ``sig_atomic_t`` in
   1596    C/C++, and may be used for accesses to addresses which do not behave
   1597    like normal memory. It does not generally provide cross-thread
   1598    synchronization.)
   1599 -  Otherwise, if there is no write to the same byte that happens before
   1600    R\ :sub:`byte`, R\ :sub:`byte` returns ``undef`` for that byte.
   1601 -  Otherwise, if R\ :sub:`byte` may see exactly one write,
   1602    R\ :sub:`byte` returns the value written by that write.
   1603 -  Otherwise, if R is atomic, and all the writes R\ :sub:`byte` may
   1604    see are atomic, it chooses one of the values written. See the :ref:`Atomic
   1605    Memory Ordering Constraints <ordering>` section for additional
   1606    constraints on how the choice is made.
   1607 -  Otherwise R\ :sub:`byte` returns ``undef``.
   1608 
   1609 R returns the value composed of the series of bytes it read. This
   1610 implies that some bytes within the value may be ``undef`` **without**
   1611 the entire value being ``undef``. Note that this only defines the
   1612 semantics of the operation; it doesn't mean that targets will emit more
   1613 than one instruction to read the series of bytes.
   1614 
   1615 Note that in cases where none of the atomic intrinsics are used, this
   1616 model places only one restriction on IR transformations on top of what
   1617 is required for single-threaded execution: introducing a store to a byte
   1618 which might not otherwise be stored is not allowed in general.
   1619 (Specifically, in the case where another thread might write to and read
   1620 from an address, introducing a store can change a load that may see
   1621 exactly one write into a load that may see multiple writes.)
   1622 
   1623 .. _ordering:
   1624 
   1625 Atomic Memory Ordering Constraints
   1626 ----------------------------------
   1627 
   1628 Atomic instructions (:ref:`cmpxchg <i_cmpxchg>`,
   1629 :ref:`atomicrmw <i_atomicrmw>`, :ref:`fence <i_fence>`,
   1630 :ref:`atomic load <i_load>`, and :ref:`atomic store <i_store>`) take
   1631 ordering parameters that determine which other atomic instructions on
   1632 the same address they *synchronize with*. These semantics are borrowed
   1633 from Java and C++0x, but are somewhat more colloquial. If these
   1634 descriptions aren't precise enough, check those specs (see spec
   1635 references in the :doc:`atomics guide <Atomics>`).
   1636 :ref:`fence <i_fence>` instructions treat these orderings somewhat
   1637 differently since they don't take an address. See that instruction's
   1638 documentation for details.
   1639 
   1640 For a simpler introduction to the ordering constraints, see the
   1641 :doc:`Atomics`.
   1642 
   1643 ``unordered``
   1644     The set of values that can be read is governed by the happens-before
   1645     partial order. A value cannot be read unless some operation wrote
   1646     it. This is intended to provide a guarantee strong enough to model
   1647     Java's non-volatile shared variables. This ordering cannot be
   1648     specified for read-modify-write operations; it is not strong enough
   1649     to make them atomic in any interesting way.
   1650 ``monotonic``
   1651     In addition to the guarantees of ``unordered``, there is a single
   1652     total order for modifications by ``monotonic`` operations on each
   1653     address. All modification orders must be compatible with the
   1654     happens-before order. There is no guarantee that the modification
   1655     orders can be combined to a global total order for the whole program
   1656     (and this often will not be possible). The read in an atomic
   1657     read-modify-write operation (:ref:`cmpxchg <i_cmpxchg>` and
   1658     :ref:`atomicrmw <i_atomicrmw>`) reads the value in the modification
   1659     order immediately before the value it writes. If one atomic read
   1660     happens before another atomic read of the same address, the later
   1661     read must see the same value or a later value in the address's
   1662     modification order. This disallows reordering of ``monotonic`` (or
   1663     stronger) operations on the same address. If an address is written
   1664     ``monotonic``-ally by one thread, and other threads ``monotonic``-ally
   1665     read that address repeatedly, the other threads must eventually see
   1666     the write. This corresponds to the C++0x/C1x
   1667     ``memory_order_relaxed``.
   1668 ``acquire``
   1669     In addition to the guarantees of ``monotonic``, a
   1670     *synchronizes-with* edge may be formed with a ``release`` operation.
   1671     This is intended to model C++'s ``memory_order_acquire``.
   1672 ``release``
   1673     In addition to the guarantees of ``monotonic``, if this operation
   1674     writes a value which is subsequently read by an ``acquire``
   1675     operation, it *synchronizes-with* that operation. (This isn't a
   1676     complete description; see the C++0x definition of a release
   1677     sequence.) This corresponds to the C++0x/C1x
   1678     ``memory_order_release``.
   1679 ``acq_rel`` (acquire+release)
   1680     Acts as both an ``acquire`` and ``release`` operation on its
   1681     address. This corresponds to the C++0x/C1x ``memory_order_acq_rel``.
   1682 ``seq_cst`` (sequentially consistent)
   1683     In addition to the guarantees of ``acq_rel`` (``acquire`` for an
   1684     operation which only reads, ``release`` for an operation which only
   1685     writes), there is a global total order on all
   1686     sequentially-consistent operations on all addresses, which is
   1687     consistent with the *happens-before* partial order and with the
   1688     modification orders of all the affected addresses. Each
   1689     sequentially-consistent read sees the last preceding write to the
   1690     same address in this global order. This corresponds to the C++0x/C1x
   1691     ``memory_order_seq_cst`` and Java volatile.
   1692 
   1693 .. _singlethread:
   1694 
   1695 If an atomic operation is marked ``singlethread``, it only *synchronizes
   1696 with* or participates in modification and seq\_cst total orderings with
   1697 other operations running in the same thread (for example, in signal
   1698 handlers).
   1699 
   1700 .. _fastmath:
   1701 
   1702 Fast-Math Flags
   1703 ---------------
   1704 
   1705 LLVM IR floating-point binary ops (:ref:`fadd <i_fadd>`,
   1706 :ref:`fsub <i_fsub>`, :ref:`fmul <i_fmul>`, :ref:`fdiv <i_fdiv>`,
   1707 :ref:`frem <i_frem>`) have the following flags that can set to enable
   1708 otherwise unsafe floating point operations
   1709 
   1710 ``nnan``
   1711    No NaNs - Allow optimizations to assume the arguments and result are not
   1712    NaN. Such optimizations are required to retain defined behavior over
   1713    NaNs, but the value of the result is undefined.
   1714 
   1715 ``ninf``
   1716    No Infs - Allow optimizations to assume the arguments and result are not
   1717    +/-Inf. Such optimizations are required to retain defined behavior over
   1718    +/-Inf, but the value of the result is undefined.
   1719 
   1720 ``nsz``
   1721    No Signed Zeros - Allow optimizations to treat the sign of a zero
   1722    argument or result as insignificant.
   1723 
   1724 ``arcp``
   1725    Allow Reciprocal - Allow optimizations to use the reciprocal of an
   1726    argument rather than perform division.
   1727 
   1728 ``fast``
   1729    Fast - Allow algebraically equivalent transformations that may
   1730    dramatically change results in floating point (e.g. reassociate). This
   1731    flag implies all the others.
   1732 
   1733 .. _typesystem:
   1734 
   1735 Type System
   1736 ===========
   1737 
   1738 The LLVM type system is one of the most important features of the
   1739 intermediate representation. Being typed enables a number of
   1740 optimizations to be performed on the intermediate representation
   1741 directly, without having to do extra analyses on the side before the
   1742 transformation. A strong type system makes it easier to read the
   1743 generated code and enables novel analyses and transformations that are
   1744 not feasible to perform on normal three address code representations.
   1745 
   1746 .. _t_void:
   1747 
   1748 Void Type
   1749 ---------
   1750 
   1751 :Overview:
   1752 
   1753 
   1754 The void type does not represent any value and has no size.
   1755 
   1756 :Syntax:
   1757 
   1758 
   1759 ::
   1760 
   1761       void
   1762 
   1763 
   1764 .. _t_function:
   1765 
   1766 Function Type
   1767 -------------
   1768 
   1769 :Overview:
   1770 
   1771 
   1772 The function type can be thought of as a function signature. It consists of a
   1773 return type and a list of formal parameter types. The return type of a function
   1774 type is a void type or first class type --- except for :ref:`label <t_label>`
   1775 and :ref:`metadata <t_metadata>` types.
   1776 
   1777 :Syntax:
   1778 
   1779 ::
   1780 
   1781       <returntype> (<parameter list>)
   1782 
   1783 ...where '``<parameter list>``' is a comma-separated list of type
   1784 specifiers. Optionally, the parameter list may include a type ``...``, which
   1785 indicates that the function takes a variable number of arguments.  Variable
   1786 argument functions can access their arguments with the :ref:`variable argument
   1787 handling intrinsic <int_varargs>` functions.  '``<returntype>``' is any type
   1788 except :ref:`label <t_label>` and :ref:`metadata <t_metadata>`.
   1789 
   1790 :Examples:
   1791 
   1792 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   1793 | ``i32 (i32)``                   | function taking an ``i32``, returning an ``i32``                                                                                                                    |
   1794 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   1795 | ``float (i16, i32 *) *``        | :ref:`Pointer <t_pointer>` to a function that takes an ``i16`` and a :ref:`pointer <t_pointer>` to ``i32``, returning ``float``.                                    |
   1796 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   1797 | ``i32 (i8*, ...)``              | A vararg function that takes at least one :ref:`pointer <t_pointer>` to ``i8`` (char in C), which returns an integer. This is the signature for ``printf`` in LLVM. |
   1798 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   1799 | ``{i32, i32} (i32)``            | A function taking an ``i32``, returning a :ref:`structure <t_struct>` containing two ``i32`` values                                                                 |
   1800 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   1801 
   1802 .. _t_firstclass:
   1803 
   1804 First Class Types
   1805 -----------------
   1806 
   1807 The :ref:`first class <t_firstclass>` types are perhaps the most important.
   1808 Values of these types are the only ones which can be produced by
   1809 instructions.
   1810 
   1811 .. _t_single_value:
   1812 
   1813 Single Value Types
   1814 ^^^^^^^^^^^^^^^^^^
   1815 
   1816 These are the types that are valid in registers from CodeGen's perspective.
   1817 
   1818 .. _t_integer:
   1819 
   1820 Integer Type
   1821 """"""""""""
   1822 
   1823 :Overview:
   1824 
   1825 The integer type is a very simple type that simply specifies an
   1826 arbitrary bit width for the integer type desired. Any bit width from 1
   1827 bit to 2\ :sup:`23`\ -1 (about 8 million) can be specified.
   1828 
   1829 :Syntax:
   1830 
   1831 ::
   1832 
   1833       iN
   1834 
   1835 The number of bits the integer will occupy is specified by the ``N``
   1836 value.
   1837 
   1838 Examples:
   1839 *********
   1840 
   1841 +----------------+------------------------------------------------+
   1842 | ``i1``         | a single-bit integer.                          |
   1843 +----------------+------------------------------------------------+
   1844 | ``i32``        | a 32-bit integer.                              |
   1845 +----------------+------------------------------------------------+
   1846 | ``i1942652``   | a really big integer of over 1 million bits.   |
   1847 +----------------+------------------------------------------------+
   1848 
   1849 .. _t_floating:
   1850 
   1851 Floating Point Types
   1852 """"""""""""""""""""
   1853 
   1854 .. list-table::
   1855    :header-rows: 1
   1856 
   1857    * - Type
   1858      - Description
   1859 
   1860    * - ``half``
   1861      - 16-bit floating point value
   1862 
   1863    * - ``float``
   1864      - 32-bit floating point value
   1865 
   1866    * - ``double``
   1867      - 64-bit floating point value
   1868 
   1869    * - ``fp128``
   1870      - 128-bit floating point value (112-bit mantissa)
   1871 
   1872    * - ``x86_fp80``
   1873      -  80-bit floating point value (X87)
   1874 
   1875    * - ``ppc_fp128``
   1876      - 128-bit floating point value (two 64-bits)
   1877 
   1878 X86_mmx Type
   1879 """"""""""""
   1880 
   1881 :Overview:
   1882 
   1883 The x86_mmx type represents a value held in an MMX register on an x86
   1884 machine. The operations allowed on it are quite limited: parameters and
   1885 return values, load and store, and bitcast. User-specified MMX
   1886 instructions are represented as intrinsic or asm calls with arguments
   1887 and/or results of this type. There are no arrays, vectors or constants
   1888 of this type.
   1889 
   1890 :Syntax:
   1891 
   1892 ::
   1893 
   1894       x86_mmx
   1895 
   1896 
   1897 .. _t_pointer:
   1898 
   1899 Pointer Type
   1900 """"""""""""
   1901 
   1902 :Overview:
   1903 
   1904 The pointer type is used to specify memory locations. Pointers are
   1905 commonly used to reference objects in memory.
   1906 
   1907 Pointer types may have an optional address space attribute defining the
   1908 numbered address space where the pointed-to object resides. The default
   1909 address space is number zero. The semantics of non-zero address spaces
   1910 are target-specific.
   1911 
   1912 Note that LLVM does not permit pointers to void (``void*``) nor does it
   1913 permit pointers to labels (``label*``). Use ``i8*`` instead.
   1914 
   1915 :Syntax:
   1916 
   1917 ::
   1918 
   1919       <type> *
   1920 
   1921 :Examples:
   1922 
   1923 +-------------------------+--------------------------------------------------------------------------------------------------------------+
   1924 | ``[4 x i32]*``          | A :ref:`pointer <t_pointer>` to :ref:`array <t_array>` of four ``i32`` values.                               |
   1925 +-------------------------+--------------------------------------------------------------------------------------------------------------+
   1926 | ``i32 (i32*) *``        | A :ref:`pointer <t_pointer>` to a :ref:`function <t_function>` that takes an ``i32*``, returning an ``i32``. |
   1927 +-------------------------+--------------------------------------------------------------------------------------------------------------+
   1928 | ``i32 addrspace(5)*``   | A :ref:`pointer <t_pointer>` to an ``i32`` value that resides in address space #5.                           |
   1929 +-------------------------+--------------------------------------------------------------------------------------------------------------+
   1930 
   1931 .. _t_vector:
   1932 
   1933 Vector Type
   1934 """""""""""
   1935 
   1936 :Overview:
   1937 
   1938 A vector type is a simple derived type that represents a vector of
   1939 elements. Vector types are used when multiple primitive data are
   1940 operated in parallel using a single instruction (SIMD). A vector type
   1941 requires a size (number of elements) and an underlying primitive data
   1942 type. Vector types are considered :ref:`first class <t_firstclass>`.
   1943 
   1944 :Syntax:
   1945 
   1946 ::
   1947 
   1948       < <# elements> x <elementtype> >
   1949 
   1950 The number of elements is a constant integer value larger than 0;
   1951 elementtype may be any integer or floating point type, or a pointer to
   1952 these types. Vectors of size zero are not allowed.
   1953 
   1954 :Examples:
   1955 
   1956 +-------------------+--------------------------------------------------+
   1957 | ``<4 x i32>``     | Vector of 4 32-bit integer values.               |
   1958 +-------------------+--------------------------------------------------+
   1959 | ``<8 x float>``   | Vector of 8 32-bit floating-point values.        |
   1960 +-------------------+--------------------------------------------------+
   1961 | ``<2 x i64>``     | Vector of 2 64-bit integer values.               |
   1962 +-------------------+--------------------------------------------------+
   1963 | ``<4 x i64*>``    | Vector of 4 pointers to 64-bit integer values.   |
   1964 +-------------------+--------------------------------------------------+
   1965 
   1966 .. _t_label:
   1967 
   1968 Label Type
   1969 ^^^^^^^^^^
   1970 
   1971 :Overview:
   1972 
   1973 The label type represents code labels.
   1974 
   1975 :Syntax:
   1976 
   1977 ::
   1978 
   1979       label
   1980 
   1981 .. _t_metadata:
   1982 
   1983 Metadata Type
   1984 ^^^^^^^^^^^^^
   1985 
   1986 :Overview:
   1987 
   1988 The metadata type represents embedded metadata. No derived types may be
   1989 created from metadata except for :ref:`function <t_function>` arguments.
   1990 
   1991 :Syntax:
   1992 
   1993 ::
   1994 
   1995       metadata
   1996 
   1997 .. _t_aggregate:
   1998 
   1999 Aggregate Types
   2000 ^^^^^^^^^^^^^^^
   2001 
   2002 Aggregate Types are a subset of derived types that can contain multiple
   2003 member types. :ref:`Arrays <t_array>` and :ref:`structs <t_struct>` are
   2004 aggregate types. :ref:`Vectors <t_vector>` are not considered to be
   2005 aggregate types.
   2006 
   2007 .. _t_array:
   2008 
   2009 Array Type
   2010 """"""""""
   2011 
   2012 :Overview:
   2013 
   2014 The array type is a very simple derived type that arranges elements
   2015 sequentially in memory. The array type requires a size (number of
   2016 elements) and an underlying data type.
   2017 
   2018 :Syntax:
   2019 
   2020 ::
   2021 
   2022       [<# elements> x <elementtype>]
   2023 
   2024 The number of elements is a constant integer value; ``elementtype`` may
   2025 be any type with a size.
   2026 
   2027 :Examples:
   2028 
   2029 +------------------+--------------------------------------+
   2030 | ``[40 x i32]``   | Array of 40 32-bit integer values.   |
   2031 +------------------+--------------------------------------+
   2032 | ``[41 x i32]``   | Array of 41 32-bit integer values.   |
   2033 +------------------+--------------------------------------+
   2034 | ``[4 x i8]``     | Array of 4 8-bit integer values.     |
   2035 +------------------+--------------------------------------+
   2036 
   2037 Here are some examples of multidimensional arrays:
   2038 
   2039 +-----------------------------+----------------------------------------------------------+
   2040 | ``[3 x [4 x i32]]``         | 3x4 array of 32-bit integer values.                      |
   2041 +-----------------------------+----------------------------------------------------------+
   2042 | ``[12 x [10 x float]]``     | 12x10 array of single precision floating point values.   |
   2043 +-----------------------------+----------------------------------------------------------+
   2044 | ``[2 x [3 x [4 x i16]]]``   | 2x3x4 array of 16-bit integer values.                    |
   2045 +-----------------------------+----------------------------------------------------------+
   2046 
   2047 There is no restriction on indexing beyond the end of the array implied
   2048 by a static type (though there are restrictions on indexing beyond the
   2049 bounds of an allocated object in some cases). This means that
   2050 single-dimension 'variable sized array' addressing can be implemented in
   2051 LLVM with a zero length array type. An implementation of 'pascal style
   2052 arrays' in LLVM could use the type "``{ i32, [0 x float]}``", for
   2053 example.
   2054 
   2055 .. _t_struct:
   2056 
   2057 Structure Type
   2058 """"""""""""""
   2059 
   2060 :Overview:
   2061 
   2062 The structure type is used to represent a collection of data members
   2063 together in memory. The elements of a structure may be any type that has
   2064 a size.
   2065 
   2066 Structures in memory are accessed using '``load``' and '``store``' by
   2067 getting a pointer to a field with the '``getelementptr``' instruction.
   2068 Structures in registers are accessed using the '``extractvalue``' and
   2069 '``insertvalue``' instructions.
   2070 
   2071 Structures may optionally be "packed" structures, which indicate that
   2072 the alignment of the struct is one byte, and that there is no padding
   2073 between the elements. In non-packed structs, padding between field types
   2074 is inserted as defined by the DataLayout string in the module, which is
   2075 required to match what the underlying code generator expects.
   2076 
   2077 Structures can either be "literal" or "identified". A literal structure
   2078 is defined inline with other types (e.g. ``{i32, i32}*``) whereas
   2079 identified types are always defined at the top level with a name.
   2080 Literal types are uniqued by their contents and can never be recursive
   2081 or opaque since there is no way to write one. Identified types can be
   2082 recursive, can be opaqued, and are never uniqued.
   2083 
   2084 :Syntax:
   2085 
   2086 ::
   2087 
   2088       %T1 = type { <type list> }     ; Identified normal struct type
   2089       %T2 = type <{ <type list> }>   ; Identified packed struct type
   2090 
   2091 :Examples:
   2092 
   2093 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   2094 | ``{ i32, i32, i32 }``        | A triple of three ``i32`` values                                                                                                                                                      |
   2095 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   2096 | ``{ float, i32 (i32) * }``   | A pair, where the first element is a ``float`` and the second element is a :ref:`pointer <t_pointer>` to a :ref:`function <t_function>` that takes an ``i32``, returning an ``i32``.  |
   2097 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   2098 | ``<{ i8, i32 }>``            | A packed struct known to be 5 bytes in size.                                                                                                                                          |
   2099 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   2100 
   2101 .. _t_opaque:
   2102 
   2103 Opaque Structure Types
   2104 """"""""""""""""""""""
   2105 
   2106 :Overview:
   2107 
   2108 Opaque structure types are used to represent named structure types that
   2109 do not have a body specified. This corresponds (for example) to the C
   2110 notion of a forward declared structure.
   2111 
   2112 :Syntax:
   2113 
   2114 ::
   2115 
   2116       %X = type opaque
   2117       %52 = type opaque
   2118 
   2119 :Examples:
   2120 
   2121 +--------------+-------------------+
   2122 | ``opaque``   | An opaque type.   |
   2123 +--------------+-------------------+
   2124 
   2125 .. _constants:
   2126 
   2127 Constants
   2128 =========
   2129 
   2130 LLVM has several different basic types of constants. This section
   2131 describes them all and their syntax.
   2132 
   2133 Simple Constants
   2134 ----------------
   2135 
   2136 **Boolean constants**
   2137     The two strings '``true``' and '``false``' are both valid constants
   2138     of the ``i1`` type.
   2139 **Integer constants**
   2140     Standard integers (such as '4') are constants of the
   2141     :ref:`integer <t_integer>` type. Negative numbers may be used with
   2142     integer types.
   2143 **Floating point constants**
   2144     Floating point constants use standard decimal notation (e.g.
   2145     123.421), exponential notation (e.g. 1.23421e+2), or a more precise
   2146     hexadecimal notation (see below). The assembler requires the exact
   2147     decimal value of a floating-point constant. For example, the
   2148     assembler accepts 1.25 but rejects 1.3 because 1.3 is a repeating
   2149     decimal in binary. Floating point constants must have a :ref:`floating
   2150     point <t_floating>` type.
   2151 **Null pointer constants**
   2152     The identifier '``null``' is recognized as a null pointer constant
   2153     and must be of :ref:`pointer type <t_pointer>`.
   2154 
   2155 The one non-intuitive notation for constants is the hexadecimal form of
   2156 floating point constants. For example, the form
   2157 '``double    0x432ff973cafa8000``' is equivalent to (but harder to read
   2158 than) '``double 4.5e+15``'. The only time hexadecimal floating point
   2159 constants are required (and the only time that they are generated by the
   2160 disassembler) is when a floating point constant must be emitted but it
   2161 cannot be represented as a decimal floating point number in a reasonable
   2162 number of digits. For example, NaN's, infinities, and other special
   2163 values are represented in their IEEE hexadecimal format so that assembly
   2164 and disassembly do not cause any bits to change in the constants.
   2165 
   2166 When using the hexadecimal form, constants of types half, float, and
   2167 double are represented using the 16-digit form shown above (which
   2168 matches the IEEE754 representation for double); half and float values
   2169 must, however, be exactly representable as IEEE 754 half and single
   2170 precision, respectively. Hexadecimal format is always used for long
   2171 double, and there are three forms of long double. The 80-bit format used
   2172 by x86 is represented as ``0xK`` followed by 20 hexadecimal digits. The
   2173 128-bit format used by PowerPC (two adjacent doubles) is represented by
   2174 ``0xM`` followed by 32 hexadecimal digits. The IEEE 128-bit format is
   2175 represented by ``0xL`` followed by 32 hexadecimal digits. Long doubles
   2176 will only work if they match the long double format on your target.
   2177 The IEEE 16-bit format (half precision) is represented by ``0xH``
   2178 followed by 4 hexadecimal digits. All hexadecimal formats are big-endian
   2179 (sign bit at the left).
   2180 
   2181 There are no constants of type x86_mmx.
   2182 
   2183 .. _complexconstants:
   2184 
   2185 Complex Constants
   2186 -----------------
   2187 
   2188 Complex constants are a (potentially recursive) combination of simple
   2189 constants and smaller complex constants.
   2190 
   2191 **Structure constants**
   2192     Structure constants are represented with notation similar to
   2193     structure type definitions (a comma separated list of elements,
   2194     surrounded by braces (``{}``)). For example:
   2195     "``{ i32 4, float 17.0, i32* @G }``", where "``@G``" is declared as
   2196     "``@G = external global i32``". Structure constants must have
   2197     :ref:`structure type <t_struct>`, and the number and types of elements
   2198     must match those specified by the type.
   2199 **Array constants**
   2200     Array constants are represented with notation similar to array type
   2201     definitions (a comma separated list of elements, surrounded by
   2202     square brackets (``[]``)). For example:
   2203     "``[ i32 42, i32 11, i32 74 ]``". Array constants must have
   2204     :ref:`array type <t_array>`, and the number and types of elements must
   2205     match those specified by the type.
   2206 **Vector constants**
   2207     Vector constants are represented with notation similar to vector
   2208     type definitions (a comma separated list of elements, surrounded by
   2209     less-than/greater-than's (``<>``)). For example:
   2210     "``< i32 42, i32 11, i32 74, i32 100 >``". Vector constants
   2211     must have :ref:`vector type <t_vector>`, and the number and types of
   2212     elements must match those specified by the type.
   2213 **Zero initialization**
   2214     The string '``zeroinitializer``' can be used to zero initialize a
   2215     value to zero of *any* type, including scalar and
   2216     :ref:`aggregate <t_aggregate>` types. This is often used to avoid
   2217     having to print large zero initializers (e.g. for large arrays) and
   2218     is always exactly equivalent to using explicit zero initializers.
   2219 **Metadata node**
   2220     A metadata node is a structure-like constant with :ref:`metadata
   2221     type <t_metadata>`. For example:
   2222     "``metadata !{ i32 0, metadata !"test" }``". Unlike other
   2223     constants that are meant to be interpreted as part of the
   2224     instruction stream, metadata is a place to attach additional
   2225     information such as debug info.
   2226 
   2227 Global Variable and Function Addresses
   2228 --------------------------------------
   2229 
   2230 The addresses of :ref:`global variables <globalvars>` and
   2231 :ref:`functions <functionstructure>` are always implicitly valid
   2232 (link-time) constants. These constants are explicitly referenced when
   2233 the :ref:`identifier for the global <identifiers>` is used and always have
   2234 :ref:`pointer <t_pointer>` type. For example, the following is a legal LLVM
   2235 file:
   2236 
   2237 .. code-block:: llvm
   2238 
   2239     @X = global i32 17
   2240     @Y = global i32 42
   2241     @Z = global [2 x i32*] [ i32* @X, i32* @Y ]
   2242 
   2243 .. _undefvalues:
   2244 
   2245 Undefined Values
   2246 ----------------
   2247 
   2248 The string '``undef``' can be used anywhere a constant is expected, and
   2249 indicates that the user of the value may receive an unspecified
   2250 bit-pattern. Undefined values may be of any type (other than '``label``'
   2251 or '``void``') and be used anywhere a constant is permitted.
   2252 
   2253 Undefined values are useful because they indicate to the compiler that
   2254 the program is well defined no matter what value is used. This gives the
   2255 compiler more freedom to optimize. Here are some examples of
   2256 (potentially surprising) transformations that are valid (in pseudo IR):
   2257 
   2258 .. code-block:: llvm
   2259 
   2260       %A = add %X, undef
   2261       %B = sub %X, undef
   2262       %C = xor %X, undef
   2263     Safe:
   2264       %A = undef
   2265       %B = undef
   2266       %C = undef
   2267 
   2268 This is safe because all of the output bits are affected by the undef
   2269 bits. Any output bit can have a zero or one depending on the input bits.
   2270 
   2271 .. code-block:: llvm
   2272 
   2273       %A = or %X, undef
   2274       %B = and %X, undef
   2275     Safe:
   2276       %A = -1
   2277       %B = 0
   2278     Unsafe:
   2279       %A = undef
   2280       %B = undef
   2281 
   2282 These logical operations have bits that are not always affected by the
   2283 input. For example, if ``%X`` has a zero bit, then the output of the
   2284 '``and``' operation will always be a zero for that bit, no matter what
   2285 the corresponding bit from the '``undef``' is. As such, it is unsafe to
   2286 optimize or assume that the result of the '``and``' is '``undef``'.
   2287 However, it is safe to assume that all bits of the '``undef``' could be
   2288 0, and optimize the '``and``' to 0. Likewise, it is safe to assume that
   2289 all the bits of the '``undef``' operand to the '``or``' could be set,
   2290 allowing the '``or``' to be folded to -1.
   2291 
   2292 .. code-block:: llvm
   2293 
   2294       %A = select undef, %X, %Y
   2295       %B = select undef, 42, %Y
   2296       %C = select %X, %Y, undef
   2297     Safe:
   2298       %A = %X     (or %Y)
   2299       %B = 42     (or %Y)
   2300       %C = %Y
   2301     Unsafe:
   2302       %A = undef
   2303       %B = undef
   2304       %C = undef
   2305 
   2306 This set of examples shows that undefined '``select``' (and conditional
   2307 branch) conditions can go *either way*, but they have to come from one
   2308 of the two operands. In the ``%A`` example, if ``%X`` and ``%Y`` were
   2309 both known to have a clear low bit, then ``%A`` would have to have a
   2310 cleared low bit. However, in the ``%C`` example, the optimizer is
   2311 allowed to assume that the '``undef``' operand could be the same as
   2312 ``%Y``, allowing the whole '``select``' to be eliminated.
   2313 
   2314 .. code-block:: llvm
   2315 
   2316       %A = xor undef, undef
   2317 
   2318       %B = undef
   2319       %C = xor %B, %B
   2320 
   2321       %D = undef
   2322       %E = icmp lt %D, 4
   2323       %F = icmp gte %D, 4
   2324 
   2325     Safe:
   2326       %A = undef
   2327       %B = undef
   2328       %C = undef
   2329       %D = undef
   2330       %E = undef
   2331       %F = undef
   2332 
   2333 This example points out that two '``undef``' operands are not
   2334 necessarily the same. This can be surprising to people (and also matches
   2335 C semantics) where they assume that "``X^X``" is always zero, even if
   2336 ``X`` is undefined. This isn't true for a number of reasons, but the
   2337 short answer is that an '``undef``' "variable" can arbitrarily change
   2338 its value over its "live range". This is true because the variable
   2339 doesn't actually *have a live range*. Instead, the value is logically
   2340 read from arbitrary registers that happen to be around when needed, so
   2341 the value is not necessarily consistent over time. In fact, ``%A`` and
   2342 ``%C`` need to have the same semantics or the core LLVM "replace all
   2343 uses with" concept would not hold.
   2344 
   2345 .. code-block:: llvm
   2346 
   2347       %A = fdiv undef, %X
   2348       %B = fdiv %X, undef
   2349     Safe:
   2350       %A = undef
   2351     b: unreachable
   2352 
   2353 These examples show the crucial difference between an *undefined value*
   2354 and *undefined behavior*. An undefined value (like '``undef``') is
   2355 allowed to have an arbitrary bit-pattern. This means that the ``%A``
   2356 operation can be constant folded to '``undef``', because the '``undef``'
   2357 could be an SNaN, and ``fdiv`` is not (currently) defined on SNaN's.
   2358 However, in the second example, we can make a more aggressive
   2359 assumption: because the ``undef`` is allowed to be an arbitrary value,
   2360 we are allowed to assume that it could be zero. Since a divide by zero
   2361 has *undefined behavior*, we are allowed to assume that the operation
   2362 does not execute at all. This allows us to delete the divide and all
   2363 code after it. Because the undefined operation "can't happen", the
   2364 optimizer can assume that it occurs in dead code.
   2365 
   2366 .. code-block:: llvm
   2367 
   2368     a:  store undef -> %X
   2369     b:  store %X -> undef
   2370     Safe:
   2371     a: <deleted>
   2372     b: unreachable
   2373 
   2374 These examples reiterate the ``fdiv`` example: a store *of* an undefined
   2375 value can be assumed to not have any effect; we can assume that the
   2376 value is overwritten with bits that happen to match what was already
   2377 there. However, a store *to* an undefined location could clobber
   2378 arbitrary memory, therefore, it has undefined behavior.
   2379 
   2380 .. _poisonvalues:
   2381 
   2382 Poison Values
   2383 -------------
   2384 
   2385 Poison values are similar to :ref:`undef values <undefvalues>`, however
   2386 they also represent the fact that an instruction or constant expression
   2387 which cannot evoke side effects has nevertheless detected a condition
   2388 which results in undefined behavior.
   2389 
   2390 There is currently no way of representing a poison value in the IR; they
   2391 only exist when produced by operations such as :ref:`add <i_add>` with
   2392 the ``nsw`` flag.
   2393 
   2394 Poison value behavior is defined in terms of value *dependence*:
   2395 
   2396 -  Values other than :ref:`phi <i_phi>` nodes depend on their operands.
   2397 -  :ref:`Phi <i_phi>` nodes depend on the operand corresponding to
   2398    their dynamic predecessor basic block.
   2399 -  Function arguments depend on the corresponding actual argument values
   2400    in the dynamic callers of their functions.
   2401 -  :ref:`Call <i_call>` instructions depend on the :ref:`ret <i_ret>`
   2402    instructions that dynamically transfer control back to them.
   2403 -  :ref:`Invoke <i_invoke>` instructions depend on the
   2404    :ref:`ret <i_ret>`, :ref:`resume <i_resume>`, or exception-throwing
   2405    call instructions that dynamically transfer control back to them.
   2406 -  Non-volatile loads and stores depend on the most recent stores to all
   2407    of the referenced memory addresses, following the order in the IR
   2408    (including loads and stores implied by intrinsics such as
   2409    :ref:`@llvm.memcpy <int_memcpy>`.)
   2410 -  An instruction with externally visible side effects depends on the
   2411    most recent preceding instruction with externally visible side
   2412    effects, following the order in the IR. (This includes :ref:`volatile
   2413    operations <volatile>`.)
   2414 -  An instruction *control-depends* on a :ref:`terminator
   2415    instruction <terminators>` if the terminator instruction has
   2416    multiple successors and the instruction is always executed when
   2417    control transfers to one of the successors, and may not be executed
   2418    when control is transferred to another.
   2419 -  Additionally, an instruction also *control-depends* on a terminator
   2420    instruction if the set of instructions it otherwise depends on would
   2421    be different if the terminator had transferred control to a different
   2422    successor.
   2423 -  Dependence is transitive.
   2424 
   2425 Poison Values have the same behavior as :ref:`undef values <undefvalues>`,
   2426 with the additional affect that any instruction which has a *dependence*
   2427 on a poison value has undefined behavior.
   2428 
   2429 Here are some examples:
   2430 
   2431 .. code-block:: llvm
   2432 
   2433     entry:
   2434       %poison = sub nuw i32 0, 1           ; Results in a poison value.
   2435       %still_poison = and i32 %poison, 0   ; 0, but also poison.
   2436       %poison_yet_again = getelementptr i32* @h, i32 %still_poison
   2437       store i32 0, i32* %poison_yet_again  ; memory at @h[0] is poisoned
   2438 
   2439       store i32 %poison, i32* @g           ; Poison value stored to memory.
   2440       %poison2 = load i32* @g              ; Poison value loaded back from memory.
   2441 
   2442       store volatile i32 %poison, i32* @g  ; External observation; undefined behavior.
   2443 
   2444       %narrowaddr = bitcast i32* @g to i16*
   2445       %wideaddr = bitcast i32* @g to i64*
   2446       %poison3 = load i16* %narrowaddr     ; Returns a poison value.
   2447       %poison4 = load i64* %wideaddr       ; Returns a poison value.
   2448 
   2449       %cmp = icmp slt i32 %poison, 0       ; Returns a poison value.
   2450       br i1 %cmp, label %true, label %end  ; Branch to either destination.
   2451 
   2452     true:
   2453       store volatile i32 0, i32* @g        ; This is control-dependent on %cmp, so
   2454                                            ; it has undefined behavior.
   2455       br label %end
   2456 
   2457     end:
   2458       %p = phi i32 [ 0, %entry ], [ 1, %true ]
   2459                                            ; Both edges into this PHI are
   2460                                            ; control-dependent on %cmp, so this
   2461                                            ; always results in a poison value.
   2462 
   2463       store volatile i32 0, i32* @g        ; This would depend on the store in %true
   2464                                            ; if %cmp is true, or the store in %entry
   2465                                            ; otherwise, so this is undefined behavior.
   2466 
   2467       br i1 %cmp, label %second_true, label %second_end
   2468                                            ; The same branch again, but this time the
   2469                                            ; true block doesn't have side effects.
   2470 
   2471     second_true:
   2472       ; No side effects!
   2473       ret void
   2474 
   2475     second_end:
   2476       store volatile i32 0, i32* @g        ; This time, the instruction always depends
   2477                                            ; on the store in %end. Also, it is
   2478                                            ; control-equivalent to %end, so this is
   2479                                            ; well-defined (ignoring earlier undefined
   2480                                            ; behavior in this example).
   2481 
   2482 .. _blockaddress:
   2483 
   2484 Addresses of Basic Blocks
   2485 -------------------------
   2486 
   2487 ``blockaddress(@function, %block)``
   2488 
   2489 The '``blockaddress``' constant computes the address of the specified
   2490 basic block in the specified function, and always has an ``i8*`` type.
   2491 Taking the address of the entry block is illegal.
   2492 
   2493 This value only has defined behavior when used as an operand to the
   2494 ':ref:`indirectbr <i_indirectbr>`' instruction, or for comparisons
   2495 against null. Pointer equality tests between labels addresses results in
   2496 undefined behavior --- though, again, comparison against null is ok, and
   2497 no label is equal to the null pointer. This may be passed around as an
   2498 opaque pointer sized value as long as the bits are not inspected. This
   2499 allows ``ptrtoint`` and arithmetic to be performed on these values so
   2500 long as the original value is reconstituted before the ``indirectbr``
   2501 instruction.
   2502 
   2503 Finally, some targets may provide defined semantics when using the value
   2504 as the operand to an inline assembly, but that is target specific.
   2505 
   2506 .. _constantexprs:
   2507 
   2508 Constant Expressions
   2509 --------------------
   2510 
   2511 Constant expressions are used to allow expressions involving other
   2512 constants to be used as constants. Constant expressions may be of any
   2513 :ref:`first class <t_firstclass>` type and may involve any LLVM operation
   2514 that does not have side effects (e.g. load and call are not supported).
   2515 The following is the syntax for constant expressions:
   2516 
   2517 ``trunc (CST to TYPE)``
   2518     Truncate a constant to another type. The bit size of CST must be
   2519     larger than the bit size of TYPE. Both types must be integers.
   2520 ``zext (CST to TYPE)``
   2521     Zero extend a constant to another type. The bit size of CST must be
   2522     smaller than the bit size of TYPE. Both types must be integers.
   2523 ``sext (CST to TYPE)``
   2524     Sign extend a constant to another type. The bit size of CST must be
   2525     smaller than the bit size of TYPE. Both types must be integers.
   2526 ``fptrunc (CST to TYPE)``
   2527     Truncate a floating point constant to another floating point type.
   2528     The size of CST must be larger than the size of TYPE. Both types
   2529     must be floating point.
   2530 ``fpext (CST to TYPE)``
   2531     Floating point extend a constant to another type. The size of CST
   2532     must be smaller or equal to the size of TYPE. Both types must be
   2533     floating point.
   2534 ``fptoui (CST to TYPE)``
   2535     Convert a floating point constant to the corresponding unsigned
   2536     integer constant. TYPE must be a scalar or vector integer type. CST
   2537     must be of scalar or vector floating point type. Both CST and TYPE
   2538     must be scalars, or vectors of the same number of elements. If the
   2539     value won't fit in the integer type, the results are undefined.
   2540 ``fptosi (CST to TYPE)``
   2541     Convert a floating point constant to the corresponding signed
   2542     integer constant. TYPE must be a scalar or vector integer type. CST
   2543     must be of scalar or vector floating point type. Both CST and TYPE
   2544     must be scalars, or vectors of the same number of elements. If the
   2545     value won't fit in the integer type, the results are undefined.
   2546 ``uitofp (CST to TYPE)``
   2547     Convert an unsigned integer constant to the corresponding floating
   2548     point constant. TYPE must be a scalar or vector floating point type.
   2549     CST must be of scalar or vector integer type. Both CST and TYPE must
   2550     be scalars, or vectors of the same number of elements. If the value
   2551     won't fit in the floating point type, the results are undefined.
   2552 ``sitofp (CST to TYPE)``
   2553     Convert a signed integer constant to the corresponding floating
   2554     point constant. TYPE must be a scalar or vector floating point type.
   2555     CST must be of scalar or vector integer type. Both CST and TYPE must
   2556     be scalars, or vectors of the same number of elements. If the value
   2557     won't fit in the floating point type, the results are undefined.
   2558 ``ptrtoint (CST to TYPE)``
   2559     Convert a pointer typed constant to the corresponding integer
   2560     constant. ``TYPE`` must be an integer type. ``CST`` must be of
   2561     pointer type. The ``CST`` value is zero extended, truncated, or
   2562     unchanged to make it fit in ``TYPE``.
   2563 ``inttoptr (CST to TYPE)``
   2564     Convert an integer constant to a pointer constant. TYPE must be a
   2565     pointer type. CST must be of integer type. The CST value is zero
   2566     extended, truncated, or unchanged to make it fit in a pointer size.
   2567     This one is *really* dangerous!
   2568 ``bitcast (CST to TYPE)``
   2569     Convert a constant, CST, to another TYPE. The constraints of the
   2570     operands are the same as those for the :ref:`bitcast
   2571     instruction <i_bitcast>`.
   2572 ``addrspacecast (CST to TYPE)``
   2573     Convert a constant pointer or constant vector of pointer, CST, to another
   2574     TYPE in a different address space. The constraints of the operands are the
   2575     same as those for the :ref:`addrspacecast instruction <i_addrspacecast>`.
   2576 ``getelementptr (CSTPTR, IDX0, IDX1, ...)``, ``getelementptr inbounds (CSTPTR, IDX0, IDX1, ...)``
   2577     Perform the :ref:`getelementptr operation <i_getelementptr>` on
   2578     constants. As with the :ref:`getelementptr <i_getelementptr>`
   2579     instruction, the index list may have zero or more indexes, which are
   2580     required to make sense for the type of "CSTPTR".
   2581 ``select (COND, VAL1, VAL2)``
   2582     Perform the :ref:`select operation <i_select>` on constants.
   2583 ``icmp COND (VAL1, VAL2)``
   2584     Performs the :ref:`icmp operation <i_icmp>` on constants.
   2585 ``fcmp COND (VAL1, VAL2)``
   2586     Performs the :ref:`fcmp operation <i_fcmp>` on constants.
   2587 ``extractelement (VAL, IDX)``
   2588     Perform the :ref:`extractelement operation <i_extractelement>` on
   2589     constants.
   2590 ``insertelement (VAL, ELT, IDX)``
   2591     Perform the :ref:`insertelement operation <i_insertelement>` on
   2592     constants.
   2593 ``shufflevector (VEC1, VEC2, IDXMASK)``
   2594     Perform the :ref:`shufflevector operation <i_shufflevector>` on
   2595     constants.
   2596 ``extractvalue (VAL, IDX0, IDX1, ...)``
   2597     Perform the :ref:`extractvalue operation <i_extractvalue>` on
   2598     constants. The index list is interpreted in a similar manner as
   2599     indices in a ':ref:`getelementptr <i_getelementptr>`' operation. At
   2600     least one index value must be specified.
   2601 ``insertvalue (VAL, ELT, IDX0, IDX1, ...)``
   2602     Perform the :ref:`insertvalue operation <i_insertvalue>` on constants.
   2603     The index list is interpreted in a similar manner as indices in a
   2604     ':ref:`getelementptr <i_getelementptr>`' operation. At least one index
   2605     value must be specified.
   2606 ``OPCODE (LHS, RHS)``
   2607     Perform the specified operation of the LHS and RHS constants. OPCODE
   2608     may be any of the :ref:`binary <binaryops>` or :ref:`bitwise
   2609     binary <bitwiseops>` operations. The constraints on operands are
   2610     the same as those for the corresponding instruction (e.g. no bitwise
   2611     operations on floating point values are allowed).
   2612 
   2613 Other Values
   2614 ============
   2615 
   2616 .. _inlineasmexprs:
   2617 
   2618 Inline Assembler Expressions
   2619 ----------------------------
   2620 
   2621 LLVM supports inline assembler expressions (as opposed to :ref:`Module-Level
   2622 Inline Assembly <moduleasm>`) through the use of a special value. This
   2623 value represents the inline assembler as a string (containing the
   2624 instructions to emit), a list of operand constraints (stored as a
   2625 string), a flag that indicates whether or not the inline asm expression
   2626 has side effects, and a flag indicating whether the function containing
   2627 the asm needs to align its stack conservatively. An example inline
   2628 assembler expression is:
   2629 
   2630 .. code-block:: llvm
   2631 
   2632     i32 (i32) asm "bswap $0", "=r,r"
   2633 
   2634 Inline assembler expressions may **only** be used as the callee operand
   2635 of a :ref:`call <i_call>` or an :ref:`invoke <i_invoke>` instruction.
   2636 Thus, typically we have:
   2637 
   2638 .. code-block:: llvm
   2639 
   2640     %X = call i32 asm "bswap $0", "=r,r"(i32 %Y)
   2641 
   2642 Inline asms with side effects not visible in the constraint list must be
   2643 marked as having side effects. This is done through the use of the
   2644 '``sideeffect``' keyword, like so:
   2645 
   2646 .. code-block:: llvm
   2647 
   2648     call void asm sideeffect "eieio", ""()
   2649 
   2650 In some cases inline asms will contain code that will not work unless
   2651 the stack is aligned in some way, such as calls or SSE instructions on
   2652 x86, yet will not contain code that does that alignment within the asm.
   2653 The compiler should make conservative assumptions about what the asm
   2654 might contain and should generate its usual stack alignment code in the
   2655 prologue if the '``alignstack``' keyword is present:
   2656 
   2657 .. code-block:: llvm
   2658 
   2659     call void asm alignstack "eieio", ""()
   2660 
   2661 Inline asms also support using non-standard assembly dialects. The
   2662 assumed dialect is ATT. When the '``inteldialect``' keyword is present,
   2663 the inline asm is using the Intel dialect. Currently, ATT and Intel are
   2664 the only supported dialects. An example is:
   2665 
   2666 .. code-block:: llvm
   2667 
   2668     call void asm inteldialect "eieio", ""()
   2669 
   2670 If multiple keywords appear the '``sideeffect``' keyword must come
   2671 first, the '``alignstack``' keyword second and the '``inteldialect``'
   2672 keyword last.
   2673 
   2674 Inline Asm Metadata
   2675 ^^^^^^^^^^^^^^^^^^^
   2676 
   2677 The call instructions that wrap inline asm nodes may have a
   2678 "``!srcloc``" MDNode attached to it that contains a list of constant
   2679 integers. If present, the code generator will use the integer as the
   2680 location cookie value when report errors through the ``LLVMContext``
   2681 error reporting mechanisms. This allows a front-end to correlate backend
   2682 errors that occur with inline asm back to the source code that produced
   2683 it. For example:
   2684 
   2685 .. code-block:: llvm
   2686 
   2687     call void asm sideeffect "something bad", ""(), !srcloc !42
   2688     ...
   2689     !42 = !{ i32 1234567 }
   2690 
   2691 It is up to the front-end to make sense of the magic numbers it places
   2692 in the IR. If the MDNode contains multiple constants, the code generator
   2693 will use the one that corresponds to the line of the asm that the error
   2694 occurs on.
   2695 
   2696 .. _metadata:
   2697 
   2698 Metadata Nodes and Metadata Strings
   2699 -----------------------------------
   2700 
   2701 LLVM IR allows metadata to be attached to instructions in the program
   2702 that can convey extra information about the code to the optimizers and
   2703 code generator. One example application of metadata is source-level
   2704 debug information. There are two metadata primitives: strings and nodes.
   2705 All metadata has the ``metadata`` type and is identified in syntax by a
   2706 preceding exclamation point ('``!``').
   2707 
   2708 A metadata string is a string surrounded by double quotes. It can
   2709 contain any character by escaping non-printable characters with
   2710 "``\xx``" where "``xx``" is the two digit hex code. For example:
   2711 "``!"test\00"``".
   2712 
   2713 Metadata nodes are represented with notation similar to structure
   2714 constants (a comma separated list of elements, surrounded by braces and
   2715 preceded by an exclamation point). Metadata nodes can have any values as
   2716 their operand. For example:
   2717 
   2718 .. code-block:: llvm
   2719 
   2720     !{ metadata !"test\00", i32 10}
   2721 
   2722 A :ref:`named metadata <namedmetadatastructure>` is a collection of
   2723 metadata nodes, which can be looked up in the module symbol table. For
   2724 example:
   2725 
   2726 .. code-block:: llvm
   2727 
   2728     !foo =  metadata !{!4, !3}
   2729 
   2730 Metadata can be used as function arguments. Here ``llvm.dbg.value``
   2731 function is using two metadata arguments:
   2732 
   2733 .. code-block:: llvm
   2734 
   2735     call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
   2736 
   2737 Metadata can be attached with an instruction. Here metadata ``!21`` is
   2738 attached to the ``add`` instruction using the ``!dbg`` identifier:
   2739 
   2740 .. code-block:: llvm
   2741 
   2742     %indvar.next = add i64 %indvar, 1, !dbg !21
   2743 
   2744 More information about specific metadata nodes recognized by the
   2745 optimizers and code generator is found below.
   2746 
   2747 '``tbaa``' Metadata
   2748 ^^^^^^^^^^^^^^^^^^^
   2749 
   2750 In LLVM IR, memory does not have types, so LLVM's own type system is not
   2751 suitable for doing TBAA. Instead, metadata is added to the IR to
   2752 describe a type system of a higher level language. This can be used to
   2753 implement typical C/C++ TBAA, but it can also be used to implement
   2754 custom alias analysis behavior for other languages.
   2755 
   2756 The current metadata format is very simple. TBAA metadata nodes have up
   2757 to three fields, e.g.:
   2758 
   2759 .. code-block:: llvm
   2760 
   2761     !0 = metadata !{ metadata !"an example type tree" }
   2762     !1 = metadata !{ metadata !"int", metadata !0 }
   2763     !2 = metadata !{ metadata !"float", metadata !0 }
   2764     !3 = metadata !{ metadata !"const float", metadata !2, i64 1 }
   2765 
   2766 The first field is an identity field. It can be any value, usually a
   2767 metadata string, which uniquely identifies the type. The most important
   2768 name in the tree is the name of the root node. Two trees with different
   2769 root node names are entirely disjoint, even if they have leaves with
   2770 common names.
   2771 
   2772 The second field identifies the type's parent node in the tree, or is
   2773 null or omitted for a root node. A type is considered to alias all of
   2774 its descendants and all of its ancestors in the tree. Also, a type is
   2775 considered to alias all types in other trees, so that bitcode produced
   2776 from multiple front-ends is handled conservatively.
   2777 
   2778 If the third field is present, it's an integer which if equal to 1
   2779 indicates that the type is "constant" (meaning
   2780 ``pointsToConstantMemory`` should return true; see `other useful
   2781 AliasAnalysis methods <AliasAnalysis.html#OtherItfs>`_).
   2782 
   2783 '``tbaa.struct``' Metadata
   2784 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   2785 
   2786 The :ref:`llvm.memcpy <int_memcpy>` is often used to implement
   2787 aggregate assignment operations in C and similar languages, however it
   2788 is defined to copy a contiguous region of memory, which is more than
   2789 strictly necessary for aggregate types which contain holes due to
   2790 padding. Also, it doesn't contain any TBAA information about the fields
   2791 of the aggregate.
   2792 
   2793 ``!tbaa.struct`` metadata can describe which memory subregions in a
   2794 memcpy are padding and what the TBAA tags of the struct are.
   2795 
   2796 The current metadata format is very simple. ``!tbaa.struct`` metadata
   2797 nodes are a list of operands which are in conceptual groups of three.
   2798 For each group of three, the first operand gives the byte offset of a
   2799 field in bytes, the second gives its size in bytes, and the third gives
   2800 its tbaa tag. e.g.:
   2801 
   2802 .. code-block:: llvm
   2803 
   2804     !4 = metadata !{ i64 0, i64 4, metadata !1, i64 8, i64 4, metadata !2 }
   2805 
   2806 This describes a struct with two fields. The first is at offset 0 bytes
   2807 with size 4 bytes, and has tbaa tag !1. The second is at offset 8 bytes
   2808 and has size 4 bytes and has tbaa tag !2.
   2809 
   2810 Note that the fields need not be contiguous. In this example, there is a
   2811 4 byte gap between the two fields. This gap represents padding which
   2812 does not carry useful data and need not be preserved.
   2813 
   2814 '``fpmath``' Metadata
   2815 ^^^^^^^^^^^^^^^^^^^^^
   2816 
   2817 ``fpmath`` metadata may be attached to any instruction of floating point
   2818 type. It can be used to express the maximum acceptable error in the
   2819 result of that instruction, in ULPs, thus potentially allowing the
   2820 compiler to use a more efficient but less accurate method of computing
   2821 it. ULP is defined as follows:
   2822 
   2823     If ``x`` is a real number that lies between two finite consecutive
   2824     floating-point numbers ``a`` and ``b``, without being equal to one
   2825     of them, then ``ulp(x) = |b - a|``, otherwise ``ulp(x)`` is the
   2826     distance between the two non-equal finite floating-point numbers
   2827     nearest ``x``. Moreover, ``ulp(NaN)`` is ``NaN``.
   2828 
   2829 The metadata node shall consist of a single positive floating point
   2830 number representing the maximum relative error, for example:
   2831 
   2832 .. code-block:: llvm
   2833 
   2834     !0 = metadata !{ float 2.5 } ; maximum acceptable inaccuracy is 2.5 ULPs
   2835 
   2836 '``range``' Metadata
   2837 ^^^^^^^^^^^^^^^^^^^^
   2838 
   2839 ``range`` metadata may be attached only to ``load``, ``call`` and ``invoke`` of
   2840 integer types. It expresses the possible ranges the loaded value or the value
   2841 returned by the called function at this call site is in. The ranges are
   2842 represented with a flattened list of integers. The loaded value or the value
   2843 returned is known to be in the union of the ranges defined by each consecutive
   2844 pair. Each pair has the following properties:
   2845 
   2846 -  The type must match the type loaded by the instruction.
   2847 -  The pair ``a,b`` represents the range ``[a,b)``.
   2848 -  Both ``a`` and ``b`` are constants.
   2849 -  The range is allowed to wrap.
   2850 -  The range should not represent the full or empty set. That is,
   2851    ``a!=b``.
   2852 
   2853 In addition, the pairs must be in signed order of the lower bound and
   2854 they must be non-contiguous.
   2855 
   2856 Examples:
   2857 
   2858 .. code-block:: llvm
   2859 
   2860       %a = load i8* %x, align 1, !range !0 ; Can only be 0 or 1
   2861       %b = load i8* %y, align 1, !range !1 ; Can only be 255 (-1), 0 or 1
   2862       %c = call i8 @foo(),       !range !2 ; Can only be 0, 1, 3, 4 or 5
   2863       %d = invoke i8 @bar() to label %cont
   2864              unwind label %lpad, !range !3 ; Can only be -2, -1, 3, 4 or 5
   2865     ...
   2866     !0 = metadata !{ i8 0, i8 2 }
   2867     !1 = metadata !{ i8 255, i8 2 }
   2868     !2 = metadata !{ i8 0, i8 2, i8 3, i8 6 }
   2869     !3 = metadata !{ i8 -2, i8 0, i8 3, i8 6 }
   2870 
   2871 '``llvm.loop``'
   2872 ^^^^^^^^^^^^^^^
   2873 
   2874 It is sometimes useful to attach information to loop constructs. Currently,
   2875 loop metadata is implemented as metadata attached to the branch instruction
   2876 in the loop latch block. This type of metadata refer to a metadata node that is
   2877 guaranteed to be separate for each loop. The loop identifier metadata is
   2878 specified with the name ``llvm.loop``.
   2879 
   2880 The loop identifier metadata is implemented using a metadata that refers to
   2881 itself to avoid merging it with any other identifier metadata, e.g.,
   2882 during module linkage or function inlining. That is, each loop should refer
   2883 to their own identification metadata even if they reside in separate functions.
   2884 The following example contains loop identifier metadata for two separate loop
   2885 constructs:
   2886 
   2887 .. code-block:: llvm
   2888 
   2889     !0 = metadata !{ metadata !0 }
   2890     !1 = metadata !{ metadata !1 }
   2891 
   2892 The loop identifier metadata can be used to specify additional per-loop
   2893 metadata. Any operands after the first operand can be treated as user-defined
   2894 metadata. For example the ``llvm.loop.vectorize.unroll`` metadata is understood
   2895 by the loop vectorizer to indicate how many times to unroll the loop:
   2896 
   2897 .. code-block:: llvm
   2898 
   2899       br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0
   2900     ...
   2901     !0 = metadata !{ metadata !0, metadata !1 }
   2902     !1 = metadata !{ metadata !"llvm.loop.vectorize.unroll", i32 2 }
   2903 
   2904 '``llvm.mem``'
   2905 ^^^^^^^^^^^^^^^
   2906 
   2907 Metadata types used to annotate memory accesses with information helpful
   2908 for optimizations are prefixed with ``llvm.mem``.
   2909 
   2910 '``llvm.mem.parallel_loop_access``' Metadata
   2911 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2912 
   2913 The ``llvm.mem.parallel_loop_access`` metadata refers to a loop identifier, 
   2914 or metadata containing a list of loop identifiers for nested loops. 
   2915 The metadata is attached to memory accessing instructions and denotes that 
   2916 no loop carried memory dependence exist between it and other instructions denoted 
   2917 with the same loop identifier.
   2918 
   2919 Precisely, given two instructions ``m1`` and ``m2`` that both have the 
   2920 ``llvm.mem.parallel_loop_access`` metadata, with ``L1`` and ``L2`` being the 
   2921 set of loops associated with that metadata, respectively, then there is no loop 
   2922 carried dependence between ``m1`` and ``m2`` for loops in both ``L1`` and 
   2923 ``L2``.
   2924 
   2925 As a special case, if all memory accessing instructions in a loop have 
   2926 ``llvm.mem.parallel_loop_access`` metadata that refers to that loop, then the 
   2927 loop has no loop carried memory dependences and is considered to be a parallel 
   2928 loop.  
   2929 
   2930 Note that if not all memory access instructions have such metadata referring to 
   2931 the loop, then the loop is considered not being trivially parallel. Additional 
   2932 memory dependence analysis is required to make that determination.  As a fail 
   2933 safe mechanism, this causes loops that were originally parallel to be considered 
   2934 sequential (if optimization passes that are unaware of the parallel semantics 
   2935 insert new memory instructions into the loop body).
   2936 
   2937 Example of a loop that is considered parallel due to its correct use of
   2938 both ``llvm.loop`` and ``llvm.mem.parallel_loop_access``
   2939 metadata types that refer to the same loop identifier metadata.
   2940 
   2941 .. code-block:: llvm
   2942 
   2943    for.body:
   2944      ...
   2945      %val0 = load i32* %arrayidx, !llvm.mem.parallel_loop_access !0
   2946      ...
   2947      store i32 %val0, i32* %arrayidx1, !llvm.mem.parallel_loop_access !0
   2948      ...
   2949      br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
   2950 
   2951    for.end:
   2952    ...
   2953    !0 = metadata !{ metadata !0 }
   2954 
   2955 It is also possible to have nested parallel loops. In that case the
   2956 memory accesses refer to a list of loop identifier metadata nodes instead of
   2957 the loop identifier metadata node directly:
   2958 
   2959 .. code-block:: llvm
   2960 
   2961    outer.for.body:
   2962      ...
   2963      %val1 = load i32* %arrayidx3, !llvm.mem.parallel_loop_access !2
   2964      ...
   2965      br label %inner.for.body
   2966 
   2967    inner.for.body:
   2968      ...
   2969      %val0 = load i32* %arrayidx1, !llvm.mem.parallel_loop_access !0
   2970      ...
   2971      store i32 %val0, i32* %arrayidx2, !llvm.mem.parallel_loop_access !0
   2972      ...
   2973      br i1 %exitcond, label %inner.for.end, label %inner.for.body, !llvm.loop !1
   2974 
   2975    inner.for.end:
   2976      ...
   2977      store i32 %val1, i32* %arrayidx4, !llvm.mem.parallel_loop_access !2
   2978      ...
   2979      br i1 %exitcond, label %outer.for.end, label %outer.for.body, !llvm.loop !2
   2980 
   2981    outer.for.end:                                          ; preds = %for.body
   2982    ...
   2983    !0 = metadata !{ metadata !1, metadata !2 } ; a list of loop identifiers
   2984    !1 = metadata !{ metadata !1 } ; an identifier for the inner loop
   2985    !2 = metadata !{ metadata !2 } ; an identifier for the outer loop
   2986 
   2987 '``llvm.loop.vectorize``'
   2988 ^^^^^^^^^^^^^^^^^^^^^^^^^
   2989 
   2990 Metadata prefixed with ``llvm.loop.vectorize`` is used to control per-loop
   2991 vectorization parameters such as vectorization factor and unroll factor.
   2992 
   2993 ``llvm.loop.vectorize`` metadata should be used in conjunction with
   2994 ``llvm.loop`` loop identification metadata.
   2995 
   2996 '``llvm.loop.vectorize.unroll``' Metadata
   2997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2998 
   2999 This metadata instructs the loop vectorizer to unroll the specified
   3000 loop exactly ``N`` times.
   3001 
   3002 The first operand is the string ``llvm.loop.vectorize.unroll`` and the second
   3003 operand is an integer specifying the unroll factor. For example:
   3004 
   3005 .. code-block:: llvm
   3006 
   3007    !0 = metadata !{ metadata !"llvm.loop.vectorize.unroll", i32 4 }
   3008 
   3009 Note that setting ``llvm.loop.vectorize.unroll`` to 1 disables
   3010 unrolling of the loop.
   3011 
   3012 If ``llvm.loop.vectorize.unroll`` is set to 0 then the amount of
   3013 unrolling will be determined automatically.
   3014 
   3015 '``llvm.loop.vectorize.width``' Metadata
   3016 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3017 
   3018 This metadata sets the target width of the vectorizer to ``N``. Without
   3019 this metadata, the vectorizer will choose a width automatically.
   3020 Regardless of this metadata, the vectorizer will only vectorize loops if
   3021 it believes it is valid to do so.
   3022 
   3023 The first operand is the string ``llvm.loop.vectorize.width`` and the
   3024 second operand is an integer specifying the width. For example:
   3025 
   3026 .. code-block:: llvm
   3027 
   3028    !0 = metadata !{ metadata !"llvm.loop.vectorize.width", i32 4 }
   3029 
   3030 Note that setting ``llvm.loop.vectorize.width`` to 1 disables
   3031 vectorization of the loop.
   3032 
   3033 If ``llvm.loop.vectorize.width`` is set to 0 then the width will be
   3034 determined automatically.
   3035 
   3036 Module Flags Metadata
   3037 =====================
   3038 
   3039 Information about the module as a whole is difficult to convey to LLVM's
   3040 subsystems. The LLVM IR isn't sufficient to transmit this information.
   3041 The ``llvm.module.flags`` named metadata exists in order to facilitate
   3042 this. These flags are in the form of key / value pairs --- much like a
   3043 dictionary --- making it easy for any subsystem who cares about a flag to
   3044 look it up.
   3045 
   3046 The ``llvm.module.flags`` metadata contains a list of metadata triplets.
   3047 Each triplet has the following form:
   3048 
   3049 -  The first element is a *behavior* flag, which specifies the behavior
   3050    when two (or more) modules are merged together, and it encounters two
   3051    (or more) metadata with the same ID. The supported behaviors are
   3052    described below.
   3053 -  The second element is a metadata string that is a unique ID for the
   3054    metadata. Each module may only have one flag entry for each unique ID (not
   3055    including entries with the **Require** behavior).
   3056 -  The third element is the value of the flag.
   3057 
   3058 When two (or more) modules are merged together, the resulting
   3059 ``llvm.module.flags`` metadata is the union of the modules' flags. That is, for
   3060 each unique metadata ID string, there will be exactly one entry in the merged
   3061 modules ``llvm.module.flags`` metadata table, and the value for that entry will
   3062 be determined by the merge behavior flag, as described below. The only exception
   3063 is that entries with the *Require* behavior are always preserved.
   3064 
   3065 The following behaviors are supported:
   3066 
   3067 .. list-table::
   3068    :header-rows: 1
   3069    :widths: 10 90
   3070 
   3071    * - Value
   3072      - Behavior
   3073 
   3074    * - 1
   3075      - **Error**
   3076            Emits an error if two values disagree, otherwise the resulting value
   3077            is that of the operands.
   3078 
   3079    * - 2
   3080      - **Warning**
   3081            Emits a warning if two values disagree. The result value will be the
   3082            operand for the flag from the first module being linked.
   3083 
   3084    * - 3
   3085      - **Require**
   3086            Adds a requirement that another module flag be present and have a
   3087            specified value after linking is performed. The value must be a
   3088            metadata pair, where the first element of the pair is the ID of the
   3089            module flag to be restricted, and the second element of the pair is
   3090            the value the module flag should be restricted to. This behavior can
   3091            be used to restrict the allowable results (via triggering of an
   3092            error) of linking IDs with the **Override** behavior.
   3093 
   3094    * - 4
   3095      - **Override**
   3096            Uses the specified value, regardless of the behavior or value of the
   3097            other module. If both modules specify **Override**, but the values
   3098            differ, an error will be emitted.
   3099 
   3100    * - 5
   3101      - **Append**
   3102            Appends the two values, which are required to be metadata nodes.
   3103 
   3104    * - 6
   3105      - **AppendUnique**
   3106            Appends the two values, which are required to be metadata
   3107            nodes. However, duplicate entries in the second list are dropped
   3108            during the append operation.
   3109 
   3110 It is an error for a particular unique flag ID to have multiple behaviors,
   3111 except in the case of **Require** (which adds restrictions on another metadata
   3112 value) or **Override**.
   3113 
   3114 An example of module flags:
   3115 
   3116 .. code-block:: llvm
   3117 
   3118     !0 = metadata !{ i32 1, metadata !"foo", i32 1 }
   3119     !1 = metadata !{ i32 4, metadata !"bar", i32 37 }
   3120     !2 = metadata !{ i32 2, metadata !"qux", i32 42 }
   3121     !3 = metadata !{ i32 3, metadata !"qux",
   3122       metadata !{
   3123         metadata !"foo", i32 1
   3124       }
   3125     }
   3126     !llvm.module.flags = !{ !0, !1, !2, !3 }
   3127 
   3128 -  Metadata ``!0`` has the ID ``!"foo"`` and the value '1'. The behavior
   3129    if two or more ``!"foo"`` flags are seen is to emit an error if their
   3130    values are not equal.
   3131 
   3132 -  Metadata ``!1`` has the ID ``!"bar"`` and the value '37'. The
   3133    behavior if two or more ``!"bar"`` flags are seen is to use the value
   3134    '37'.
   3135 
   3136 -  Metadata ``!2`` has the ID ``!"qux"`` and the value '42'. The
   3137    behavior if two or more ``!"qux"`` flags are seen is to emit a
   3138    warning if their values are not equal.
   3139 
   3140 -  Metadata ``!3`` has the ID ``!"qux"`` and the value:
   3141 
   3142    ::
   3143 
   3144        metadata !{ metadata !"foo", i32 1 }
   3145 
   3146    The behavior is to emit an error if the ``llvm.module.flags`` does not
   3147    contain a flag with the ID ``!"foo"`` that has the value '1' after linking is
   3148    performed.
   3149 
   3150 Objective-C Garbage Collection Module Flags Metadata
   3151 ----------------------------------------------------
   3152 
   3153 On the Mach-O platform, Objective-C stores metadata about garbage
   3154 collection in a special section called "image info". The metadata
   3155 consists of a version number and a bitmask specifying what types of
   3156 garbage collection are supported (if any) by the file. If two or more
   3157 modules are linked together their garbage collection metadata needs to
   3158 be merged rather than appended together.
   3159 
   3160 The Objective-C garbage collection module flags metadata consists of the
   3161 following key-value pairs:
   3162 
   3163 .. list-table::
   3164    :header-rows: 1
   3165    :widths: 30 70
   3166 
   3167    * - Key
   3168      - Value
   3169 
   3170    * - ``Objective-C Version``
   3171      - **[Required]** --- The Objective-C ABI version. Valid values are 1 and 2.
   3172 
   3173    * - ``Objective-C Image Info Version``
   3174      - **[Required]** --- The version of the image info section. Currently
   3175        always 0.
   3176 
   3177    * - ``Objective-C Image Info Section``
   3178      - **[Required]** --- The section to place the metadata. Valid values are
   3179        ``"__OBJC, __image_info, regular"`` for Objective-C ABI version 1, and
   3180        ``"__DATA,__objc_imageinfo, regular, no_dead_strip"`` for
   3181        Objective-C ABI version 2.
   3182 
   3183    * - ``Objective-C Garbage Collection``
   3184      - **[Required]** --- Specifies whether garbage collection is supported or
   3185        not. Valid values are 0, for no garbage collection, and 2, for garbage
   3186        collection supported.
   3187 
   3188    * - ``Objective-C GC Only``
   3189      - **[Optional]** --- Specifies that only garbage collection is supported.
   3190        If present, its value must be 6. This flag requires that the
   3191        ``Objective-C Garbage Collection`` flag have the value 2.
   3192 
   3193 Some important flag interactions:
   3194 
   3195 -  If a module with ``Objective-C Garbage Collection`` set to 0 is
   3196    merged with a module with ``Objective-C Garbage Collection`` set to
   3197    2, then the resulting module has the
   3198    ``Objective-C Garbage Collection`` flag set to 0.
   3199 -  A module with ``Objective-C Garbage Collection`` set to 0 cannot be
   3200    merged with a module with ``Objective-C GC Only`` set to 6.
   3201 
   3202 Automatic Linker Flags Module Flags Metadata
   3203 --------------------------------------------
   3204 
   3205 Some targets support embedding flags to the linker inside individual object
   3206 files. Typically this is used in conjunction with language extensions which
   3207 allow source files to explicitly declare the libraries they depend on, and have
   3208 these automatically be transmitted to the linker via object files.
   3209 
   3210 These flags are encoded in the IR using metadata in the module flags section,
   3211 using the ``Linker Options`` key. The merge behavior for this flag is required
   3212 to be ``AppendUnique``, and the value for the key is expected to be a metadata
   3213 node which should be a list of other metadata nodes, each of which should be a
   3214 list of metadata strings defining linker options.
   3215 
   3216 For example, the following metadata section specifies two separate sets of
   3217 linker options, presumably to link against ``libz`` and the ``Cocoa``
   3218 framework::
   3219 
   3220     !0 = metadata !{ i32 6, metadata !"Linker Options",
   3221        metadata !{
   3222           metadata !{ metadata !"-lz" },
   3223           metadata !{ metadata !"-framework", metadata !"Cocoa" } } }
   3224     !llvm.module.flags = !{ !0 }
   3225 
   3226 The metadata encoding as lists of lists of options, as opposed to a collapsed
   3227 list of options, is chosen so that the IR encoding can use multiple option
   3228 strings to specify e.g., a single library, while still having that specifier be
   3229 preserved as an atomic element that can be recognized by a target specific
   3230 assembly writer or object file emitter.
   3231 
   3232 Each individual option is required to be either a valid option for the target's
   3233 linker, or an option that is reserved by the target specific assembly writer or
   3234 object file emitter. No other aspect of these options is defined by the IR.
   3235 
   3236 C type width Module Flags Metadata
   3237 ----------------------------------
   3238 
   3239 The ARM backend emits a section into each generated object file describing the
   3240 options that it was compiled with (in a compiler-independent way) to prevent
   3241 linking incompatible objects, and to allow automatic library selection. Some
   3242 of these options are not visible at the IR level, namely wchar_t width and enum
   3243 width.
   3244 
   3245 To pass this information to the backend, these options are encoded in module
   3246 flags metadata, using the following key-value pairs:
   3247 
   3248 .. list-table::
   3249    :header-rows: 1
   3250    :widths: 30 70
   3251 
   3252    * - Key
   3253      - Value
   3254 
   3255    * - short_wchar
   3256      - * 0 --- sizeof(wchar_t) == 4
   3257        * 1 --- sizeof(wchar_t) == 2
   3258 
   3259    * - short_enum
   3260      - * 0 --- Enums are at least as large as an ``int``.
   3261        * 1 --- Enums are stored in the smallest integer type which can
   3262          represent all of its values.
   3263 
   3264 For example, the following metadata section specifies that the module was
   3265 compiled with a ``wchar_t`` width of 4 bytes, and the underlying type of an
   3266 enum is the smallest type which can represent all of its values::
   3267 
   3268     !llvm.module.flags = !{!0, !1}
   3269     !0 = metadata !{i32 1, metadata !"short_wchar", i32 1}
   3270     !1 = metadata !{i32 1, metadata !"short_enum", i32 0}
   3271 
   3272 .. _intrinsicglobalvariables:
   3273 
   3274 Intrinsic Global Variables
   3275 ==========================
   3276 
   3277 LLVM has a number of "magic" global variables that contain data that
   3278 affect code generation or other IR semantics. These are documented here.
   3279 All globals of this sort should have a section specified as
   3280 "``llvm.metadata``". This section and all globals that start with
   3281 "``llvm.``" are reserved for use by LLVM.
   3282 
   3283 .. _gv_llvmused:
   3284 
   3285 The '``llvm.used``' Global Variable
   3286 -----------------------------------
   3287 
   3288 The ``@llvm.used`` global is an array which has
   3289 :ref:`appending linkage <linkage_appending>`. This array contains a list of
   3290 pointers to named global variables, functions and aliases which may optionally
   3291 have a pointer cast formed of bitcast or getelementptr. For example, a legal
   3292 use of it is:
   3293 
   3294 .. code-block:: llvm
   3295 
   3296     @X = global i8 4
   3297     @Y = global i32 123
   3298 
   3299     @llvm.used = appending global [2 x i8*] [
   3300        i8* @X,
   3301        i8* bitcast (i32* @Y to i8*)
   3302     ], section "llvm.metadata"
   3303 
   3304 If a symbol appears in the ``@llvm.used`` list, then the compiler, assembler,
   3305 and linker are required to treat the symbol as if there is a reference to the
   3306 symbol that it cannot see (which is why they have to be named). For example, if
   3307 a variable has internal linkage and no references other than that from the
   3308 ``@llvm.used`` list, it cannot be deleted. This is commonly used to represent
   3309 references from inline asms and other things the compiler cannot "see", and
   3310 corresponds to "``attribute((used))``" in GNU C.
   3311 
   3312 On some targets, the code generator must emit a directive to the
   3313 assembler or object file to prevent the assembler and linker from
   3314 molesting the symbol.
   3315 
   3316 .. _gv_llvmcompilerused:
   3317 
   3318 The '``llvm.compiler.used``' Global Variable
   3319 --------------------------------------------
   3320 
   3321 The ``@llvm.compiler.used`` directive is the same as the ``@llvm.used``
   3322 directive, except that it only prevents the compiler from touching the
   3323 symbol. On targets that support it, this allows an intelligent linker to
   3324 optimize references to the symbol without being impeded as it would be
   3325 by ``@llvm.used``.
   3326 
   3327 This is a rare construct that should only be used in rare circumstances,
   3328 and should not be exposed to source languages.
   3329 
   3330 .. _gv_llvmglobalctors:
   3331 
   3332 The '``llvm.global_ctors``' Global Variable
   3333 -------------------------------------------
   3334 
   3335 .. code-block:: llvm
   3336 
   3337     %0 = type { i32, void ()*, i8* }
   3338     @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor, i8* @data }]
   3339 
   3340 The ``@llvm.global_ctors`` array contains a list of constructor
   3341 functions, priorities, and an optional associated global or function.
   3342 The functions referenced by this array will be called in ascending order
   3343 of priority (i.e. lowest first) when the module is loaded. The order of
   3344 functions with the same priority is not defined.
   3345 
   3346 If the third field is present, non-null, and points to a global variable
   3347 or function, the initializer function will only run if the associated
   3348 data from the current module is not discarded.
   3349 
   3350 .. _llvmglobaldtors:
   3351 
   3352 The '``llvm.global_dtors``' Global Variable
   3353 -------------------------------------------
   3354 
   3355 .. code-block:: llvm
   3356 
   3357     %0 = type { i32, void ()*, i8* }
   3358     @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor, i8* @data }]
   3359 
   3360 The ``@llvm.global_dtors`` array contains a list of destructor
   3361 functions, priorities, and an optional associated global or function.
   3362 The functions referenced by this array will be called in descending
   3363 order of priority (i.e. highest first) when the module is unloaded. The
   3364 order of functions with the same priority is not defined.
   3365 
   3366 If the third field is present, non-null, and points to a global variable
   3367 or function, the destructor function will only run if the associated
   3368 data from the current module is not discarded.
   3369 
   3370 Instruction Reference
   3371 =====================
   3372 
   3373 The LLVM instruction set consists of several different classifications
   3374 of instructions: :ref:`terminator instructions <terminators>`, :ref:`binary
   3375 instructions <binaryops>`, :ref:`bitwise binary
   3376 instructions <bitwiseops>`, :ref:`memory instructions <memoryops>`, and
   3377 :ref:`other instructions <otherops>`.
   3378 
   3379 .. _terminators:
   3380 
   3381 Terminator Instructions
   3382 -----------------------
   3383 
   3384 As mentioned :ref:`previously <functionstructure>`, every basic block in a
   3385 program ends with a "Terminator" instruction, which indicates which
   3386 block should be executed after the current block is finished. These
   3387 terminator instructions typically yield a '``void``' value: they produce
   3388 control flow, not values (the one exception being the
   3389 ':ref:`invoke <i_invoke>`' instruction).
   3390 
   3391 The terminator instructions are: ':ref:`ret <i_ret>`',
   3392 ':ref:`br <i_br>`', ':ref:`switch <i_switch>`',
   3393 ':ref:`indirectbr <i_indirectbr>`', ':ref:`invoke <i_invoke>`',
   3394 ':ref:`resume <i_resume>`', and ':ref:`unreachable <i_unreachable>`'.
   3395 
   3396 .. _i_ret:
   3397 
   3398 '``ret``' Instruction
   3399 ^^^^^^^^^^^^^^^^^^^^^
   3400 
   3401 Syntax:
   3402 """""""
   3403 
   3404 ::
   3405 
   3406       ret <type> <value>       ; Return a value from a non-void function
   3407       ret void                 ; Return from void function
   3408 
   3409 Overview:
   3410 """""""""
   3411 
   3412 The '``ret``' instruction is used to return control flow (and optionally
   3413 a value) from a function back to the caller.
   3414 
   3415 There are two forms of the '``ret``' instruction: one that returns a
   3416 value and then causes control flow, and one that just causes control
   3417 flow to occur.
   3418 
   3419 Arguments:
   3420 """"""""""
   3421 
   3422 The '``ret``' instruction optionally accepts a single argument, the
   3423 return value. The type of the return value must be a ':ref:`first
   3424 class <t_firstclass>`' type.
   3425 
   3426 A function is not :ref:`well formed <wellformed>` if it it has a non-void
   3427 return type and contains a '``ret``' instruction with no return value or
   3428 a return value with a type that does not match its type, or if it has a
   3429 void return type and contains a '``ret``' instruction with a return
   3430 value.
   3431 
   3432 Semantics:
   3433 """"""""""
   3434 
   3435 When the '``ret``' instruction is executed, control flow returns back to
   3436 the calling function's context. If the caller is a
   3437 ":ref:`call <i_call>`" instruction, execution continues at the
   3438 instruction after the call. If the caller was an
   3439 ":ref:`invoke <i_invoke>`" instruction, execution continues at the
   3440 beginning of the "normal" destination block. If the instruction returns
   3441 a value, that value shall set the call or invoke instruction's return
   3442 value.
   3443 
   3444 Example:
   3445 """"""""
   3446 
   3447 .. code-block:: llvm
   3448 
   3449       ret i32 5                       ; Return an integer value of 5
   3450       ret void                        ; Return from a void function
   3451       ret { i32, i8 } { i32 4, i8 2 } ; Return a struct of values 4 and 2
   3452 
   3453 .. _i_br:
   3454 
   3455 '``br``' Instruction
   3456 ^^^^^^^^^^^^^^^^^^^^
   3457 
   3458 Syntax:
   3459 """""""
   3460 
   3461 ::
   3462 
   3463       br i1 <cond>, label <iftrue>, label <iffalse>
   3464       br label <dest>          ; Unconditional branch
   3465 
   3466 Overview:
   3467 """""""""
   3468 
   3469 The '``br``' instruction is used to cause control flow to transfer to a
   3470 different basic block in the current function. There are two forms of
   3471 this instruction, corresponding to a conditional branch and an
   3472 unconditional branch.
   3473 
   3474 Arguments:
   3475 """"""""""
   3476 
   3477 The conditional branch form of the '``br``' instruction takes a single
   3478 '``i1``' value and two '``label``' values. The unconditional form of the
   3479 '``br``' instruction takes a single '``label``' value as a target.
   3480 
   3481 Semantics:
   3482 """"""""""
   3483 
   3484 Upon execution of a conditional '``br``' instruction, the '``i1``'
   3485 argument is evaluated. If the value is ``true``, control flows to the
   3486 '``iftrue``' ``label`` argument. If "cond" is ``false``, control flows
   3487 to the '``iffalse``' ``label`` argument.
   3488 
   3489 Example:
   3490 """"""""
   3491 
   3492 .. code-block:: llvm
   3493 
   3494     Test:
   3495       %cond = icmp eq i32 %a, %b
   3496       br i1 %cond, label %IfEqual, label %IfUnequal
   3497     IfEqual:
   3498       ret i32 1
   3499     IfUnequal:
   3500       ret i32 0
   3501 
   3502 .. _i_switch:
   3503 
   3504 '``switch``' Instruction
   3505 ^^^^^^^^^^^^^^^^^^^^^^^^
   3506 
   3507 Syntax:
   3508 """""""
   3509 
   3510 ::
   3511 
   3512       switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
   3513 
   3514 Overview:
   3515 """""""""
   3516 
   3517 The '``switch``' instruction is used to transfer control flow to one of
   3518 several different places. It is a generalization of the '``br``'
   3519 instruction, allowing a branch to occur to one of many possible
   3520 destinations.
   3521 
   3522 Arguments:
   3523 """"""""""
   3524 
   3525 The '``switch``' instruction uses three parameters: an integer
   3526 comparison value '``value``', a default '``label``' destination, and an
   3527 array of pairs of comparison value constants and '``label``'s. The table
   3528 is not allowed to contain duplicate constant entries.
   3529 
   3530 Semantics:
   3531 """"""""""
   3532 
   3533 The ``switch`` instruction specifies a table of values and destinations.
   3534 When the '``switch``' instruction is executed, this table is searched
   3535 for the given value. If the value is found, control flow is transferred
   3536 to the corresponding destination; otherwise, control flow is transferred
   3537 to the default destination.
   3538 
   3539 Implementation:
   3540 """""""""""""""
   3541 
   3542 Depending on properties of the target machine and the particular
   3543 ``switch`` instruction, this instruction may be code generated in
   3544 different ways. For example, it could be generated as a series of
   3545 chained conditional branches or with a lookup table.
   3546 
   3547 Example:
   3548 """"""""
   3549 
   3550 .. code-block:: llvm
   3551 
   3552      ; Emulate a conditional br instruction
   3553      %Val = zext i1 %value to i32
   3554      switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
   3555 
   3556      ; Emulate an unconditional br instruction
   3557      switch i32 0, label %dest [ ]
   3558 
   3559      ; Implement a jump table:
   3560      switch i32 %val, label %otherwise [ i32 0, label %onzero
   3561                                          i32 1, label %onone
   3562                                          i32 2, label %ontwo ]
   3563 
   3564 .. _i_indirectbr:
   3565 
   3566 '``indirectbr``' Instruction
   3567 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3568 
   3569 Syntax:
   3570 """""""
   3571 
   3572 ::
   3573 
   3574       indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ]
   3575 
   3576 Overview:
   3577 """""""""
   3578 
   3579 The '``indirectbr``' instruction implements an indirect branch to a
   3580 label within the current function, whose address is specified by
   3581 "``address``". Address must be derived from a
   3582 :ref:`blockaddress <blockaddress>` constant.
   3583 
   3584 Arguments:
   3585 """"""""""
   3586 
   3587 The '``address``' argument is the address of the label to jump to. The
   3588 rest of the arguments indicate the full set of possible destinations
   3589 that the address may point to. Blocks are allowed to occur multiple
   3590 times in the destination list, though this isn't particularly useful.
   3591 
   3592 This destination list is required so that dataflow analysis has an
   3593 accurate understanding of the CFG.
   3594 
   3595 Semantics:
   3596 """"""""""
   3597 
   3598 Control transfers to the block specified in the address argument. All
   3599 possible destination blocks must be listed in the label list, otherwise
   3600 this instruction has undefined behavior. This implies that jumps to
   3601 labels defined in other functions have undefined behavior as well.
   3602 
   3603 Implementation:
   3604 """""""""""""""
   3605 
   3606 This is typically implemented with a jump through a register.
   3607 
   3608 Example:
   3609 """"""""
   3610 
   3611 .. code-block:: llvm
   3612 
   3613      indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ]
   3614 
   3615 .. _i_invoke:
   3616 
   3617 '``invoke``' Instruction
   3618 ^^^^^^^^^^^^^^^^^^^^^^^^
   3619 
   3620 Syntax:
   3621 """""""
   3622 
   3623 ::
   3624 
   3625       <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
   3626                     to label <normal label> unwind label <exception label>
   3627 
   3628 Overview:
   3629 """""""""
   3630 
   3631 The '``invoke``' instruction causes control to transfer to a specified
   3632 function, with the possibility of control flow transfer to either the
   3633 '``normal``' label or the '``exception``' label. If the callee function
   3634 returns with the "``ret``" instruction, control flow will return to the
   3635 "normal" label. If the callee (or any indirect callees) returns via the
   3636 ":ref:`resume <i_resume>`" instruction or other exception handling
   3637 mechanism, control is interrupted and continued at the dynamically
   3638 nearest "exception" label.
   3639 
   3640 The '``exception``' label is a `landing
   3641 pad <ExceptionHandling.html#overview>`_ for the exception. As such,
   3642 '``exception``' label is required to have the
   3643 ":ref:`landingpad <i_landingpad>`" instruction, which contains the
   3644 information about the behavior of the program after unwinding happens,
   3645 as its first non-PHI instruction. The restrictions on the
   3646 "``landingpad``" instruction's tightly couples it to the "``invoke``"
   3647 instruction, so that the important information contained within the
   3648 "``landingpad``" instruction can't be lost through normal code motion.
   3649 
   3650 Arguments:
   3651 """"""""""
   3652 
   3653 This instruction requires several arguments:
   3654 
   3655 #. The optional "cconv" marker indicates which :ref:`calling
   3656    convention <callingconv>` the call should use. If none is
   3657    specified, the call defaults to using C calling conventions.
   3658 #. The optional :ref:`Parameter Attributes <paramattrs>` list for return
   3659    values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
   3660    are valid here.
   3661 #. '``ptr to function ty``': shall be the signature of the pointer to
   3662    function value being invoked. In most cases, this is a direct
   3663    function invocation, but indirect ``invoke``'s are just as possible,
   3664    branching off an arbitrary pointer to function value.
   3665 #. '``function ptr val``': An LLVM value containing a pointer to a
   3666    function to be invoked.
   3667 #. '``function args``': argument list whose types match the function
   3668    signature argument types and parameter attributes. All arguments must
   3669    be of :ref:`first class <t_firstclass>` type. If the function signature
   3670    indicates the function accepts a variable number of arguments, the
   3671    extra arguments can be specified.
   3672 #. '``normal label``': the label reached when the called function
   3673    executes a '``ret``' instruction.
   3674 #. '``exception label``': the label reached when a callee returns via
   3675    the :ref:`resume <i_resume>` instruction or other exception handling
   3676    mechanism.
   3677 #. The optional :ref:`function attributes <fnattrs>` list. Only
   3678    '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``'
   3679    attributes are valid here.
   3680 
   3681 Semantics:
   3682 """"""""""
   3683 
   3684 This instruction is designed to operate as a standard '``call``'
   3685 instruction in most regards. The primary difference is that it
   3686 establishes an association with a label, which is used by the runtime
   3687 library to unwind the stack.
   3688 
   3689 This instruction is used in languages with destructors to ensure that
   3690 proper cleanup is performed in the case of either a ``longjmp`` or a
   3691 thrown exception. Additionally, this is important for implementation of
   3692 '``catch``' clauses in high-level languages that support them.
   3693 
   3694 For the purposes of the SSA form, the definition of the value returned
   3695 by the '``invoke``' instruction is deemed to occur on the edge from the
   3696 current block to the "normal" label. If the callee unwinds then no
   3697 return value is available.
   3698 
   3699 Example:
   3700 """"""""
   3701 
   3702 .. code-block:: llvm
   3703 
   3704       %retval = invoke i32 @Test(i32 15) to label %Continue
   3705                   unwind label %TestCleanup              ; i32:retval set
   3706       %retval = invoke coldcc i32 %Testfnptr(i32 15) to label %Continue
   3707                   unwind label %TestCleanup              ; i32:retval set
   3708 
   3709 .. _i_resume:
   3710 
   3711 '``resume``' Instruction
   3712 ^^^^^^^^^^^^^^^^^^^^^^^^
   3713 
   3714 Syntax:
   3715 """""""
   3716 
   3717 ::
   3718 
   3719       resume <type> <value>
   3720 
   3721 Overview:
   3722 """""""""
   3723 
   3724 The '``resume``' instruction is a terminator instruction that has no
   3725 successors.
   3726 
   3727 Arguments:
   3728 """"""""""
   3729 
   3730 The '``resume``' instruction requires one argument, which must have the
   3731 same type as the result of any '``landingpad``' instruction in the same
   3732 function.
   3733 
   3734 Semantics:
   3735 """"""""""
   3736 
   3737 The '``resume``' instruction resumes propagation of an existing
   3738 (in-flight) exception whose unwinding was interrupted with a
   3739 :ref:`landingpad <i_landingpad>` instruction.
   3740 
   3741 Example:
   3742 """"""""
   3743 
   3744 .. code-block:: llvm
   3745 
   3746       resume { i8*, i32 } %exn
   3747 
   3748 .. _i_unreachable:
   3749 
   3750 '``unreachable``' Instruction
   3751 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3752 
   3753 Syntax:
   3754 """""""
   3755 
   3756 ::
   3757 
   3758       unreachable
   3759 
   3760 Overview:
   3761 """""""""
   3762 
   3763 The '``unreachable``' instruction has no defined semantics. This
   3764 instruction is used to inform the optimizer that a particular portion of
   3765 the code is not reachable. This can be used to indicate that the code
   3766 after a no-return function cannot be reached, and other facts.
   3767 
   3768 Semantics:
   3769 """"""""""
   3770 
   3771 The '``unreachable``' instruction has no defined semantics.
   3772 
   3773 .. _binaryops:
   3774 
   3775 Binary Operations
   3776 -----------------
   3777 
   3778 Binary operators are used to do most of the computation in a program.
   3779 They require two operands of the same type, execute an operation on
   3780 them, and produce a single value. The operands might represent multiple
   3781 data, as is the case with the :ref:`vector <t_vector>` data type. The
   3782 result value has the same type as its operands.
   3783 
   3784 There are several different binary operators:
   3785 
   3786 .. _i_add:
   3787 
   3788 '``add``' Instruction
   3789 ^^^^^^^^^^^^^^^^^^^^^
   3790 
   3791 Syntax:
   3792 """""""
   3793 
   3794 ::
   3795 
   3796       <result> = add <ty> <op1>, <op2>          ; yields ty:result
   3797       <result> = add nuw <ty> <op1>, <op2>      ; yields ty:result
   3798       <result> = add nsw <ty> <op1>, <op2>      ; yields ty:result
   3799       <result> = add nuw nsw <ty> <op1>, <op2>  ; yields ty:result
   3800 
   3801 Overview:
   3802 """""""""
   3803 
   3804 The '``add``' instruction returns the sum of its two operands.
   3805 
   3806 Arguments:
   3807 """"""""""
   3808 
   3809 The two arguments to the '``add``' instruction must be
   3810 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   3811 arguments must have identical types.
   3812 
   3813 Semantics:
   3814 """"""""""
   3815 
   3816 The value produced is the integer sum of the two operands.
   3817 
   3818 If the sum has unsigned overflow, the result returned is the
   3819 mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
   3820 the result.
   3821 
   3822 Because LLVM integers use a two's complement representation, this
   3823 instruction is appropriate for both signed and unsigned integers.
   3824 
   3825 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
   3826 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
   3827 result value of the ``add`` is a :ref:`poison value <poisonvalues>` if
   3828 unsigned and/or signed overflow, respectively, occurs.
   3829 
   3830 Example:
   3831 """"""""
   3832 
   3833 .. code-block:: llvm
   3834 
   3835       <result> = add i32 4, %var          ; yields i32:result = 4 + %var
   3836 
   3837 .. _i_fadd:
   3838 
   3839 '``fadd``' Instruction
   3840 ^^^^^^^^^^^^^^^^^^^^^^
   3841 
   3842 Syntax:
   3843 """""""
   3844 
   3845 ::
   3846 
   3847       <result> = fadd [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
   3848 
   3849 Overview:
   3850 """""""""
   3851 
   3852 The '``fadd``' instruction returns the sum of its two operands.
   3853 
   3854 Arguments:
   3855 """"""""""
   3856 
   3857 The two arguments to the '``fadd``' instruction must be :ref:`floating
   3858 point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
   3859 Both arguments must have identical types.
   3860 
   3861 Semantics:
   3862 """"""""""
   3863 
   3864 The value produced is the floating point sum of the two operands. This
   3865 instruction can also take any number of :ref:`fast-math flags <fastmath>`,
   3866 which are optimization hints to enable otherwise unsafe floating point
   3867 optimizations:
   3868 
   3869 Example:
   3870 """"""""
   3871 
   3872 .. code-block:: llvm
   3873 
   3874       <result> = fadd float 4.0, %var          ; yields float:result = 4.0 + %var
   3875 
   3876 '``sub``' Instruction
   3877 ^^^^^^^^^^^^^^^^^^^^^
   3878 
   3879 Syntax:
   3880 """""""
   3881 
   3882 ::
   3883 
   3884       <result> = sub <ty> <op1>, <op2>          ; yields ty:result
   3885       <result> = sub nuw <ty> <op1>, <op2>      ; yields ty:result
   3886       <result> = sub nsw <ty> <op1>, <op2>      ; yields ty:result
   3887       <result> = sub nuw nsw <ty> <op1>, <op2>  ; yields ty:result
   3888 
   3889 Overview:
   3890 """""""""
   3891 
   3892 The '``sub``' instruction returns the difference of its two operands.
   3893 
   3894 Note that the '``sub``' instruction is used to represent the '``neg``'
   3895 instruction present in most other intermediate representations.
   3896 
   3897 Arguments:
   3898 """"""""""
   3899 
   3900 The two arguments to the '``sub``' instruction must be
   3901 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   3902 arguments must have identical types.
   3903 
   3904 Semantics:
   3905 """"""""""
   3906 
   3907 The value produced is the integer difference of the two operands.
   3908 
   3909 If the difference has unsigned overflow, the result returned is the
   3910 mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
   3911 the result.
   3912 
   3913 Because LLVM integers use a two's complement representation, this
   3914 instruction is appropriate for both signed and unsigned integers.
   3915 
   3916 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
   3917 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
   3918 result value of the ``sub`` is a :ref:`poison value <poisonvalues>` if
   3919 unsigned and/or signed overflow, respectively, occurs.
   3920 
   3921 Example:
   3922 """"""""
   3923 
   3924 .. code-block:: llvm
   3925 
   3926       <result> = sub i32 4, %var          ; yields i32:result = 4 - %var
   3927       <result> = sub i32 0, %val          ; yields i32:result = -%var
   3928 
   3929 .. _i_fsub:
   3930 
   3931 '``fsub``' Instruction
   3932 ^^^^^^^^^^^^^^^^^^^^^^
   3933 
   3934 Syntax:
   3935 """""""
   3936 
   3937 ::
   3938 
   3939       <result> = fsub [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
   3940 
   3941 Overview:
   3942 """""""""
   3943 
   3944 The '``fsub``' instruction returns the difference of its two operands.
   3945 
   3946 Note that the '``fsub``' instruction is used to represent the '``fneg``'
   3947 instruction present in most other intermediate representations.
   3948 
   3949 Arguments:
   3950 """"""""""
   3951 
   3952 The two arguments to the '``fsub``' instruction must be :ref:`floating
   3953 point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
   3954 Both arguments must have identical types.
   3955 
   3956 Semantics:
   3957 """"""""""
   3958 
   3959 The value produced is the floating point difference of the two operands.
   3960 This instruction can also take any number of :ref:`fast-math
   3961 flags <fastmath>`, which are optimization hints to enable otherwise
   3962 unsafe floating point optimizations:
   3963 
   3964 Example:
   3965 """"""""
   3966 
   3967 .. code-block:: llvm
   3968 
   3969       <result> = fsub float 4.0, %var           ; yields float:result = 4.0 - %var
   3970       <result> = fsub float -0.0, %val          ; yields float:result = -%var
   3971 
   3972 '``mul``' Instruction
   3973 ^^^^^^^^^^^^^^^^^^^^^
   3974 
   3975 Syntax:
   3976 """""""
   3977 
   3978 ::
   3979 
   3980       <result> = mul <ty> <op1>, <op2>          ; yields ty:result
   3981       <result> = mul nuw <ty> <op1>, <op2>      ; yields ty:result
   3982       <result> = mul nsw <ty> <op1>, <op2>      ; yields ty:result
   3983       <result> = mul nuw nsw <ty> <op1>, <op2>  ; yields ty:result
   3984 
   3985 Overview:
   3986 """""""""
   3987 
   3988 The '``mul``' instruction returns the product of its two operands.
   3989 
   3990 Arguments:
   3991 """"""""""
   3992 
   3993 The two arguments to the '``mul``' instruction must be
   3994 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   3995 arguments must have identical types.
   3996 
   3997 Semantics:
   3998 """"""""""
   3999 
   4000 The value produced is the integer product of the two operands.
   4001 
   4002 If the result of the multiplication has unsigned overflow, the result
   4003 returned is the mathematical result modulo 2\ :sup:`n`\ , where n is the
   4004 bit width of the result.
   4005 
   4006 Because LLVM integers use a two's complement representation, and the
   4007 result is the same width as the operands, this instruction returns the
   4008 correct result for both signed and unsigned integers. If a full product
   4009 (e.g. ``i32`` * ``i32`` -> ``i64``) is needed, the operands should be
   4010 sign-extended or zero-extended as appropriate to the width of the full
   4011 product.
   4012 
   4013 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
   4014 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
   4015 result value of the ``mul`` is a :ref:`poison value <poisonvalues>` if
   4016 unsigned and/or signed overflow, respectively, occurs.
   4017 
   4018 Example:
   4019 """"""""
   4020 
   4021 .. code-block:: llvm
   4022 
   4023       <result> = mul i32 4, %var          ; yields i32:result = 4 * %var
   4024 
   4025 .. _i_fmul:
   4026 
   4027 '``fmul``' Instruction
   4028 ^^^^^^^^^^^^^^^^^^^^^^
   4029 
   4030 Syntax:
   4031 """""""
   4032 
   4033 ::
   4034 
   4035       <result> = fmul [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
   4036 
   4037 Overview:
   4038 """""""""
   4039 
   4040 The '``fmul``' instruction returns the product of its two operands.
   4041 
   4042 Arguments:
   4043 """"""""""
   4044 
   4045 The two arguments to the '``fmul``' instruction must be :ref:`floating
   4046 point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
   4047 Both arguments must have identical types.
   4048 
   4049 Semantics:
   4050 """"""""""
   4051 
   4052 The value produced is the floating point product of the two operands.
   4053 This instruction can also take any number of :ref:`fast-math
   4054 flags <fastmath>`, which are optimization hints to enable otherwise
   4055 unsafe floating point optimizations:
   4056 
   4057 Example:
   4058 """"""""
   4059 
   4060 .. code-block:: llvm
   4061 
   4062       <result> = fmul float 4.0, %var          ; yields float:result = 4.0 * %var
   4063 
   4064 '``udiv``' Instruction
   4065 ^^^^^^^^^^^^^^^^^^^^^^
   4066 
   4067 Syntax:
   4068 """""""
   4069 
   4070 ::
   4071 
   4072       <result> = udiv <ty> <op1>, <op2>         ; yields ty:result
   4073       <result> = udiv exact <ty> <op1>, <op2>   ; yields ty:result
   4074 
   4075 Overview:
   4076 """""""""
   4077 
   4078 The '``udiv``' instruction returns the quotient of its two operands.
   4079 
   4080 Arguments:
   4081 """"""""""
   4082 
   4083 The two arguments to the '``udiv``' instruction must be
   4084 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4085 arguments must have identical types.
   4086 
   4087 Semantics:
   4088 """"""""""
   4089 
   4090 The value produced is the unsigned integer quotient of the two operands.
   4091 
   4092 Note that unsigned integer division and signed integer division are
   4093 distinct operations; for signed integer division, use '``sdiv``'.
   4094 
   4095 Division by zero leads to undefined behavior.
   4096 
   4097 If the ``exact`` keyword is present, the result value of the ``udiv`` is
   4098 a :ref:`poison value <poisonvalues>` if %op1 is not a multiple of %op2 (as
   4099 such, "((a udiv exact b) mul b) == a").
   4100 
   4101 Example:
   4102 """"""""
   4103 
   4104 .. code-block:: llvm
   4105 
   4106       <result> = udiv i32 4, %var          ; yields i32:result = 4 / %var
   4107 
   4108 '``sdiv``' Instruction
   4109 ^^^^^^^^^^^^^^^^^^^^^^
   4110 
   4111 Syntax:
   4112 """""""
   4113 
   4114 ::
   4115 
   4116       <result> = sdiv <ty> <op1>, <op2>         ; yields ty:result
   4117       <result> = sdiv exact <ty> <op1>, <op2>   ; yields ty:result
   4118 
   4119 Overview:
   4120 """""""""
   4121 
   4122 The '``sdiv``' instruction returns the quotient of its two operands.
   4123 
   4124 Arguments:
   4125 """"""""""
   4126 
   4127 The two arguments to the '``sdiv``' instruction must be
   4128 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4129 arguments must have identical types.
   4130 
   4131 Semantics:
   4132 """"""""""
   4133 
   4134 The value produced is the signed integer quotient of the two operands
   4135 rounded towards zero.
   4136 
   4137 Note that signed integer division and unsigned integer division are
   4138 distinct operations; for unsigned integer division, use '``udiv``'.
   4139 
   4140 Division by zero leads to undefined behavior. Overflow also leads to
   4141 undefined behavior; this is a rare case, but can occur, for example, by
   4142 doing a 32-bit division of -2147483648 by -1.
   4143 
   4144 If the ``exact`` keyword is present, the result value of the ``sdiv`` is
   4145 a :ref:`poison value <poisonvalues>` if the result would be rounded.
   4146 
   4147 Example:
   4148 """"""""
   4149 
   4150 .. code-block:: llvm
   4151 
   4152       <result> = sdiv i32 4, %var          ; yields i32:result = 4 / %var
   4153 
   4154 .. _i_fdiv:
   4155 
   4156 '``fdiv``' Instruction
   4157 ^^^^^^^^^^^^^^^^^^^^^^
   4158 
   4159 Syntax:
   4160 """""""
   4161 
   4162 ::
   4163 
   4164       <result> = fdiv [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
   4165 
   4166 Overview:
   4167 """""""""
   4168 
   4169 The '``fdiv``' instruction returns the quotient of its two operands.
   4170 
   4171 Arguments:
   4172 """"""""""
   4173 
   4174 The two arguments to the '``fdiv``' instruction must be :ref:`floating
   4175 point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
   4176 Both arguments must have identical types.
   4177 
   4178 Semantics:
   4179 """"""""""
   4180 
   4181 The value produced is the floating point quotient of the two operands.
   4182 This instruction can also take any number of :ref:`fast-math
   4183 flags <fastmath>`, which are optimization hints to enable otherwise
   4184 unsafe floating point optimizations:
   4185 
   4186 Example:
   4187 """"""""
   4188 
   4189 .. code-block:: llvm
   4190 
   4191       <result> = fdiv float 4.0, %var          ; yields float:result = 4.0 / %var
   4192 
   4193 '``urem``' Instruction
   4194 ^^^^^^^^^^^^^^^^^^^^^^
   4195 
   4196 Syntax:
   4197 """""""
   4198 
   4199 ::
   4200 
   4201       <result> = urem <ty> <op1>, <op2>   ; yields ty:result
   4202 
   4203 Overview:
   4204 """""""""
   4205 
   4206 The '``urem``' instruction returns the remainder from the unsigned
   4207 division of its two arguments.
   4208 
   4209 Arguments:
   4210 """"""""""
   4211 
   4212 The two arguments to the '``urem``' instruction must be
   4213 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4214 arguments must have identical types.
   4215 
   4216 Semantics:
   4217 """"""""""
   4218 
   4219 This instruction returns the unsigned integer *remainder* of a division.
   4220 This instruction always performs an unsigned division to get the
   4221 remainder.
   4222 
   4223 Note that unsigned integer remainder and signed integer remainder are
   4224 distinct operations; for signed integer remainder, use '``srem``'.
   4225 
   4226 Taking the remainder of a division by zero leads to undefined behavior.
   4227 
   4228 Example:
   4229 """"""""
   4230 
   4231 .. code-block:: llvm
   4232 
   4233       <result> = urem i32 4, %var          ; yields i32:result = 4 % %var
   4234 
   4235 '``srem``' Instruction
   4236 ^^^^^^^^^^^^^^^^^^^^^^
   4237 
   4238 Syntax:
   4239 """""""
   4240 
   4241 ::
   4242 
   4243       <result> = srem <ty> <op1>, <op2>   ; yields ty:result
   4244 
   4245 Overview:
   4246 """""""""
   4247 
   4248 The '``srem``' instruction returns the remainder from the signed
   4249 division of its two operands. This instruction can also take
   4250 :ref:`vector <t_vector>` versions of the values in which case the elements
   4251 must be integers.
   4252 
   4253 Arguments:
   4254 """"""""""
   4255 
   4256 The two arguments to the '``srem``' instruction must be
   4257 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4258 arguments must have identical types.
   4259 
   4260 Semantics:
   4261 """"""""""
   4262 
   4263 This instruction returns the *remainder* of a division (where the result
   4264 is either zero or has the same sign as the dividend, ``op1``), not the
   4265 *modulo* operator (where the result is either zero or has the same sign
   4266 as the divisor, ``op2``) of a value. For more information about the
   4267 difference, see `The Math
   4268 Forum <http://mathforum.org/dr.math/problems/anne.4.28.99.html>`_. For a
   4269 table of how this is implemented in various languages, please see
   4270 `Wikipedia: modulo
   4271 operation <http://en.wikipedia.org/wiki/Modulo_operation>`_.
   4272 
   4273 Note that signed integer remainder and unsigned integer remainder are
   4274 distinct operations; for unsigned integer remainder, use '``urem``'.
   4275 
   4276 Taking the remainder of a division by zero leads to undefined behavior.
   4277 Overflow also leads to undefined behavior; this is a rare case, but can
   4278 occur, for example, by taking the remainder of a 32-bit division of
   4279 -2147483648 by -1. (The remainder doesn't actually overflow, but this
   4280 rule lets srem be implemented using instructions that return both the
   4281 result of the division and the remainder.)
   4282 
   4283 Example:
   4284 """"""""
   4285 
   4286 .. code-block:: llvm
   4287 
   4288       <result> = srem i32 4, %var          ; yields i32:result = 4 % %var
   4289 
   4290 .. _i_frem:
   4291 
   4292 '``frem``' Instruction
   4293 ^^^^^^^^^^^^^^^^^^^^^^
   4294 
   4295 Syntax:
   4296 """""""
   4297 
   4298 ::
   4299 
   4300       <result> = frem [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
   4301 
   4302 Overview:
   4303 """""""""
   4304 
   4305 The '``frem``' instruction returns the remainder from the division of
   4306 its two operands.
   4307 
   4308 Arguments:
   4309 """"""""""
   4310 
   4311 The two arguments to the '``frem``' instruction must be :ref:`floating
   4312 point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
   4313 Both arguments must have identical types.
   4314 
   4315 Semantics:
   4316 """"""""""
   4317 
   4318 This instruction returns the *remainder* of a division. The remainder
   4319 has the same sign as the dividend. This instruction can also take any
   4320 number of :ref:`fast-math flags <fastmath>`, which are optimization hints
   4321 to enable otherwise unsafe floating point optimizations:
   4322 
   4323 Example:
   4324 """"""""
   4325 
   4326 .. code-block:: llvm
   4327 
   4328       <result> = frem float 4.0, %var          ; yields float:result = 4.0 % %var
   4329 
   4330 .. _bitwiseops:
   4331 
   4332 Bitwise Binary Operations
   4333 -------------------------
   4334 
   4335 Bitwise binary operators are used to do various forms of bit-twiddling
   4336 in a program. They are generally very efficient instructions and can
   4337 commonly be strength reduced from other instructions. They require two
   4338 operands of the same type, execute an operation on them, and produce a
   4339 single value. The resulting value is the same type as its operands.
   4340 
   4341 '``shl``' Instruction
   4342 ^^^^^^^^^^^^^^^^^^^^^
   4343 
   4344 Syntax:
   4345 """""""
   4346 
   4347 ::
   4348 
   4349       <result> = shl <ty> <op1>, <op2>           ; yields ty:result
   4350       <result> = shl nuw <ty> <op1>, <op2>       ; yields ty:result
   4351       <result> = shl nsw <ty> <op1>, <op2>       ; yields ty:result
   4352       <result> = shl nuw nsw <ty> <op1>, <op2>   ; yields ty:result
   4353 
   4354 Overview:
   4355 """""""""
   4356 
   4357 The '``shl``' instruction returns the first operand shifted to the left
   4358 a specified number of bits.
   4359 
   4360 Arguments:
   4361 """"""""""
   4362 
   4363 Both arguments to the '``shl``' instruction must be the same
   4364 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
   4365 '``op2``' is treated as an unsigned value.
   4366 
   4367 Semantics:
   4368 """"""""""
   4369 
   4370 The value produced is ``op1`` \* 2\ :sup:`op2` mod 2\ :sup:`n`,
   4371 where ``n`` is the width of the result. If ``op2`` is (statically or
   4372 dynamically) negative or equal to or larger than the number of bits in
   4373 ``op1``, the result is undefined. If the arguments are vectors, each
   4374 vector element of ``op1`` is shifted by the corresponding shift amount
   4375 in ``op2``.
   4376 
   4377 If the ``nuw`` keyword is present, then the shift produces a :ref:`poison
   4378 value <poisonvalues>` if it shifts out any non-zero bits. If the
   4379 ``nsw`` keyword is present, then the shift produces a :ref:`poison
   4380 value <poisonvalues>` if it shifts out any bits that disagree with the
   4381 resultant sign bit. As such, NUW/NSW have the same semantics as they
   4382 would if the shift were expressed as a mul instruction with the same
   4383 nsw/nuw bits in (mul %op1, (shl 1, %op2)).
   4384 
   4385 Example:
   4386 """"""""
   4387 
   4388 .. code-block:: llvm
   4389 
   4390       <result> = shl i32 4, %var   ; yields i32: 4 << %var
   4391       <result> = shl i32 4, 2      ; yields i32: 16
   4392       <result> = shl i32 1, 10     ; yields i32: 1024
   4393       <result> = shl i32 1, 32     ; undefined
   4394       <result> = shl <2 x i32> < i32 1, i32 1>, < i32 1, i32 2>   ; yields: result=<2 x i32> < i32 2, i32 4>
   4395 
   4396 '``lshr``' Instruction
   4397 ^^^^^^^^^^^^^^^^^^^^^^
   4398 
   4399 Syntax:
   4400 """""""
   4401 
   4402 ::
   4403 
   4404       <result> = lshr <ty> <op1>, <op2>         ; yields ty:result
   4405       <result> = lshr exact <ty> <op1>, <op2>   ; yields ty:result
   4406 
   4407 Overview:
   4408 """""""""
   4409 
   4410 The '``lshr``' instruction (logical shift right) returns the first
   4411 operand shifted to the right a specified number of bits with zero fill.
   4412 
   4413 Arguments:
   4414 """"""""""
   4415 
   4416 Both arguments to the '``lshr``' instruction must be the same
   4417 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
   4418 '``op2``' is treated as an unsigned value.
   4419 
   4420 Semantics:
   4421 """"""""""
   4422 
   4423 This instruction always performs a logical shift right operation. The
   4424 most significant bits of the result will be filled with zero bits after
   4425 the shift. If ``op2`` is (statically or dynamically) equal to or larger
   4426 than the number of bits in ``op1``, the result is undefined. If the
   4427 arguments are vectors, each vector element of ``op1`` is shifted by the
   4428 corresponding shift amount in ``op2``.
   4429 
   4430 If the ``exact`` keyword is present, the result value of the ``lshr`` is
   4431 a :ref:`poison value <poisonvalues>` if any of the bits shifted out are
   4432 non-zero.
   4433 
   4434 Example:
   4435 """"""""
   4436 
   4437 .. code-block:: llvm
   4438 
   4439       <result> = lshr i32 4, 1   ; yields i32:result = 2
   4440       <result> = lshr i32 4, 2   ; yields i32:result = 1
   4441       <result> = lshr i8  4, 3   ; yields i8:result = 0
   4442       <result> = lshr i8 -2, 1   ; yields i8:result = 0x7F
   4443       <result> = lshr i32 1, 32  ; undefined
   4444       <result> = lshr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 2>   ; yields: result=<2 x i32> < i32 0x7FFFFFFF, i32 1>
   4445 
   4446 '``ashr``' Instruction
   4447 ^^^^^^^^^^^^^^^^^^^^^^
   4448 
   4449 Syntax:
   4450 """""""
   4451 
   4452 ::
   4453 
   4454       <result> = ashr <ty> <op1>, <op2>         ; yields ty:result
   4455       <result> = ashr exact <ty> <op1>, <op2>   ; yields ty:result
   4456 
   4457 Overview:
   4458 """""""""
   4459 
   4460 The '``ashr``' instruction (arithmetic shift right) returns the first
   4461 operand shifted to the right a specified number of bits with sign
   4462 extension.
   4463 
   4464 Arguments:
   4465 """"""""""
   4466 
   4467 Both arguments to the '``ashr``' instruction must be the same
   4468 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
   4469 '``op2``' is treated as an unsigned value.
   4470 
   4471 Semantics:
   4472 """"""""""
   4473 
   4474 This instruction always performs an arithmetic shift right operation,
   4475 The most significant bits of the result will be filled with the sign bit
   4476 of ``op1``. If ``op2`` is (statically or dynamically) equal to or larger
   4477 than the number of bits in ``op1``, the result is undefined. If the
   4478 arguments are vectors, each vector element of ``op1`` is shifted by the
   4479 corresponding shift amount in ``op2``.
   4480 
   4481 If the ``exact`` keyword is present, the result value of the ``ashr`` is
   4482 a :ref:`poison value <poisonvalues>` if any of the bits shifted out are
   4483 non-zero.
   4484 
   4485 Example:
   4486 """"""""
   4487 
   4488 .. code-block:: llvm
   4489 
   4490       <result> = ashr i32 4, 1   ; yields i32:result = 2
   4491       <result> = ashr i32 4, 2   ; yields i32:result = 1
   4492       <result> = ashr i8  4, 3   ; yields i8:result = 0
   4493       <result> = ashr i8 -2, 1   ; yields i8:result = -1
   4494       <result> = ashr i32 1, 32  ; undefined
   4495       <result> = ashr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 3>   ; yields: result=<2 x i32> < i32 -1, i32 0>
   4496 
   4497 '``and``' Instruction
   4498 ^^^^^^^^^^^^^^^^^^^^^
   4499 
   4500 Syntax:
   4501 """""""
   4502 
   4503 ::
   4504 
   4505       <result> = and <ty> <op1>, <op2>   ; yields ty:result
   4506 
   4507 Overview:
   4508 """""""""
   4509 
   4510 The '``and``' instruction returns the bitwise logical and of its two
   4511 operands.
   4512 
   4513 Arguments:
   4514 """"""""""
   4515 
   4516 The two arguments to the '``and``' instruction must be
   4517 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4518 arguments must have identical types.
   4519 
   4520 Semantics:
   4521 """"""""""
   4522 
   4523 The truth table used for the '``and``' instruction is:
   4524 
   4525 +-----+-----+-----+
   4526 | In0 | In1 | Out |
   4527 +-----+-----+-----+
   4528 |   0 |   0 |   0 |
   4529 +-----+-----+-----+
   4530 |   0 |   1 |   0 |
   4531 +-----+-----+-----+
   4532 |   1 |   0 |   0 |
   4533 +-----+-----+-----+
   4534 |   1 |   1 |   1 |
   4535 +-----+-----+-----+
   4536 
   4537 Example:
   4538 """"""""
   4539 
   4540 .. code-block:: llvm
   4541 
   4542       <result> = and i32 4, %var         ; yields i32:result = 4 & %var
   4543       <result> = and i32 15, 40          ; yields i32:result = 8
   4544       <result> = and i32 4, 8            ; yields i32:result = 0
   4545 
   4546 '``or``' Instruction
   4547 ^^^^^^^^^^^^^^^^^^^^
   4548 
   4549 Syntax:
   4550 """""""
   4551 
   4552 ::
   4553 
   4554       <result> = or <ty> <op1>, <op2>   ; yields ty:result
   4555 
   4556 Overview:
   4557 """""""""
   4558 
   4559 The '``or``' instruction returns the bitwise logical inclusive or of its
   4560 two operands.
   4561 
   4562 Arguments:
   4563 """"""""""
   4564 
   4565 The two arguments to the '``or``' instruction must be
   4566 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4567 arguments must have identical types.
   4568 
   4569 Semantics:
   4570 """"""""""
   4571 
   4572 The truth table used for the '``or``' instruction is:
   4573 
   4574 +-----+-----+-----+
   4575 | In0 | In1 | Out |
   4576 +-----+-----+-----+
   4577 |   0 |   0 |   0 |
   4578 +-----+-----+-----+
   4579 |   0 |   1 |   1 |
   4580 +-----+-----+-----+
   4581 |   1 |   0 |   1 |
   4582 +-----+-----+-----+
   4583 |   1 |   1 |   1 |
   4584 +-----+-----+-----+
   4585 
   4586 Example:
   4587 """"""""
   4588 
   4589 ::
   4590 
   4591       <result> = or i32 4, %var         ; yields i32:result = 4 | %var
   4592       <result> = or i32 15, 40          ; yields i32:result = 47
   4593       <result> = or i32 4, 8            ; yields i32:result = 12
   4594 
   4595 '``xor``' Instruction
   4596 ^^^^^^^^^^^^^^^^^^^^^
   4597 
   4598 Syntax:
   4599 """""""
   4600 
   4601 ::
   4602 
   4603       <result> = xor <ty> <op1>, <op2>   ; yields ty:result
   4604 
   4605 Overview:
   4606 """""""""
   4607 
   4608 The '``xor``' instruction returns the bitwise logical exclusive or of
   4609 its two operands. The ``xor`` is used to implement the "one's
   4610 complement" operation, which is the "~" operator in C.
   4611 
   4612 Arguments:
   4613 """"""""""
   4614 
   4615 The two arguments to the '``xor``' instruction must be
   4616 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
   4617 arguments must have identical types.
   4618 
   4619 Semantics:
   4620 """"""""""
   4621 
   4622 The truth table used for the '``xor``' instruction is:
   4623 
   4624 +-----+-----+-----+
   4625 | In0 | In1 | Out |
   4626 +-----+-----+-----+
   4627 |   0 |   0 |   0 |
   4628 +-----+-----+-----+
   4629 |   0 |   1 |   1 |
   4630 +-----+-----+-----+
   4631 |   1 |   0 |   1 |
   4632 +-----+-----+-----+
   4633 |   1 |   1 |   0 |
   4634 +-----+-----+-----+
   4635 
   4636 Example:
   4637 """"""""
   4638 
   4639 .. code-block:: llvm
   4640 
   4641       <result> = xor i32 4, %var         ; yields i32:result = 4 ^ %var
   4642       <result> = xor i32 15, 40          ; yields i32:result = 39
   4643       <result> = xor i32 4, 8            ; yields i32:result = 12
   4644       <result> = xor i32 %V, -1          ; yields i32:result = ~%V
   4645 
   4646 Vector Operations
   4647 -----------------
   4648 
   4649 LLVM supports several instructions to represent vector operations in a
   4650 target-independent manner. These instructions cover the element-access
   4651 and vector-specific operations needed to process vectors effectively.
   4652 While LLVM does directly support these vector operations, many
   4653 sophisticated algorithms will want to use target-specific intrinsics to
   4654 take full advantage of a specific target.
   4655 
   4656 .. _i_extractelement:
   4657 
   4658 '``extractelement``' Instruction
   4659 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   4660 
   4661 Syntax:
   4662 """""""
   4663 
   4664 ::
   4665 
   4666       <result> = extractelement <n x <ty>> <val>, <ty2> <idx>  ; yields <ty>
   4667 
   4668 Overview:
   4669 """""""""
   4670 
   4671 The '``extractelement``' instruction extracts a single scalar element
   4672 from a vector at a specified index.
   4673 
   4674 Arguments:
   4675 """"""""""
   4676 
   4677 The first operand of an '``extractelement``' instruction is a value of
   4678 :ref:`vector <t_vector>` type. The second operand is an index indicating
   4679 the position from which to extract the element. The index may be a
   4680 variable of any integer type.
   4681 
   4682 Semantics:
   4683 """"""""""
   4684 
   4685 The result is a scalar of the same type as the element type of ``val``.
   4686 Its value is the value at position ``idx`` of ``val``. If ``idx``
   4687 exceeds the length of ``val``, the results are undefined.
   4688 
   4689 Example:
   4690 """"""""
   4691 
   4692 .. code-block:: llvm
   4693 
   4694       <result> = extractelement <4 x i32> %vec, i32 0    ; yields i32
   4695 
   4696 .. _i_insertelement:
   4697 
   4698 '``insertelement``' Instruction
   4699 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   4700 
   4701 Syntax:
   4702 """""""
   4703 
   4704 ::
   4705 
   4706       <result> = insertelement <n x <ty>> <val>, <ty> <elt>, <ty2> <idx>    ; yields <n x <ty>>
   4707 
   4708 Overview:
   4709 """""""""
   4710 
   4711 The '``insertelement``' instruction inserts a scalar element into a
   4712 vector at a specified index.
   4713 
   4714 Arguments:
   4715 """"""""""
   4716 
   4717 The first operand of an '``insertelement``' instruction is a value of
   4718 :ref:`vector <t_vector>` type. The second operand is a scalar value whose
   4719 type must equal the element type of the first operand. The third operand
   4720 is an index indicating the position at which to insert the value. The
   4721 index may be a variable of any integer type.
   4722 
   4723 Semantics:
   4724 """"""""""
   4725 
   4726 The result is a vector of the same type as ``val``. Its element values
   4727 are those of ``val`` except at position ``idx``, where it gets the value
   4728 ``elt``. If ``idx`` exceeds the length of ``val``, the results are
   4729 undefined.
   4730 
   4731 Example:
   4732 """"""""
   4733 
   4734 .. code-block:: llvm
   4735 
   4736       <result> = insertelement <4 x i32> %vec, i32 1, i32 0    ; yields <4 x i32>
   4737 
   4738 .. _i_shufflevector:
   4739 
   4740 '``shufflevector``' Instruction
   4741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   4742 
   4743 Syntax:
   4744 """""""
   4745 
   4746 ::
   4747 
   4748       <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask>    ; yields <m x <ty>>
   4749 
   4750 Overview:
   4751 """""""""
   4752 
   4753 The '``shufflevector``' instruction constructs a permutation of elements
   4754 from two input vectors, returning a vector with the same element type as
   4755 the input and length that is the same as the shuffle mask.
   4756 
   4757 Arguments:
   4758 """"""""""
   4759 
   4760 The first two operands of a '``shufflevector``' instruction are vectors
   4761 with the same type. The third argument is a shuffle mask whose element
   4762 type is always 'i32'. The result of the instruction is a vector whose
   4763 length is the same as the shuffle mask and whose element type is the
   4764 same as the element type of the first two operands.
   4765 
   4766 The shuffle mask operand is required to be a constant vector with either
   4767 constant integer or undef values.
   4768 
   4769 Semantics:
   4770 """"""""""
   4771 
   4772 The elements of the two input vectors are numbered from left to right
   4773 across both of the vectors. The shuffle mask operand specifies, for each
   4774 element of the result vector, which element of the two input vectors the
   4775 result element gets. The element selector may be undef (meaning "don't
   4776 care") and the second operand may be undef if performing a shuffle from
   4777 only one vector.
   4778 
   4779 Example:
   4780 """"""""
   4781 
   4782 .. code-block:: llvm
   4783 
   4784       <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
   4785                               <4 x i32> <i32 0, i32 4, i32 1, i32 5>  ; yields <4 x i32>
   4786       <result> = shufflevector <4 x i32> %v1, <4 x i32> undef,
   4787                               <4 x i32> <i32 0, i32 1, i32 2, i32 3>  ; yields <4 x i32> - Identity shuffle.
   4788       <result> = shufflevector <8 x i32> %v1, <8 x i32> undef,
   4789                               <4 x i32> <i32 0, i32 1, i32 2, i32 3>  ; yields <4 x i32>
   4790       <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
   4791                               <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 >  ; yields <8 x i32>
   4792 
   4793 Aggregate Operations
   4794 --------------------
   4795 
   4796 LLVM supports several instructions for working with
   4797 :ref:`aggregate <t_aggregate>` values.
   4798 
   4799 .. _i_extractvalue:
   4800 
   4801 '``extractvalue``' Instruction
   4802 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   4803 
   4804 Syntax:
   4805 """""""
   4806 
   4807 ::
   4808 
   4809       <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}*
   4810 
   4811 Overview:
   4812 """""""""
   4813 
   4814 The '``extractvalue``' instruction extracts the value of a member field
   4815 from an :ref:`aggregate <t_aggregate>` value.
   4816 
   4817 Arguments:
   4818 """"""""""
   4819 
   4820 The first operand of an '``extractvalue``' instruction is a value of
   4821 :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The operands are
   4822 constant indices to specify which value to extract in a similar manner
   4823 as indices in a '``getelementptr``' instruction.
   4824 
   4825 The major differences to ``getelementptr`` indexing are:
   4826 
   4827 -  Since the value being indexed is not a pointer, the first index is
   4828    omitted and assumed to be zero.
   4829 -  At least one index must be specified.
   4830 -  Not only struct indices but also array indices must be in bounds.
   4831 
   4832 Semantics:
   4833 """"""""""
   4834 
   4835 The result is the value at the position in the aggregate specified by
   4836 the index operands.
   4837 
   4838 Example:
   4839 """"""""
   4840 
   4841 .. code-block:: llvm
   4842 
   4843       <result> = extractvalue {i32, float} %agg, 0    ; yields i32
   4844 
   4845 .. _i_insertvalue:
   4846 
   4847 '``insertvalue``' Instruction
   4848 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   4849 
   4850 Syntax:
   4851 """""""
   4852 
   4853 ::
   4854 
   4855       <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}*    ; yields <aggregate type>
   4856 
   4857 Overview:
   4858 """""""""
   4859 
   4860 The '``insertvalue``' instruction inserts a value into a member field in
   4861 an :ref:`aggregate <t_aggregate>` value.
   4862 
   4863 Arguments:
   4864 """"""""""
   4865 
   4866 The first operand of an '``insertvalue``' instruction is a value of
   4867 :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The second operand is
   4868 a first-class value to insert. The following operands are constant
   4869 indices indicating the position at which to insert the value in a
   4870 similar manner as indices in a '``extractvalue``' instruction. The value
   4871 to insert must have the same type as the value identified by the
   4872 indices.
   4873 
   4874 Semantics:
   4875 """"""""""
   4876 
   4877 The result is an aggregate of the same type as ``val``. Its value is
   4878 that of ``val`` except that the value at the position specified by the
   4879 indices is that of ``elt``.
   4880 
   4881 Example:
   4882 """"""""
   4883 
   4884 .. code-block:: llvm
   4885 
   4886       %agg1 = insertvalue {i32, float} undef, i32 1, 0              ; yields {i32 1, float undef}
   4887       %agg2 = insertvalue {i32, float} %agg1, float %val, 1         ; yields {i32 1, float %val}
   4888       %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0    ; yields {i32 1, float %val}
   4889 
   4890 .. _memoryops:
   4891 
   4892 Memory Access and Addressing Operations
   4893 ---------------------------------------
   4894 
   4895 A key design point of an SSA-based representation is how it represents
   4896 memory. In LLVM, no memory locations are in SSA form, which makes things
   4897 very simple. This section describes how to read, write, and allocate
   4898 memory in LLVM.
   4899 
   4900 .. _i_alloca:
   4901 
   4902 '``alloca``' Instruction
   4903 ^^^^^^^^^^^^^^^^^^^^^^^^
   4904 
   4905 Syntax:
   4906 """""""
   4907 
   4908 ::
   4909 
   4910       <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>]     ; yields type*:result
   4911 
   4912 Overview:
   4913 """""""""
   4914 
   4915 The '``alloca``' instruction allocates memory on the stack frame of the
   4916 currently executing function, to be automatically released when this
   4917 function returns to its caller. The object is always allocated in the
   4918 generic address space (address space zero).
   4919 
   4920 Arguments:
   4921 """"""""""
   4922 
   4923 The '``alloca``' instruction allocates ``sizeof(<type>)*NumElements``
   4924 bytes of memory on the runtime stack, returning a pointer of the
   4925 appropriate type to the program. If "NumElements" is specified, it is
   4926 the number of elements allocated, otherwise "NumElements" is defaulted
   4927 to be one. If a constant alignment is specified, the value result of the
   4928 allocation is guaranteed to be aligned to at least that boundary. If not
   4929 specified, or if zero, the target can choose to align the allocation on
   4930 any convenient boundary compatible with the type.
   4931 
   4932 '``type``' may be any sized type.
   4933 
   4934 Semantics:
   4935 """"""""""
   4936 
   4937 Memory is allocated; a pointer is returned. The operation is undefined
   4938 if there is insufficient stack space for the allocation. '``alloca``'d
   4939 memory is automatically released when the function returns. The
   4940 '``alloca``' instruction is commonly used to represent automatic
   4941 variables that must have an address available. When the function returns
   4942 (either with the ``ret`` or ``resume`` instructions), the memory is
   4943 reclaimed. Allocating zero bytes is legal, but the result is undefined.
   4944 The order in which memory is allocated (ie., which way the stack grows)
   4945 is not specified.
   4946 
   4947 Example:
   4948 """"""""
   4949 
   4950 .. code-block:: llvm
   4951 
   4952       %ptr = alloca i32                             ; yields i32*:ptr
   4953       %ptr = alloca i32, i32 4                      ; yields i32*:ptr
   4954       %ptr = alloca i32, i32 4, align 1024          ; yields i32*:ptr
   4955       %ptr = alloca i32, align 1024                 ; yields i32*:ptr
   4956 
   4957 .. _i_load:
   4958 
   4959 '``load``' Instruction
   4960 ^^^^^^^^^^^^^^^^^^^^^^
   4961 
   4962 Syntax:
   4963 """""""
   4964 
   4965 ::
   4966 
   4967       <result> = load [volatile] <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.load !<index>]
   4968       <result> = load atomic [volatile] <ty>* <pointer> [singlethread] <ordering>, align <alignment>
   4969       !<index> = !{ i32 1 }
   4970 
   4971 Overview:
   4972 """""""""
   4973 
   4974 The '``load``' instruction is used to read from memory.
   4975 
   4976 Arguments:
   4977 """"""""""
   4978 
   4979 The argument to the ``load`` instruction specifies the memory address
   4980 from which to load. The pointer must point to a :ref:`first
   4981 class <t_firstclass>` type. If the ``load`` is marked as ``volatile``,
   4982 then the optimizer is not allowed to modify the number or order of
   4983 execution of this ``load`` with other :ref:`volatile
   4984 operations <volatile>`.
   4985 
   4986 If the ``load`` is marked as ``atomic``, it takes an extra
   4987 :ref:`ordering <ordering>` and optional ``singlethread`` argument. The
   4988 ``release`` and ``acq_rel`` orderings are not valid on ``load``
   4989 instructions. Atomic loads produce :ref:`defined <memmodel>` results
   4990 when they may see multiple atomic stores. The type of the pointee must
   4991 be an integer type whose bit width is a power of two greater than or
   4992 equal to eight and less than or equal to a target-specific size limit.
   4993 ``align`` must be explicitly specified on atomic loads, and the load has
   4994 undefined behavior if the alignment is not set to a value which is at
   4995 least the size in bytes of the pointee. ``!nontemporal`` does not have
   4996 any defined semantics for atomic loads.
   4997 
   4998 The optional constant ``align`` argument specifies the alignment of the
   4999 operation (that is, the alignment of the memory address). A value of 0
   5000 or an omitted ``align`` argument means that the operation has the ABI
   5001 alignment for the target. It is the responsibility of the code emitter
   5002 to ensure that the alignment information is correct. Overestimating the
   5003 alignment results in undefined behavior. Underestimating the alignment
   5004 may produce less efficient code. An alignment of 1 is always safe.
   5005 
   5006 The optional ``!nontemporal`` metadata must reference a single
   5007 metadata name ``<index>`` corresponding to a metadata node with one
   5008 ``i32`` entry of value 1. The existence of the ``!nontemporal``
   5009 metadata on the instruction tells the optimizer and code generator
   5010 that this load is not expected to be reused in the cache. The code
   5011 generator may select special instructions to save cache bandwidth, such
   5012 as the ``MOVNT`` instruction on x86.
   5013 
   5014 The optional ``!invariant.load`` metadata must reference a single
   5015 metadata name ``<index>`` corresponding to a metadata node with no
   5016 entries. The existence of the ``!invariant.load`` metadata on the
   5017 instruction tells the optimizer and code generator that this load
   5018 address points to memory which does not change value during program
   5019 execution. The optimizer may then move this load around, for example, by
   5020 hoisting it out of loops using loop invariant code motion.
   5021 
   5022 Semantics:
   5023 """"""""""
   5024 
   5025 The location of memory pointed to is loaded. If the value being loaded
   5026 is of scalar type then the number of bytes read does not exceed the
   5027 minimum number of bytes needed to hold all bits of the type. For
   5028 example, loading an ``i24`` reads at most three bytes. When loading a
   5029 value of a type like ``i20`` with a size that is not an integral number
   5030 of bytes, the result is undefined if the value was not originally
   5031 written using a store of the same type.
   5032 
   5033 Examples:
   5034 """""""""
   5035 
   5036 .. code-block:: llvm
   5037 
   5038       %ptr = alloca i32                               ; yields i32*:ptr
   5039       store i32 3, i32* %ptr                          ; yields void
   5040       %val = load i32* %ptr                           ; yields i32:val = i32 3
   5041 
   5042 .. _i_store:
   5043 
   5044 '``store``' Instruction
   5045 ^^^^^^^^^^^^^^^^^^^^^^^
   5046 
   5047 Syntax:
   5048 """""""
   5049 
   5050 ::
   5051 
   5052       store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>]        ; yields void
   5053       store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment>  ; yields void
   5054 
   5055 Overview:
   5056 """""""""
   5057 
   5058 The '``store``' instruction is used to write to memory.
   5059 
   5060 Arguments:
   5061 """"""""""
   5062 
   5063 There are two arguments to the ``store`` instruction: a value to store
   5064 and an address at which to store it. The type of the ``<pointer>``
   5065 operand must be a pointer to the :ref:`first class <t_firstclass>` type of
   5066 the ``<value>`` operand. If the ``store`` is marked as ``volatile``,
   5067 then the optimizer is not allowed to modify the number or order of
   5068 execution of this ``store`` with other :ref:`volatile
   5069 operations <volatile>`.
   5070 
   5071 If the ``store`` is marked as ``atomic``, it takes an extra
   5072 :ref:`ordering <ordering>` and optional ``singlethread`` argument. The
   5073 ``acquire`` and ``acq_rel`` orderings aren't valid on ``store``
   5074 instructions. Atomic loads produce :ref:`defined <memmodel>` results
   5075 when they may see multiple atomic stores. The type of the pointee must
   5076 be an integer type whose bit width is a power of two greater than or
   5077 equal to eight and less than or equal to a target-specific size limit.
   5078 ``align`` must be explicitly specified on atomic stores, and the store
   5079 has undefined behavior if the alignment is not set to a value which is
   5080 at least the size in bytes of the pointee. ``!nontemporal`` does not
   5081 have any defined semantics for atomic stores.
   5082 
   5083 The optional constant ``align`` argument specifies the alignment of the
   5084 operation (that is, the alignment of the memory address). A value of 0
   5085 or an omitted ``align`` argument means that the operation has the ABI
   5086 alignment for the target. It is the responsibility of the code emitter
   5087 to ensure that the alignment information is correct. Overestimating the
   5088 alignment results in undefined behavior. Underestimating the
   5089 alignment may produce less efficient code. An alignment of 1 is always
   5090 safe.
   5091 
   5092 The optional ``!nontemporal`` metadata must reference a single metadata
   5093 name ``<index>`` corresponding to a metadata node with one ``i32`` entry of
   5094 value 1. The existence of the ``!nontemporal`` metadata on the instruction
   5095 tells the optimizer and code generator that this load is not expected to
   5096 be reused in the cache. The code generator may select special
   5097 instructions to save cache bandwidth, such as the MOVNT instruction on
   5098 x86.
   5099 
   5100 Semantics:
   5101 """"""""""
   5102 
   5103 The contents of memory are updated to contain ``<value>`` at the
   5104 location specified by the ``<pointer>`` operand. If ``<value>`` is
   5105 of scalar type then the number of bytes written does not exceed the
   5106 minimum number of bytes needed to hold all bits of the type. For
   5107 example, storing an ``i24`` writes at most three bytes. When writing a
   5108 value of a type like ``i20`` with a size that is not an integral number
   5109 of bytes, it is unspecified what happens to the extra bits that do not
   5110 belong to the type, but they will typically be overwritten.
   5111 
   5112 Example:
   5113 """"""""
   5114 
   5115 .. code-block:: llvm
   5116 
   5117       %ptr = alloca i32                               ; yields i32*:ptr
   5118       store i32 3, i32* %ptr                          ; yields void
   5119       %val = load i32* %ptr                           ; yields i32:val = i32 3
   5120 
   5121 .. _i_fence:
   5122 
   5123 '``fence``' Instruction
   5124 ^^^^^^^^^^^^^^^^^^^^^^^
   5125 
   5126 Syntax:
   5127 """""""
   5128 
   5129 ::
   5130 
   5131       fence [singlethread] <ordering>                   ; yields void
   5132 
   5133 Overview:
   5134 """""""""
   5135 
   5136 The '``fence``' instruction is used to introduce happens-before edges
   5137 between operations.
   5138 
   5139 Arguments:
   5140 """"""""""
   5141 
   5142 '``fence``' instructions take an :ref:`ordering <ordering>` argument which
   5143 defines what *synchronizes-with* edges they add. They can only be given
   5144 ``acquire``, ``release``, ``acq_rel``, and ``seq_cst`` orderings.
   5145 
   5146 Semantics:
   5147 """"""""""
   5148 
   5149 A fence A which has (at least) ``release`` ordering semantics
   5150 *synchronizes with* a fence B with (at least) ``acquire`` ordering
   5151 semantics if and only if there exist atomic operations X and Y, both
   5152 operating on some atomic object M, such that A is sequenced before X, X
   5153 modifies M (either directly or through some side effect of a sequence
   5154 headed by X), Y is sequenced before B, and Y observes M. This provides a
   5155 *happens-before* dependency between A and B. Rather than an explicit
   5156 ``fence``, one (but not both) of the atomic operations X or Y might
   5157 provide a ``release`` or ``acquire`` (resp.) ordering constraint and
   5158 still *synchronize-with* the explicit ``fence`` and establish the
   5159 *happens-before* edge.
   5160 
   5161 A ``fence`` which has ``seq_cst`` ordering, in addition to having both
   5162 ``acquire`` and ``release`` semantics specified above, participates in
   5163 the global program order of other ``seq_cst`` operations and/or fences.
   5164 
   5165 The optional ":ref:`singlethread <singlethread>`" argument specifies
   5166 that the fence only synchronizes with other fences in the same thread.
   5167 (This is useful for interacting with signal handlers.)
   5168 
   5169 Example:
   5170 """"""""
   5171 
   5172 .. code-block:: llvm
   5173 
   5174       fence acquire                          ; yields void
   5175       fence singlethread seq_cst             ; yields void
   5176 
   5177 .. _i_cmpxchg:
   5178 
   5179 '``cmpxchg``' Instruction
   5180 ^^^^^^^^^^^^^^^^^^^^^^^^^
   5181 
   5182 Syntax:
   5183 """""""
   5184 
   5185 ::
   5186 
   5187       cmpxchg [weak] [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <success ordering> <failure ordering> ; yields  { ty, i1 }
   5188 
   5189 Overview:
   5190 """""""""
   5191 
   5192 The '``cmpxchg``' instruction is used to atomically modify memory. It
   5193 loads a value in memory and compares it to a given value. If they are
   5194 equal, it tries to store a new value into the memory.
   5195 
   5196 Arguments:
   5197 """"""""""
   5198 
   5199 There are three arguments to the '``cmpxchg``' instruction: an address
   5200 to operate on, a value to compare to the value currently be at that
   5201 address, and a new value to place at that address if the compared values
   5202 are equal. The type of '<cmp>' must be an integer type whose bit width
   5203 is a power of two greater than or equal to eight and less than or equal
   5204 to a target-specific size limit. '<cmp>' and '<new>' must have the same
   5205 type, and the type of '<pointer>' must be a pointer to that type. If the
   5206 ``cmpxchg`` is marked as ``volatile``, then the optimizer is not allowed
   5207 to modify the number or order of execution of this ``cmpxchg`` with
   5208 other :ref:`volatile operations <volatile>`.
   5209 
   5210 The success and failure :ref:`ordering <ordering>` arguments specify how this
   5211 ``cmpxchg`` synchronizes with other atomic operations. Both ordering parameters
   5212 must be at least ``monotonic``, the ordering constraint on failure must be no
   5213 stronger than that on success, and the failure ordering cannot be either
   5214 ``release`` or ``acq_rel``.
   5215 
   5216 The optional "``singlethread``" argument declares that the ``cmpxchg``
   5217 is only atomic with respect to code (usually signal handlers) running in
   5218 the same thread as the ``cmpxchg``. Otherwise the cmpxchg is atomic with
   5219 respect to all other code in the system.
   5220 
   5221 The pointer passed into cmpxchg must have alignment greater than or
   5222 equal to the size in memory of the operand.
   5223 
   5224 Semantics:
   5225 """"""""""
   5226 
   5227 The contents of memory at the location specified by the '``<pointer>``' operand
   5228 is read and compared to '``<cmp>``'; if the read value is the equal, the
   5229 '``<new>``' is written. The original value at the location is returned, together
   5230 with a flag indicating success (true) or failure (false).
   5231 
   5232 If the cmpxchg operation is marked as ``weak`` then a spurious failure is
   5233 permitted: the operation may not write ``<new>`` even if the comparison
   5234 matched.
   5235 
   5236 If the cmpxchg operation is strong (the default), the i1 value is 1 if and only
   5237 if the value loaded equals ``cmp``.
   5238 
   5239 A successful ``cmpxchg`` is a read-modify-write instruction for the purpose of
   5240 identifying release sequences. A failed ``cmpxchg`` is equivalent to an atomic
   5241 load with an ordering parameter determined the second ordering parameter.
   5242 
   5243 Example:
   5244 """"""""
   5245 
   5246 .. code-block:: llvm
   5247 
   5248     entry:
   5249       %orig = atomic load i32* %ptr unordered                   ; yields i32
   5250       br label %loop
   5251 
   5252     loop:
   5253       %cmp = phi i32 [ %orig, %entry ], [%old, %loop]
   5254       %squared = mul i32 %cmp, %cmp
   5255       %val_success = cmpxchg i32* %ptr, i32 %cmp, i32 %squared acq_rel monotonic ; yields  { i32, i1 }
   5256       %value_loaded = extractvalue { i32, i1 } %val_success, 0
   5257       %success = extractvalue { i32, i1 } %val_success, 1
   5258       br i1 %success, label %done, label %loop
   5259 
   5260     done:
   5261       ...
   5262 
   5263 .. _i_atomicrmw:
   5264 
   5265 '``atomicrmw``' Instruction
   5266 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5267 
   5268 Syntax:
   5269 """""""
   5270 
   5271 ::
   5272 
   5273       atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering>                   ; yields ty
   5274 
   5275 Overview:
   5276 """""""""
   5277 
   5278 The '``atomicrmw``' instruction is used to atomically modify memory.
   5279 
   5280 Arguments:
   5281 """"""""""
   5282 
   5283 There are three arguments to the '``atomicrmw``' instruction: an
   5284 operation to apply, an address whose value to modify, an argument to the
   5285 operation. The operation must be one of the following keywords:
   5286 
   5287 -  xchg
   5288 -  add
   5289 -  sub
   5290 -  and
   5291 -  nand
   5292 -  or
   5293 -  xor
   5294 -  max
   5295 -  min
   5296 -  umax
   5297 -  umin
   5298 
   5299 The type of '<value>' must be an integer type whose bit width is a power
   5300 of two greater than or equal to eight and less than or equal to a
   5301 target-specific size limit. The type of the '``<pointer>``' operand must
   5302 be a pointer to that type. If the ``atomicrmw`` is marked as
   5303 ``volatile``, then the optimizer is not allowed to modify the number or
   5304 order of execution of this ``atomicrmw`` with other :ref:`volatile
   5305 operations <volatile>`.
   5306 
   5307 Semantics:
   5308 """"""""""
   5309 
   5310 The contents of memory at the location specified by the '``<pointer>``'
   5311 operand are atomically read, modified, and written back. The original
   5312 value at the location is returned. The modification is specified by the
   5313 operation argument:
   5314 
   5315 -  xchg: ``*ptr = val``
   5316 -  add: ``*ptr = *ptr + val``
   5317 -  sub: ``*ptr = *ptr - val``
   5318 -  and: ``*ptr = *ptr & val``
   5319 -  nand: ``*ptr = ~(*ptr & val)``
   5320 -  or: ``*ptr = *ptr | val``
   5321 -  xor: ``*ptr = *ptr ^ val``
   5322 -  max: ``*ptr = *ptr > val ? *ptr : val`` (using a signed comparison)
   5323 -  min: ``*ptr = *ptr < val ? *ptr : val`` (using a signed comparison)
   5324 -  umax: ``*ptr = *ptr > val ? *ptr : val`` (using an unsigned
   5325    comparison)
   5326 -  umin: ``*ptr = *ptr < val ? *ptr : val`` (using an unsigned
   5327    comparison)
   5328 
   5329 Example:
   5330 """"""""
   5331 
   5332 .. code-block:: llvm
   5333 
   5334       %old = atomicrmw add i32* %ptr, i32 1 acquire                        ; yields i32
   5335 
   5336 .. _i_getelementptr:
   5337 
   5338 '``getelementptr``' Instruction
   5339 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5340 
   5341 Syntax:
   5342 """""""
   5343 
   5344 ::
   5345 
   5346       <result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}*
   5347       <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}*
   5348       <result> = getelementptr <ptr vector> ptrval, <vector index type> idx
   5349 
   5350 Overview:
   5351 """""""""
   5352 
   5353 The '``getelementptr``' instruction is used to get the address of a
   5354 subelement of an :ref:`aggregate <t_aggregate>` data structure. It performs
   5355 address calculation only and does not access memory.
   5356 
   5357 Arguments:
   5358 """"""""""
   5359 
   5360 The first argument is always a pointer or a vector of pointers, and
   5361 forms the basis of the calculation. The remaining arguments are indices
   5362 that indicate which of the elements of the aggregate object are indexed.
   5363 The interpretation of each index is dependent on the type being indexed
   5364 into. The first index always indexes the pointer value given as the
   5365 first argument, the second index indexes a value of the type pointed to
   5366 (not necessarily the value directly pointed to, since the first index
   5367 can be non-zero), etc. The first type indexed into must be a pointer
   5368 value, subsequent types can be arrays, vectors, and structs. Note that
   5369 subsequent types being indexed into can never be pointers, since that
   5370 would require loading the pointer before continuing calculation.
   5371 
   5372 The type of each index argument depends on the type it is indexing into.
   5373 When indexing into a (optionally packed) structure, only ``i32`` integer
   5374 **constants** are allowed (when using a vector of indices they must all
   5375 be the **same** ``i32`` integer constant). When indexing into an array,
   5376 pointer or vector, integers of any width are allowed, and they are not
   5377 required to be constant. These integers are treated as signed values
   5378 where relevant.
   5379 
   5380 For example, let's consider a C code fragment and how it gets compiled
   5381 to LLVM:
   5382 
   5383 .. code-block:: c
   5384 
   5385     struct RT {
   5386       char A;
   5387       int B[10][20];
   5388       char C;
   5389     };
   5390     struct ST {
   5391       int X;
   5392       double Y;
   5393       struct RT Z;
   5394     };
   5395 
   5396     int *foo(struct ST *s) {
   5397       return &s[1].Z.B[5][13];
   5398     }
   5399 
   5400 The LLVM code generated by Clang is:
   5401 
   5402 .. code-block:: llvm
   5403 
   5404     %struct.RT = type { i8, [10 x [20 x i32]], i8 }
   5405     %struct.ST = type { i32, double, %struct.RT }
   5406 
   5407     define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
   5408     entry:
   5409       %arrayidx = getelementptr inbounds %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13
   5410       ret i32* %arrayidx
   5411     }
   5412 
   5413 Semantics:
   5414 """"""""""
   5415 
   5416 In the example above, the first index is indexing into the
   5417 '``%struct.ST*``' type, which is a pointer, yielding a '``%struct.ST``'
   5418 = '``{ i32, double, %struct.RT }``' type, a structure. The second index
   5419 indexes into the third element of the structure, yielding a
   5420 '``%struct.RT``' = '``{ i8 , [10 x [20 x i32]], i8 }``' type, another
   5421 structure. The third index indexes into the second element of the
   5422 structure, yielding a '``[10 x [20 x i32]]``' type, an array. The two
   5423 dimensions of the array are subscripted into, yielding an '``i32``'
   5424 type. The '``getelementptr``' instruction returns a pointer to this
   5425 element, thus computing a value of '``i32*``' type.
   5426 
   5427 Note that it is perfectly legal to index partially through a structure,
   5428 returning a pointer to an inner element. Because of this, the LLVM code
   5429 for the given testcase is equivalent to:
   5430 
   5431 .. code-block:: llvm
   5432 
   5433     define i32* @foo(%struct.ST* %s) {
   5434       %t1 = getelementptr %struct.ST* %s, i32 1                 ; yields %struct.ST*:%t1
   5435       %t2 = getelementptr %struct.ST* %t1, i32 0, i32 2         ; yields %struct.RT*:%t2
   5436       %t3 = getelementptr %struct.RT* %t2, i32 0, i32 1         ; yields [10 x [20 x i32]]*:%t3
   5437       %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  ; yields [20 x i32]*:%t4
   5438       %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        ; yields i32*:%t5
   5439       ret i32* %t5
   5440     }
   5441 
   5442 If the ``inbounds`` keyword is present, the result value of the
   5443 ``getelementptr`` is a :ref:`poison value <poisonvalues>` if the base
   5444 pointer is not an *in bounds* address of an allocated object, or if any
   5445 of the addresses that would be formed by successive addition of the
   5446 offsets implied by the indices to the base address with infinitely
   5447 precise signed arithmetic are not an *in bounds* address of that
   5448 allocated object. The *in bounds* addresses for an allocated object are
   5449 all the addresses that point into the object, plus the address one byte
   5450 past the end. In cases where the base is a vector of pointers the
   5451 ``inbounds`` keyword applies to each of the computations element-wise.
   5452 
   5453 If the ``inbounds`` keyword is not present, the offsets are added to the
   5454 base address with silently-wrapping two's complement arithmetic. If the
   5455 offsets have a different width from the pointer, they are sign-extended
   5456 or truncated to the width of the pointer. The result value of the
   5457 ``getelementptr`` may be outside the object pointed to by the base
   5458 pointer. The result value may not necessarily be used to access memory
   5459 though, even if it happens to point into allocated storage. See the
   5460 :ref:`Pointer Aliasing Rules <pointeraliasing>` section for more
   5461 information.
   5462 
   5463 The getelementptr instruction is often confusing. For some more insight
   5464 into how it works, see :doc:`the getelementptr FAQ <GetElementPtr>`.
   5465 
   5466 Example:
   5467 """"""""
   5468 
   5469 .. code-block:: llvm
   5470 
   5471         ; yields [12 x i8]*:aptr
   5472         %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
   5473         ; yields i8*:vptr
   5474         %vptr = getelementptr {i32, <2 x i8>}* %svptr, i64 0, i32 1, i32 1
   5475         ; yields i8*:eptr
   5476         %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
   5477         ; yields i32*:iptr
   5478         %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
   5479 
   5480 In cases where the pointer argument is a vector of pointers, each index
   5481 must be a vector with the same number of elements. For example:
   5482 
   5483 .. code-block:: llvm
   5484 
   5485      %A = getelementptr <4 x i8*> %ptrs, <4 x i64> %offsets,
   5486 
   5487 Conversion Operations
   5488 ---------------------
   5489 
   5490 The instructions in this category are the conversion instructions
   5491 (casting) which all take a single operand and a type. They perform
   5492 various bit conversions on the operand.
   5493 
   5494 '``trunc .. to``' Instruction
   5495 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5496 
   5497 Syntax:
   5498 """""""
   5499 
   5500 ::
   5501 
   5502       <result> = trunc <ty> <value> to <ty2>             ; yields ty2
   5503 
   5504 Overview:
   5505 """""""""
   5506 
   5507 The '``trunc``' instruction truncates its operand to the type ``ty2``.
   5508 
   5509 Arguments:
   5510 """"""""""
   5511 
   5512 The '``trunc``' instruction takes a value to trunc, and a type to trunc
   5513 it to. Both types must be of :ref:`integer <t_integer>` types, or vectors
   5514 of the same number of integers. The bit size of the ``value`` must be
   5515 larger than the bit size of the destination type, ``ty2``. Equal sized
   5516 types are not allowed.
   5517 
   5518 Semantics:
   5519 """"""""""
   5520 
   5521 The '``trunc``' instruction truncates the high order bits in ``value``
   5522 and converts the remaining bits to ``ty2``. Since the source size must
   5523 be larger than the destination size, ``trunc`` cannot be a *no-op cast*.
   5524 It will always truncate bits.
   5525 
   5526 Example:
   5527 """"""""
   5528 
   5529 .. code-block:: llvm
   5530 
   5531       %X = trunc i32 257 to i8                        ; yields i8:1
   5532       %Y = trunc i32 123 to i1                        ; yields i1:true
   5533       %Z = trunc i32 122 to i1                        ; yields i1:false
   5534       %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> ; yields <i8 8, i8 7>
   5535 
   5536 '``zext .. to``' Instruction
   5537 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5538 
   5539 Syntax:
   5540 """""""
   5541 
   5542 ::
   5543 
   5544       <result> = zext <ty> <value> to <ty2>             ; yields ty2
   5545 
   5546 Overview:
   5547 """""""""
   5548 
   5549 The '``zext``' instruction zero extends its operand to type ``ty2``.
   5550 
   5551 Arguments:
   5552 """"""""""
   5553 
   5554 The '``zext``' instruction takes a value to cast, and a type to cast it
   5555 to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
   5556 the same number of integers. The bit size of the ``value`` must be
   5557 smaller than the bit size of the destination type, ``ty2``.
   5558 
   5559 Semantics:
   5560 """"""""""
   5561 
   5562 The ``zext`` fills the high order bits of the ``value`` with zero bits
   5563 until it reaches the size of the destination type, ``ty2``.
   5564 
   5565 When zero extending from i1, the result will always be either 0 or 1.
   5566 
   5567 Example:
   5568 """"""""
   5569 
   5570 .. code-block:: llvm
   5571 
   5572       %X = zext i32 257 to i64              ; yields i64:257
   5573       %Y = zext i1 true to i32              ; yields i32:1
   5574       %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
   5575 
   5576 '``sext .. to``' Instruction
   5577 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5578 
   5579 Syntax:
   5580 """""""
   5581 
   5582 ::
   5583 
   5584       <result> = sext <ty> <value> to <ty2>             ; yields ty2
   5585 
   5586 Overview:
   5587 """""""""
   5588 
   5589 The '``sext``' sign extends ``value`` to the type ``ty2``.
   5590 
   5591 Arguments:
   5592 """"""""""
   5593 
   5594 The '``sext``' instruction takes a value to cast, and a type to cast it
   5595 to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
   5596 the same number of integers. The bit size of the ``value`` must be
   5597 smaller than the bit size of the destination type, ``ty2``.
   5598 
   5599 Semantics:
   5600 """"""""""
   5601 
   5602 The '``sext``' instruction performs a sign extension by copying the sign
   5603 bit (highest order bit) of the ``value`` until it reaches the bit size
   5604 of the type ``ty2``.
   5605 
   5606 When sign extending from i1, the extension always results in -1 or 0.
   5607 
   5608 Example:
   5609 """"""""
   5610 
   5611 .. code-block:: llvm
   5612 
   5613       %X = sext i8  -1 to i16              ; yields i16   :65535
   5614       %Y = sext i1 true to i32             ; yields i32:-1
   5615       %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
   5616 
   5617 '``fptrunc .. to``' Instruction
   5618 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5619 
   5620 Syntax:
   5621 """""""
   5622 
   5623 ::
   5624 
   5625       <result> = fptrunc <ty> <value> to <ty2>             ; yields ty2
   5626 
   5627 Overview:
   5628 """""""""
   5629 
   5630 The '``fptrunc``' instruction truncates ``value`` to type ``ty2``.
   5631 
   5632 Arguments:
   5633 """"""""""
   5634 
   5635 The '``fptrunc``' instruction takes a :ref:`floating point <t_floating>`
   5636 value to cast and a :ref:`floating point <t_floating>` type to cast it to.
   5637 The size of ``value`` must be larger than the size of ``ty2``. This
   5638 implies that ``fptrunc`` cannot be used to make a *no-op cast*.
   5639 
   5640 Semantics:
   5641 """"""""""
   5642 
   5643 The '``fptrunc``' instruction truncates a ``value`` from a larger
   5644 :ref:`floating point <t_floating>` type to a smaller :ref:`floating
   5645 point <t_floating>` type. If the value cannot fit within the
   5646 destination type, ``ty2``, then the results are undefined.
   5647 
   5648 Example:
   5649 """"""""
   5650 
   5651 .. code-block:: llvm
   5652 
   5653       %X = fptrunc double 123.0 to float         ; yields float:123.0
   5654       %Y = fptrunc double 1.0E+300 to float      ; yields undefined
   5655 
   5656 '``fpext .. to``' Instruction
   5657 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5658 
   5659 Syntax:
   5660 """""""
   5661 
   5662 ::
   5663 
   5664       <result> = fpext <ty> <value> to <ty2>             ; yields ty2
   5665 
   5666 Overview:
   5667 """""""""
   5668 
   5669 The '``fpext``' extends a floating point ``value`` to a larger floating
   5670 point value.
   5671 
   5672 Arguments:
   5673 """"""""""
   5674 
   5675 The '``fpext``' instruction takes a :ref:`floating point <t_floating>`
   5676 ``value`` to cast, and a :ref:`floating point <t_floating>` type to cast it
   5677 to. The source type must be smaller than the destination type.
   5678 
   5679 Semantics:
   5680 """"""""""
   5681 
   5682 The '``fpext``' instruction extends the ``value`` from a smaller
   5683 :ref:`floating point <t_floating>` type to a larger :ref:`floating
   5684 point <t_floating>` type. The ``fpext`` cannot be used to make a
   5685 *no-op cast* because it always changes bits. Use ``bitcast`` to make a
   5686 *no-op cast* for a floating point cast.
   5687 
   5688 Example:
   5689 """"""""
   5690 
   5691 .. code-block:: llvm
   5692 
   5693       %X = fpext float 3.125 to double         ; yields double:3.125000e+00
   5694       %Y = fpext double %X to fp128            ; yields fp128:0xL00000000000000004000900000000000
   5695 
   5696 '``fptoui .. to``' Instruction
   5697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5698 
   5699 Syntax:
   5700 """""""
   5701 
   5702 ::
   5703 
   5704       <result> = fptoui <ty> <value> to <ty2>             ; yields ty2
   5705 
   5706 Overview:
   5707 """""""""
   5708 
   5709 The '``fptoui``' converts a floating point ``value`` to its unsigned
   5710 integer equivalent of type ``ty2``.
   5711 
   5712 Arguments:
   5713 """"""""""
   5714 
   5715 The '``fptoui``' instruction takes a value to cast, which must be a
   5716 scalar or vector :ref:`floating point <t_floating>` value, and a type to
   5717 cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
   5718 ``ty`` is a vector floating point type, ``ty2`` must be a vector integer
   5719 type with the same number of elements as ``ty``
   5720 
   5721 Semantics:
   5722 """"""""""
   5723 
   5724 The '``fptoui``' instruction converts its :ref:`floating
   5725 point <t_floating>` operand into the nearest (rounding towards zero)
   5726 unsigned integer value. If the value cannot fit in ``ty2``, the results
   5727 are undefined.
   5728 
   5729 Example:
   5730 """"""""
   5731 
   5732 .. code-block:: llvm
   5733 
   5734       %X = fptoui double 123.0 to i32      ; yields i32:123
   5735       %Y = fptoui float 1.0E+300 to i1     ; yields undefined:1
   5736       %Z = fptoui float 1.04E+17 to i8     ; yields undefined:1
   5737 
   5738 '``fptosi .. to``' Instruction
   5739 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5740 
   5741 Syntax:
   5742 """""""
   5743 
   5744 ::
   5745 
   5746       <result> = fptosi <ty> <value> to <ty2>             ; yields ty2
   5747 
   5748 Overview:
   5749 """""""""
   5750 
   5751 The '``fptosi``' instruction converts :ref:`floating point <t_floating>`
   5752 ``value`` to type ``ty2``.
   5753 
   5754 Arguments:
   5755 """"""""""
   5756 
   5757 The '``fptosi``' instruction takes a value to cast, which must be a
   5758 scalar or vector :ref:`floating point <t_floating>` value, and a type to
   5759 cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
   5760 ``ty`` is a vector floating point type, ``ty2`` must be a vector integer
   5761 type with the same number of elements as ``ty``
   5762 
   5763 Semantics:
   5764 """"""""""
   5765 
   5766 The '``fptosi``' instruction converts its :ref:`floating
   5767 point <t_floating>` operand into the nearest (rounding towards zero)
   5768 signed integer value. If the value cannot fit in ``ty2``, the results
   5769 are undefined.
   5770 
   5771 Example:
   5772 """"""""
   5773 
   5774 .. code-block:: llvm
   5775 
   5776       %X = fptosi double -123.0 to i32      ; yields i32:-123
   5777       %Y = fptosi float 1.0E-247 to i1      ; yields undefined:1
   5778       %Z = fptosi float 1.04E+17 to i8      ; yields undefined:1
   5779 
   5780 '``uitofp .. to``' Instruction
   5781 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5782 
   5783 Syntax:
   5784 """""""
   5785 
   5786 ::
   5787 
   5788       <result> = uitofp <ty> <value> to <ty2>             ; yields ty2
   5789 
   5790 Overview:
   5791 """""""""
   5792 
   5793 The '``uitofp``' instruction regards ``value`` as an unsigned integer
   5794 and converts that value to the ``ty2`` type.
   5795 
   5796 Arguments:
   5797 """"""""""
   5798 
   5799 The '``uitofp``' instruction takes a value to cast, which must be a
   5800 scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
   5801 ``ty2``, which must be an :ref:`floating point <t_floating>` type. If
   5802 ``ty`` is a vector integer type, ``ty2`` must be a vector floating point
   5803 type with the same number of elements as ``ty``
   5804 
   5805 Semantics:
   5806 """"""""""
   5807 
   5808 The '``uitofp``' instruction interprets its operand as an unsigned
   5809 integer quantity and converts it to the corresponding floating point
   5810 value. If the value cannot fit in the floating point value, the results
   5811 are undefined.
   5812 
   5813 Example:
   5814 """"""""
   5815 
   5816 .. code-block:: llvm
   5817 
   5818       %X = uitofp i32 257 to float         ; yields float:257.0
   5819       %Y = uitofp i8 -1 to double          ; yields double:255.0
   5820 
   5821 '``sitofp .. to``' Instruction
   5822 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5823 
   5824 Syntax:
   5825 """""""
   5826 
   5827 ::
   5828 
   5829       <result> = sitofp <ty> <value> to <ty2>             ; yields ty2
   5830 
   5831 Overview:
   5832 """""""""
   5833 
   5834 The '``sitofp``' instruction regards ``value`` as a signed integer and
   5835 converts that value to the ``ty2`` type.
   5836 
   5837 Arguments:
   5838 """"""""""
   5839 
   5840 The '``sitofp``' instruction takes a value to cast, which must be a
   5841 scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
   5842 ``ty2``, which must be an :ref:`floating point <t_floating>` type. If
   5843 ``ty`` is a vector integer type, ``ty2`` must be a vector floating point
   5844 type with the same number of elements as ``ty``
   5845 
   5846 Semantics:
   5847 """"""""""
   5848 
   5849 The '``sitofp``' instruction interprets its operand as a signed integer
   5850 quantity and converts it to the corresponding floating point value. If
   5851 the value cannot fit in the floating point value, the results are
   5852 undefined.
   5853 
   5854 Example:
   5855 """"""""
   5856 
   5857 .. code-block:: llvm
   5858 
   5859       %X = sitofp i32 257 to float         ; yields float:257.0
   5860       %Y = sitofp i8 -1 to double          ; yields double:-1.0
   5861 
   5862 .. _i_ptrtoint:
   5863 
   5864 '``ptrtoint .. to``' Instruction
   5865 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5866 
   5867 Syntax:
   5868 """""""
   5869 
   5870 ::
   5871 
   5872       <result> = ptrtoint <ty> <value> to <ty2>             ; yields ty2
   5873 
   5874 Overview:
   5875 """""""""
   5876 
   5877 The '``ptrtoint``' instruction converts the pointer or a vector of
   5878 pointers ``value`` to the integer (or vector of integers) type ``ty2``.
   5879 
   5880 Arguments:
   5881 """"""""""
   5882 
   5883 The '``ptrtoint``' instruction takes a ``value`` to cast, which must be
   5884 a a value of type :ref:`pointer <t_pointer>` or a vector of pointers, and a
   5885 type to cast it to ``ty2``, which must be an :ref:`integer <t_integer>` or
   5886 a vector of integers type.
   5887 
   5888 Semantics:
   5889 """"""""""
   5890 
   5891 The '``ptrtoint``' instruction converts ``value`` to integer type
   5892 ``ty2`` by interpreting the pointer value as an integer and either
   5893 truncating or zero extending that value to the size of the integer type.
   5894 If ``value`` is smaller than ``ty2`` then a zero extension is done. If
   5895 ``value`` is larger than ``ty2`` then a truncation is done. If they are
   5896 the same size, then nothing is done (*no-op cast*) other than a type
   5897 change.
   5898 
   5899 Example:
   5900 """"""""
   5901 
   5902 .. code-block:: llvm
   5903 
   5904       %X = ptrtoint i32* %P to i8                         ; yields truncation on 32-bit architecture
   5905       %Y = ptrtoint i32* %P to i64                        ; yields zero extension on 32-bit architecture
   5906       %Z = ptrtoint <4 x i32*> %P to <4 x i64>; yields vector zero extension for a vector of addresses on 32-bit architecture
   5907 
   5908 .. _i_inttoptr:
   5909 
   5910 '``inttoptr .. to``' Instruction
   5911 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5912 
   5913 Syntax:
   5914 """""""
   5915 
   5916 ::
   5917 
   5918       <result> = inttoptr <ty> <value> to <ty2>             ; yields ty2
   5919 
   5920 Overview:
   5921 """""""""
   5922 
   5923 The '``inttoptr``' instruction converts an integer ``value`` to a
   5924 pointer type, ``ty2``.
   5925 
   5926 Arguments:
   5927 """"""""""
   5928 
   5929 The '``inttoptr``' instruction takes an :ref:`integer <t_integer>` value to
   5930 cast, and a type to cast it to, which must be a :ref:`pointer <t_pointer>`
   5931 type.
   5932 
   5933 Semantics:
   5934 """"""""""
   5935 
   5936 The '``inttoptr``' instruction converts ``value`` to type ``ty2`` by
   5937 applying either a zero extension or a truncation depending on the size
   5938 of the integer ``value``. If ``value`` is larger than the size of a
   5939 pointer then a truncation is done. If ``value`` is smaller than the size
   5940 of a pointer then a zero extension is done. If they are the same size,
   5941 nothing is done (*no-op cast*).
   5942 
   5943 Example:
   5944 """"""""
   5945 
   5946 .. code-block:: llvm
   5947 
   5948       %X = inttoptr i32 255 to i32*          ; yields zero extension on 64-bit architecture
   5949       %Y = inttoptr i32 255 to i32*          ; yields no-op on 32-bit architecture
   5950       %Z = inttoptr i64 0 to i32*            ; yields truncation on 32-bit architecture
   5951       %Z = inttoptr <4 x i32> %G to <4 x i8*>; yields truncation of vector G to four pointers
   5952 
   5953 .. _i_bitcast:
   5954 
   5955 '``bitcast .. to``' Instruction
   5956 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   5957 
   5958 Syntax:
   5959 """""""
   5960 
   5961 ::
   5962 
   5963       <result> = bitcast <ty> <value> to <ty2>             ; yields ty2
   5964 
   5965 Overview:
   5966 """""""""
   5967 
   5968 The '``bitcast``' instruction converts ``value`` to type ``ty2`` without
   5969 changing any bits.
   5970 
   5971 Arguments:
   5972 """"""""""
   5973 
   5974 The '``bitcast``' instruction takes a value to cast, which must be a
   5975 non-aggregate first class value, and a type to cast it to, which must
   5976 also be a non-aggregate :ref:`first class <t_firstclass>` type. The
   5977 bit sizes of ``value`` and the destination type, ``ty2``, must be
   5978 identical.  If the source type is a pointer, the destination type must
   5979 also be a pointer of the same size. This instruction supports bitwise
   5980 conversion of vectors to integers and to vectors of other types (as
   5981 long as they have the same size).
   5982 
   5983 Semantics:
   5984 """"""""""
   5985 
   5986 The '``bitcast``' instruction converts ``value`` to type ``ty2``. It
   5987 is always a *no-op cast* because no bits change with this
   5988 conversion. The conversion is done as if the ``value`` had been stored
   5989 to memory and read back as type ``ty2``. Pointer (or vector of
   5990 pointers) types may only be converted to other pointer (or vector of
   5991 pointers) types with the same address space through this instruction.
   5992 To convert pointers to other types, use the :ref:`inttoptr <i_inttoptr>`
   5993 or :ref:`ptrtoint <i_ptrtoint>` instructions first.
   5994 
   5995 Example:
   5996 """"""""
   5997 
   5998 .. code-block:: llvm
   5999 
   6000       %X = bitcast i8 255 to i8              ; yields i8 :-1
   6001       %Y = bitcast i32* %x to sint*          ; yields sint*:%x
   6002       %Z = bitcast <2 x int> %V to i64;        ; yields i64: %V
   6003       %Z = bitcast <2 x i32*> %V to <2 x i64*> ; yields <2 x i64*>
   6004 
   6005 .. _i_addrspacecast:
   6006 
   6007 '``addrspacecast .. to``' Instruction
   6008 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6009 
   6010 Syntax:
   6011 """""""
   6012 
   6013 ::
   6014 
   6015       <result> = addrspacecast <pty> <ptrval> to <pty2>       ; yields pty2
   6016 
   6017 Overview:
   6018 """""""""
   6019 
   6020 The '``addrspacecast``' instruction converts ``ptrval`` from ``pty`` in
   6021 address space ``n`` to type ``pty2`` in address space ``m``.
   6022 
   6023 Arguments:
   6024 """"""""""
   6025 
   6026 The '``addrspacecast``' instruction takes a pointer or vector of pointer value
   6027 to cast and a pointer type to cast it to, which must have a different
   6028 address space.
   6029 
   6030 Semantics:
   6031 """"""""""
   6032 
   6033 The '``addrspacecast``' instruction converts the pointer value
   6034 ``ptrval`` to type ``pty2``. It can be a *no-op cast* or a complex
   6035 value modification, depending on the target and the address space
   6036 pair. Pointer conversions within the same address space must be
   6037 performed with the ``bitcast`` instruction. Note that if the address space
   6038 conversion is legal then both result and operand refer to the same memory
   6039 location.
   6040 
   6041 Example:
   6042 """"""""
   6043 
   6044 .. code-block:: llvm
   6045 
   6046       %X = addrspacecast i32* %x to i32 addrspace(1)*    ; yields i32 addrspace(1)*:%x
   6047       %Y = addrspacecast i32 addrspace(1)* %y to i64 addrspace(2)*    ; yields i64 addrspace(2)*:%y
   6048       %Z = addrspacecast <4 x i32*> %z to <4 x float addrspace(3)*>   ; yields <4 x float addrspace(3)*>:%z
   6049 
   6050 .. _otherops:
   6051 
   6052 Other Operations
   6053 ----------------
   6054 
   6055 The instructions in this category are the "miscellaneous" instructions,
   6056 which defy better classification.
   6057 
   6058 .. _i_icmp:
   6059 
   6060 '``icmp``' Instruction
   6061 ^^^^^^^^^^^^^^^^^^^^^^
   6062 
   6063 Syntax:
   6064 """""""
   6065 
   6066 ::
   6067 
   6068       <result> = icmp <cond> <ty> <op1>, <op2>   ; yields i1 or <N x i1>:result
   6069 
   6070 Overview:
   6071 """""""""
   6072 
   6073 The '``icmp``' instruction returns a boolean value or a vector of
   6074 boolean values based on comparison of its two integer, integer vector,
   6075 pointer, or pointer vector operands.
   6076 
   6077 Arguments:
   6078 """"""""""
   6079 
   6080 The '``icmp``' instruction takes three operands. The first operand is
   6081 the condition code indicating the kind of comparison to perform. It is
   6082 not a value, just a keyword. The possible condition code are:
   6083 
   6084 #. ``eq``: equal
   6085 #. ``ne``: not equal
   6086 #. ``ugt``: unsigned greater than
   6087 #. ``uge``: unsigned greater or equal
   6088 #. ``ult``: unsigned less than
   6089 #. ``ule``: unsigned less or equal
   6090 #. ``sgt``: signed greater than
   6091 #. ``sge``: signed greater or equal
   6092 #. ``slt``: signed less than
   6093 #. ``sle``: signed less or equal
   6094 
   6095 The remaining two arguments must be :ref:`integer <t_integer>` or
   6096 :ref:`pointer <t_pointer>` or integer :ref:`vector <t_vector>` typed. They
   6097 must also be identical types.
   6098 
   6099 Semantics:
   6100 """"""""""
   6101 
   6102 The '``icmp``' compares ``op1`` and ``op2`` according to the condition
   6103 code given as ``cond``. The comparison performed always yields either an
   6104 :ref:`i1 <t_integer>` or vector of ``i1`` result, as follows:
   6105 
   6106 #. ``eq``: yields ``true`` if the operands are equal, ``false``
   6107    otherwise. No sign interpretation is necessary or performed.
   6108 #. ``ne``: yields ``true`` if the operands are unequal, ``false``
   6109    otherwise. No sign interpretation is necessary or performed.
   6110 #. ``ugt``: interprets the operands as unsigned values and yields
   6111    ``true`` if ``op1`` is greater than ``op2``.
   6112 #. ``uge``: interprets the operands as unsigned values and yields
   6113    ``true`` if ``op1`` is greater than or equal to ``op2``.
   6114 #. ``ult``: interprets the operands as unsigned values and yields
   6115    ``true`` if ``op1`` is less than ``op2``.
   6116 #. ``ule``: interprets the operands as unsigned values and yields
   6117    ``true`` if ``op1`` is less than or equal to ``op2``.
   6118 #. ``sgt``: interprets the operands as signed values and yields ``true``
   6119    if ``op1`` is greater than ``op2``.
   6120 #. ``sge``: interprets the operands as signed values and yields ``true``
   6121    if ``op1`` is greater than or equal to ``op2``.
   6122 #. ``slt``: interprets the operands as signed values and yields ``true``
   6123    if ``op1`` is less than ``op2``.
   6124 #. ``sle``: interprets the operands as signed values and yields ``true``
   6125    if ``op1`` is less than or equal to ``op2``.
   6126 
   6127 If the operands are :ref:`pointer <t_pointer>` typed, the pointer values
   6128 are compared as if they were integers.
   6129 
   6130 If the operands are integer vectors, then they are compared element by
   6131 element. The result is an ``i1`` vector with the same number of elements
   6132 as the values being compared. Otherwise, the result is an ``i1``.
   6133 
   6134 Example:
   6135 """"""""
   6136 
   6137 .. code-block:: llvm
   6138 
   6139       <result> = icmp eq i32 4, 5          ; yields: result=false
   6140       <result> = icmp ne float* %X, %X     ; yields: result=false
   6141       <result> = icmp ult i16  4, 5        ; yields: result=true
   6142       <result> = icmp sgt i16  4, 5        ; yields: result=false
   6143       <result> = icmp ule i16 -4, 5        ; yields: result=false
   6144       <result> = icmp sge i16  4, 5        ; yields: result=false
   6145 
   6146 Note that the code generator does not yet support vector types with the
   6147 ``icmp`` instruction.
   6148 
   6149 .. _i_fcmp:
   6150 
   6151 '``fcmp``' Instruction
   6152 ^^^^^^^^^^^^^^^^^^^^^^
   6153 
   6154 Syntax:
   6155 """""""
   6156 
   6157 ::
   6158 
   6159       <result> = fcmp <cond> <ty> <op1>, <op2>     ; yields i1 or <N x i1>:result
   6160 
   6161 Overview:
   6162 """""""""
   6163 
   6164 The '``fcmp``' instruction returns a boolean value or vector of boolean
   6165 values based on comparison of its operands.
   6166 
   6167 If the operands are floating point scalars, then the result type is a
   6168 boolean (:ref:`i1 <t_integer>`).
   6169 
   6170 If the operands are floating point vectors, then the result type is a
   6171 vector of boolean with the same number of elements as the operands being
   6172 compared.
   6173 
   6174 Arguments:
   6175 """"""""""
   6176 
   6177 The '``fcmp``' instruction takes three operands. The first operand is
   6178 the condition code indicating the kind of comparison to perform. It is
   6179 not a value, just a keyword. The possible condition code are:
   6180 
   6181 #. ``false``: no comparison, always returns false
   6182 #. ``oeq``: ordered and equal
   6183 #. ``ogt``: ordered and greater than
   6184 #. ``oge``: ordered and greater than or equal
   6185 #. ``olt``: ordered and less than
   6186 #. ``ole``: ordered and less than or equal
   6187 #. ``one``: ordered and not equal
   6188 #. ``ord``: ordered (no nans)
   6189 #. ``ueq``: unordered or equal
   6190 #. ``ugt``: unordered or greater than
   6191 #. ``uge``: unordered or greater than or equal
   6192 #. ``ult``: unordered or less than
   6193 #. ``ule``: unordered or less than or equal
   6194 #. ``une``: unordered or not equal
   6195 #. ``uno``: unordered (either nans)
   6196 #. ``true``: no comparison, always returns true
   6197 
   6198 *Ordered* means that neither operand is a QNAN while *unordered* means
   6199 that either operand may be a QNAN.
   6200 
   6201 Each of ``val1`` and ``val2`` arguments must be either a :ref:`floating
   6202 point <t_floating>` type or a :ref:`vector <t_vector>` of floating point
   6203 type. They must have identical types.
   6204 
   6205 Semantics:
   6206 """"""""""
   6207 
   6208 The '``fcmp``' instruction compares ``op1`` and ``op2`` according to the
   6209 condition code given as ``cond``. If the operands are vectors, then the
   6210 vectors are compared element by element. Each comparison performed
   6211 always yields an :ref:`i1 <t_integer>` result, as follows:
   6212 
   6213 #. ``false``: always yields ``false``, regardless of operands.
   6214 #. ``oeq``: yields ``true`` if both operands are not a QNAN and ``op1``
   6215    is equal to ``op2``.
   6216 #. ``ogt``: yields ``true`` if both operands are not a QNAN and ``op1``
   6217    is greater than ``op2``.
   6218 #. ``oge``: yields ``true`` if both operands are not a QNAN and ``op1``
   6219    is greater than or equal to ``op2``.
   6220 #. ``olt``: yields ``true`` if both operands are not a QNAN and ``op1``
   6221    is less than ``op2``.
   6222 #. ``ole``: yields ``true`` if both operands are not a QNAN and ``op1``
   6223    is less than or equal to ``op2``.
   6224 #. ``one``: yields ``true`` if both operands are not a QNAN and ``op1``
   6225    is not equal to ``op2``.
   6226 #. ``ord``: yields ``true`` if both operands are not a QNAN.
   6227 #. ``ueq``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6228    equal to ``op2``.
   6229 #. ``ugt``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6230    greater than ``op2``.
   6231 #. ``uge``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6232    greater than or equal to ``op2``.
   6233 #. ``ult``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6234    less than ``op2``.
   6235 #. ``ule``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6236    less than or equal to ``op2``.
   6237 #. ``une``: yields ``true`` if either operand is a QNAN or ``op1`` is
   6238    not equal to ``op2``.
   6239 #. ``uno``: yields ``true`` if either operand is a QNAN.
   6240 #. ``true``: always yields ``true``, regardless of operands.
   6241 
   6242 Example:
   6243 """"""""
   6244 
   6245 .. code-block:: llvm
   6246 
   6247       <result> = fcmp oeq float 4.0, 5.0    ; yields: result=false
   6248       <result> = fcmp one float 4.0, 5.0    ; yields: result=true
   6249       <result> = fcmp olt float 4.0, 5.0    ; yields: result=true
   6250       <result> = fcmp ueq double 1.0, 2.0   ; yields: result=false
   6251 
   6252 Note that the code generator does not yet support vector types with the
   6253 ``fcmp`` instruction.
   6254 
   6255 .. _i_phi:
   6256 
   6257 '``phi``' Instruction
   6258 ^^^^^^^^^^^^^^^^^^^^^
   6259 
   6260 Syntax:
   6261 """""""
   6262 
   6263 ::
   6264 
   6265       <result> = phi <ty> [ <val0>, <label0>], ...
   6266 
   6267 Overview:
   6268 """""""""
   6269 
   6270 The '``phi``' instruction is used to implement the  node in the SSA
   6271 graph representing the function.
   6272 
   6273 Arguments:
   6274 """"""""""
   6275 
   6276 The type of the incoming values is specified with the first type field.
   6277 After this, the '``phi``' instruction takes a list of pairs as
   6278 arguments, with one pair for each predecessor basic block of the current
   6279 block. Only values of :ref:`first class <t_firstclass>` type may be used as
   6280 the value arguments to the PHI node. Only labels may be used as the
   6281 label arguments.
   6282 
   6283 There must be no non-phi instructions between the start of a basic block
   6284 and the PHI instructions: i.e. PHI instructions must be first in a basic
   6285 block.
   6286 
   6287 For the purposes of the SSA form, the use of each incoming value is
   6288 deemed to occur on the edge from the corresponding predecessor block to
   6289 the current block (but after any definition of an '``invoke``'
   6290 instruction's return value on the same edge).
   6291 
   6292 Semantics:
   6293 """"""""""
   6294 
   6295 At runtime, the '``phi``' instruction logically takes on the value
   6296 specified by the pair corresponding to the predecessor basic block that
   6297 executed just prior to the current block.
   6298 
   6299 Example:
   6300 """"""""
   6301 
   6302 .. code-block:: llvm
   6303 
   6304     Loop:       ; Infinite loop that counts from 0 on up...
   6305       %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
   6306       %nextindvar = add i32 %indvar, 1
   6307       br label %Loop
   6308 
   6309 .. _i_select:
   6310 
   6311 '``select``' Instruction
   6312 ^^^^^^^^^^^^^^^^^^^^^^^^
   6313 
   6314 Syntax:
   6315 """""""
   6316 
   6317 ::
   6318 
   6319       <result> = select selty <cond>, <ty> <val1>, <ty> <val2>             ; yields ty
   6320 
   6321       selty is either i1 or {<N x i1>}
   6322 
   6323 Overview:
   6324 """""""""
   6325 
   6326 The '``select``' instruction is used to choose one value based on a
   6327 condition, without IR-level branching.
   6328 
   6329 Arguments:
   6330 """"""""""
   6331 
   6332 The '``select``' instruction requires an 'i1' value or a vector of 'i1'
   6333 values indicating the condition, and two values of the same :ref:`first
   6334 class <t_firstclass>` type. If the val1/val2 are vectors and the
   6335 condition is a scalar, then entire vectors are selected, not individual
   6336 elements.
   6337 
   6338 Semantics:
   6339 """"""""""
   6340 
   6341 If the condition is an i1 and it evaluates to 1, the instruction returns
   6342 the first value argument; otherwise, it returns the second value
   6343 argument.
   6344 
   6345 If the condition is a vector of i1, then the value arguments must be
   6346 vectors of the same size, and the selection is done element by element.
   6347 
   6348 Example:
   6349 """"""""
   6350 
   6351 .. code-block:: llvm
   6352 
   6353       %X = select i1 true, i8 17, i8 42          ; yields i8:17
   6354 
   6355 .. _i_call:
   6356 
   6357 '``call``' Instruction
   6358 ^^^^^^^^^^^^^^^^^^^^^^
   6359 
   6360 Syntax:
   6361 """""""
   6362 
   6363 ::
   6364 
   6365       <result> = [tail | musttail] call [cconv] [ret attrs] <ty> [<fnty>*] <fnptrval>(<function args>) [fn attrs]
   6366 
   6367 Overview:
   6368 """""""""
   6369 
   6370 The '``call``' instruction represents a simple function call.
   6371 
   6372 Arguments:
   6373 """"""""""
   6374 
   6375 This instruction requires several arguments:
   6376 
   6377 #. The optional ``tail`` and ``musttail`` markers indicate that the optimizers
   6378    should perform tail call optimization.  The ``tail`` marker is a hint that
   6379    `can be ignored <CodeGenerator.html#sibcallopt>`_.  The ``musttail`` marker
   6380    means that the call must be tail call optimized in order for the program to
   6381    be correct.  The ``musttail`` marker provides these guarantees:
   6382 
   6383    #. The call will not cause unbounded stack growth if it is part of a
   6384       recursive cycle in the call graph.
   6385    #. Arguments with the :ref:`inalloca <attr_inalloca>` attribute are
   6386       forwarded in place.
   6387 
   6388    Both markers imply that the callee does not access allocas or varargs from
   6389    the caller.  Calls marked ``musttail`` must obey the following additional
   6390    rules:
   6391 
   6392    - The call must immediately precede a :ref:`ret <i_ret>` instruction,
   6393      or a pointer bitcast followed by a ret instruction.
   6394    - The ret instruction must return the (possibly bitcasted) value
   6395      produced by the call or void.
   6396    - The caller and callee prototypes must match.  Pointer types of
   6397      parameters or return types may differ in pointee type, but not
   6398      in address space.
   6399    - The calling conventions of the caller and callee must match.
   6400    - All ABI-impacting function attributes, such as sret, byval, inreg,
   6401      returned, and inalloca, must match.
   6402 
   6403    Tail call optimization for calls marked ``tail`` is guaranteed to occur if
   6404    the following conditions are met:
   6405 
   6406    -  Caller and callee both have the calling convention ``fastcc``.
   6407    -  The call is in tail position (ret immediately follows call and ret
   6408       uses value of call or is void).
   6409    -  Option ``-tailcallopt`` is enabled, or
   6410       ``llvm::GuaranteedTailCallOpt`` is ``true``.
   6411    -  `Platform-specific constraints are
   6412       met. <CodeGenerator.html#tailcallopt>`_
   6413 
   6414 #. The optional "cconv" marker indicates which :ref:`calling
   6415    convention <callingconv>` the call should use. If none is
   6416    specified, the call defaults to using C calling conventions. The
   6417    calling convention of the call must match the calling convention of
   6418    the target function, or else the behavior is undefined.
   6419 #. The optional :ref:`Parameter Attributes <paramattrs>` list for return
   6420    values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
   6421    are valid here.
   6422 #. '``ty``': the type of the call instruction itself which is also the
   6423    type of the return value. Functions that return no value are marked
   6424    ``void``.
   6425 #. '``fnty``': shall be the signature of the pointer to function value
   6426    being invoked. The argument types must match the types implied by
   6427    this signature. This type can be omitted if the function is not
   6428    varargs and if the function type does not return a pointer to a
   6429    function.
   6430 #. '``fnptrval``': An LLVM value containing a pointer to a function to
   6431    be invoked. In most cases, this is a direct function invocation, but
   6432    indirect ``call``'s are just as possible, calling an arbitrary pointer
   6433    to function value.
   6434 #. '``function args``': argument list whose types match the function
   6435    signature argument types and parameter attributes. All arguments must
   6436    be of :ref:`first class <t_firstclass>` type. If the function signature
   6437    indicates the function accepts a variable number of arguments, the
   6438    extra arguments can be specified.
   6439 #. The optional :ref:`function attributes <fnattrs>` list. Only
   6440    '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``'
   6441    attributes are valid here.
   6442 
   6443 Semantics:
   6444 """"""""""
   6445 
   6446 The '``call``' instruction is used to cause control flow to transfer to
   6447 a specified function, with its incoming arguments bound to the specified
   6448 values. Upon a '``ret``' instruction in the called function, control
   6449 flow continues with the instruction after the function call, and the
   6450 return value of the function is bound to the result argument.
   6451 
   6452 Example:
   6453 """"""""
   6454 
   6455 .. code-block:: llvm
   6456 
   6457       %retval = call i32 @test(i32 %argc)
   6458       call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42)        ; yields i32
   6459       %X = tail call i32 @foo()                                    ; yields i32
   6460       %Y = tail call fastcc i32 @foo()  ; yields i32
   6461       call void %foo(i8 97 signext)
   6462 
   6463       %struct.A = type { i32, i8 }
   6464       %r = call %struct.A @foo()                        ; yields { i32, i8 }
   6465       %gr = extractvalue %struct.A %r, 0                ; yields i32
   6466       %gr1 = extractvalue %struct.A %r, 1               ; yields i8
   6467       %Z = call void @foo() noreturn                    ; indicates that %foo never returns normally
   6468       %ZZ = call zeroext i32 @bar()                     ; Return value is %zero extended
   6469 
   6470 llvm treats calls to some functions with names and arguments that match
   6471 the standard C99 library as being the C99 library functions, and may
   6472 perform optimizations or generate code for them under that assumption.
   6473 This is something we'd like to change in the future to provide better
   6474 support for freestanding environments and non-C-based languages.
   6475 
   6476 .. _i_va_arg:
   6477 
   6478 '``va_arg``' Instruction
   6479 ^^^^^^^^^^^^^^^^^^^^^^^^
   6480 
   6481 Syntax:
   6482 """""""
   6483 
   6484 ::
   6485 
   6486       <resultval> = va_arg <va_list*> <arglist>, <argty>
   6487 
   6488 Overview:
   6489 """""""""
   6490 
   6491 The '``va_arg``' instruction is used to access arguments passed through
   6492 the "variable argument" area of a function call. It is used to implement
   6493 the ``va_arg`` macro in C.
   6494 
   6495 Arguments:
   6496 """"""""""
   6497 
   6498 This instruction takes a ``va_list*`` value and the type of the
   6499 argument. It returns a value of the specified argument type and
   6500 increments the ``va_list`` to point to the next argument. The actual
   6501 type of ``va_list`` is target specific.
   6502 
   6503 Semantics:
   6504 """"""""""
   6505 
   6506 The '``va_arg``' instruction loads an argument of the specified type
   6507 from the specified ``va_list`` and causes the ``va_list`` to point to
   6508 the next argument. For more information, see the variable argument
   6509 handling :ref:`Intrinsic Functions <int_varargs>`.
   6510 
   6511 It is legal for this instruction to be called in a function which does
   6512 not take a variable number of arguments, for example, the ``vfprintf``
   6513 function.
   6514 
   6515 ``va_arg`` is an LLVM instruction instead of an :ref:`intrinsic
   6516 function <intrinsics>` because it takes a type as an argument.
   6517 
   6518 Example:
   6519 """"""""
   6520 
   6521 See the :ref:`variable argument processing <int_varargs>` section.
   6522 
   6523 Note that the code generator does not yet fully support va\_arg on many
   6524 targets. Also, it does not currently support va\_arg with aggregate
   6525 types on any target.
   6526 
   6527 .. _i_landingpad:
   6528 
   6529 '``landingpad``' Instruction
   6530 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6531 
   6532 Syntax:
   6533 """""""
   6534 
   6535 ::
   6536 
   6537       <resultval> = landingpad <resultty> personality <type> <pers_fn> <clause>+
   6538       <resultval> = landingpad <resultty> personality <type> <pers_fn> cleanup <clause>*
   6539 
   6540       <clause> := catch <type> <value>
   6541       <clause> := filter <array constant type> <array constant>
   6542 
   6543 Overview:
   6544 """""""""
   6545 
   6546 The '``landingpad``' instruction is used by `LLVM's exception handling
   6547 system <ExceptionHandling.html#overview>`_ to specify that a basic block
   6548 is a landing pad --- one where the exception lands, and corresponds to the
   6549 code found in the ``catch`` portion of a ``try``/``catch`` sequence. It
   6550 defines values supplied by the personality function (``pers_fn``) upon
   6551 re-entry to the function. The ``resultval`` has the type ``resultty``.
   6552 
   6553 Arguments:
   6554 """"""""""
   6555 
   6556 This instruction takes a ``pers_fn`` value. This is the personality
   6557 function associated with the unwinding mechanism. The optional
   6558 ``cleanup`` flag indicates that the landing pad block is a cleanup.
   6559 
   6560 A ``clause`` begins with the clause type --- ``catch`` or ``filter`` --- and
   6561 contains the global variable representing the "type" that may be caught
   6562 or filtered respectively. Unlike the ``catch`` clause, the ``filter``
   6563 clause takes an array constant as its argument. Use
   6564 "``[0 x i8**] undef``" for a filter which cannot throw. The
   6565 '``landingpad``' instruction must contain *at least* one ``clause`` or
   6566 the ``cleanup`` flag.
   6567 
   6568 Semantics:
   6569 """"""""""
   6570 
   6571 The '``landingpad``' instruction defines the values which are set by the
   6572 personality function (``pers_fn``) upon re-entry to the function, and
   6573 therefore the "result type" of the ``landingpad`` instruction. As with
   6574 calling conventions, how the personality function results are
   6575 represented in LLVM IR is target specific.
   6576 
   6577 The clauses are applied in order from top to bottom. If two
   6578 ``landingpad`` instructions are merged together through inlining, the
   6579 clauses from the calling function are appended to the list of clauses.
   6580 When the call stack is being unwound due to an exception being thrown,
   6581 the exception is compared against each ``clause`` in turn. If it doesn't
   6582 match any of the clauses, and the ``cleanup`` flag is not set, then
   6583 unwinding continues further up the call stack.
   6584 
   6585 The ``landingpad`` instruction has several restrictions:
   6586 
   6587 -  A landing pad block is a basic block which is the unwind destination
   6588    of an '``invoke``' instruction.
   6589 -  A landing pad block must have a '``landingpad``' instruction as its
   6590    first non-PHI instruction.
   6591 -  There can be only one '``landingpad``' instruction within the landing
   6592    pad block.
   6593 -  A basic block that is not a landing pad block may not include a
   6594    '``landingpad``' instruction.
   6595 -  All '``landingpad``' instructions in a function must have the same
   6596    personality function.
   6597 
   6598 Example:
   6599 """"""""
   6600 
   6601 .. code-block:: llvm
   6602 
   6603       ;; A landing pad which can catch an integer.
   6604       %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
   6605                catch i8** @_ZTIi
   6606       ;; A landing pad that is a cleanup.
   6607       %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
   6608                cleanup
   6609       ;; A landing pad which can catch an integer and can only throw a double.
   6610       %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
   6611                catch i8** @_ZTIi
   6612                filter [1 x i8**] [@_ZTId]
   6613 
   6614 .. _intrinsics:
   6615 
   6616 Intrinsic Functions
   6617 ===================
   6618 
   6619 LLVM supports the notion of an "intrinsic function". These functions
   6620 have well known names and semantics and are required to follow certain
   6621 restrictions. Overall, these intrinsics represent an extension mechanism
   6622 for the LLVM language that does not require changing all of the
   6623 transformations in LLVM when adding to the language (or the bitcode
   6624 reader/writer, the parser, etc...).
   6625 
   6626 Intrinsic function names must all start with an "``llvm.``" prefix. This
   6627 prefix is reserved in LLVM for intrinsic names; thus, function names may
   6628 not begin with this prefix. Intrinsic functions must always be external
   6629 functions: you cannot define the body of intrinsic functions. Intrinsic
   6630 functions may only be used in call or invoke instructions: it is illegal
   6631 to take the address of an intrinsic function. Additionally, because
   6632 intrinsic functions are part of the LLVM language, it is required if any
   6633 are added that they be documented here.
   6634 
   6635 Some intrinsic functions can be overloaded, i.e., the intrinsic
   6636 represents a family of functions that perform the same operation but on
   6637 different data types. Because LLVM can represent over 8 million
   6638 different integer types, overloading is used commonly to allow an
   6639 intrinsic function to operate on any integer type. One or more of the
   6640 argument types or the result type can be overloaded to accept any
   6641 integer type. Argument types may also be defined as exactly matching a
   6642 previous argument's type or the result type. This allows an intrinsic
   6643 function which accepts multiple arguments, but needs all of them to be
   6644 of the same type, to only be overloaded with respect to a single
   6645 argument or the result.
   6646 
   6647 Overloaded intrinsics will have the names of its overloaded argument
   6648 types encoded into its function name, each preceded by a period. Only
   6649 those types which are overloaded result in a name suffix. Arguments
   6650 whose type is matched against another type do not. For example, the
   6651 ``llvm.ctpop`` function can take an integer of any width and returns an
   6652 integer of exactly the same integer width. This leads to a family of
   6653 functions such as ``i8 @llvm.ctpop.i8(i8 %val)`` and
   6654 ``i29 @llvm.ctpop.i29(i29 %val)``. Only one type, the return type, is
   6655 overloaded, and only one type suffix is required. Because the argument's
   6656 type is matched against the return type, it does not require its own
   6657 name suffix.
   6658 
   6659 To learn how to add an intrinsic function, please see the `Extending
   6660 LLVM Guide <ExtendingLLVM.html>`_.
   6661 
   6662 .. _int_varargs:
   6663 
   6664 Variable Argument Handling Intrinsics
   6665 -------------------------------------
   6666 
   6667 Variable argument support is defined in LLVM with the
   6668 :ref:`va_arg <i_va_arg>` instruction and these three intrinsic
   6669 functions. These functions are related to the similarly named macros
   6670 defined in the ``<stdarg.h>`` header file.
   6671 
   6672 All of these functions operate on arguments that use a target-specific
   6673 value type "``va_list``". The LLVM assembly language reference manual
   6674 does not define what this type is, so all transformations should be
   6675 prepared to handle these functions regardless of the type used.
   6676 
   6677 This example shows how the :ref:`va_arg <i_va_arg>` instruction and the
   6678 variable argument handling intrinsic functions are used.
   6679 
   6680 .. code-block:: llvm
   6681 
   6682     define i32 @test(i32 %X, ...) {
   6683       ; Initialize variable argument processing
   6684       %ap = alloca i8*
   6685       %ap2 = bitcast i8** %ap to i8*
   6686       call void @llvm.va_start(i8* %ap2)
   6687 
   6688       ; Read a single integer argument
   6689       %tmp = va_arg i8** %ap, i32
   6690 
   6691       ; Demonstrate usage of llvm.va_copy and llvm.va_end
   6692       %aq = alloca i8*
   6693       %aq2 = bitcast i8** %aq to i8*
   6694       call void @llvm.va_copy(i8* %aq2, i8* %ap2)
   6695       call void @llvm.va_end(i8* %aq2)
   6696 
   6697       ; Stop processing of arguments.
   6698       call void @llvm.va_end(i8* %ap2)
   6699       ret i32 %tmp
   6700     }
   6701 
   6702     declare void @llvm.va_start(i8*)
   6703     declare void @llvm.va_copy(i8*, i8*)
   6704     declare void @llvm.va_end(i8*)
   6705 
   6706 .. _int_va_start:
   6707 
   6708 '``llvm.va_start``' Intrinsic
   6709 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6710 
   6711 Syntax:
   6712 """""""
   6713 
   6714 ::
   6715 
   6716       declare void @llvm.va_start(i8* <arglist>)
   6717 
   6718 Overview:
   6719 """""""""
   6720 
   6721 The '``llvm.va_start``' intrinsic initializes ``*<arglist>`` for
   6722 subsequent use by ``va_arg``.
   6723 
   6724 Arguments:
   6725 """"""""""
   6726 
   6727 The argument is a pointer to a ``va_list`` element to initialize.
   6728 
   6729 Semantics:
   6730 """"""""""
   6731 
   6732 The '``llvm.va_start``' intrinsic works just like the ``va_start`` macro
   6733 available in C. In a target-dependent way, it initializes the
   6734 ``va_list`` element to which the argument points, so that the next call
   6735 to ``va_arg`` will produce the first variable argument passed to the
   6736 function. Unlike the C ``va_start`` macro, this intrinsic does not need
   6737 to know the last argument of the function as the compiler can figure
   6738 that out.
   6739 
   6740 '``llvm.va_end``' Intrinsic
   6741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6742 
   6743 Syntax:
   6744 """""""
   6745 
   6746 ::
   6747 
   6748       declare void @llvm.va_end(i8* <arglist>)
   6749 
   6750 Overview:
   6751 """""""""
   6752 
   6753 The '``llvm.va_end``' intrinsic destroys ``*<arglist>``, which has been
   6754 initialized previously with ``llvm.va_start`` or ``llvm.va_copy``.
   6755 
   6756 Arguments:
   6757 """"""""""
   6758 
   6759 The argument is a pointer to a ``va_list`` to destroy.
   6760 
   6761 Semantics:
   6762 """"""""""
   6763 
   6764 The '``llvm.va_end``' intrinsic works just like the ``va_end`` macro
   6765 available in C. In a target-dependent way, it destroys the ``va_list``
   6766 element to which the argument points. Calls to
   6767 :ref:`llvm.va_start <int_va_start>` and
   6768 :ref:`llvm.va_copy <int_va_copy>` must be matched exactly with calls to
   6769 ``llvm.va_end``.
   6770 
   6771 .. _int_va_copy:
   6772 
   6773 '``llvm.va_copy``' Intrinsic
   6774 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6775 
   6776 Syntax:
   6777 """""""
   6778 
   6779 ::
   6780 
   6781       declare void @llvm.va_copy(i8* <destarglist>, i8* <srcarglist>)
   6782 
   6783 Overview:
   6784 """""""""
   6785 
   6786 The '``llvm.va_copy``' intrinsic copies the current argument position
   6787 from the source argument list to the destination argument list.
   6788 
   6789 Arguments:
   6790 """"""""""
   6791 
   6792 The first argument is a pointer to a ``va_list`` element to initialize.
   6793 The second argument is a pointer to a ``va_list`` element to copy from.
   6794 
   6795 Semantics:
   6796 """"""""""
   6797 
   6798 The '``llvm.va_copy``' intrinsic works just like the ``va_copy`` macro
   6799 available in C. In a target-dependent way, it copies the source
   6800 ``va_list`` element into the destination ``va_list`` element. This
   6801 intrinsic is necessary because the `` llvm.va_start`` intrinsic may be
   6802 arbitrarily complex and require, for example, memory allocation.
   6803 
   6804 Accurate Garbage Collection Intrinsics
   6805 --------------------------------------
   6806 
   6807 LLVM support for `Accurate Garbage Collection <GarbageCollection.html>`_
   6808 (GC) requires the implementation and generation of these intrinsics.
   6809 These intrinsics allow identification of :ref:`GC roots on the
   6810 stack <int_gcroot>`, as well as garbage collector implementations that
   6811 require :ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers.
   6812 Front-ends for type-safe garbage collected languages should generate
   6813 these intrinsics to make use of the LLVM garbage collectors. For more
   6814 details, see `Accurate Garbage Collection with
   6815 LLVM <GarbageCollection.html>`_.
   6816 
   6817 The garbage collection intrinsics only operate on objects in the generic
   6818 address space (address space zero).
   6819 
   6820 .. _int_gcroot:
   6821 
   6822 '``llvm.gcroot``' Intrinsic
   6823 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6824 
   6825 Syntax:
   6826 """""""
   6827 
   6828 ::
   6829 
   6830       declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
   6831 
   6832 Overview:
   6833 """""""""
   6834 
   6835 The '``llvm.gcroot``' intrinsic declares the existence of a GC root to
   6836 the code generator, and allows some metadata to be associated with it.
   6837 
   6838 Arguments:
   6839 """"""""""
   6840 
   6841 The first argument specifies the address of a stack object that contains
   6842 the root pointer. The second pointer (which must be either a constant or
   6843 a global value address) contains the meta-data to be associated with the
   6844 root.
   6845 
   6846 Semantics:
   6847 """"""""""
   6848 
   6849 At runtime, a call to this intrinsic stores a null pointer into the
   6850 "ptrloc" location. At compile-time, the code generator generates
   6851 information to allow the runtime to find the pointer at GC safe points.
   6852 The '``llvm.gcroot``' intrinsic may only be used in a function which
   6853 :ref:`specifies a GC algorithm <gc>`.
   6854 
   6855 .. _int_gcread:
   6856 
   6857 '``llvm.gcread``' Intrinsic
   6858 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6859 
   6860 Syntax:
   6861 """""""
   6862 
   6863 ::
   6864 
   6865       declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
   6866 
   6867 Overview:
   6868 """""""""
   6869 
   6870 The '``llvm.gcread``' intrinsic identifies reads of references from heap
   6871 locations, allowing garbage collector implementations that require read
   6872 barriers.
   6873 
   6874 Arguments:
   6875 """"""""""
   6876 
   6877 The second argument is the address to read from, which should be an
   6878 address allocated from the garbage collector. The first object is a
   6879 pointer to the start of the referenced object, if needed by the language
   6880 runtime (otherwise null).
   6881 
   6882 Semantics:
   6883 """"""""""
   6884 
   6885 The '``llvm.gcread``' intrinsic has the same semantics as a load
   6886 instruction, but may be replaced with substantially more complex code by
   6887 the garbage collector runtime, as needed. The '``llvm.gcread``'
   6888 intrinsic may only be used in a function which :ref:`specifies a GC
   6889 algorithm <gc>`.
   6890 
   6891 .. _int_gcwrite:
   6892 
   6893 '``llvm.gcwrite``' Intrinsic
   6894 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6895 
   6896 Syntax:
   6897 """""""
   6898 
   6899 ::
   6900 
   6901       declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
   6902 
   6903 Overview:
   6904 """""""""
   6905 
   6906 The '``llvm.gcwrite``' intrinsic identifies writes of references to heap
   6907 locations, allowing garbage collector implementations that require write
   6908 barriers (such as generational or reference counting collectors).
   6909 
   6910 Arguments:
   6911 """"""""""
   6912 
   6913 The first argument is the reference to store, the second is the start of
   6914 the object to store it to, and the third is the address of the field of
   6915 Obj to store to. If the runtime does not require a pointer to the
   6916 object, Obj may be null.
   6917 
   6918 Semantics:
   6919 """"""""""
   6920 
   6921 The '``llvm.gcwrite``' intrinsic has the same semantics as a store
   6922 instruction, but may be replaced with substantially more complex code by
   6923 the garbage collector runtime, as needed. The '``llvm.gcwrite``'
   6924 intrinsic may only be used in a function which :ref:`specifies a GC
   6925 algorithm <gc>`.
   6926 
   6927 Code Generator Intrinsics
   6928 -------------------------
   6929 
   6930 These intrinsics are provided by LLVM to expose special features that
   6931 may only be implemented with code generator support.
   6932 
   6933 '``llvm.returnaddress``' Intrinsic
   6934 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6935 
   6936 Syntax:
   6937 """""""
   6938 
   6939 ::
   6940 
   6941       declare i8  *@llvm.returnaddress(i32 <level>)
   6942 
   6943 Overview:
   6944 """""""""
   6945 
   6946 The '``llvm.returnaddress``' intrinsic attempts to compute a
   6947 target-specific value indicating the return address of the current
   6948 function or one of its callers.
   6949 
   6950 Arguments:
   6951 """"""""""
   6952 
   6953 The argument to this intrinsic indicates which function to return the
   6954 address for. Zero indicates the calling function, one indicates its
   6955 caller, etc. The argument is **required** to be a constant integer
   6956 value.
   6957 
   6958 Semantics:
   6959 """"""""""
   6960 
   6961 The '``llvm.returnaddress``' intrinsic either returns a pointer
   6962 indicating the return address of the specified call frame, or zero if it
   6963 cannot be identified. The value returned by this intrinsic is likely to
   6964 be incorrect or 0 for arguments other than zero, so it should only be
   6965 used for debugging purposes.
   6966 
   6967 Note that calling this intrinsic does not prevent function inlining or
   6968 other aggressive transformations, so the value returned may not be that
   6969 of the obvious source-language caller.
   6970 
   6971 '``llvm.frameaddress``' Intrinsic
   6972 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   6973 
   6974 Syntax:
   6975 """""""
   6976 
   6977 ::
   6978 
   6979       declare i8* @llvm.frameaddress(i32 <level>)
   6980 
   6981 Overview:
   6982 """""""""
   6983 
   6984 The '``llvm.frameaddress``' intrinsic attempts to return the
   6985 target-specific frame pointer value for the specified stack frame.
   6986 
   6987 Arguments:
   6988 """"""""""
   6989 
   6990 The argument to this intrinsic indicates which function to return the
   6991 frame pointer for. Zero indicates the calling function, one indicates
   6992 its caller, etc. The argument is **required** to be a constant integer
   6993 value.
   6994 
   6995 Semantics:
   6996 """"""""""
   6997 
   6998 The '``llvm.frameaddress``' intrinsic either returns a pointer
   6999 indicating the frame address of the specified call frame, or zero if it
   7000 cannot be identified. The value returned by this intrinsic is likely to
   7001 be incorrect or 0 for arguments other than zero, so it should only be
   7002 used for debugging purposes.
   7003 
   7004 Note that calling this intrinsic does not prevent function inlining or
   7005 other aggressive transformations, so the value returned may not be that
   7006 of the obvious source-language caller.
   7007 
   7008 .. _int_read_register:
   7009 .. _int_write_register:
   7010 
   7011 '``llvm.read_register``' and '``llvm.write_register``' Intrinsics
   7012 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7013 
   7014 Syntax:
   7015 """""""
   7016 
   7017 ::
   7018 
   7019       declare i32 @llvm.read_register.i32(metadata)
   7020       declare i64 @llvm.read_register.i64(metadata)
   7021       declare void @llvm.write_register.i32(metadata, i32 @value)
   7022       declare void @llvm.write_register.i64(metadata, i64 @value)
   7023       !0 = metadata !{metadata !"sp\00"}
   7024 
   7025 Overview:
   7026 """""""""
   7027 
   7028 The '``llvm.read_register``' and '``llvm.write_register``' intrinsics
   7029 provides access to the named register. The register must be valid on
   7030 the architecture being compiled to. The type needs to be compatible
   7031 with the register being read.
   7032 
   7033 Semantics:
   7034 """"""""""
   7035 
   7036 The '``llvm.read_register``' intrinsic returns the current value of the
   7037 register, where possible. The '``llvm.write_register``' intrinsic sets
   7038 the current value of the register, where possible.
   7039 
   7040 This is useful to implement named register global variables that need
   7041 to always be mapped to a specific register, as is common practice on
   7042 bare-metal programs including OS kernels.
   7043 
   7044 The compiler doesn't check for register availability or use of the used
   7045 register in surrounding code, including inline assembly. Because of that,
   7046 allocatable registers are not supported.
   7047 
   7048 Warning: So far it only works with the stack pointer on selected
   7049 architectures (ARM, AArch64, PowerPC and x86_64). Significant amount of
   7050 work is needed to support other registers and even more so, allocatable
   7051 registers.
   7052 
   7053 .. _int_stacksave:
   7054 
   7055 '``llvm.stacksave``' Intrinsic
   7056 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7057 
   7058 Syntax:
   7059 """""""
   7060 
   7061 ::
   7062 
   7063       declare i8* @llvm.stacksave()
   7064 
   7065 Overview:
   7066 """""""""
   7067 
   7068 The '``llvm.stacksave``' intrinsic is used to remember the current state
   7069 of the function stack, for use with
   7070 :ref:`llvm.stackrestore <int_stackrestore>`. This is useful for
   7071 implementing language features like scoped automatic variable sized
   7072 arrays in C99.
   7073 
   7074 Semantics:
   7075 """"""""""
   7076 
   7077 This intrinsic returns a opaque pointer value that can be passed to
   7078 :ref:`llvm.stackrestore <int_stackrestore>`. When an
   7079 ``llvm.stackrestore`` intrinsic is executed with a value saved from
   7080 ``llvm.stacksave``, it effectively restores the state of the stack to
   7081 the state it was in when the ``llvm.stacksave`` intrinsic executed. In
   7082 practice, this pops any :ref:`alloca <i_alloca>` blocks from the stack that
   7083 were allocated after the ``llvm.stacksave`` was executed.
   7084 
   7085 .. _int_stackrestore:
   7086 
   7087 '``llvm.stackrestore``' Intrinsic
   7088 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7089 
   7090 Syntax:
   7091 """""""
   7092 
   7093 ::
   7094 
   7095       declare void @llvm.stackrestore(i8* %ptr)
   7096 
   7097 Overview:
   7098 """""""""
   7099 
   7100 The '``llvm.stackrestore``' intrinsic is used to restore the state of
   7101 the function stack to the state it was in when the corresponding
   7102 :ref:`llvm.stacksave <int_stacksave>` intrinsic executed. This is
   7103 useful for implementing language features like scoped automatic variable
   7104 sized arrays in C99.
   7105 
   7106 Semantics:
   7107 """"""""""
   7108 
   7109 See the description for :ref:`llvm.stacksave <int_stacksave>`.
   7110 
   7111 '``llvm.prefetch``' Intrinsic
   7112 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7113 
   7114 Syntax:
   7115 """""""
   7116 
   7117 ::
   7118 
   7119       declare void @llvm.prefetch(i8* <address>, i32 <rw>, i32 <locality>, i32 <cache type>)
   7120 
   7121 Overview:
   7122 """""""""
   7123 
   7124 The '``llvm.prefetch``' intrinsic is a hint to the code generator to
   7125 insert a prefetch instruction if supported; otherwise, it is a noop.
   7126 Prefetches have no effect on the behavior of the program but can change
   7127 its performance characteristics.
   7128 
   7129 Arguments:
   7130 """"""""""
   7131 
   7132 ``address`` is the address to be prefetched, ``rw`` is the specifier
   7133 determining if the fetch should be for a read (0) or write (1), and
   7134 ``locality`` is a temporal locality specifier ranging from (0) - no
   7135 locality, to (3) - extremely local keep in cache. The ``cache type``
   7136 specifies whether the prefetch is performed on the data (1) or
   7137 instruction (0) cache. The ``rw``, ``locality`` and ``cache type``
   7138 arguments must be constant integers.
   7139 
   7140 Semantics:
   7141 """"""""""
   7142 
   7143 This intrinsic does not modify the behavior of the program. In
   7144 particular, prefetches cannot trap and do not produce a value. On
   7145 targets that support this intrinsic, the prefetch can provide hints to
   7146 the processor cache for better performance.
   7147 
   7148 '``llvm.pcmarker``' Intrinsic
   7149 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7150 
   7151 Syntax:
   7152 """""""
   7153 
   7154 ::
   7155 
   7156       declare void @llvm.pcmarker(i32 <id>)
   7157 
   7158 Overview:
   7159 """""""""
   7160 
   7161 The '``llvm.pcmarker``' intrinsic is a method to export a Program
   7162 Counter (PC) in a region of code to simulators and other tools. The
   7163 method is target specific, but it is expected that the marker will use
   7164 exported symbols to transmit the PC of the marker. The marker makes no
   7165 guarantees that it will remain with any specific instruction after
   7166 optimizations. It is possible that the presence of a marker will inhibit
   7167 optimizations. The intended use is to be inserted after optimizations to
   7168 allow correlations of simulation runs.
   7169 
   7170 Arguments:
   7171 """"""""""
   7172 
   7173 ``id`` is a numerical id identifying the marker.
   7174 
   7175 Semantics:
   7176 """"""""""
   7177 
   7178 This intrinsic does not modify the behavior of the program. Backends
   7179 that do not support this intrinsic may ignore it.
   7180 
   7181 '``llvm.readcyclecounter``' Intrinsic
   7182 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7183 
   7184 Syntax:
   7185 """""""
   7186 
   7187 ::
   7188 
   7189       declare i64 @llvm.readcyclecounter()
   7190 
   7191 Overview:
   7192 """""""""
   7193 
   7194 The '``llvm.readcyclecounter``' intrinsic provides access to the cycle
   7195 counter register (or similar low latency, high accuracy clocks) on those
   7196 targets that support it. On X86, it should map to RDTSC. On Alpha, it
   7197 should map to RPCC. As the backing counters overflow quickly (on the
   7198 order of 9 seconds on alpha), this should only be used for small
   7199 timings.
   7200 
   7201 Semantics:
   7202 """"""""""
   7203 
   7204 When directly supported, reading the cycle counter should not modify any
   7205 memory. Implementations are allowed to either return a application
   7206 specific value or a system wide value. On backends without support, this
   7207 is lowered to a constant 0.
   7208 
   7209 Note that runtime support may be conditional on the privilege-level code is
   7210 running at and the host platform.
   7211 
   7212 '``llvm.clear_cache``' Intrinsic
   7213 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7214 
   7215 Syntax:
   7216 """""""
   7217 
   7218 ::
   7219 
   7220       declare void @llvm.clear_cache(i8*, i8*)
   7221 
   7222 Overview:
   7223 """""""""
   7224 
   7225 The '``llvm.clear_cache``' intrinsic ensures visibility of modifications
   7226 in the specified range to the execution unit of the processor. On
   7227 targets with non-unified instruction and data cache, the implementation
   7228 flushes the instruction cache.
   7229 
   7230 Semantics:
   7231 """"""""""
   7232 
   7233 On platforms with coherent instruction and data caches (e.g. x86), this
   7234 intrinsic is a nop. On platforms with non-coherent instruction and data
   7235 cache (e.g. ARM, MIPS), the intrinsic is lowered either to appropriate
   7236 instructions or a system call, if cache flushing requires special
   7237 privileges.
   7238 
   7239 The default behavior is to emit a call to ``__clear_cache`` from the run
   7240 time library.
   7241 
   7242 This instrinsic does *not* empty the instruction pipeline. Modifications
   7243 of the current function are outside the scope of the intrinsic.
   7244 
   7245 Standard C Library Intrinsics
   7246 -----------------------------
   7247 
   7248 LLVM provides intrinsics for a few important standard C library
   7249 functions. These intrinsics allow source-language front-ends to pass
   7250 information about the alignment of the pointer arguments to the code
   7251 generator, providing opportunity for more efficient code generation.
   7252 
   7253 .. _int_memcpy:
   7254 
   7255 '``llvm.memcpy``' Intrinsic
   7256 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7257 
   7258 Syntax:
   7259 """""""
   7260 
   7261 This is an overloaded intrinsic. You can use ``llvm.memcpy`` on any
   7262 integer bit width and for different address spaces. Not all targets
   7263 support all bit widths however.
   7264 
   7265 ::
   7266 
   7267       declare void @llvm.memcpy.p0i8.p0i8.i32(i8* <dest>, i8* <src>,
   7268                                               i32 <len>, i32 <align>, i1 <isvolatile>)
   7269       declare void @llvm.memcpy.p0i8.p0i8.i64(i8* <dest>, i8* <src>,
   7270                                               i64 <len>, i32 <align>, i1 <isvolatile>)
   7271 
   7272 Overview:
   7273 """""""""
   7274 
   7275 The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
   7276 source location to the destination location.
   7277 
   7278 Note that, unlike the standard libc function, the ``llvm.memcpy.*``
   7279 intrinsics do not return a value, takes extra alignment/isvolatile
   7280 arguments and the pointers can be in specified address spaces.
   7281 
   7282 Arguments:
   7283 """"""""""
   7284 
   7285 The first argument is a pointer to the destination, the second is a
   7286 pointer to the source. The third argument is an integer argument
   7287 specifying the number of bytes to copy, the fourth argument is the
   7288 alignment of the source and destination locations, and the fifth is a
   7289 boolean indicating a volatile access.
   7290 
   7291 If the call to this intrinsic has an alignment value that is not 0 or 1,
   7292 then the caller guarantees that both the source and destination pointers
   7293 are aligned to that boundary.
   7294 
   7295 If the ``isvolatile`` parameter is ``true``, the ``llvm.memcpy`` call is
   7296 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
   7297 very cleanly specified and it is unwise to depend on it.
   7298 
   7299 Semantics:
   7300 """"""""""
   7301 
   7302 The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
   7303 source location to the destination location, which are not allowed to
   7304 overlap. It copies "len" bytes of memory over. If the argument is known
   7305 to be aligned to some boundary, this can be specified as the fourth
   7306 argument, otherwise it should be set to 0 or 1 (both meaning no alignment).
   7307 
   7308 '``llvm.memmove``' Intrinsic
   7309 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7310 
   7311 Syntax:
   7312 """""""
   7313 
   7314 This is an overloaded intrinsic. You can use llvm.memmove on any integer
   7315 bit width and for different address space. Not all targets support all
   7316 bit widths however.
   7317 
   7318 ::
   7319 
   7320       declare void @llvm.memmove.p0i8.p0i8.i32(i8* <dest>, i8* <src>,
   7321                                                i32 <len>, i32 <align>, i1 <isvolatile>)
   7322       declare void @llvm.memmove.p0i8.p0i8.i64(i8* <dest>, i8* <src>,
   7323                                                i64 <len>, i32 <align>, i1 <isvolatile>)
   7324 
   7325 Overview:
   7326 """""""""
   7327 
   7328 The '``llvm.memmove.*``' intrinsics move a block of memory from the
   7329 source location to the destination location. It is similar to the
   7330 '``llvm.memcpy``' intrinsic but allows the two memory locations to
   7331 overlap.
   7332 
   7333 Note that, unlike the standard libc function, the ``llvm.memmove.*``
   7334 intrinsics do not return a value, takes extra alignment/isvolatile
   7335 arguments and the pointers can be in specified address spaces.
   7336 
   7337 Arguments:
   7338 """"""""""
   7339 
   7340 The first argument is a pointer to the destination, the second is a
   7341 pointer to the source. The third argument is an integer argument
   7342 specifying the number of bytes to copy, the fourth argument is the
   7343 alignment of the source and destination locations, and the fifth is a
   7344 boolean indicating a volatile access.
   7345 
   7346 If the call to this intrinsic has an alignment value that is not 0 or 1,
   7347 then the caller guarantees that the source and destination pointers are
   7348 aligned to that boundary.
   7349 
   7350 If the ``isvolatile`` parameter is ``true``, the ``llvm.memmove`` call
   7351 is a :ref:`volatile operation <volatile>`. The detailed access behavior is
   7352 not very cleanly specified and it is unwise to depend on it.
   7353 
   7354 Semantics:
   7355 """"""""""
   7356 
   7357 The '``llvm.memmove.*``' intrinsics copy a block of memory from the
   7358 source location to the destination location, which may overlap. It
   7359 copies "len" bytes of memory over. If the argument is known to be
   7360 aligned to some boundary, this can be specified as the fourth argument,
   7361 otherwise it should be set to 0 or 1 (both meaning no alignment).
   7362 
   7363 '``llvm.memset.*``' Intrinsics
   7364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7365 
   7366 Syntax:
   7367 """""""
   7368 
   7369 This is an overloaded intrinsic. You can use llvm.memset on any integer
   7370 bit width and for different address spaces. However, not all targets
   7371 support all bit widths.
   7372 
   7373 ::
   7374 
   7375       declare void @llvm.memset.p0i8.i32(i8* <dest>, i8 <val>,
   7376                                          i32 <len>, i32 <align>, i1 <isvolatile>)
   7377       declare void @llvm.memset.p0i8.i64(i8* <dest>, i8 <val>,
   7378                                          i64 <len>, i32 <align>, i1 <isvolatile>)
   7379 
   7380 Overview:
   7381 """""""""
   7382 
   7383 The '``llvm.memset.*``' intrinsics fill a block of memory with a
   7384 particular byte value.
   7385 
   7386 Note that, unlike the standard libc function, the ``llvm.memset``
   7387 intrinsic does not return a value and takes extra alignment/volatile
   7388 arguments. Also, the destination can be in an arbitrary address space.
   7389 
   7390 Arguments:
   7391 """"""""""
   7392 
   7393 The first argument is a pointer to the destination to fill, the second
   7394 is the byte value with which to fill it, the third argument is an
   7395 integer argument specifying the number of bytes to fill, and the fourth
   7396 argument is the known alignment of the destination location.
   7397 
   7398 If the call to this intrinsic has an alignment value that is not 0 or 1,
   7399 then the caller guarantees that the destination pointer is aligned to
   7400 that boundary.
   7401 
   7402 If the ``isvolatile`` parameter is ``true``, the ``llvm.memset`` call is
   7403 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
   7404 very cleanly specified and it is unwise to depend on it.
   7405 
   7406 Semantics:
   7407 """"""""""
   7408 
   7409 The '``llvm.memset.*``' intrinsics fill "len" bytes of memory starting
   7410 at the destination location. If the argument is known to be aligned to
   7411 some boundary, this can be specified as the fourth argument, otherwise
   7412 it should be set to 0 or 1 (both meaning no alignment).
   7413 
   7414 '``llvm.sqrt.*``' Intrinsic
   7415 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7416 
   7417 Syntax:
   7418 """""""
   7419 
   7420 This is an overloaded intrinsic. You can use ``llvm.sqrt`` on any
   7421 floating point or vector of floating point type. Not all targets support
   7422 all types however.
   7423 
   7424 ::
   7425 
   7426       declare float     @llvm.sqrt.f32(float %Val)
   7427       declare double    @llvm.sqrt.f64(double %Val)
   7428       declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
   7429       declare fp128     @llvm.sqrt.f128(fp128 %Val)
   7430       declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
   7431 
   7432 Overview:
   7433 """""""""
   7434 
   7435 The '``llvm.sqrt``' intrinsics return the sqrt of the specified operand,
   7436 returning the same value as the libm '``sqrt``' functions would. Unlike
   7437 ``sqrt`` in libm, however, ``llvm.sqrt`` has undefined behavior for
   7438 negative numbers other than -0.0 (which allows for better optimization,
   7439 because there is no need to worry about errno being set).
   7440 ``llvm.sqrt(-0.0)`` is defined to return -0.0 like IEEE sqrt.
   7441 
   7442 Arguments:
   7443 """"""""""
   7444 
   7445 The argument and return value are floating point numbers of the same
   7446 type.
   7447 
   7448 Semantics:
   7449 """"""""""
   7450 
   7451 This function returns the sqrt of the specified operand if it is a
   7452 nonnegative floating point number.
   7453 
   7454 '``llvm.powi.*``' Intrinsic
   7455 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7456 
   7457 Syntax:
   7458 """""""
   7459 
   7460 This is an overloaded intrinsic. You can use ``llvm.powi`` on any
   7461 floating point or vector of floating point type. Not all targets support
   7462 all types however.
   7463 
   7464 ::
   7465 
   7466       declare float     @llvm.powi.f32(float  %Val, i32 %power)
   7467       declare double    @llvm.powi.f64(double %Val, i32 %power)
   7468       declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
   7469       declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
   7470       declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
   7471 
   7472 Overview:
   7473 """""""""
   7474 
   7475 The '``llvm.powi.*``' intrinsics return the first operand raised to the
   7476 specified (positive or negative) power. The order of evaluation of
   7477 multiplications is not defined. When a vector of floating point type is
   7478 used, the second argument remains a scalar integer value.
   7479 
   7480 Arguments:
   7481 """"""""""
   7482 
   7483 The second argument is an integer power, and the first is a value to
   7484 raise to that power.
   7485 
   7486 Semantics:
   7487 """"""""""
   7488 
   7489 This function returns the first value raised to the second power with an
   7490 unspecified sequence of rounding operations.
   7491 
   7492 '``llvm.sin.*``' Intrinsic
   7493 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7494 
   7495 Syntax:
   7496 """""""
   7497 
   7498 This is an overloaded intrinsic. You can use ``llvm.sin`` on any
   7499 floating point or vector of floating point type. Not all targets support
   7500 all types however.
   7501 
   7502 ::
   7503 
   7504       declare float     @llvm.sin.f32(float  %Val)
   7505       declare double    @llvm.sin.f64(double %Val)
   7506       declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
   7507       declare fp128     @llvm.sin.f128(fp128 %Val)
   7508       declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
   7509 
   7510 Overview:
   7511 """""""""
   7512 
   7513 The '``llvm.sin.*``' intrinsics return the sine of the operand.
   7514 
   7515 Arguments:
   7516 """"""""""
   7517 
   7518 The argument and return value are floating point numbers of the same
   7519 type.
   7520 
   7521 Semantics:
   7522 """"""""""
   7523 
   7524 This function returns the sine of the specified operand, returning the
   7525 same values as the libm ``sin`` functions would, and handles error
   7526 conditions in the same way.
   7527 
   7528 '``llvm.cos.*``' Intrinsic
   7529 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7530 
   7531 Syntax:
   7532 """""""
   7533 
   7534 This is an overloaded intrinsic. You can use ``llvm.cos`` on any
   7535 floating point or vector of floating point type. Not all targets support
   7536 all types however.
   7537 
   7538 ::
   7539 
   7540       declare float     @llvm.cos.f32(float  %Val)
   7541       declare double    @llvm.cos.f64(double %Val)
   7542       declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
   7543       declare fp128     @llvm.cos.f128(fp128 %Val)
   7544       declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
   7545 
   7546 Overview:
   7547 """""""""
   7548 
   7549 The '``llvm.cos.*``' intrinsics return the cosine of the operand.
   7550 
   7551 Arguments:
   7552 """"""""""
   7553 
   7554 The argument and return value are floating point numbers of the same
   7555 type.
   7556 
   7557 Semantics:
   7558 """"""""""
   7559 
   7560 This function returns the cosine of the specified operand, returning the
   7561 same values as the libm ``cos`` functions would, and handles error
   7562 conditions in the same way.
   7563 
   7564 '``llvm.pow.*``' Intrinsic
   7565 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7566 
   7567 Syntax:
   7568 """""""
   7569 
   7570 This is an overloaded intrinsic. You can use ``llvm.pow`` on any
   7571 floating point or vector of floating point type. Not all targets support
   7572 all types however.
   7573 
   7574 ::
   7575 
   7576       declare float     @llvm.pow.f32(float  %Val, float %Power)
   7577       declare double    @llvm.pow.f64(double %Val, double %Power)
   7578       declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
   7579       declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
   7580       declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
   7581 
   7582 Overview:
   7583 """""""""
   7584 
   7585 The '``llvm.pow.*``' intrinsics return the first operand raised to the
   7586 specified (positive or negative) power.
   7587 
   7588 Arguments:
   7589 """"""""""
   7590 
   7591 The second argument is a floating point power, and the first is a value
   7592 to raise to that power.
   7593 
   7594 Semantics:
   7595 """"""""""
   7596 
   7597 This function returns the first value raised to the second power,
   7598 returning the same values as the libm ``pow`` functions would, and
   7599 handles error conditions in the same way.
   7600 
   7601 '``llvm.exp.*``' Intrinsic
   7602 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7603 
   7604 Syntax:
   7605 """""""
   7606 
   7607 This is an overloaded intrinsic. You can use ``llvm.exp`` on any
   7608 floating point or vector of floating point type. Not all targets support
   7609 all types however.
   7610 
   7611 ::
   7612 
   7613       declare float     @llvm.exp.f32(float  %Val)
   7614       declare double    @llvm.exp.f64(double %Val)
   7615       declare x86_fp80  @llvm.exp.f80(x86_fp80  %Val)
   7616       declare fp128     @llvm.exp.f128(fp128 %Val)
   7617       declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128  %Val)
   7618 
   7619 Overview:
   7620 """""""""
   7621 
   7622 The '``llvm.exp.*``' intrinsics perform the exp function.
   7623 
   7624 Arguments:
   7625 """"""""""
   7626 
   7627 The argument and return value are floating point numbers of the same
   7628 type.
   7629 
   7630 Semantics:
   7631 """"""""""
   7632 
   7633 This function returns the same values as the libm ``exp`` functions
   7634 would, and handles error conditions in the same way.
   7635 
   7636 '``llvm.exp2.*``' Intrinsic
   7637 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7638 
   7639 Syntax:
   7640 """""""
   7641 
   7642 This is an overloaded intrinsic. You can use ``llvm.exp2`` on any
   7643 floating point or vector of floating point type. Not all targets support
   7644 all types however.
   7645 
   7646 ::
   7647 
   7648       declare float     @llvm.exp2.f32(float  %Val)
   7649       declare double    @llvm.exp2.f64(double %Val)
   7650       declare x86_fp80  @llvm.exp2.f80(x86_fp80  %Val)
   7651       declare fp128     @llvm.exp2.f128(fp128 %Val)
   7652       declare ppc_fp128 @llvm.exp2.ppcf128(ppc_fp128  %Val)
   7653 
   7654 Overview:
   7655 """""""""
   7656 
   7657 The '``llvm.exp2.*``' intrinsics perform the exp2 function.
   7658 
   7659 Arguments:
   7660 """"""""""
   7661 
   7662 The argument and return value are floating point numbers of the same
   7663 type.
   7664 
   7665 Semantics:
   7666 """"""""""
   7667 
   7668 This function returns the same values as the libm ``exp2`` functions
   7669 would, and handles error conditions in the same way.
   7670 
   7671 '``llvm.log.*``' Intrinsic
   7672 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7673 
   7674 Syntax:
   7675 """""""
   7676 
   7677 This is an overloaded intrinsic. You can use ``llvm.log`` on any
   7678 floating point or vector of floating point type. Not all targets support
   7679 all types however.
   7680 
   7681 ::
   7682 
   7683       declare float     @llvm.log.f32(float  %Val)
   7684       declare double    @llvm.log.f64(double %Val)
   7685       declare x86_fp80  @llvm.log.f80(x86_fp80  %Val)
   7686       declare fp128     @llvm.log.f128(fp128 %Val)
   7687       declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128  %Val)
   7688 
   7689 Overview:
   7690 """""""""
   7691 
   7692 The '``llvm.log.*``' intrinsics perform the log function.
   7693 
   7694 Arguments:
   7695 """"""""""
   7696 
   7697 The argument and return value are floating point numbers of the same
   7698 type.
   7699 
   7700 Semantics:
   7701 """"""""""
   7702 
   7703 This function returns the same values as the libm ``log`` functions
   7704 would, and handles error conditions in the same way.
   7705 
   7706 '``llvm.log10.*``' Intrinsic
   7707 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7708 
   7709 Syntax:
   7710 """""""
   7711 
   7712 This is an overloaded intrinsic. You can use ``llvm.log10`` on any
   7713 floating point or vector of floating point type. Not all targets support
   7714 all types however.
   7715 
   7716 ::
   7717 
   7718       declare float     @llvm.log10.f32(float  %Val)
   7719       declare double    @llvm.log10.f64(double %Val)
   7720       declare x86_fp80  @llvm.log10.f80(x86_fp80  %Val)
   7721       declare fp128     @llvm.log10.f128(fp128 %Val)
   7722       declare ppc_fp128 @llvm.log10.ppcf128(ppc_fp128  %Val)
   7723 
   7724 Overview:
   7725 """""""""
   7726 
   7727 The '``llvm.log10.*``' intrinsics perform the log10 function.
   7728 
   7729 Arguments:
   7730 """"""""""
   7731 
   7732 The argument and return value are floating point numbers of the same
   7733 type.
   7734 
   7735 Semantics:
   7736 """"""""""
   7737 
   7738 This function returns the same values as the libm ``log10`` functions
   7739 would, and handles error conditions in the same way.
   7740 
   7741 '``llvm.log2.*``' Intrinsic
   7742 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7743 
   7744 Syntax:
   7745 """""""
   7746 
   7747 This is an overloaded intrinsic. You can use ``llvm.log2`` on any
   7748 floating point or vector of floating point type. Not all targets support
   7749 all types however.
   7750 
   7751 ::
   7752 
   7753       declare float     @llvm.log2.f32(float  %Val)
   7754       declare double    @llvm.log2.f64(double %Val)
   7755       declare x86_fp80  @llvm.log2.f80(x86_fp80  %Val)
   7756       declare fp128     @llvm.log2.f128(fp128 %Val)
   7757       declare ppc_fp128 @llvm.log2.ppcf128(ppc_fp128  %Val)
   7758 
   7759 Overview:
   7760 """""""""
   7761 
   7762 The '``llvm.log2.*``' intrinsics perform the log2 function.
   7763 
   7764 Arguments:
   7765 """"""""""
   7766 
   7767 The argument and return value are floating point numbers of the same
   7768 type.
   7769 
   7770 Semantics:
   7771 """"""""""
   7772 
   7773 This function returns the same values as the libm ``log2`` functions
   7774 would, and handles error conditions in the same way.
   7775 
   7776 '``llvm.fma.*``' Intrinsic
   7777 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   7778 
   7779 Syntax:
   7780 """""""
   7781 
   7782 This is an overloaded intrinsic. You can use ``llvm.fma`` on any
   7783 floating point or vector of floating point type. Not all targets support
   7784 all types however.
   7785 
   7786 ::
   7787 
   7788       declare float     @llvm.fma.f32(float  %a, float  %b, float  %c)
   7789       declare double    @llvm.fma.f64(double %a, double %b, double %c)
   7790       declare x86_fp80  @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
   7791       declare fp128     @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
   7792       declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
   7793 
   7794 Overview:
   7795 """""""""
   7796 
   7797 The '``llvm.fma.*``' intrinsics perform the fused multiply-add
   7798 operation.
   7799 
   7800 Arguments:
   7801 """"""""""
   7802 
   7803 The argument and return value are floating point numbers of the same
   7804 type.
   7805 
   7806 Semantics:
   7807 """"""""""
   7808 
   7809 This function returns the same values as the libm ``fma`` functions
   7810 would, and does not set errno.
   7811 
   7812 '``llvm.fabs.*``' Intrinsic
   7813 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7814 
   7815 Syntax:
   7816 """""""
   7817 
   7818 This is an overloaded intrinsic. You can use ``llvm.fabs`` on any
   7819 floating point or vector of floating point type. Not all targets support
   7820 all types however.
   7821 
   7822 ::
   7823 
   7824       declare float     @llvm.fabs.f32(float  %Val)
   7825       declare double    @llvm.fabs.f64(double %Val)
   7826       declare x86_fp80  @llvm.fabs.f80(x86_fp80  %Val)
   7827       declare fp128     @llvm.fabs.f128(fp128 %Val)
   7828       declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128  %Val)
   7829 
   7830 Overview:
   7831 """""""""
   7832 
   7833 The '``llvm.fabs.*``' intrinsics return the absolute value of the
   7834 operand.
   7835 
   7836 Arguments:
   7837 """"""""""
   7838 
   7839 The argument and return value are floating point numbers of the same
   7840 type.
   7841 
   7842 Semantics:
   7843 """"""""""
   7844 
   7845 This function returns the same values as the libm ``fabs`` functions
   7846 would, and handles error conditions in the same way.
   7847 
   7848 '``llvm.copysign.*``' Intrinsic
   7849 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7850 
   7851 Syntax:
   7852 """""""
   7853 
   7854 This is an overloaded intrinsic. You can use ``llvm.copysign`` on any
   7855 floating point or vector of floating point type. Not all targets support
   7856 all types however.
   7857 
   7858 ::
   7859 
   7860       declare float     @llvm.copysign.f32(float  %Mag, float  %Sgn)
   7861       declare double    @llvm.copysign.f64(double %Mag, double %Sgn)
   7862       declare x86_fp80  @llvm.copysign.f80(x86_fp80  %Mag, x86_fp80  %Sgn)
   7863       declare fp128     @llvm.copysign.f128(fp128 %Mag, fp128 %Sgn)
   7864       declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128  %Mag, ppc_fp128  %Sgn)
   7865 
   7866 Overview:
   7867 """""""""
   7868 
   7869 The '``llvm.copysign.*``' intrinsics return a value with the magnitude of the
   7870 first operand and the sign of the second operand.
   7871 
   7872 Arguments:
   7873 """"""""""
   7874 
   7875 The arguments and return value are floating point numbers of the same
   7876 type.
   7877 
   7878 Semantics:
   7879 """"""""""
   7880 
   7881 This function returns the same values as the libm ``copysign``
   7882 functions would, and handles error conditions in the same way.
   7883 
   7884 '``llvm.floor.*``' Intrinsic
   7885 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7886 
   7887 Syntax:
   7888 """""""
   7889 
   7890 This is an overloaded intrinsic. You can use ``llvm.floor`` on any
   7891 floating point or vector of floating point type. Not all targets support
   7892 all types however.
   7893 
   7894 ::
   7895 
   7896       declare float     @llvm.floor.f32(float  %Val)
   7897       declare double    @llvm.floor.f64(double %Val)
   7898       declare x86_fp80  @llvm.floor.f80(x86_fp80  %Val)
   7899       declare fp128     @llvm.floor.f128(fp128 %Val)
   7900       declare ppc_fp128 @llvm.floor.ppcf128(ppc_fp128  %Val)
   7901 
   7902 Overview:
   7903 """""""""
   7904 
   7905 The '``llvm.floor.*``' intrinsics return the floor of the operand.
   7906 
   7907 Arguments:
   7908 """"""""""
   7909 
   7910 The argument and return value are floating point numbers of the same
   7911 type.
   7912 
   7913 Semantics:
   7914 """"""""""
   7915 
   7916 This function returns the same values as the libm ``floor`` functions
   7917 would, and handles error conditions in the same way.
   7918 
   7919 '``llvm.ceil.*``' Intrinsic
   7920 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7921 
   7922 Syntax:
   7923 """""""
   7924 
   7925 This is an overloaded intrinsic. You can use ``llvm.ceil`` on any
   7926 floating point or vector of floating point type. Not all targets support
   7927 all types however.
   7928 
   7929 ::
   7930 
   7931       declare float     @llvm.ceil.f32(float  %Val)
   7932       declare double    @llvm.ceil.f64(double %Val)
   7933       declare x86_fp80  @llvm.ceil.f80(x86_fp80  %Val)
   7934       declare fp128     @llvm.ceil.f128(fp128 %Val)
   7935       declare ppc_fp128 @llvm.ceil.ppcf128(ppc_fp128  %Val)
   7936 
   7937 Overview:
   7938 """""""""
   7939 
   7940 The '``llvm.ceil.*``' intrinsics return the ceiling of the operand.
   7941 
   7942 Arguments:
   7943 """"""""""
   7944 
   7945 The argument and return value are floating point numbers of the same
   7946 type.
   7947 
   7948 Semantics:
   7949 """"""""""
   7950 
   7951 This function returns the same values as the libm ``ceil`` functions
   7952 would, and handles error conditions in the same way.
   7953 
   7954 '``llvm.trunc.*``' Intrinsic
   7955 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7956 
   7957 Syntax:
   7958 """""""
   7959 
   7960 This is an overloaded intrinsic. You can use ``llvm.trunc`` on any
   7961 floating point or vector of floating point type. Not all targets support
   7962 all types however.
   7963 
   7964 ::
   7965 
   7966       declare float     @llvm.trunc.f32(float  %Val)
   7967       declare double    @llvm.trunc.f64(double %Val)
   7968       declare x86_fp80  @llvm.trunc.f80(x86_fp80  %Val)
   7969       declare fp128     @llvm.trunc.f128(fp128 %Val)
   7970       declare ppc_fp128 @llvm.trunc.ppcf128(ppc_fp128  %Val)
   7971 
   7972 Overview:
   7973 """""""""
   7974 
   7975 The '``llvm.trunc.*``' intrinsics returns the operand rounded to the
   7976 nearest integer not larger in magnitude than the operand.
   7977 
   7978 Arguments:
   7979 """"""""""
   7980 
   7981 The argument and return value are floating point numbers of the same
   7982 type.
   7983 
   7984 Semantics:
   7985 """"""""""
   7986 
   7987 This function returns the same values as the libm ``trunc`` functions
   7988 would, and handles error conditions in the same way.
   7989 
   7990 '``llvm.rint.*``' Intrinsic
   7991 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   7992 
   7993 Syntax:
   7994 """""""
   7995 
   7996 This is an overloaded intrinsic. You can use ``llvm.rint`` on any
   7997 floating point or vector of floating point type. Not all targets support
   7998 all types however.
   7999 
   8000 ::
   8001 
   8002       declare float     @llvm.rint.f32(float  %Val)
   8003       declare double    @llvm.rint.f64(double %Val)
   8004       declare x86_fp80  @llvm.rint.f80(x86_fp80  %Val)
   8005       declare fp128     @llvm.rint.f128(fp128 %Val)
   8006       declare ppc_fp128 @llvm.rint.ppcf128(ppc_fp128  %Val)
   8007 
   8008 Overview:
   8009 """""""""
   8010 
   8011 The '``llvm.rint.*``' intrinsics returns the operand rounded to the
   8012 nearest integer. It may raise an inexact floating-point exception if the
   8013 operand isn't an integer.
   8014 
   8015 Arguments:
   8016 """"""""""
   8017 
   8018 The argument and return value are floating point numbers of the same
   8019 type.
   8020 
   8021 Semantics:
   8022 """"""""""
   8023 
   8024 This function returns the same values as the libm ``rint`` functions
   8025 would, and handles error conditions in the same way.
   8026 
   8027 '``llvm.nearbyint.*``' Intrinsic
   8028 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8029 
   8030 Syntax:
   8031 """""""
   8032 
   8033 This is an overloaded intrinsic. You can use ``llvm.nearbyint`` on any
   8034 floating point or vector of floating point type. Not all targets support
   8035 all types however.
   8036 
   8037 ::
   8038 
   8039       declare float     @llvm.nearbyint.f32(float  %Val)
   8040       declare double    @llvm.nearbyint.f64(double %Val)
   8041       declare x86_fp80  @llvm.nearbyint.f80(x86_fp80  %Val)
   8042       declare fp128     @llvm.nearbyint.f128(fp128 %Val)
   8043       declare ppc_fp128 @llvm.nearbyint.ppcf128(ppc_fp128  %Val)
   8044 
   8045 Overview:
   8046 """""""""
   8047 
   8048 The '``llvm.nearbyint.*``' intrinsics returns the operand rounded to the
   8049 nearest integer.
   8050 
   8051 Arguments:
   8052 """"""""""
   8053 
   8054 The argument and return value are floating point numbers of the same
   8055 type.
   8056 
   8057 Semantics:
   8058 """"""""""
   8059 
   8060 This function returns the same values as the libm ``nearbyint``
   8061 functions would, and handles error conditions in the same way.
   8062 
   8063 '``llvm.round.*``' Intrinsic
   8064 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8065 
   8066 Syntax:
   8067 """""""
   8068 
   8069 This is an overloaded intrinsic. You can use ``llvm.round`` on any
   8070 floating point or vector of floating point type. Not all targets support
   8071 all types however.
   8072 
   8073 ::
   8074 
   8075       declare float     @llvm.round.f32(float  %Val)
   8076       declare double    @llvm.round.f64(double %Val)
   8077       declare x86_fp80  @llvm.round.f80(x86_fp80  %Val)
   8078       declare fp128     @llvm.round.f128(fp128 %Val)
   8079       declare ppc_fp128 @llvm.round.ppcf128(ppc_fp128  %Val)
   8080 
   8081 Overview:
   8082 """""""""
   8083 
   8084 The '``llvm.round.*``' intrinsics returns the operand rounded to the
   8085 nearest integer.
   8086 
   8087 Arguments:
   8088 """"""""""
   8089 
   8090 The argument and return value are floating point numbers of the same
   8091 type.
   8092 
   8093 Semantics:
   8094 """"""""""
   8095 
   8096 This function returns the same values as the libm ``round``
   8097 functions would, and handles error conditions in the same way.
   8098 
   8099 Bit Manipulation Intrinsics
   8100 ---------------------------
   8101 
   8102 LLVM provides intrinsics for a few important bit manipulation
   8103 operations. These allow efficient code generation for some algorithms.
   8104 
   8105 '``llvm.bswap.*``' Intrinsics
   8106 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8107 
   8108 Syntax:
   8109 """""""
   8110 
   8111 This is an overloaded intrinsic function. You can use bswap on any
   8112 integer type that is an even number of bytes (i.e. BitWidth % 16 == 0).
   8113 
   8114 ::
   8115 
   8116       declare i16 @llvm.bswap.i16(i16 <id>)
   8117       declare i32 @llvm.bswap.i32(i32 <id>)
   8118       declare i64 @llvm.bswap.i64(i64 <id>)
   8119 
   8120 Overview:
   8121 """""""""
   8122 
   8123 The '``llvm.bswap``' family of intrinsics is used to byte swap integer
   8124 values with an even number of bytes (positive multiple of 16 bits).
   8125 These are useful for performing operations on data that is not in the
   8126 target's native byte order.
   8127 
   8128 Semantics:
   8129 """"""""""
   8130 
   8131 The ``llvm.bswap.i16`` intrinsic returns an i16 value that has the high
   8132 and low byte of the input i16 swapped. Similarly, the ``llvm.bswap.i32``
   8133 intrinsic returns an i32 value that has the four bytes of the input i32
   8134 swapped, so that if the input bytes are numbered 0, 1, 2, 3 then the
   8135 returned i32 will have its bytes in 3, 2, 1, 0 order. The
   8136 ``llvm.bswap.i48``, ``llvm.bswap.i64`` and other intrinsics extend this
   8137 concept to additional even-byte lengths (6 bytes, 8 bytes and more,
   8138 respectively).
   8139 
   8140 '``llvm.ctpop.*``' Intrinsic
   8141 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8142 
   8143 Syntax:
   8144 """""""
   8145 
   8146 This is an overloaded intrinsic. You can use llvm.ctpop on any integer
   8147 bit width, or on any vector with integer elements. Not all targets
   8148 support all bit widths or vector types, however.
   8149 
   8150 ::
   8151 
   8152       declare i8 @llvm.ctpop.i8(i8  <src>)
   8153       declare i16 @llvm.ctpop.i16(i16 <src>)
   8154       declare i32 @llvm.ctpop.i32(i32 <src>)
   8155       declare i64 @llvm.ctpop.i64(i64 <src>)
   8156       declare i256 @llvm.ctpop.i256(i256 <src>)
   8157       declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32> <src>)
   8158 
   8159 Overview:
   8160 """""""""
   8161 
   8162 The '``llvm.ctpop``' family of intrinsics counts the number of bits set
   8163 in a value.
   8164 
   8165 Arguments:
   8166 """"""""""
   8167 
   8168 The only argument is the value to be counted. The argument may be of any
   8169 integer type, or a vector with integer elements. The return type must
   8170 match the argument type.
   8171 
   8172 Semantics:
   8173 """"""""""
   8174 
   8175 The '``llvm.ctpop``' intrinsic counts the 1's in a variable, or within
   8176 each element of a vector.
   8177 
   8178 '``llvm.ctlz.*``' Intrinsic
   8179 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8180 
   8181 Syntax:
   8182 """""""
   8183 
   8184 This is an overloaded intrinsic. You can use ``llvm.ctlz`` on any
   8185 integer bit width, or any vector whose elements are integers. Not all
   8186 targets support all bit widths or vector types, however.
   8187 
   8188 ::
   8189 
   8190       declare i8   @llvm.ctlz.i8  (i8   <src>, i1 <is_zero_undef>)
   8191       declare i16  @llvm.ctlz.i16 (i16  <src>, i1 <is_zero_undef>)
   8192       declare i32  @llvm.ctlz.i32 (i32  <src>, i1 <is_zero_undef>)
   8193       declare i64  @llvm.ctlz.i64 (i64  <src>, i1 <is_zero_undef>)
   8194       declare i256 @llvm.ctlz.i256(i256 <src>, i1 <is_zero_undef>)
   8195       declase <2 x i32> @llvm.ctlz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>)
   8196 
   8197 Overview:
   8198 """""""""
   8199 
   8200 The '``llvm.ctlz``' family of intrinsic functions counts the number of
   8201 leading zeros in a variable.
   8202 
   8203 Arguments:
   8204 """"""""""
   8205 
   8206 The first argument is the value to be counted. This argument may be of
   8207 any integer type, or a vectory with integer element type. The return
   8208 type must match the first argument type.
   8209 
   8210 The second argument must be a constant and is a flag to indicate whether
   8211 the intrinsic should ensure that a zero as the first argument produces a
   8212 defined result. Historically some architectures did not provide a
   8213 defined result for zero values as efficiently, and many algorithms are
   8214 now predicated on avoiding zero-value inputs.
   8215 
   8216 Semantics:
   8217 """"""""""
   8218 
   8219 The '``llvm.ctlz``' intrinsic counts the leading (most significant)
   8220 zeros in a variable, or within each element of the vector. If
   8221 ``src == 0`` then the result is the size in bits of the type of ``src``
   8222 if ``is_zero_undef == 0`` and ``undef`` otherwise. For example,
   8223 ``llvm.ctlz(i32 2) = 30``.
   8224 
   8225 '``llvm.cttz.*``' Intrinsic
   8226 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8227 
   8228 Syntax:
   8229 """""""
   8230 
   8231 This is an overloaded intrinsic. You can use ``llvm.cttz`` on any
   8232 integer bit width, or any vector of integer elements. Not all targets
   8233 support all bit widths or vector types, however.
   8234 
   8235 ::
   8236 
   8237       declare i8   @llvm.cttz.i8  (i8   <src>, i1 <is_zero_undef>)
   8238       declare i16  @llvm.cttz.i16 (i16  <src>, i1 <is_zero_undef>)
   8239       declare i32  @llvm.cttz.i32 (i32  <src>, i1 <is_zero_undef>)
   8240       declare i64  @llvm.cttz.i64 (i64  <src>, i1 <is_zero_undef>)
   8241       declare i256 @llvm.cttz.i256(i256 <src>, i1 <is_zero_undef>)
   8242       declase <2 x i32> @llvm.cttz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>)
   8243 
   8244 Overview:
   8245 """""""""
   8246 
   8247 The '``llvm.cttz``' family of intrinsic functions counts the number of
   8248 trailing zeros.
   8249 
   8250 Arguments:
   8251 """"""""""
   8252 
   8253 The first argument is the value to be counted. This argument may be of
   8254 any integer type, or a vectory with integer element type. The return
   8255 type must match the first argument type.
   8256 
   8257 The second argument must be a constant and is a flag to indicate whether
   8258 the intrinsic should ensure that a zero as the first argument produces a
   8259 defined result. Historically some architectures did not provide a
   8260 defined result for zero values as efficiently, and many algorithms are
   8261 now predicated on avoiding zero-value inputs.
   8262 
   8263 Semantics:
   8264 """"""""""
   8265 
   8266 The '``llvm.cttz``' intrinsic counts the trailing (least significant)
   8267 zeros in a variable, or within each element of a vector. If ``src == 0``
   8268 then the result is the size in bits of the type of ``src`` if
   8269 ``is_zero_undef == 0`` and ``undef`` otherwise. For example,
   8270 ``llvm.cttz(2) = 1``.
   8271 
   8272 Arithmetic with Overflow Intrinsics
   8273 -----------------------------------
   8274 
   8275 LLVM provides intrinsics for some arithmetic with overflow operations.
   8276 
   8277 '``llvm.sadd.with.overflow.*``' Intrinsics
   8278 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8279 
   8280 Syntax:
   8281 """""""
   8282 
   8283 This is an overloaded intrinsic. You can use ``llvm.sadd.with.overflow``
   8284 on any integer bit width.
   8285 
   8286 ::
   8287 
   8288       declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
   8289       declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
   8290       declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
   8291 
   8292 Overview:
   8293 """""""""
   8294 
   8295 The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
   8296 a signed addition of the two arguments, and indicate whether an overflow
   8297 occurred during the signed summation.
   8298 
   8299 Arguments:
   8300 """"""""""
   8301 
   8302 The arguments (%a and %b) and the first element of the result structure
   8303 may be of integer types of any bit width, but they must have the same
   8304 bit width. The second element of the result structure must be of type
   8305 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
   8306 addition.
   8307 
   8308 Semantics:
   8309 """"""""""
   8310 
   8311 The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
   8312 a signed addition of the two variables. They return a structure --- the
   8313 first element of which is the signed summation, and the second element
   8314 of which is a bit specifying if the signed summation resulted in an
   8315 overflow.
   8316 
   8317 Examples:
   8318 """""""""
   8319 
   8320 .. code-block:: llvm
   8321 
   8322       %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
   8323       %sum = extractvalue {i32, i1} %res, 0
   8324       %obit = extractvalue {i32, i1} %res, 1
   8325       br i1 %obit, label %overflow, label %normal
   8326 
   8327 '``llvm.uadd.with.overflow.*``' Intrinsics
   8328 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8329 
   8330 Syntax:
   8331 """""""
   8332 
   8333 This is an overloaded intrinsic. You can use ``llvm.uadd.with.overflow``
   8334 on any integer bit width.
   8335 
   8336 ::
   8337 
   8338       declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
   8339       declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
   8340       declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
   8341 
   8342 Overview:
   8343 """""""""
   8344 
   8345 The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
   8346 an unsigned addition of the two arguments, and indicate whether a carry
   8347 occurred during the unsigned summation.
   8348 
   8349 Arguments:
   8350 """"""""""
   8351 
   8352 The arguments (%a and %b) and the first element of the result structure
   8353 may be of integer types of any bit width, but they must have the same
   8354 bit width. The second element of the result structure must be of type
   8355 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
   8356 addition.
   8357 
   8358 Semantics:
   8359 """"""""""
   8360 
   8361 The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
   8362 an unsigned addition of the two arguments. They return a structure --- the
   8363 first element of which is the sum, and the second element of which is a
   8364 bit specifying if the unsigned summation resulted in a carry.
   8365 
   8366 Examples:
   8367 """""""""
   8368 
   8369 .. code-block:: llvm
   8370 
   8371       %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
   8372       %sum = extractvalue {i32, i1} %res, 0
   8373       %obit = extractvalue {i32, i1} %res, 1
   8374       br i1 %obit, label %carry, label %normal
   8375 
   8376 '``llvm.ssub.with.overflow.*``' Intrinsics
   8377 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8378 
   8379 Syntax:
   8380 """""""
   8381 
   8382 This is an overloaded intrinsic. You can use ``llvm.ssub.with.overflow``
   8383 on any integer bit width.
   8384 
   8385 ::
   8386 
   8387       declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
   8388       declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
   8389       declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
   8390 
   8391 Overview:
   8392 """""""""
   8393 
   8394 The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
   8395 a signed subtraction of the two arguments, and indicate whether an
   8396 overflow occurred during the signed subtraction.
   8397 
   8398 Arguments:
   8399 """"""""""
   8400 
   8401 The arguments (%a and %b) and the first element of the result structure
   8402 may be of integer types of any bit width, but they must have the same
   8403 bit width. The second element of the result structure must be of type
   8404 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
   8405 subtraction.
   8406 
   8407 Semantics:
   8408 """"""""""
   8409 
   8410 The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
   8411 a signed subtraction of the two arguments. They return a structure --- the
   8412 first element of which is the subtraction, and the second element of
   8413 which is a bit specifying if the signed subtraction resulted in an
   8414 overflow.
   8415 
   8416 Examples:
   8417 """""""""
   8418 
   8419 .. code-block:: llvm
   8420 
   8421       %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
   8422       %sum = extractvalue {i32, i1} %res, 0
   8423       %obit = extractvalue {i32, i1} %res, 1
   8424       br i1 %obit, label %overflow, label %normal
   8425 
   8426 '``llvm.usub.with.overflow.*``' Intrinsics
   8427 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8428 
   8429 Syntax:
   8430 """""""
   8431 
   8432 This is an overloaded intrinsic. You can use ``llvm.usub.with.overflow``
   8433 on any integer bit width.
   8434 
   8435 ::
   8436 
   8437       declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
   8438       declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
   8439       declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
   8440 
   8441 Overview:
   8442 """""""""
   8443 
   8444 The '``llvm.usub.with.overflow``' family of intrinsic functions perform
   8445 an unsigned subtraction of the two arguments, and indicate whether an
   8446 overflow occurred during the unsigned subtraction.
   8447 
   8448 Arguments:
   8449 """"""""""
   8450 
   8451 The arguments (%a and %b) and the first element of the result structure
   8452 may be of integer types of any bit width, but they must have the same
   8453 bit width. The second element of the result structure must be of type
   8454 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
   8455 subtraction.
   8456 
   8457 Semantics:
   8458 """"""""""
   8459 
   8460 The '``llvm.usub.with.overflow``' family of intrinsic functions perform
   8461 an unsigned subtraction of the two arguments. They return a structure ---
   8462 the first element of which is the subtraction, and the second element of
   8463 which is a bit specifying if the unsigned subtraction resulted in an
   8464 overflow.
   8465 
   8466 Examples:
   8467 """""""""
   8468 
   8469 .. code-block:: llvm
   8470 
   8471       %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
   8472       %sum = extractvalue {i32, i1} %res, 0
   8473       %obit = extractvalue {i32, i1} %res, 1
   8474       br i1 %obit, label %overflow, label %normal
   8475 
   8476 '``llvm.smul.with.overflow.*``' Intrinsics
   8477 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8478 
   8479 Syntax:
   8480 """""""
   8481 
   8482 This is an overloaded intrinsic. You can use ``llvm.smul.with.overflow``
   8483 on any integer bit width.
   8484 
   8485 ::
   8486 
   8487       declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
   8488       declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
   8489       declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
   8490 
   8491 Overview:
   8492 """""""""
   8493 
   8494 The '``llvm.smul.with.overflow``' family of intrinsic functions perform
   8495 a signed multiplication of the two arguments, and indicate whether an
   8496 overflow occurred during the signed multiplication.
   8497 
   8498 Arguments:
   8499 """"""""""
   8500 
   8501 The arguments (%a and %b) and the first element of the result structure
   8502 may be of integer types of any bit width, but they must have the same
   8503 bit width. The second element of the result structure must be of type
   8504 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
   8505 multiplication.
   8506 
   8507 Semantics:
   8508 """"""""""
   8509 
   8510 The '``llvm.smul.with.overflow``' family of intrinsic functions perform
   8511 a signed multiplication of the two arguments. They return a structure ---
   8512 the first element of which is the multiplication, and the second element
   8513 of which is a bit specifying if the signed multiplication resulted in an
   8514 overflow.
   8515 
   8516 Examples:
   8517 """""""""
   8518 
   8519 .. code-block:: llvm
   8520 
   8521       %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
   8522       %sum = extractvalue {i32, i1} %res, 0
   8523       %obit = extractvalue {i32, i1} %res, 1
   8524       br i1 %obit, label %overflow, label %normal
   8525 
   8526 '``llvm.umul.with.overflow.*``' Intrinsics
   8527 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8528 
   8529 Syntax:
   8530 """""""
   8531 
   8532 This is an overloaded intrinsic. You can use ``llvm.umul.with.overflow``
   8533 on any integer bit width.
   8534 
   8535 ::
   8536 
   8537       declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
   8538       declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
   8539       declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
   8540 
   8541 Overview:
   8542 """""""""
   8543 
   8544 The '``llvm.umul.with.overflow``' family of intrinsic functions perform
   8545 a unsigned multiplication of the two arguments, and indicate whether an
   8546 overflow occurred during the unsigned multiplication.
   8547 
   8548 Arguments:
   8549 """"""""""
   8550 
   8551 The arguments (%a and %b) and the first element of the result structure
   8552 may be of integer types of any bit width, but they must have the same
   8553 bit width. The second element of the result structure must be of type
   8554 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
   8555 multiplication.
   8556 
   8557 Semantics:
   8558 """"""""""
   8559 
   8560 The '``llvm.umul.with.overflow``' family of intrinsic functions perform
   8561 an unsigned multiplication of the two arguments. They return a structure ---
   8562 the first element of which is the multiplication, and the second
   8563 element of which is a bit specifying if the unsigned multiplication
   8564 resulted in an overflow.
   8565 
   8566 Examples:
   8567 """""""""
   8568 
   8569 .. code-block:: llvm
   8570 
   8571       %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
   8572       %sum = extractvalue {i32, i1} %res, 0
   8573       %obit = extractvalue {i32, i1} %res, 1
   8574       br i1 %obit, label %overflow, label %normal
   8575 
   8576 Specialised Arithmetic Intrinsics
   8577 ---------------------------------
   8578 
   8579 '``llvm.fmuladd.*``' Intrinsic
   8580 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8581 
   8582 Syntax:
   8583 """""""
   8584 
   8585 ::
   8586 
   8587       declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
   8588       declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
   8589 
   8590 Overview:
   8591 """""""""
   8592 
   8593 The '``llvm.fmuladd.*``' intrinsic functions represent multiply-add
   8594 expressions that can be fused if the code generator determines that (a) the
   8595 target instruction set has support for a fused operation, and (b) that the
   8596 fused operation is more efficient than the equivalent, separate pair of mul
   8597 and add instructions.
   8598 
   8599 Arguments:
   8600 """"""""""
   8601 
   8602 The '``llvm.fmuladd.*``' intrinsics each take three arguments: two
   8603 multiplicands, a and b, and an addend c.
   8604 
   8605 Semantics:
   8606 """"""""""
   8607 
   8608 The expression:
   8609 
   8610 ::
   8611 
   8612       %0 = call float @llvm.fmuladd.f32(%a, %b, %c)
   8613 
   8614 is equivalent to the expression a \* b + c, except that rounding will
   8615 not be performed between the multiplication and addition steps if the
   8616 code generator fuses the operations. Fusion is not guaranteed, even if
   8617 the target platform supports it. If a fused multiply-add is required the
   8618 corresponding llvm.fma.\* intrinsic function should be used
   8619 instead. This never sets errno, just as '``llvm.fma.*``'.
   8620 
   8621 Examples:
   8622 """""""""
   8623 
   8624 .. code-block:: llvm
   8625 
   8626       %r2 = call float @llvm.fmuladd.f32(float %a, float %b, float %c) ; yields float:r2 = (a * b) + c
   8627 
   8628 Half Precision Floating Point Intrinsics
   8629 ----------------------------------------
   8630 
   8631 For most target platforms, half precision floating point is a
   8632 storage-only format. This means that it is a dense encoding (in memory)
   8633 but does not support computation in the format.
   8634 
   8635 This means that code must first load the half-precision floating point
   8636 value as an i16, then convert it to float with
   8637 :ref:`llvm.convert.from.fp16 <int_convert_from_fp16>`. Computation can
   8638 then be performed on the float value (including extending to double
   8639 etc). To store the value back to memory, it is first converted to float
   8640 if needed, then converted to i16 with
   8641 :ref:`llvm.convert.to.fp16 <int_convert_to_fp16>`, then storing as an
   8642 i16 value.
   8643 
   8644 .. _int_convert_to_fp16:
   8645 
   8646 '``llvm.convert.to.fp16``' Intrinsic
   8647 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8648 
   8649 Syntax:
   8650 """""""
   8651 
   8652 ::
   8653 
   8654       declare i16 @llvm.convert.to.fp16(float %a)
   8655 
   8656 Overview:
   8657 """""""""
   8658 
   8659 The '``llvm.convert.to.fp16``' intrinsic function performs a conversion
   8660 from single precision floating point format to half precision floating
   8661 point format.
   8662 
   8663 Arguments:
   8664 """"""""""
   8665 
   8666 The intrinsic function contains single argument - the value to be
   8667 converted.
   8668 
   8669 Semantics:
   8670 """"""""""
   8671 
   8672 The '``llvm.convert.to.fp16``' intrinsic function performs a conversion
   8673 from single precision floating point format to half precision floating
   8674 point format. The return value is an ``i16`` which contains the
   8675 converted number.
   8676 
   8677 Examples:
   8678 """""""""
   8679 
   8680 .. code-block:: llvm
   8681 
   8682       %res = call i16 @llvm.convert.to.fp16(float %a)
   8683       store i16 %res, i16* @x, align 2
   8684 
   8685 .. _int_convert_from_fp16:
   8686 
   8687 '``llvm.convert.from.fp16``' Intrinsic
   8688 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8689 
   8690 Syntax:
   8691 """""""
   8692 
   8693 ::
   8694 
   8695       declare float @llvm.convert.from.fp16(i16 %a)
   8696 
   8697 Overview:
   8698 """""""""
   8699 
   8700 The '``llvm.convert.from.fp16``' intrinsic function performs a
   8701 conversion from half precision floating point format to single precision
   8702 floating point format.
   8703 
   8704 Arguments:
   8705 """"""""""
   8706 
   8707 The intrinsic function contains single argument - the value to be
   8708 converted.
   8709 
   8710 Semantics:
   8711 """"""""""
   8712 
   8713 The '``llvm.convert.from.fp16``' intrinsic function performs a
   8714 conversion from half single precision floating point format to single
   8715 precision floating point format. The input half-float value is
   8716 represented by an ``i16`` value.
   8717 
   8718 Examples:
   8719 """""""""
   8720 
   8721 .. code-block:: llvm
   8722 
   8723       %a = load i16* @x, align 2
   8724       %res = call float @llvm.convert.from.fp16(i16 %a)
   8725 
   8726 Debugger Intrinsics
   8727 -------------------
   8728 
   8729 The LLVM debugger intrinsics (which all start with ``llvm.dbg.``
   8730 prefix), are described in the `LLVM Source Level
   8731 Debugging <SourceLevelDebugging.html#format_common_intrinsics>`_
   8732 document.
   8733 
   8734 Exception Handling Intrinsics
   8735 -----------------------------
   8736 
   8737 The LLVM exception handling intrinsics (which all start with
   8738 ``llvm.eh.`` prefix), are described in the `LLVM Exception
   8739 Handling <ExceptionHandling.html#format_common_intrinsics>`_ document.
   8740 
   8741 .. _int_trampoline:
   8742 
   8743 Trampoline Intrinsics
   8744 ---------------------
   8745 
   8746 These intrinsics make it possible to excise one parameter, marked with
   8747 the :ref:`nest <nest>` attribute, from a function. The result is a
   8748 callable function pointer lacking the nest parameter - the caller does
   8749 not need to provide a value for it. Instead, the value to use is stored
   8750 in advance in a "trampoline", a block of memory usually allocated on the
   8751 stack, which also contains code to splice the nest value into the
   8752 argument list. This is used to implement the GCC nested function address
   8753 extension.
   8754 
   8755 For example, if the function is ``i32 f(i8* nest %c, i32 %x, i32 %y)``
   8756 then the resulting function pointer has signature ``i32 (i32, i32)*``.
   8757 It can be created as follows:
   8758 
   8759 .. code-block:: llvm
   8760 
   8761       %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
   8762       %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
   8763       call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8*, i32, i32)* @f to i8*), i8* %nval)
   8764       %p = call i8* @llvm.adjust.trampoline(i8* %tramp1)
   8765       %fp = bitcast i8* %p to i32 (i32, i32)*
   8766 
   8767 The call ``%val = call i32 %fp(i32 %x, i32 %y)`` is then equivalent to
   8768 ``%val = call i32 %f(i8* %nval, i32 %x, i32 %y)``.
   8769 
   8770 .. _int_it:
   8771 
   8772 '``llvm.init.trampoline``' Intrinsic
   8773 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8774 
   8775 Syntax:
   8776 """""""
   8777 
   8778 ::
   8779 
   8780       declare void @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <nval>)
   8781 
   8782 Overview:
   8783 """""""""
   8784 
   8785 This fills the memory pointed to by ``tramp`` with executable code,
   8786 turning it into a trampoline.
   8787 
   8788 Arguments:
   8789 """"""""""
   8790 
   8791 The ``llvm.init.trampoline`` intrinsic takes three arguments, all
   8792 pointers. The ``tramp`` argument must point to a sufficiently large and
   8793 sufficiently aligned block of memory; this memory is written to by the
   8794 intrinsic. Note that the size and the alignment are target-specific -
   8795 LLVM currently provides no portable way of determining them, so a
   8796 front-end that generates this intrinsic needs to have some
   8797 target-specific knowledge. The ``func`` argument must hold a function
   8798 bitcast to an ``i8*``.
   8799 
   8800 Semantics:
   8801 """"""""""
   8802 
   8803 The block of memory pointed to by ``tramp`` is filled with target
   8804 dependent code, turning it into a function. Then ``tramp`` needs to be
   8805 passed to :ref:`llvm.adjust.trampoline <int_at>` to get a pointer which can
   8806 be :ref:`bitcast (to a new function) and called <int_trampoline>`. The new
   8807 function's signature is the same as that of ``func`` with any arguments
   8808 marked with the ``nest`` attribute removed. At most one such ``nest``
   8809 argument is allowed, and it must be of pointer type. Calling the new
   8810 function is equivalent to calling ``func`` with the same argument list,
   8811 but with ``nval`` used for the missing ``nest`` argument. If, after
   8812 calling ``llvm.init.trampoline``, the memory pointed to by ``tramp`` is
   8813 modified, then the effect of any later call to the returned function
   8814 pointer is undefined.
   8815 
   8816 .. _int_at:
   8817 
   8818 '``llvm.adjust.trampoline``' Intrinsic
   8819 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8820 
   8821 Syntax:
   8822 """""""
   8823 
   8824 ::
   8825 
   8826       declare i8* @llvm.adjust.trampoline(i8* <tramp>)
   8827 
   8828 Overview:
   8829 """""""""
   8830 
   8831 This performs any required machine-specific adjustment to the address of
   8832 a trampoline (passed as ``tramp``).
   8833 
   8834 Arguments:
   8835 """"""""""
   8836 
   8837 ``tramp`` must point to a block of memory which already has trampoline
   8838 code filled in by a previous call to
   8839 :ref:`llvm.init.trampoline <int_it>`.
   8840 
   8841 Semantics:
   8842 """"""""""
   8843 
   8844 On some architectures the address of the code to be executed needs to be
   8845 different than the address where the trampoline is actually stored. This
   8846 intrinsic returns the executable address corresponding to ``tramp``
   8847 after performing the required machine specific adjustments. The pointer
   8848 returned can then be :ref:`bitcast and executed <int_trampoline>`.
   8849 
   8850 Memory Use Markers
   8851 ------------------
   8852 
   8853 This class of intrinsics provides information about the lifetime of
   8854 memory objects and ranges where variables are immutable.
   8855 
   8856 .. _int_lifestart:
   8857 
   8858 '``llvm.lifetime.start``' Intrinsic
   8859 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8860 
   8861 Syntax:
   8862 """""""
   8863 
   8864 ::
   8865 
   8866       declare void @llvm.lifetime.start(i64 <size>, i8* nocapture <ptr>)
   8867 
   8868 Overview:
   8869 """""""""
   8870 
   8871 The '``llvm.lifetime.start``' intrinsic specifies the start of a memory
   8872 object's lifetime.
   8873 
   8874 Arguments:
   8875 """"""""""
   8876 
   8877 The first argument is a constant integer representing the size of the
   8878 object, or -1 if it is variable sized. The second argument is a pointer
   8879 to the object.
   8880 
   8881 Semantics:
   8882 """"""""""
   8883 
   8884 This intrinsic indicates that before this point in the code, the value
   8885 of the memory pointed to by ``ptr`` is dead. This means that it is known
   8886 to never be used and has an undefined value. A load from the pointer
   8887 that precedes this intrinsic can be replaced with ``'undef'``.
   8888 
   8889 .. _int_lifeend:
   8890 
   8891 '``llvm.lifetime.end``' Intrinsic
   8892 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8893 
   8894 Syntax:
   8895 """""""
   8896 
   8897 ::
   8898 
   8899       declare void @llvm.lifetime.end(i64 <size>, i8* nocapture <ptr>)
   8900 
   8901 Overview:
   8902 """""""""
   8903 
   8904 The '``llvm.lifetime.end``' intrinsic specifies the end of a memory
   8905 object's lifetime.
   8906 
   8907 Arguments:
   8908 """"""""""
   8909 
   8910 The first argument is a constant integer representing the size of the
   8911 object, or -1 if it is variable sized. The second argument is a pointer
   8912 to the object.
   8913 
   8914 Semantics:
   8915 """"""""""
   8916 
   8917 This intrinsic indicates that after this point in the code, the value of
   8918 the memory pointed to by ``ptr`` is dead. This means that it is known to
   8919 never be used and has an undefined value. Any stores into the memory
   8920 object following this intrinsic may be removed as dead.
   8921 
   8922 '``llvm.invariant.start``' Intrinsic
   8923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8924 
   8925 Syntax:
   8926 """""""
   8927 
   8928 ::
   8929 
   8930       declare {}* @llvm.invariant.start(i64 <size>, i8* nocapture <ptr>)
   8931 
   8932 Overview:
   8933 """""""""
   8934 
   8935 The '``llvm.invariant.start``' intrinsic specifies that the contents of
   8936 a memory object will not change.
   8937 
   8938 Arguments:
   8939 """"""""""
   8940 
   8941 The first argument is a constant integer representing the size of the
   8942 object, or -1 if it is variable sized. The second argument is a pointer
   8943 to the object.
   8944 
   8945 Semantics:
   8946 """"""""""
   8947 
   8948 This intrinsic indicates that until an ``llvm.invariant.end`` that uses
   8949 the return value, the referenced memory location is constant and
   8950 unchanging.
   8951 
   8952 '``llvm.invariant.end``' Intrinsic
   8953 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8954 
   8955 Syntax:
   8956 """""""
   8957 
   8958 ::
   8959 
   8960       declare void @llvm.invariant.end({}* <start>, i64 <size>, i8* nocapture <ptr>)
   8961 
   8962 Overview:
   8963 """""""""
   8964 
   8965 The '``llvm.invariant.end``' intrinsic specifies that the contents of a
   8966 memory object are mutable.
   8967 
   8968 Arguments:
   8969 """"""""""
   8970 
   8971 The first argument is the matching ``llvm.invariant.start`` intrinsic.
   8972 The second argument is a constant integer representing the size of the
   8973 object, or -1 if it is variable sized and the third argument is a
   8974 pointer to the object.
   8975 
   8976 Semantics:
   8977 """"""""""
   8978 
   8979 This intrinsic indicates that the memory is mutable again.
   8980 
   8981 General Intrinsics
   8982 ------------------
   8983 
   8984 This class of intrinsics is designed to be generic and has no specific
   8985 purpose.
   8986 
   8987 '``llvm.var.annotation``' Intrinsic
   8988 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8989 
   8990 Syntax:
   8991 """""""
   8992 
   8993 ::
   8994 
   8995       declare void @llvm.var.annotation(i8* <val>, i8* <str>, i8* <str>, i32  <int>)
   8996 
   8997 Overview:
   8998 """""""""
   8999 
   9000 The '``llvm.var.annotation``' intrinsic.
   9001 
   9002 Arguments:
   9003 """"""""""
   9004 
   9005 The first argument is a pointer to a value, the second is a pointer to a
   9006 global string, the third is a pointer to a global string which is the
   9007 source file name, and the last argument is the line number.
   9008 
   9009 Semantics:
   9010 """"""""""
   9011 
   9012 This intrinsic allows annotation of local variables with arbitrary
   9013 strings. This can be useful for special purpose optimizations that want
   9014 to look for these annotations. These have no other defined use; they are
   9015 ignored by code generation and optimization.
   9016 
   9017 '``llvm.ptr.annotation.*``' Intrinsic
   9018 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9019 
   9020 Syntax:
   9021 """""""
   9022 
   9023 This is an overloaded intrinsic. You can use '``llvm.ptr.annotation``' on a
   9024 pointer to an integer of any width. *NOTE* you must specify an address space for
   9025 the pointer. The identifier for the default address space is the integer
   9026 '``0``'.
   9027 
   9028 ::
   9029 
   9030       declare i8*   @llvm.ptr.annotation.p<address space>i8(i8* <val>, i8* <str>, i8* <str>, i32  <int>)
   9031       declare i16*  @llvm.ptr.annotation.p<address space>i16(i16* <val>, i8* <str>, i8* <str>, i32  <int>)
   9032       declare i32*  @llvm.ptr.annotation.p<address space>i32(i32* <val>, i8* <str>, i8* <str>, i32  <int>)
   9033       declare i64*  @llvm.ptr.annotation.p<address space>i64(i64* <val>, i8* <str>, i8* <str>, i32  <int>)
   9034       declare i256* @llvm.ptr.annotation.p<address space>i256(i256* <val>, i8* <str>, i8* <str>, i32  <int>)
   9035 
   9036 Overview:
   9037 """""""""
   9038 
   9039 The '``llvm.ptr.annotation``' intrinsic.
   9040 
   9041 Arguments:
   9042 """"""""""
   9043 
   9044 The first argument is a pointer to an integer value of arbitrary bitwidth
   9045 (result of some expression), the second is a pointer to a global string, the
   9046 third is a pointer to a global string which is the source file name, and the
   9047 last argument is the line number. It returns the value of the first argument.
   9048 
   9049 Semantics:
   9050 """"""""""
   9051 
   9052 This intrinsic allows annotation of a pointer to an integer with arbitrary
   9053 strings. This can be useful for special purpose optimizations that want to look
   9054 for these annotations. These have no other defined use; they are ignored by code
   9055 generation and optimization.
   9056 
   9057 '``llvm.annotation.*``' Intrinsic
   9058 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9059 
   9060 Syntax:
   9061 """""""
   9062 
   9063 This is an overloaded intrinsic. You can use '``llvm.annotation``' on
   9064 any integer bit width.
   9065 
   9066 ::
   9067 
   9068       declare i8 @llvm.annotation.i8(i8 <val>, i8* <str>, i8* <str>, i32  <int>)
   9069       declare i16 @llvm.annotation.i16(i16 <val>, i8* <str>, i8* <str>, i32  <int>)
   9070       declare i32 @llvm.annotation.i32(i32 <val>, i8* <str>, i8* <str>, i32  <int>)
   9071       declare i64 @llvm.annotation.i64(i64 <val>, i8* <str>, i8* <str>, i32  <int>)
   9072       declare i256 @llvm.annotation.i256(i256 <val>, i8* <str>, i8* <str>, i32  <int>)
   9073 
   9074 Overview:
   9075 """""""""
   9076 
   9077 The '``llvm.annotation``' intrinsic.
   9078 
   9079 Arguments:
   9080 """"""""""
   9081 
   9082 The first argument is an integer value (result of some expression), the
   9083 second is a pointer to a global string, the third is a pointer to a
   9084 global string which is the source file name, and the last argument is
   9085 the line number. It returns the value of the first argument.
   9086 
   9087 Semantics:
   9088 """"""""""
   9089 
   9090 This intrinsic allows annotations to be put on arbitrary expressions
   9091 with arbitrary strings. This can be useful for special purpose
   9092 optimizations that want to look for these annotations. These have no
   9093 other defined use; they are ignored by code generation and optimization.
   9094 
   9095 '``llvm.trap``' Intrinsic
   9096 ^^^^^^^^^^^^^^^^^^^^^^^^^
   9097 
   9098 Syntax:
   9099 """""""
   9100 
   9101 ::
   9102 
   9103       declare void @llvm.trap() noreturn nounwind
   9104 
   9105 Overview:
   9106 """""""""
   9107 
   9108 The '``llvm.trap``' intrinsic.
   9109 
   9110 Arguments:
   9111 """"""""""
   9112 
   9113 None.
   9114 
   9115 Semantics:
   9116 """"""""""
   9117 
   9118 This intrinsic is lowered to the target dependent trap instruction. If
   9119 the target does not have a trap instruction, this intrinsic will be
   9120 lowered to a call of the ``abort()`` function.
   9121 
   9122 '``llvm.debugtrap``' Intrinsic
   9123 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9124 
   9125 Syntax:
   9126 """""""
   9127 
   9128 ::
   9129 
   9130       declare void @llvm.debugtrap() nounwind
   9131 
   9132 Overview:
   9133 """""""""
   9134 
   9135 The '``llvm.debugtrap``' intrinsic.
   9136 
   9137 Arguments:
   9138 """"""""""
   9139 
   9140 None.
   9141 
   9142 Semantics:
   9143 """"""""""
   9144 
   9145 This intrinsic is lowered to code which is intended to cause an
   9146 execution trap with the intention of requesting the attention of a
   9147 debugger.
   9148 
   9149 '``llvm.stackprotector``' Intrinsic
   9150 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9151 
   9152 Syntax:
   9153 """""""
   9154 
   9155 ::
   9156 
   9157       declare void @llvm.stackprotector(i8* <guard>, i8** <slot>)
   9158 
   9159 Overview:
   9160 """""""""
   9161 
   9162 The ``llvm.stackprotector`` intrinsic takes the ``guard`` and stores it
   9163 onto the stack at ``slot``. The stack slot is adjusted to ensure that it
   9164 is placed on the stack before local variables.
   9165 
   9166 Arguments:
   9167 """"""""""
   9168 
   9169 The ``llvm.stackprotector`` intrinsic requires two pointer arguments.
   9170 The first argument is the value loaded from the stack guard
   9171 ``@__stack_chk_guard``. The second variable is an ``alloca`` that has
   9172 enough space to hold the value of the guard.
   9173 
   9174 Semantics:
   9175 """"""""""
   9176 
   9177 This intrinsic causes the prologue/epilogue inserter to force the position of
   9178 the ``AllocaInst`` stack slot to be before local variables on the stack. This is
   9179 to ensure that if a local variable on the stack is overwritten, it will destroy
   9180 the value of the guard. When the function exits, the guard on the stack is
   9181 checked against the original guard by ``llvm.stackprotectorcheck``. If they are
   9182 different, then ``llvm.stackprotectorcheck`` causes the program to abort by
   9183 calling the ``__stack_chk_fail()`` function.
   9184 
   9185 '``llvm.stackprotectorcheck``' Intrinsic
   9186 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9187 
   9188 Syntax:
   9189 """""""
   9190 
   9191 ::
   9192 
   9193       declare void @llvm.stackprotectorcheck(i8** <guard>)
   9194 
   9195 Overview:
   9196 """""""""
   9197 
   9198 The ``llvm.stackprotectorcheck`` intrinsic compares ``guard`` against an already
   9199 created stack protector and if they are not equal calls the
   9200 ``__stack_chk_fail()`` function.
   9201 
   9202 Arguments:
   9203 """"""""""
   9204 
   9205 The ``llvm.stackprotectorcheck`` intrinsic requires one pointer argument, the
   9206 the variable ``@__stack_chk_guard``.
   9207 
   9208 Semantics:
   9209 """"""""""
   9210 
   9211 This intrinsic is provided to perform the stack protector check by comparing
   9212 ``guard`` with the stack slot created by ``llvm.stackprotector`` and if the
   9213 values do not match call the ``__stack_chk_fail()`` function.
   9214 
   9215 The reason to provide this as an IR level intrinsic instead of implementing it
   9216 via other IR operations is that in order to perform this operation at the IR
   9217 level without an intrinsic, one would need to create additional basic blocks to
   9218 handle the success/failure cases. This makes it difficult to stop the stack
   9219 protector check from disrupting sibling tail calls in Codegen. With this
   9220 intrinsic, we are able to generate the stack protector basic blocks late in
   9221 codegen after the tail call decision has occurred.
   9222 
   9223 '``llvm.objectsize``' Intrinsic
   9224 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9225 
   9226 Syntax:
   9227 """""""
   9228 
   9229 ::
   9230 
   9231       declare i32 @llvm.objectsize.i32(i8* <object>, i1 <min>)
   9232       declare i64 @llvm.objectsize.i64(i8* <object>, i1 <min>)
   9233 
   9234 Overview:
   9235 """""""""
   9236 
   9237 The ``llvm.objectsize`` intrinsic is designed to provide information to
   9238 the optimizers to determine at compile time whether a) an operation
   9239 (like memcpy) will overflow a buffer that corresponds to an object, or
   9240 b) that a runtime check for overflow isn't necessary. An object in this
   9241 context means an allocation of a specific class, structure, array, or
   9242 other object.
   9243 
   9244 Arguments:
   9245 """"""""""
   9246 
   9247 The ``llvm.objectsize`` intrinsic takes two arguments. The first
   9248 argument is a pointer to or into the ``object``. The second argument is
   9249 a boolean and determines whether ``llvm.objectsize`` returns 0 (if true)
   9250 or -1 (if false) when the object size is unknown. The second argument
   9251 only accepts constants.
   9252 
   9253 Semantics:
   9254 """"""""""
   9255 
   9256 The ``llvm.objectsize`` intrinsic is lowered to a constant representing
   9257 the size of the object concerned. If the size cannot be determined at
   9258 compile time, ``llvm.objectsize`` returns ``i32/i64 -1 or 0`` (depending
   9259 on the ``min`` argument).
   9260 
   9261 '``llvm.expect``' Intrinsic
   9262 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9263 
   9264 Syntax:
   9265 """""""
   9266 
   9267 This is an overloaded intrinsic. You can use ``llvm.expect`` on any
   9268 integer bit width.
   9269 
   9270 ::
   9271 
   9272       declare i1 @llvm.expect.i1(i1 <val>, i1 <expected_val>)
   9273       declare i32 @llvm.expect.i32(i32 <val>, i32 <expected_val>)
   9274       declare i64 @llvm.expect.i64(i64 <val>, i64 <expected_val>)
   9275 
   9276 Overview:
   9277 """""""""
   9278 
   9279 The ``llvm.expect`` intrinsic provides information about expected (the
   9280 most probable) value of ``val``, which can be used by optimizers.
   9281 
   9282 Arguments:
   9283 """"""""""
   9284 
   9285 The ``llvm.expect`` intrinsic takes two arguments. The first argument is
   9286 a value. The second argument is an expected value, this needs to be a
   9287 constant value, variables are not allowed.
   9288 
   9289 Semantics:
   9290 """"""""""
   9291 
   9292 This intrinsic is lowered to the ``val``.
   9293 
   9294 '``llvm.donothing``' Intrinsic
   9295 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9296 
   9297 Syntax:
   9298 """""""
   9299 
   9300 ::
   9301 
   9302       declare void @llvm.donothing() nounwind readnone
   9303 
   9304 Overview:
   9305 """""""""
   9306 
   9307 The ``llvm.donothing`` intrinsic doesn't perform any operation. It's the
   9308 only intrinsic that can be called with an invoke instruction.
   9309 
   9310 Arguments:
   9311 """"""""""
   9312 
   9313 None.
   9314 
   9315 Semantics:
   9316 """"""""""
   9317 
   9318 This intrinsic does nothing, and it's removed by optimizers and ignored
   9319 by codegen.
   9320 
   9321 Stack Map Intrinsics
   9322 --------------------
   9323 
   9324 LLVM provides experimental intrinsics to support runtime patching
   9325 mechanisms commonly desired in dynamic language JITs. These intrinsics
   9326 are described in :doc:`StackMaps`.
   9327