Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / docs / LangRef.rst
blob9c8e264eb9b9785d6bacbb94f24641f135d3c832
1 ==============================
2 LLVM Language Reference Manual
3 ==============================
5 .. contents::
6    :local:
7    :depth: 3
9 Abstract
10 ========
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.
19 Introduction
20 ============
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.
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.
43 .. _wellformed:
45 Well-Formedness
46 ---------------
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:
53 .. code-block:: llvm
55     %x = add i32 1, %x
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.
64 .. _identifiers:
66 Identifiers
67 ===========
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:
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 that 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. The ``"\01"`` prefix
83    can be used on global values to suppress mangling.
84 #. Unnamed values are represented as an unsigned numeric value with
85    their prefix. For example, ``%12``, ``@2``, ``%44``.
86 #. Constants, which are described in the section Constants_ below.
88 LLVM requires that values start with a prefix for two reasons: Compilers
89 don't need to worry about name clashes with reserved words, and the set
90 of reserved words may be expanded in the future without penalty.
91 Additionally, unnamed identifiers allow a compiler to quickly come up
92 with a temporary variable without having to avoid symbol table
93 conflicts.
95 Reserved words in LLVM are very similar to reserved words in other
96 languages. There are keywords for different opcodes ('``add``',
97 '``bitcast``', '``ret``', etc...), for primitive type names ('``void``',
98 '``i32``', etc...), and others. These reserved words cannot conflict
99 with variable names, because none of them start with a prefix character
100 (``'%'`` or ``'@'``).
102 Here is an example of LLVM code to multiply the integer variable
103 '``%X``' by 8:
105 The easy way:
107 .. code-block:: llvm
109     %result = mul i32 %X, 8
111 After strength reduction:
113 .. code-block:: llvm
115     %result = shl i32 %X, 3
117 And the hard way:
119 .. code-block:: llvm
121     %0 = add i32 %X, %X           ; yields i32:%0
122     %1 = add i32 %0, %0           ; yields i32:%1
123     %result = add i32 %1, %1
125 This last way of multiplying ``%X`` by 8 illustrates several important
126 lexical features of LLVM:
128 #. Comments are delimited with a '``;``' and go until the end of line.
129 #. Unnamed temporaries are created when the result of a computation is
130    not assigned to a named value.
131 #. Unnamed temporaries are numbered sequentially (using a per-function
132    incrementing counter, starting with 0). Note that basic blocks and unnamed
133    function parameters are included in this numbering. For example, if the
134    entry basic block is not given a label name and all function parameters are
135    named, then it will get number 0.
137 It also shows a convention that we follow in this document. When
138 demonstrating instructions, we will follow an instruction with a comment
139 that defines the type and name of value produced.
141 High Level Structure
142 ====================
144 Module Structure
145 ----------------
147 LLVM programs are composed of ``Module``'s, each of which is a
148 translation unit of the input programs. Each module consists of
149 functions, global variables, and symbol table entries. Modules may be
150 combined together with the LLVM linker, which merges function (and
151 global variable) definitions, resolves forward declarations, and merges
152 symbol table entries. Here is an example of the "hello world" module:
154 .. code-block:: llvm
156     ; Declare the string constant as a global constant.
157     @.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"
159     ; External declaration of the puts function
160     declare i32 @puts(ptr nocapture) nounwind
162     ; Definition of main function
163     define i32 @main() {
164       ; Call puts function to write out the string to stdout.
165       call i32 @puts(ptr @.str)
166       ret i32 0
167     }
169     ; Named metadata
170     !0 = !{i32 42, null, !"string"}
171     !foo = !{!0}
173 This example is made up of a :ref:`global variable <globalvars>` named
174 "``.str``", an external declaration of the "``puts``" function, a
175 :ref:`function definition <functionstructure>` for "``main``" and
176 :ref:`named metadata <namedmetadatastructure>` "``foo``".
178 In general, a module is made up of a list of global values (where both
179 functions and global variables are global values). Global values are
180 represented by a pointer to a memory location (in this case, a pointer
181 to an array of char, and a pointer to a function), and have one of the
182 following :ref:`linkage types <linkage>`.
184 .. _linkage:
186 Linkage Types
187 -------------
189 All Global Variables and Functions have one of the following types of
190 linkage:
192 ``private``
193     Global values with "``private``" linkage are only directly
194     accessible by objects in the current module. In particular, linking
195     code into a module with a private global value may cause the
196     private to be renamed as necessary to avoid collisions. Because the
197     symbol is private to the module, all references can be updated. This
198     doesn't show up in any symbol table in the object file.
199 ``internal``
200     Similar to private, but the value shows as a local symbol
201     (``STB_LOCAL`` in the case of ELF) in the object file. This
202     corresponds to the notion of the '``static``' keyword in C.
203 ``available_externally``
204     Globals with "``available_externally``" linkage are never emitted into
205     the object file corresponding to the LLVM module. From the linker's
206     perspective, an ``available_externally`` global is equivalent to
207     an external declaration. They exist to allow inlining and other
208     optimizations to take place given knowledge of the definition of the
209     global, which is known to be somewhere outside the module. Globals
210     with ``available_externally`` linkage are allowed to be discarded at
211     will, and allow inlining and other optimizations. This linkage type is
212     only allowed on definitions, 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.
241 .. _linkage_appending:
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.
251     Unfortunately this doesn't correspond to any feature in .o files, so it
252     can only be used for variables like ``llvm.global_ctors`` which llvm
253     interprets specially.
255 ``extern_weak``
256     The semantics of this linkage follow the ELF object file model: the
257     symbol is weak until linked, if not linked, the symbol becomes null
258     instead of being an undefined reference.
259 ``linkonce_odr``, ``weak_odr``
260     Some languages allow differing globals to be merged, such as two
261     functions with different semantics. Other languages, such as
262     ``C++``, ensure that only equivalent globals are ever merged (the
263     "one definition rule" --- "ODR"). Such languages can use the
264     ``linkonce_odr`` and ``weak_odr`` linkage types to indicate that the
265     global will only be merged with equivalent globals. These linkage
266     types are otherwise the same as their non-``odr`` versions.
267 ``external``
268     If none of the above identifiers are used, the global is externally
269     visible, meaning that it participates in linkage and can be used to
270     resolve external symbol references.
272 It is illegal for a global variable or function *declaration* to have any
273 linkage type other than ``external`` or ``extern_weak``.
275 .. _callingconv:
277 Calling Conventions
278 -------------------
280 LLVM :ref:`functions <functionstructure>`, :ref:`calls <i_call>` and
281 :ref:`invokes <i_invoke>` can all have an optional calling convention
282 specified for the call. The calling convention of any pair of dynamic
283 caller/callee must match, or the behavior of the program is undefined.
284 The following calling conventions are supported by LLVM, and more may be
285 added in the future:
287 "``ccc``" - The C calling convention
288     This calling convention (the default if no other calling convention
289     is specified) matches the target C calling conventions. This calling
290     convention supports varargs function calls and tolerates some
291     mismatch in the declared prototype and implemented declaration of
292     the function (as does normal C).
293 "``fastcc``" - The fast calling convention
294     This calling convention attempts to make calls as fast as possible
295     (e.g. by passing things in registers). This calling convention
296     allows the target to use whatever tricks it wants to produce fast
297     code for the target, without having to conform to an externally
298     specified ABI (Application Binary Interface). `Tail calls can only
299     be optimized when this, the tailcc, the GHC or the HiPE convention is
300     used. <CodeGenerator.html#tail-call-optimization>`_ This calling
301     convention does not support varargs and requires the prototype of all
302     callees to exactly match the prototype of the function definition.
303 "``coldcc``" - The cold calling convention
304     This calling convention attempts to make code in the caller as
305     efficient as possible under the assumption that the call is not
306     commonly executed. As such, these calls often preserve all registers
307     so that the call does not break any live ranges in the caller side.
308     This calling convention does not support varargs and requires the
309     prototype of all callees to exactly match the prototype of the
310     function definition. Furthermore the inliner doesn't consider such function
311     calls for inlining.
312 "``ghccc``" - GHC convention
313     This calling convention has been implemented specifically for use by
314     the `Glasgow Haskell Compiler (GHC) <http://www.haskell.org/ghc>`_.
315     It passes everything in registers, going to extremes to achieve this
316     by disabling callee save registers. This calling convention should
317     not be used lightly but only for specific situations such as an
318     alternative to the *register pinning* performance technique often
319     used when implementing functional programming languages. At the
320     moment only X86 supports this convention and it has the following
321     limitations:
323     -  On *X86-32* only supports up to 4 bit type parameters. No
324        floating-point types are supported.
325     -  On *X86-64* only supports up to 10 bit type parameters and 6
326        floating-point parameters.
328     This calling convention supports `tail call
329     optimization <CodeGenerator.html#tail-call-optimization>`_ but requires
330     both the caller and callee are using it.
331 "``cc 11``" - The HiPE calling convention
332     This calling convention has been implemented specifically for use by
333     the `High-Performance Erlang
334     (HiPE) <http://www.it.uu.se/research/group/hipe/>`_ compiler, *the*
335     native code compiler of the `Ericsson's Open Source Erlang/OTP
336     system <http://www.erlang.org/download.shtml>`_. It uses more
337     registers for argument passing than the ordinary C calling
338     convention and defines no callee-saved registers. The calling
339     convention properly supports `tail call
340     optimization <CodeGenerator.html#tail-call-optimization>`_ but requires
341     that both the caller and the callee use it. It uses a *register pinning*
342     mechanism, similar to GHC's convention, for keeping frequently
343     accessed runtime components pinned to specific hardware registers.
344     At the moment only X86 supports this convention (both 32 and 64
345     bit).
346 "``webkit_jscc``" - WebKit's JavaScript calling convention
347     This calling convention has been implemented for `WebKit FTL JIT
348     <https://trac.webkit.org/wiki/FTLJIT>`_. It passes arguments on the
349     stack right to left (as cdecl does), and returns a value in the
350     platform's customary return register.
351 "``anyregcc``" - Dynamic calling convention for code patching
352     This is a special convention that supports patching an arbitrary code
353     sequence in place of a call site. This convention forces the call
354     arguments into registers but allows them to be dynamically
355     allocated. This can currently only be used with calls to
356     llvm.experimental.patchpoint because only this intrinsic records
357     the location of its arguments in a side table. See :doc:`StackMaps`.
358 "``preserve_mostcc``" - The `PreserveMost` calling convention
359     This calling convention attempts to make the code in the caller as
360     unintrusive as possible. This convention behaves identically to the `C`
361     calling convention on how arguments and return values are passed, but it
362     uses a different set of caller/callee-saved registers. This alleviates the
363     burden of saving and recovering a large register set before and after the
364     call in the caller. If the arguments are passed in callee-saved registers,
365     then they will be preserved by the callee across the call. This doesn't
366     apply for values returned in callee-saved registers.
368     - On X86-64 the callee preserves all general purpose registers, except for
369       R11 and return registers, if any. R11 can be used as a scratch register.
370       Floating-point registers (XMMs/YMMs) are not preserved and need to be
371       saved by the caller.
373     - On AArch64 the callee preserve all general purpose registers, except X0-X8
374       and X16-X18.
376     The idea behind this convention is to support calls to runtime functions
377     that have a hot path and a cold path. The hot path is usually a small piece
378     of code that doesn't use many registers. The cold path might need to call out to
379     another function and therefore only needs to preserve the caller-saved
380     registers, which haven't already been saved by the caller. The
381     `PreserveMost` calling convention is very similar to the `cold` calling
382     convention in terms of caller/callee-saved registers, but they are used for
383     different types of function calls. `coldcc` is for function calls that are
384     rarely executed, whereas `preserve_mostcc` function calls are intended to be
385     on the hot path and definitely executed a lot. Furthermore `preserve_mostcc`
386     doesn't prevent the inliner from inlining the function call.
388     This calling convention will be used by a future version of the ObjectiveC
389     runtime and should therefore still be considered experimental at this time.
390     Although this convention was created to optimize certain runtime calls to
391     the ObjectiveC runtime, it is not limited to this runtime and might be used
392     by other runtimes in the future too. The current implementation only
393     supports X86-64, but the intention is to support more architectures in the
394     future.
395 "``preserve_allcc``" - The `PreserveAll` calling convention
396     This calling convention attempts to make the code in the caller even less
397     intrusive than the `PreserveMost` calling convention. This calling
398     convention also behaves identical to the `C` calling convention on how
399     arguments and return values are passed, but it uses a different set of
400     caller/callee-saved registers. This removes the burden of saving and
401     recovering a large register set before and after the call in the caller. If
402     the arguments are passed in callee-saved registers, then they will be
403     preserved by the callee across the call. This doesn't apply for values
404     returned in callee-saved registers.
406     - On X86-64 the callee preserves all general purpose registers, except for
407       R11. R11 can be used as a scratch register. Furthermore it also preserves
408       all floating-point registers (XMMs/YMMs).
410     - On AArch64 the callee preserve all general purpose registers, except X0-X8
411       and X16-X18. Furthermore it also preserves lower 128 bits of V8-V31 SIMD -
412       floating point registers.
414     The idea behind this convention is to support calls to runtime functions
415     that don't need to call out to any other functions.
417     This calling convention, like the `PreserveMost` calling convention, will be
418     used by a future version of the ObjectiveC runtime and should be considered
419     experimental at this time.
420 "``cxx_fast_tlscc``" - The `CXX_FAST_TLS` calling convention for access functions
421     Clang generates an access function to access C++-style TLS. The access
422     function generally has an entry block, an exit block and an initialization
423     block that is run at the first time. The entry and exit blocks can access
424     a few TLS IR variables, each access will be lowered to a platform-specific
425     sequence.
427     This calling convention aims to minimize overhead in the caller by
428     preserving as many registers as possible (all the registers that are
429     preserved on the fast path, composed of the entry and exit blocks).
431     This calling convention behaves identical to the `C` calling convention on
432     how arguments and return values are passed, but it uses a different set of
433     caller/callee-saved registers.
435     Given that each platform has its own lowering sequence, hence its own set
436     of preserved registers, we can't use the existing `PreserveMost`.
438     - On X86-64 the callee preserves all general purpose registers, except for
439       RDI and RAX.
440 "``tailcc``" - Tail callable calling convention
441     This calling convention ensures that calls in tail position will always be
442     tail call optimized. This calling convention is equivalent to fastcc,
443     except for an additional guarantee that tail calls will be produced
444     whenever possible. `Tail calls can only be optimized when this, the fastcc,
445     the GHC or the HiPE convention is used. <CodeGenerator.html#tail-call-optimization>`_
446     This calling convention does not support varargs and requires the prototype of
447     all callees to exactly match the prototype of the function definition.
448 "``swiftcc``" - This calling convention is used for Swift language.
449     - On X86-64 RCX and R8 are available for additional integer returns, and
450       XMM2 and XMM3 are available for additional FP/vector returns.
451     - On iOS platforms, we use AAPCS-VFP calling convention.
452 "``swifttailcc``"
453     This calling convention is like ``swiftcc`` in most respects, but also the
454     callee pops the argument area of the stack so that mandatory tail calls are
455     possible as in ``tailcc``.
456 "``cfguard_checkcc``" - Windows Control Flow Guard (Check mechanism)
457     This calling convention is used for the Control Flow Guard check function,
458     calls to which can be inserted before indirect calls to check that the call
459     target is a valid function address. The check function has no return value,
460     but it will trigger an OS-level error if the address is not a valid target.
461     The set of registers preserved by the check function, and the register
462     containing the target address are architecture-specific.
464     - On X86 the target address is passed in ECX.
465     - On ARM the target address is passed in R0.
466     - On AArch64 the target address is passed in X15.
467 "``cc <n>``" - Numbered convention
468     Any calling convention may be specified by number, allowing
469     target-specific calling conventions to be used. Target specific
470     calling conventions start at 64.
472 More calling conventions can be added/defined on an as-needed basis, to
473 support Pascal conventions or any other well-known target-independent
474 convention.
476 .. _visibilitystyles:
478 Visibility Styles
479 -----------------
481 All Global Variables and Functions have one of the following visibility
482 styles:
484 "``default``" - Default style
485     On targets that use the ELF object file format, default visibility
486     means that the declaration is visible to other modules and, in
487     shared libraries, means that the declared entity may be overridden.
488     On Darwin, default visibility means that the declaration is visible
489     to other modules. On XCOFF, default visibility means no explicit
490     visibility bit will be set and whether the symbol is visible
491     (i.e "exported") to other modules depends primarily on export lists
492     provided to the linker. Default visibility corresponds to "external
493     linkage" in the language.
494 "``hidden``" - Hidden style
495     Two declarations of an object with hidden visibility refer to the
496     same object if they are in the same shared object. Usually, hidden
497     visibility indicates that the symbol will not be placed into the
498     dynamic symbol table, so no other module (executable or shared
499     library) can reference it directly.
500 "``protected``" - Protected style
501     On ELF, protected visibility indicates that the symbol will be
502     placed in the dynamic symbol table, but that references within the
503     defining module will bind to the local symbol. That is, the symbol
504     cannot be overridden by another module.
506 A symbol with ``internal`` or ``private`` linkage must have ``default``
507 visibility.
509 .. _dllstorageclass:
511 DLL Storage Classes
512 -------------------
514 All Global Variables, Functions and Aliases can have one of the following
515 DLL storage class:
517 ``dllimport``
518     "``dllimport``" causes the compiler to reference a function or variable via
519     a global pointer to a pointer that is set up by the DLL exporting the
520     symbol. On Microsoft Windows targets, the pointer name is formed by
521     combining ``__imp_`` and the function or variable name.
522 ``dllexport``
523     On Microsoft Windows targets, "``dllexport``" causes the compiler to provide
524     a global pointer to a pointer in a DLL, so that it can be referenced with the
525     ``dllimport`` attribute. the pointer name is formed by combining ``__imp_``
526     and the function or variable name. On XCOFF targets, ``dllexport`` indicates
527     that the symbol will be made visible to other modules using "exported"
528     visibility and thus placed by the linker in the loader section symbol table.
529     Since this storage class exists for defining a dll interface, the compiler,
530     assembler and linker know it is externally referenced and must refrain from
531     deleting the symbol.
533 A symbol with ``internal`` or ``private`` linkage cannot have a DLL storage
534 class.
536 .. _tls_model:
538 Thread Local Storage Models
539 ---------------------------
541 A variable may be defined as ``thread_local``, which means that it will
542 not be shared by threads (each thread will have a separated copy of the
543 variable). Not all targets support thread-local variables. Optionally, a
544 TLS model may be specified:
546 ``localdynamic``
547     For variables that are only used within the current shared library.
548 ``initialexec``
549     For variables in modules that will not be loaded dynamically.
550 ``localexec``
551     For variables defined in the executable and only used within it.
553 If no explicit model is given, the "general dynamic" model is used.
555 The models correspond to the ELF TLS models; see `ELF Handling For
556 Thread-Local Storage <http://people.redhat.com/drepper/tls.pdf>`_ for
557 more information on under which circumstances the different models may
558 be used. The target may choose a different TLS model if the specified
559 model is not supported, or if a better choice of model can be made.
561 A model can also be specified in an alias, but then it only governs how
562 the alias is accessed. It will not have any effect in the aliasee.
564 For platforms without linker support of ELF TLS model, the -femulated-tls
565 flag can be used to generate GCC compatible emulated TLS code.
567 .. _runtime_preemption_model:
569 Runtime Preemption Specifiers
570 -----------------------------
572 Global variables, functions and aliases may have an optional runtime preemption
573 specifier. If a preemption specifier isn't given explicitly, then a
574 symbol is assumed to be ``dso_preemptable``.
576 ``dso_preemptable``
577     Indicates that the function or variable may be replaced by a symbol from
578     outside the linkage unit at runtime.
580 ``dso_local``
581     The compiler may assume that a function or variable marked as ``dso_local``
582     will resolve to a symbol within the same linkage unit. Direct access will
583     be generated even if the definition is not within this compilation unit.
585 .. _namedtypes:
587 Structure Types
588 ---------------
590 LLVM IR allows you to specify both "identified" and "literal" :ref:`structure
591 types <t_struct>`. Literal types are uniqued structurally, but identified types
592 are never uniqued. An :ref:`opaque structural type <t_opaque>` can also be used
593 to forward declare a type that is not yet available.
595 An example of an identified structure specification is:
597 .. code-block:: llvm
599     %mytype = type { %mytype*, i32 }
601 Prior to the LLVM 3.0 release, identified types were structurally uniqued. Only
602 literal types are uniqued in recent versions of LLVM.
604 .. _nointptrtype:
606 Non-Integral Pointer Type
607 -------------------------
609 Note: non-integral pointer types are a work in progress, and they should be
610 considered experimental at this time.
612 LLVM IR optionally allows the frontend to denote pointers in certain address
613 spaces as "non-integral" via the :ref:`datalayout string<langref_datalayout>`.
614 Non-integral pointer types represent pointers that have an *unspecified* bitwise
615 representation; that is, the integral representation may be target dependent or
616 unstable (not backed by a fixed integer).
618 ``inttoptr`` and ``ptrtoint`` instructions have the same semantics as for
619 integral (i.e. normal) pointers in that they convert integers to and from
620 corresponding pointer types, but there are additional implications to be
621 aware of.  Because the bit-representation of a non-integral pointer may
622 not be stable, two identical casts of the same operand may or may not
623 return the same value.  Said differently, the conversion to or from the
624 non-integral type depends on environmental state in an implementation
625 defined manner.
627 If the frontend wishes to observe a *particular* value following a cast, the
628 generated IR must fence with the underlying environment in an implementation
629 defined manner. (In practice, this tends to require ``noinline`` routines for
630 such operations.)
632 From the perspective of the optimizer, ``inttoptr`` and ``ptrtoint`` for
633 non-integral types are analogous to ones on integral types with one
634 key exception: the optimizer may not, in general, insert new dynamic
635 occurrences of such casts.  If a new cast is inserted, the optimizer would
636 need to either ensure that a) all possible values are valid, or b)
637 appropriate fencing is inserted.  Since the appropriate fencing is
638 implementation defined, the optimizer can't do the latter.  The former is
639 challenging as many commonly expected properties, such as
640 ``ptrtoint(v)-ptrtoint(v) == 0``, don't hold for non-integral types.
642 .. _globalvars:
644 Global Variables
645 ----------------
647 Global variables define regions of memory allocated at compilation time
648 instead of run-time.
650 Global variable definitions must be initialized.
652 Global variables in other translation units can also be declared, in which
653 case they don't have an initializer.
655 Global variables can optionally specify a :ref:`linkage type <linkage>`.
657 Either global variable definitions or declarations may have an explicit section
658 to be placed in and may have an optional explicit alignment specified. If there
659 is a mismatch between the explicit or inferred section information for the
660 variable declaration and its definition the resulting behavior is undefined.
662 A variable may be defined as a global ``constant``, which indicates that
663 the contents of the variable will **never** be modified (enabling better
664 optimization, allowing the global data to be placed in the read-only
665 section of an executable, etc). Note that variables that need runtime
666 initialization cannot be marked ``constant`` as there is a store to the
667 variable.
669 LLVM explicitly allows *declarations* of global variables to be marked
670 constant, even if the final definition of the global is not. This
671 capability can be used to enable slightly better optimization of the
672 program, but requires the language definition to guarantee that
673 optimizations based on the 'constantness' are valid for the translation
674 units that do not include the definition.
676 As SSA values, global variables define pointer values that are in scope
677 (i.e. they dominate) all basic blocks in the program. Global variables
678 always define a pointer to their "content" type because they describe a
679 region of memory, and all memory objects in LLVM are accessed through
680 pointers.
682 Global variables can be marked with ``unnamed_addr`` which indicates
683 that the address is not significant, only the content. Constants marked
684 like this can be merged with other constants if they have the same
685 initializer. Note that a constant with significant address *can* be
686 merged with a ``unnamed_addr`` constant, the result being a constant
687 whose address is significant.
689 If the ``local_unnamed_addr`` attribute is given, the address is known to
690 not be significant within the module.
692 A global variable may be declared to reside in a target-specific
693 numbered address space. For targets that support them, address spaces
694 may affect how optimizations are performed and/or what target
695 instructions are used to access the variable. The default address space
696 is zero. The address space qualifier must precede any other attributes.
698 LLVM allows an explicit section to be specified for globals. If the
699 target supports it, it will emit globals to the section specified.
700 Additionally, the global can placed in a comdat if the target has the necessary
701 support.
703 External declarations may have an explicit section specified. Section
704 information is retained in LLVM IR for targets that make use of this
705 information. Attaching section information to an external declaration is an
706 assertion that its definition is located in the specified section. If the
707 definition is located in a different section, the behavior is undefined.
709 By default, global initializers are optimized by assuming that global
710 variables defined within the module are not modified from their
711 initial values before the start of the global initializer. This is
712 true even for variables potentially accessible from outside the
713 module, including those with external linkage or appearing in
714 ``@llvm.used`` or dllexported variables. This assumption may be suppressed
715 by marking the variable with ``externally_initialized``.
717 An explicit alignment may be specified for a global, which must be a
718 power of 2. If not present, or if the alignment is set to zero, the
719 alignment of the global is set by the target to whatever it feels
720 convenient. If an explicit alignment is specified, the global is forced
721 to have exactly that alignment. Targets and optimizers are not allowed
722 to over-align the global if the global has an assigned section. In this
723 case, the extra alignment could be observable: for example, code could
724 assume that the globals are densely packed in their section and try to
725 iterate over them as an array, alignment padding would break this
726 iteration. For TLS variables, the module flag ``MaxTLSAlign``, if present,
727 limits the alignment to the given value. Optimizers are not allowed to
728 impose a stronger alignment on these variables. The maximum alignment
729 is ``1 << 32``.
731 For global variable declarations, as well as definitions that may be
732 replaced at link time (``linkonce``, ``weak``, ``extern_weak`` and ``common``
733 linkage types), the allocation size and alignment of the definition it resolves
734 to must be greater than or equal to that of the declaration or replaceable
735 definition, otherwise the behavior is undefined.
737 Globals can also have a :ref:`DLL storage class <dllstorageclass>`,
738 an optional :ref:`runtime preemption specifier <runtime_preemption_model>`,
739 an optional :ref:`global attributes <glattrs>` and
740 an optional list of attached :ref:`metadata <metadata>`.
742 Variables and aliases can have a
743 :ref:`Thread Local Storage Model <tls_model>`.
745 Globals cannot be or contain :ref:`Scalable vectors <t_vector>` because their
746 size is unknown at compile time. They are allowed in structs to facilitate
747 intrinsics returning multiple values. Generally, structs containing scalable
748 vectors are not considered "sized" and cannot be used in loads, stores, allocas,
749 or GEPs. The only exception to this rule is for structs that contain scalable
750 vectors of the same type (e.g. ``{<vscale x 2 x i32>, <vscale x 2 x i32>}``
751 contains the same type while ``{<vscale x 2 x i32>, <vscale x 2 x i64>}``
752 doesn't). These kinds of structs (we may call them homogeneous scalable vector
753 structs) are considered sized and can be used in loads, stores, allocas, but
754 not GEPs.
756 Syntax::
758       @<GlobalVarName> = [Linkage] [PreemptionSpecifier] [Visibility]
759                          [DLLStorageClass] [ThreadLocal]
760                          [(unnamed_addr|local_unnamed_addr)] [AddrSpace]
761                          [ExternallyInitialized]
762                          <global | constant> <Type> [<InitializerConstant>]
763                          [, section "name"] [, partition "name"]
764                          [, comdat [($name)]] [, align <Alignment>]
765                          [, no_sanitize_address] [, no_sanitize_hwaddress]
766                          [, sanitize_address_dyninit] [, sanitize_memtag]
767                          (, !name !N)*
769 For example, the following defines a global in a numbered address space
770 with an initializer, section, and alignment:
772 .. code-block:: llvm
774     @G = addrspace(5) constant float 1.0, section "foo", align 4
776 The following example just declares a global variable
778 .. code-block:: llvm
780    @G = external global i32
782 The following example defines a thread-local global with the
783 ``initialexec`` TLS model:
785 .. code-block:: llvm
787     @G = thread_local(initialexec) global i32 0, align 4
789 .. _functionstructure:
791 Functions
792 ---------
794 LLVM function definitions consist of the "``define``" keyword, an
795 optional :ref:`linkage type <linkage>`, an optional :ref:`runtime preemption
796 specifier <runtime_preemption_model>`,  an optional :ref:`visibility
797 style <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`,
798 an optional :ref:`calling convention <callingconv>`,
799 an optional ``unnamed_addr`` attribute, a return type, an optional
800 :ref:`parameter attribute <paramattrs>` for the return type, a function
801 name, a (possibly empty) argument list (each with optional :ref:`parameter
802 attributes <paramattrs>`), optional :ref:`function attributes <fnattrs>`,
803 an optional address space, an optional section, an optional partition,
804 an optional alignment, an optional :ref:`comdat <langref_comdats>`,
805 an optional :ref:`garbage collector name <gc>`, an optional :ref:`prefix <prefixdata>`,
806 an optional :ref:`prologue <prologuedata>`,
807 an optional :ref:`personality <personalityfn>`,
808 an optional list of attached :ref:`metadata <metadata>`,
809 an opening curly brace, a list of basic blocks, and a closing curly brace.
811 Syntax::
813     define [linkage] [PreemptionSpecifier] [visibility] [DLLStorageClass]
814            [cconv] [ret attrs]
815            <ResultType> @<FunctionName> ([argument list])
816            [(unnamed_addr|local_unnamed_addr)] [AddrSpace] [fn Attrs]
817            [section "name"] [partition "name"] [comdat [($name)]] [align N]
818            [gc] [prefix Constant] [prologue Constant] [personality Constant]
819            (!name !N)* { ... }
821 The argument list is a comma separated sequence of arguments where each
822 argument is of the following form:
824 Syntax::
826    <type> [parameter Attrs] [name]
828 LLVM function declarations consist of the "``declare``" keyword, an
829 optional :ref:`linkage type <linkage>`, an optional :ref:`visibility style
830 <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`, an
831 optional :ref:`calling convention <callingconv>`, an optional ``unnamed_addr``
832 or ``local_unnamed_addr`` attribute, an optional address space, a return type,
833 an optional :ref:`parameter attribute <paramattrs>` for the return type, a function name, a possibly
834 empty list of arguments, an optional alignment, an optional :ref:`garbage
835 collector name <gc>`, an optional :ref:`prefix <prefixdata>`, and an optional
836 :ref:`prologue <prologuedata>`.
838 Syntax::
840     declare [linkage] [visibility] [DLLStorageClass]
841             [cconv] [ret attrs]
842             <ResultType> @<FunctionName> ([argument list])
843             [(unnamed_addr|local_unnamed_addr)] [align N] [gc]
844             [prefix Constant] [prologue Constant]
846 A function definition contains a list of basic blocks, forming the CFG (Control
847 Flow Graph) for the function. Each basic block may optionally start with a label
848 (giving the basic block a symbol table entry), contains a list of instructions,
849 and ends with a :ref:`terminator <terminators>` instruction (such as a branch or
850 function return). If an explicit label name is not provided, a block is assigned
851 an implicit numbered label, using the next value from the same counter as used
852 for unnamed temporaries (:ref:`see above<identifiers>`). For example, if a
853 function entry block does not have an explicit label, it will be assigned label
854 "%0", then the first unnamed temporary in that block will be "%1", etc. If a
855 numeric label is explicitly specified, it must match the numeric label that
856 would be used implicitly.
858 The first basic block in a function is special in two ways: it is
859 immediately executed on entrance to the function, and it is not allowed
860 to have predecessor basic blocks (i.e. there can not be any branches to
861 the entry block of a function). Because the block can have no
862 predecessors, it also cannot have any :ref:`PHI nodes <i_phi>`.
864 LLVM allows an explicit section to be specified for functions. If the
865 target supports it, it will emit functions to the section specified.
866 Additionally, the function can be placed in a COMDAT.
868 An explicit alignment may be specified for a function. If not present,
869 or if the alignment is set to zero, the alignment of the function is set
870 by the target to whatever it feels convenient. If an explicit alignment
871 is specified, the function is forced to have at least that much
872 alignment. All alignments must be a power of 2.
874 If the ``unnamed_addr`` attribute is given, the address is known to not
875 be significant and two identical functions can be merged.
877 If the ``local_unnamed_addr`` attribute is given, the address is known to
878 not be significant within the module.
880 If an explicit address space is not given, it will default to the program
881 address space from the :ref:`datalayout string<langref_datalayout>`.
883 .. _langref_aliases:
885 Aliases
886 -------
888 Aliases, unlike function or variables, don't create any new data. They
889 are just a new symbol and metadata for an existing position.
891 Aliases have a name and an aliasee that is either a global value or a
892 constant expression.
894 Aliases may have an optional :ref:`linkage type <linkage>`, an optional
895 :ref:`runtime preemption specifier <runtime_preemption_model>`, an optional
896 :ref:`visibility style <visibility>`, an optional :ref:`DLL storage class
897 <dllstorageclass>` and an optional :ref:`tls model <tls_model>`.
899 Syntax::
901     @<Name> = [Linkage] [PreemptionSpecifier] [Visibility] [DLLStorageClass] [ThreadLocal] [(unnamed_addr|local_unnamed_addr)] alias <AliaseeTy>, <AliaseeTy>* @<Aliasee>
902               [, partition "name"]
904 The linkage must be one of ``private``, ``internal``, ``linkonce``, ``weak``,
905 ``linkonce_odr``, ``weak_odr``, ``external``, ``available_externally``. Note
906 that some system linkers might not correctly handle dropping a weak symbol that
907 is aliased.
909 Aliases that are not ``unnamed_addr`` are guaranteed to have the same address as
910 the aliasee expression. ``unnamed_addr`` ones are only guaranteed to point
911 to the same content.
913 If the ``local_unnamed_addr`` attribute is given, the address is known to
914 not be significant within the module.
916 Since aliases are only a second name, some restrictions apply, of which
917 some can only be checked when producing an object file:
919 * The expression defining the aliasee must be computable at assembly
920   time. Since it is just a name, no relocations can be used.
922 * No alias in the expression can be weak as the possibility of the
923   intermediate alias being overridden cannot be represented in an
924   object file.
926 * If the alias has the ``available_externally`` linkage, the aliasee must be an
927   ``available_externally`` global value; otherwise the aliasee can be an
928   expression but no global value in the expression can be a declaration, since
929   that would require a relocation, which is not possible.
931 * If either the alias or the aliasee may be replaced by a symbol outside the
932   module at link time or runtime, any optimization cannot replace the alias with
933   the aliasee, since the behavior may be different. The alias may be used as a
934   name guaranteed to point to the content in the current module.
936 .. _langref_ifunc:
938 IFuncs
939 -------
941 IFuncs, like as aliases, don't create any new data or func. They are just a new
942 symbol that dynamic linker resolves at runtime by calling a resolver function.
944 IFuncs have a name and a resolver that is a function called by dynamic linker
945 that returns address of another function associated with the name.
947 IFunc may have an optional :ref:`linkage type <linkage>` and an optional
948 :ref:`visibility style <visibility>`.
950 Syntax::
952     @<Name> = [Linkage] [PreemptionSpecifier] [Visibility] ifunc <IFuncTy>, <ResolverTy>* @<Resolver>
953               [, partition "name"]
956 .. _langref_comdats:
958 Comdats
959 -------
961 Comdat IR provides access to object file COMDAT/section group functionality
962 which represents interrelated sections.
964 Comdats have a name which represents the COMDAT key and a selection kind to
965 provide input on how the linker deduplicates comdats with the same key in two
966 different object files. A comdat must be included or omitted as a unit.
967 Discarding the whole comdat is allowed but discarding a subset is not.
969 A global object may be a member of at most one comdat. Aliases are placed in the
970 same COMDAT that their aliasee computes to, if any.
972 Syntax::
974     $<Name> = comdat SelectionKind
976 For selection kinds other than ``nodeduplicate``, only one of the duplicate
977 comdats may be retained by the linker and the members of the remaining comdats
978 must be discarded. The following selection kinds are supported:
980 ``any``
981     The linker may choose any COMDAT key, the choice is arbitrary.
982 ``exactmatch``
983     The linker may choose any COMDAT key but the sections must contain the
984     same data.
985 ``largest``
986     The linker will choose the section containing the largest COMDAT key.
987 ``nodeduplicate``
988     No deduplication is performed.
989 ``samesize``
990     The linker may choose any COMDAT key but the sections must contain the
991     same amount of data.
993 - XCOFF and Mach-O don't support COMDATs.
994 - COFF supports all selection kinds. Non-``nodeduplicate`` selection kinds need
995   a non-local linkage COMDAT symbol.
996 - ELF supports ``any`` and ``nodeduplicate``.
997 - WebAssembly only supports ``any``.
999 Here is an example of a COFF COMDAT where a function will only be selected if
1000 the COMDAT key's section is the largest:
1002 .. code-block:: text
1004    $foo = comdat largest
1005    @foo = global i32 2, comdat($foo)
1007    define void @bar() comdat($foo) {
1008      ret void
1009    }
1011 In a COFF object file, this will create a COMDAT section with selection kind
1012 ``IMAGE_COMDAT_SELECT_LARGEST`` containing the contents of the ``@foo`` symbol
1013 and another COMDAT section with selection kind
1014 ``IMAGE_COMDAT_SELECT_ASSOCIATIVE`` which is associated with the first COMDAT
1015 section and contains the contents of the ``@bar`` symbol.
1017 As a syntactic sugar the ``$name`` can be omitted if the name is the same as
1018 the global name:
1020 .. code-block:: llvm
1022   $foo = comdat any
1023   @foo = global i32 2, comdat
1024   @bar = global i32 3, comdat($foo)
1026 There are some restrictions on the properties of the global object.
1027 It, or an alias to it, must have the same name as the COMDAT group when
1028 targeting COFF.
1029 The contents and size of this object may be used during link-time to determine
1030 which COMDAT groups get selected depending on the selection kind.
1031 Because the name of the object must match the name of the COMDAT group, the
1032 linkage of the global object must not be local; local symbols can get renamed
1033 if a collision occurs in the symbol table.
1035 The combined use of COMDATS and section attributes may yield surprising results.
1036 For example:
1038 .. code-block:: llvm
1040    $foo = comdat any
1041    $bar = comdat any
1042    @g1 = global i32 42, section "sec", comdat($foo)
1043    @g2 = global i32 42, section "sec", comdat($bar)
1045 From the object file perspective, this requires the creation of two sections
1046 with the same name. This is necessary because both globals belong to different
1047 COMDAT groups and COMDATs, at the object file level, are represented by
1048 sections.
1050 Note that certain IR constructs like global variables and functions may
1051 create COMDATs in the object file in addition to any which are specified using
1052 COMDAT IR. This arises when the code generator is configured to emit globals
1053 in individual sections (e.g. when `-data-sections` or `-function-sections`
1054 is supplied to `llc`).
1056 .. _namedmetadatastructure:
1058 Named Metadata
1059 --------------
1061 Named metadata is a collection of metadata. :ref:`Metadata
1062 nodes <metadata>` (but not metadata strings) are the only valid
1063 operands for a named metadata.
1065 #. Named metadata are represented as a string of characters with the
1066    metadata prefix. The rules for metadata names are the same as for
1067    identifiers, but quoted names are not allowed. ``"\xx"`` type escapes
1068    are still valid, which allows any character to be part of a name.
1070 Syntax::
1072     ; Some unnamed metadata nodes, which are referenced by the named metadata.
1073     !0 = !{!"zero"}
1074     !1 = !{!"one"}
1075     !2 = !{!"two"}
1076     ; A named metadata.
1077     !name = !{!0, !1, !2}
1079 .. _paramattrs:
1081 Parameter Attributes
1082 --------------------
1084 The return type and each parameter of a function type may have a set of
1085 *parameter attributes* associated with them. Parameter attributes are
1086 used to communicate additional information about the result or
1087 parameters of a function. Parameter attributes are considered to be part
1088 of the function, not of the function type, so functions with different
1089 parameter attributes can have the same function type.
1091 Parameter attributes are simple keywords that follow the type specified.
1092 If multiple parameter attributes are needed, they are space separated.
1093 For example:
1095 .. code-block:: llvm
1097     declare i32 @printf(ptr noalias nocapture, ...)
1098     declare i32 @atoi(i8 zeroext)
1099     declare signext i8 @returns_signed_char()
1101 Note that any attributes for the function result (``nonnull``,
1102 ``signext``) come before the result type.
1104 Currently, only the following parameter attributes are defined:
1106 ``zeroext``
1107     This indicates to the code generator that the parameter or return
1108     value should be zero-extended to the extent required by the target's
1109     ABI by the caller (for a parameter) or the callee (for a return value).
1110 ``signext``
1111     This indicates to the code generator that the parameter or return
1112     value should be sign-extended to the extent required by the target's
1113     ABI (which is usually 32-bits) by the caller (for a parameter) or
1114     the callee (for a return value).
1115 ``inreg``
1116     This indicates that this parameter or return value should be treated
1117     in a special target-dependent fashion while emitting code for
1118     a function call or return (usually, by putting it in a register as
1119     opposed to memory, though some targets use it to distinguish between
1120     two different kinds of registers). Use of this attribute is
1121     target-specific.
1122 ``byval(<ty>)``
1123     This indicates that the pointer parameter should really be passed by
1124     value to the function. The attribute implies that a hidden copy of
1125     the pointee is made between the caller and the callee, so the callee
1126     is unable to modify the value in the caller. This attribute is only
1127     valid on LLVM pointer arguments. It is generally used to pass
1128     structs and arrays by value, but is also valid on pointers to
1129     scalars. The copy is considered to belong to the caller not the
1130     callee (for example, ``readonly`` functions should not write to
1131     ``byval`` parameters). This is not a valid attribute for return
1132     values.
1134     The byval type argument indicates the in-memory value type, and
1135     must be the same as the pointee type of the argument.
1137     The byval attribute also supports specifying an alignment with the
1138     align attribute. It indicates the alignment of the stack slot to
1139     form and the known alignment of the pointer specified to the call
1140     site. If the alignment is not specified, then the code generator
1141     makes a target-specific assumption.
1143 .. _attr_byref:
1145 ``byref(<ty>)``
1147     The ``byref`` argument attribute allows specifying the pointee
1148     memory type of an argument. This is similar to ``byval``, but does
1149     not imply a copy is made anywhere, or that the argument is passed
1150     on the stack. This implies the pointer is dereferenceable up to
1151     the storage size of the type.
1153     It is not generally permissible to introduce a write to an
1154     ``byref`` pointer. The pointer may have any address space and may
1155     be read only.
1157     This is not a valid attribute for return values.
1159     The alignment for an ``byref`` parameter can be explicitly
1160     specified by combining it with the ``align`` attribute, similar to
1161     ``byval``. If the alignment is not specified, then the code generator
1162     makes a target-specific assumption.
1164     This is intended for representing ABI constraints, and is not
1165     intended to be inferred for optimization use.
1167 .. _attr_preallocated:
1169 ``preallocated(<ty>)``
1170     This indicates that the pointer parameter should really be passed by
1171     value to the function, and that the pointer parameter's pointee has
1172     already been initialized before the call instruction. This attribute
1173     is only valid on LLVM pointer arguments. The argument must be the value
1174     returned by the appropriate
1175     :ref:`llvm.call.preallocated.arg<int_call_preallocated_arg>` on non
1176     ``musttail`` calls, or the corresponding caller parameter in ``musttail``
1177     calls, although it is ignored during codegen.
1179     A non ``musttail`` function call with a ``preallocated`` attribute in
1180     any parameter must have a ``"preallocated"`` operand bundle. A ``musttail``
1181     function call cannot have a ``"preallocated"`` operand bundle.
1183     The preallocated attribute requires a type argument, which must be
1184     the same as the pointee type of the argument.
1186     The preallocated attribute also supports specifying an alignment with the
1187     align attribute. It indicates the alignment of the stack slot to
1188     form and the known alignment of the pointer specified to the call
1189     site. If the alignment is not specified, then the code generator
1190     makes a target-specific assumption.
1192 .. _attr_inalloca:
1194 ``inalloca(<ty>)``
1196     The ``inalloca`` argument attribute allows the caller to take the
1197     address of outgoing stack arguments. An ``inalloca`` argument must
1198     be a pointer to stack memory produced by an ``alloca`` instruction.
1199     The alloca, or argument allocation, must also be tagged with the
1200     inalloca keyword. Only the last argument may have the ``inalloca``
1201     attribute, and that argument is guaranteed to be passed in memory.
1203     An argument allocation may be used by a call at most once because
1204     the call may deallocate it. The ``inalloca`` attribute cannot be
1205     used in conjunction with other attributes that affect argument
1206     storage, like ``inreg``, ``nest``, ``sret``, or ``byval``. The
1207     ``inalloca`` attribute also disables LLVM's implicit lowering of
1208     large aggregate return values, which means that frontend authors
1209     must lower them with ``sret`` pointers.
1211     When the call site is reached, the argument allocation must have
1212     been the most recent stack allocation that is still live, or the
1213     behavior is undefined. It is possible to allocate additional stack
1214     space after an argument allocation and before its call site, but it
1215     must be cleared off with :ref:`llvm.stackrestore
1216     <int_stackrestore>`.
1218     The inalloca attribute requires a type argument, which must be the
1219     same as the pointee type of the argument.
1221     See :doc:`InAlloca` for more information on how to use this
1222     attribute.
1224 ``sret(<ty>)``
1225     This indicates that the pointer parameter specifies the address of a
1226     structure that is the return value of the function in the source
1227     program. This pointer must be guaranteed by the caller to be valid:
1228     loads and stores to the structure may be assumed by the callee not
1229     to trap and to be properly aligned. This is not a valid attribute
1230     for return values.
1232     The sret type argument specifies the in memory type, which must be
1233     the same as the pointee type of the argument.
1235 .. _attr_elementtype:
1237 ``elementtype(<ty>)``
1239     The ``elementtype`` argument attribute can be used to specify a pointer
1240     element type in a way that is compatible with `opaque pointers
1241     <OpaquePointers.html>`__.
1243     The ``elementtype`` attribute by itself does not carry any specific
1244     semantics. However, certain intrinsics may require this attribute to be
1245     present and assign it particular semantics. This will be documented on
1246     individual intrinsics.
1248     The attribute may only be applied to pointer typed arguments of intrinsic
1249     calls. It cannot be applied to non-intrinsic calls, and cannot be applied
1250     to parameters on function declarations. For non-opaque pointers, the type
1251     passed to ``elementtype`` must match the pointer element type.
1253 .. _attr_align:
1255 ``align <n>`` or ``align(<n>)``
1256     This indicates that the pointer value or vector of pointers has the
1257     specified alignment. If applied to a vector of pointers, *all* pointers
1258     (elements) have the specified alignment. If the pointer value does not have
1259     the specified alignment, :ref:`poison value <poisonvalues>` is returned or
1260     passed instead.  The ``align`` attribute should be combined with the
1261     ``noundef`` attribute to ensure a pointer is aligned, or otherwise the
1262     behavior is undefined. Note that ``align 1`` has no effect on non-byval,
1263     non-preallocated arguments.
1265     Note that this attribute has additional semantics when combined with the
1266     ``byval`` or ``preallocated`` attribute, which are documented there.
1268 .. _noalias:
1270 ``noalias``
1271     This indicates that memory locations accessed via pointer values
1272     :ref:`based <pointeraliasing>` on the argument or return value are not also
1273     accessed, during the execution of the function, via pointer values not
1274     *based* on the argument or return value. This guarantee only holds for
1275     memory locations that are *modified*, by any means, during the execution of
1276     the function. The attribute on a return value also has additional semantics
1277     described below. The caller shares the responsibility with the callee for
1278     ensuring that these requirements are met.  For further details, please see
1279     the discussion of the NoAlias response in :ref:`alias analysis <Must, May,
1280     or No>`.
1282     Note that this definition of ``noalias`` is intentionally similar
1283     to the definition of ``restrict`` in C99 for function arguments.
1285     For function return values, C99's ``restrict`` is not meaningful,
1286     while LLVM's ``noalias`` is. Furthermore, the semantics of the ``noalias``
1287     attribute on return values are stronger than the semantics of the attribute
1288     when used on function arguments. On function return values, the ``noalias``
1289     attribute indicates that the function acts like a system memory allocation
1290     function, returning a pointer to allocated storage disjoint from the
1291     storage for any other object accessible to the caller.
1293 .. _nocapture:
1295 ``nocapture``
1296     This indicates that the callee does not :ref:`capture <pointercapture>` the
1297     pointer. This is not a valid attribute for return values.
1298     This attribute applies only to the particular copy of the pointer passed in
1299     this argument. A caller could pass two copies of the same pointer with one
1300     being annotated nocapture and the other not, and the callee could validly
1301     capture through the non annotated parameter.
1303 .. code-block:: llvm
1305     define void @f(ptr nocapture %a, ptr %b) {
1306       ; (capture %b)
1307     }
1309     call void @f(ptr @glb, ptr @glb) ; well-defined
1311 ``nofree``
1312     This indicates that callee does not free the pointer argument. This is not
1313     a valid attribute for return values.
1315 .. _nest:
1317 ``nest``
1318     This indicates that the pointer parameter can be excised using the
1319     :ref:`trampoline intrinsics <int_trampoline>`. This is not a valid
1320     attribute for return values and can only be applied to one parameter.
1322 ``returned``
1323     This indicates that the function always returns the argument as its return
1324     value. This is a hint to the optimizer and code generator used when
1325     generating the caller, allowing value propagation, tail call optimization,
1326     and omission of register saves and restores in some cases; it is not
1327     checked or enforced when generating the callee. The parameter and the
1328     function return type must be valid operands for the
1329     :ref:`bitcast instruction <i_bitcast>`. This is not a valid attribute for
1330     return values and can only be applied to one parameter.
1332 ``nonnull``
1333     This indicates that the parameter or return pointer is not null. This
1334     attribute may only be applied to pointer typed parameters. This is not
1335     checked or enforced by LLVM; if the parameter or return pointer is null,
1336     :ref:`poison value <poisonvalues>` is returned or passed instead.
1337     The ``nonnull`` attribute should be combined with the ``noundef`` attribute
1338     to ensure a pointer is not null or otherwise the behavior is undefined.
1340 ``dereferenceable(<n>)``
1341     This indicates that the parameter or return pointer is dereferenceable. This
1342     attribute may only be applied to pointer typed parameters. A pointer that
1343     is dereferenceable can be loaded from speculatively without a risk of
1344     trapping. The number of bytes known to be dereferenceable must be provided
1345     in parentheses. It is legal for the number of bytes to be less than the
1346     size of the pointee type. The ``nonnull`` attribute does not imply
1347     dereferenceability (consider a pointer to one element past the end of an
1348     array), however ``dereferenceable(<n>)`` does imply ``nonnull`` in
1349     ``addrspace(0)`` (which is the default address space), except if the
1350     ``null_pointer_is_valid`` function attribute is present.
1351     ``n`` should be a positive number. The pointer should be well defined,
1352     otherwise it is undefined behavior. This means ``dereferenceable(<n>)``
1353     implies ``noundef``.
1355 ``dereferenceable_or_null(<n>)``
1356     This indicates that the parameter or return value isn't both
1357     non-null and non-dereferenceable (up to ``<n>`` bytes) at the same
1358     time. All non-null pointers tagged with
1359     ``dereferenceable_or_null(<n>)`` are ``dereferenceable(<n>)``.
1360     For address space 0 ``dereferenceable_or_null(<n>)`` implies that
1361     a pointer is exactly one of ``dereferenceable(<n>)`` or ``null``,
1362     and in other address spaces ``dereferenceable_or_null(<n>)``
1363     implies that a pointer is at least one of ``dereferenceable(<n>)``
1364     or ``null`` (i.e. it may be both ``null`` and
1365     ``dereferenceable(<n>)``). This attribute may only be applied to
1366     pointer typed parameters.
1368 ``swiftself``
1369     This indicates that the parameter is the self/context parameter. This is not
1370     a valid attribute for return values and can only be applied to one
1371     parameter.
1373 .. _swiftasync:
1375 ``swiftasync``
1376     This indicates that the parameter is the asynchronous context parameter and
1377     triggers the creation of a target-specific extended frame record to store
1378     this pointer. This is not a valid attribute for return values and can only
1379     be applied to one parameter.
1381 ``swifterror``
1382     This attribute is motivated to model and optimize Swift error handling. It
1383     can be applied to a parameter with pointer to pointer type or a
1384     pointer-sized alloca. At the call site, the actual argument that corresponds
1385     to a ``swifterror`` parameter has to come from a ``swifterror`` alloca or
1386     the ``swifterror`` parameter of the caller. A ``swifterror`` value (either
1387     the parameter or the alloca) can only be loaded and stored from, or used as
1388     a ``swifterror`` argument. This is not a valid attribute for return values
1389     and can only be applied to one parameter.
1391     These constraints allow the calling convention to optimize access to
1392     ``swifterror`` variables by associating them with a specific register at
1393     call boundaries rather than placing them in memory. Since this does change
1394     the calling convention, a function which uses the ``swifterror`` attribute
1395     on a parameter is not ABI-compatible with one which does not.
1397     These constraints also allow LLVM to assume that a ``swifterror`` argument
1398     does not alias any other memory visible within a function and that a
1399     ``swifterror`` alloca passed as an argument does not escape.
1401 ``immarg``
1402     This indicates the parameter is required to be an immediate
1403     value. This must be a trivial immediate integer or floating-point
1404     constant. Undef or constant expressions are not valid. This is
1405     only valid on intrinsic declarations and cannot be applied to a
1406     call site or arbitrary function.
1408 ``noundef``
1409     This attribute applies to parameters and return values. If the value
1410     representation contains any undefined or poison bits, the behavior is
1411     undefined. Note that this does not refer to padding introduced by the
1412     type's storage representation.
1414 .. _nofpclass:
1416 ``nofpclass(<test mask>)``
1417     This attribute applies to parameters and return values with
1418     floating-point and vector of floating-point types, as well as
1419     arrays of such types. The test mask has the same format as the
1420     second argument to the :ref:`llvm.is.fpclass <llvm.is.fpclass>`,
1421     and indicates which classes of floating-point values are not
1422     permitted for the value. For example a bitmask of 3 indicates
1423     the parameter may not be a NaN.
1425     If the value is a floating-point class indicated by the
1426     ``nofpclass`` test mask, a :ref:`poison value <poisonvalues>` is
1427     passed or returned instead.
1429 .. code-block:: text
1430   :caption: The following invariants hold
1432        @llvm.is.fpclass(nofpclass(test_mask) %x, test_mask) => false
1433        @llvm.is.fpclass(nofpclass(test_mask) %x, ~test_mask) => true
1434        nofpclass(all) => poison
1437    In textual IR, various string names are supported for readability
1438    and can be combined. For example ``nofpclass(nan pinf nzero)``
1439    evaluates to a mask of 547.
1441    This does not depend on the floating-point environment. For
1442    example, a function parameter marked ``nofpclass(zero)`` indicates
1443    no zero inputs. If this is applied to an argument in a function
1444    marked with :ref:`\"denormal-fp-math\" <denormal_fp_math>`
1445    indicating zero treatment of input denormals, it does not imply the
1446    value cannot be a denormal value which would compare equal to 0.
1448 .. table:: Recognized test mask names
1450     +-------+----------------------+---------------+
1451     | Name  | floating-point class | Bitmask value |
1452     +=======+======================+===============+
1453     |  nan  | Any NaN              |       3       |
1454     +-------+----------------------+---------------+
1455     |  inf  | +/- infinity         |      516      |
1456     +-------+----------------------+---------------+
1457     |  norm | +/- normal           |       26      |
1458     +-------+----------------------+---------------+
1459     |  sub  | +/- subnormal        |      144      |
1460     +-------+----------------------+---------------+
1461     |  zero | +/- 0                |       96      |
1462     +-------+----------------------+---------------+
1463     |  all  | All values           |     1023      |
1464     +-------+----------------------+---------------+
1465     | snan  | Signaling NaN        |       1       |
1466     +-------+----------------------+---------------+
1467     | qnan  | Quiet NaN            |       2       |
1468     +-------+----------------------+---------------+
1469     | ninf  | Negative infinity    |       4       |
1470     +-------+----------------------+---------------+
1471     | nnorm | Negative normal      |       8       |
1472     +-------+----------------------+---------------+
1473     | nsub  | Negative subnormal   |       16      |
1474     +-------+----------------------+---------------+
1475     | nzero | Negative zero        |       32      |
1476     +-------+----------------------+---------------+
1477     | pzero | Positive zero        |       64      |
1478     +-------+----------------------+---------------+
1479     | psub  | Positive subnormal   |       128     |
1480     +-------+----------------------+---------------+
1481     | pnorm | Positive normal      |       256     |
1482     +-------+----------------------+---------------+
1483     | pinf  | Positive infinity    |       512     |
1484     +-------+----------------------+---------------+
1487 ``alignstack(<n>)``
1488     This indicates the alignment that should be considered by the backend when
1489     assigning this parameter to a stack slot during calling convention
1490     lowering. The enforcement of the specified alignment is target-dependent,
1491     as target-specific calling convention rules may override this value. This
1492     attribute serves the purpose of carrying language specific alignment
1493     information that is not mapped to base types in the backend (for example,
1494     over-alignment specification through language attributes).
1496 ``allocalign``
1497     The function parameter marked with this attribute is is the alignment in bytes of the
1498     newly allocated block returned by this function. The returned value must either have
1499     the specified alignment or be the null pointer. The return value MAY be more aligned
1500     than the requested alignment, but not less aligned.  Invalid (e.g. non-power-of-2)
1501     alignments are permitted for the allocalign parameter, so long as the returned pointer
1502     is null. This attribute may only be applied to integer parameters.
1504 ``allocptr``
1505     The function parameter marked with this attribute is the pointer
1506     that will be manipulated by the allocator. For a realloc-like
1507     function the pointer will be invalidated upon success (but the
1508     same address may be returned), for a free-like function the
1509     pointer will always be invalidated.
1511 ``readnone``
1512     This attribute indicates that the function does not dereference that
1513     pointer argument, even though it may read or write the memory that the
1514     pointer points to if accessed through other pointers.
1516     If a function reads from or writes to a readnone pointer argument, the
1517     behavior is undefined.
1519 ``readonly``
1520     This attribute indicates that the function does not write through this
1521     pointer argument, even though it may write to the memory that the pointer
1522     points to.
1524     If a function writes to a readonly pointer argument, the behavior is
1525     undefined.
1527 ``writeonly``
1528     This attribute indicates that the function may write to, but does not read
1529     through this pointer argument (even though it may read from the memory that
1530     the pointer points to).
1532     If a function reads from a writeonly pointer argument, the behavior is
1533     undefined.
1535 ``writable``
1536     This attribute is only meaningful in conjunction with ``dereferenceable(N)``
1537     or another attribute that implies the first ``N`` bytes of the pointer
1538     argument are dereferenceable.
1540     In that case, the attribute indicates that the first ``N`` bytes will be
1541     (non-atomically) loaded and stored back on entry to the function.
1543     This implies that it's possible to introduce spurious stores on entry to
1544     the function without introducing traps or data races. This does not
1545     necessarily hold throughout the whole function, as the pointer may escape
1546     to a different thread during the execution of the function. See also the
1547     :ref:`atomic optimization guide <Optimization outside atomic>`
1549     The "other attributes" that imply dereferenceability are
1550     ``dereferenceable_or_null`` (if the pointer is non-null) and the
1551     ``sret``, ``byval``, ``byref``, ``inalloca``, ``preallocated`` family of
1552     attributes. Note that not all of these combinations are useful, e.g.
1553     ``byval`` arguments are known to be writable even without this attribute.
1555     The ``writable`` attribute cannot be combined with ``readnone``,
1556     ``readonly`` or a ``memory`` attribute that does not contain
1557     ``argmem: write``.
1559 .. _gc:
1561 Garbage Collector Strategy Names
1562 --------------------------------
1564 Each function may specify a garbage collector strategy name, which is simply a
1565 string:
1567 .. code-block:: llvm
1569     define void @f() gc "name" { ... }
1571 The supported values of *name* includes those :ref:`built in to LLVM
1572 <builtin-gc-strategies>` and any provided by loaded plugins. Specifying a GC
1573 strategy will cause the compiler to alter its output in order to support the
1574 named garbage collection algorithm. Note that LLVM itself does not contain a
1575 garbage collector, this functionality is restricted to generating machine code
1576 which can interoperate with a collector provided externally.
1578 .. _prefixdata:
1580 Prefix Data
1581 -----------
1583 Prefix data is data associated with a function which the code
1584 generator will emit immediately before the function's entrypoint.
1585 The purpose of this feature is to allow frontends to associate
1586 language-specific runtime metadata with specific functions and make it
1587 available through the function pointer while still allowing the
1588 function pointer to be called.
1590 To access the data for a given function, a program may bitcast the
1591 function pointer to a pointer to the constant's type and dereference
1592 index -1. This implies that the IR symbol points just past the end of
1593 the prefix data. For instance, take the example of a function annotated
1594 with a single ``i32``,
1596 .. code-block:: llvm
1598     define void @f() prefix i32 123 { ... }
1600 The prefix data can be referenced as,
1602 .. code-block:: llvm
1604     %a = getelementptr inbounds i32, ptr @f, i32 -1
1605     %b = load i32, ptr %a
1607 Prefix data is laid out as if it were an initializer for a global variable
1608 of the prefix data's type. The function will be placed such that the
1609 beginning of the prefix data is aligned. This means that if the size
1610 of the prefix data is not a multiple of the alignment size, the
1611 function's entrypoint will not be aligned. If alignment of the
1612 function's entrypoint is desired, padding must be added to the prefix
1613 data.
1615 A function may have prefix data but no body. This has similar semantics
1616 to the ``available_externally`` linkage in that the data may be used by the
1617 optimizers but will not be emitted in the object file.
1619 .. _prologuedata:
1621 Prologue Data
1622 -------------
1624 The ``prologue`` attribute allows arbitrary code (encoded as bytes) to
1625 be inserted prior to the function body. This can be used for enabling
1626 function hot-patching and instrumentation.
1628 To maintain the semantics of ordinary function calls, the prologue data must
1629 have a particular format. Specifically, it must begin with a sequence of
1630 bytes which decode to a sequence of machine instructions, valid for the
1631 module's target, which transfer control to the point immediately succeeding
1632 the prologue data, without performing any other visible action. This allows
1633 the inliner and other passes to reason about the semantics of the function
1634 definition without needing to reason about the prologue data. Obviously this
1635 makes the format of the prologue data highly target dependent.
1637 A trivial example of valid prologue data for the x86 architecture is ``i8 144``,
1638 which encodes the ``nop`` instruction:
1640 .. code-block:: text
1642     define void @f() prologue i8 144 { ... }
1644 Generally prologue data can be formed by encoding a relative branch instruction
1645 which skips the metadata, as in this example of valid prologue data for the
1646 x86_64 architecture, where the first two bytes encode ``jmp .+10``:
1648 .. code-block:: text
1650     %0 = type <{ i8, i8, ptr }>
1652     define void @f() prologue %0 <{ i8 235, i8 8, ptr @md}> { ... }
1654 A function may have prologue data but no body. This has similar semantics
1655 to the ``available_externally`` linkage in that the data may be used by the
1656 optimizers but will not be emitted in the object file.
1658 .. _personalityfn:
1660 Personality Function
1661 --------------------
1663 The ``personality`` attribute permits functions to specify what function
1664 to use for exception handling.
1666 .. _attrgrp:
1668 Attribute Groups
1669 ----------------
1671 Attribute groups are groups of attributes that are referenced by objects within
1672 the IR. They are important for keeping ``.ll`` files readable, because a lot of
1673 functions will use the same set of attributes. In the degenerative case of a
1674 ``.ll`` file that corresponds to a single ``.c`` file, the single attribute
1675 group will capture the important command line flags used to build that file.
1677 An attribute group is a module-level object. To use an attribute group, an
1678 object references the attribute group's ID (e.g. ``#37``). An object may refer
1679 to more than one attribute group. In that situation, the attributes from the
1680 different groups are merged.
1682 Here is an example of attribute groups for a function that should always be
1683 inlined, has a stack alignment of 4, and which shouldn't use SSE instructions:
1685 .. code-block:: llvm
1687    ; Target-independent attributes:
1688    attributes #0 = { alwaysinline alignstack=4 }
1690    ; Target-dependent attributes:
1691    attributes #1 = { "no-sse" }
1693    ; Function @f has attributes: alwaysinline, alignstack=4, and "no-sse".
1694    define void @f() #0 #1 { ... }
1696 .. _fnattrs:
1698 Function Attributes
1699 -------------------
1701 Function attributes are set to communicate additional information about
1702 a function. Function attributes are considered to be part of the
1703 function, not of the function type, so functions with different function
1704 attributes can have the same function type.
1706 Function attributes are simple keywords that follow the type specified.
1707 If multiple attributes are needed, they are space separated. For
1708 example:
1710 .. code-block:: llvm
1712     define void @f() noinline { ... }
1713     define void @f() alwaysinline { ... }
1714     define void @f() alwaysinline optsize { ... }
1715     define void @f() optsize { ... }
1717 ``alignstack(<n>)``
1718     This attribute indicates that, when emitting the prologue and
1719     epilogue, the backend should forcibly align the stack pointer.
1720     Specify the desired alignment, which must be a power of two, in
1721     parentheses.
1722 ``"alloc-family"="FAMILY"``
1723     This indicates which "family" an allocator function is part of. To avoid
1724     collisions, the family name should match the mangled name of the primary
1725     allocator function, that is "malloc" for malloc/calloc/realloc/free,
1726     "_Znwm" for ``::operator::new`` and ``::operator::delete``, and
1727     "_ZnwmSt11align_val_t" for aligned ``::operator::new`` and
1728     ``::operator::delete``. Matching malloc/realloc/free calls within a family
1729     can be optimized, but mismatched ones will be left alone.
1730 ``allockind("KIND")``
1731     Describes the behavior of an allocation function. The KIND string contains comma
1732     separated entries from the following options:
1734     * "alloc": the function returns a new block of memory or null.
1735     * "realloc": the function returns a new block of memory or null. If the
1736       result is non-null the memory contents from the start of the block up to
1737       the smaller of the original allocation size and the new allocation size
1738       will match that of the ``allocptr`` argument and the ``allocptr``
1739       argument is invalidated, even if the function returns the same address.
1740     * "free": the function frees the block of memory specified by ``allocptr``.
1741       Functions marked as "free" ``allockind`` must return void.
1742     * "uninitialized": Any newly-allocated memory (either a new block from
1743       a "alloc" function or the enlarged capacity from a "realloc" function)
1744       will be uninitialized.
1745     * "zeroed": Any newly-allocated memory (either a new block from a "alloc"
1746       function or the enlarged capacity from a "realloc" function) will be
1747       zeroed.
1748     * "aligned": the function returns memory aligned according to the
1749       ``allocalign`` parameter.
1751     The first three options are mutually exclusive, and the remaining options
1752     describe more details of how the function behaves. The remaining options
1753     are invalid for "free"-type functions.
1754 ``allocsize(<EltSizeParam>[, <NumEltsParam>])``
1755     This attribute indicates that the annotated function will always return at
1756     least a given number of bytes (or null). Its arguments are zero-indexed
1757     parameter numbers; if one argument is provided, then it's assumed that at
1758     least ``CallSite.Args[EltSizeParam]`` bytes will be available at the
1759     returned pointer. If two are provided, then it's assumed that
1760     ``CallSite.Args[EltSizeParam] * CallSite.Args[NumEltsParam]`` bytes are
1761     available. The referenced parameters must be integer types. No assumptions
1762     are made about the contents of the returned block of memory.
1763 ``alwaysinline``
1764     This attribute indicates that the inliner should attempt to inline
1765     this function into callers whenever possible, ignoring any active
1766     inlining size threshold for this caller.
1767 ``builtin``
1768     This indicates that the callee function at a call site should be
1769     recognized as a built-in function, even though the function's declaration
1770     uses the ``nobuiltin`` attribute. This is only valid at call sites for
1771     direct calls to functions that are declared with the ``nobuiltin``
1772     attribute.
1773 ``cold``
1774     This attribute indicates that this function is rarely called. When
1775     computing edge weights, basic blocks post-dominated by a cold
1776     function call are also considered to be cold; and, thus, given low
1777     weight.
1779 .. _attr_convergent:
1781 ``convergent``
1782     This attribute indicates that this function is convergent.
1783     When it appears on a call/invoke, the convergent attribute
1784     indicates that we should treat the call as though we’re calling a
1785     convergent function. This is particularly useful on indirect
1786     calls; without this we may treat such calls as though the target
1787     is non-convergent.
1789     See :doc:`ConvergentOperations` for further details.
1791     It is an error to call :ref:`llvm.experimental.convergence.entry
1792     <llvm.experimental.convergence.entry>` from a function that
1793     does not have this attribute.
1794 ``disable_sanitizer_instrumentation``
1795     When instrumenting code with sanitizers, it can be important to skip certain
1796     functions to ensure no instrumentation is applied to them.
1798     This attribute is not always similar to absent ``sanitize_<name>``
1799     attributes: depending on the specific sanitizer, code can be inserted into
1800     functions regardless of the ``sanitize_<name>`` attribute to prevent false
1801     positive reports.
1803     ``disable_sanitizer_instrumentation`` disables all kinds of instrumentation,
1804     taking precedence over the ``sanitize_<name>`` attributes and other compiler
1805     flags.
1806 ``"dontcall-error"``
1807     This attribute denotes that an error diagnostic should be emitted when a
1808     call of a function with this attribute is not eliminated via optimization.
1809     Front ends can provide optional ``srcloc`` metadata nodes on call sites of
1810     such callees to attach information about where in the source language such a
1811     call came from. A string value can be provided as a note.
1812 ``"dontcall-warn"``
1813     This attribute denotes that a warning diagnostic should be emitted when a
1814     call of a function with this attribute is not eliminated via optimization.
1815     Front ends can provide optional ``srcloc`` metadata nodes on call sites of
1816     such callees to attach information about where in the source language such a
1817     call came from. A string value can be provided as a note.
1818 ``fn_ret_thunk_extern``
1819     This attribute tells the code generator that returns from functions should
1820     be replaced with jumps to externally-defined architecture-specific symbols.
1821     For X86, this symbol's identifier is ``__x86_return_thunk``.
1822 ``"frame-pointer"``
1823     This attribute tells the code generator whether the function
1824     should keep the frame pointer. The code generator may emit the frame pointer
1825     even if this attribute says the frame pointer can be eliminated.
1826     The allowed string values are:
1828      * ``"none"`` (default) - the frame pointer can be eliminated.
1829      * ``"non-leaf"`` - the frame pointer should be kept if the function calls
1830        other functions.
1831      * ``"all"`` - the frame pointer should be kept.
1832 ``hot``
1833     This attribute indicates that this function is a hot spot of the program
1834     execution. The function will be optimized more aggressively and will be
1835     placed into special subsection of the text section to improving locality.
1837     When profile feedback is enabled, this attribute has the precedence over
1838     the profile information. By marking a function ``hot``, users can work
1839     around the cases where the training input does not have good coverage
1840     on all the hot functions.
1841 ``inlinehint``
1842     This attribute indicates that the source code contained a hint that
1843     inlining this function is desirable (such as the "inline" keyword in
1844     C/C++). It is just a hint; it imposes no requirements on the
1845     inliner.
1846 ``jumptable``
1847     This attribute indicates that the function should be added to a
1848     jump-instruction table at code-generation time, and that all address-taken
1849     references to this function should be replaced with a reference to the
1850     appropriate jump-instruction-table function pointer. Note that this creates
1851     a new pointer for the original function, which means that code that depends
1852     on function-pointer identity can break. So, any function annotated with
1853     ``jumptable`` must also be ``unnamed_addr``.
1854 ``memory(...)``
1855     This attribute specifies the possible memory effects of the call-site or
1856     function. It allows specifying the possible access kinds (``none``,
1857     ``read``, ``write``, or ``readwrite``) for the possible memory location
1858     kinds (``argmem``, ``inaccessiblemem``, as well as a default). It is best
1859     understood by example:
1861     - ``memory(none)``: Does not access any memory.
1862     - ``memory(read)``: May read (but not write) any memory.
1863     - ``memory(write)``: May write (but not read) any memory.
1864     - ``memory(readwrite)``: May read or write any memory.
1865     - ``memory(argmem: read)``: May only read argument memory.
1866     - ``memory(argmem: read, inaccessiblemem: write)``: May only read argument
1867       memory and only write inaccessible memory.
1868     - ``memory(read, argmem: readwrite)``: May read any memory (default mode)
1869       and additionally write argument memory.
1870     - ``memory(readwrite, argmem: none)``: May access any memory apart from
1871       argument memory.
1873     The supported memory location kinds are:
1875     - ``argmem``: This refers to accesses that are based on pointer arguments
1876       to the function.
1877     - ``inaccessiblemem``: This refers to accesses to memory which is not
1878       accessible by the current module (before return from the function -- an
1879       allocator function may return newly accessible memory while only
1880       accessing inaccessible memory itself). Inaccessible memory is often used
1881       to model control dependencies of intrinsics.
1882     - The default access kind (specified without a location prefix) applies to
1883       all locations that haven't been specified explicitly, including those that
1884       don't currently have a dedicated location kind (e.g. accesses to globals
1885       or captured pointers).
1887     If the ``memory`` attribute is not specified, then ``memory(readwrite)``
1888     is implied (all memory effects are possible).
1890     The memory effects of a call can be computed as
1891     ``CallSiteEffects & (FunctionEffects | OperandBundleEffects)``. Thus, the
1892     call-site annotation takes precedence over the potential effects described
1893     by either the function annotation or the operand bundles.
1894 ``minsize``
1895     This attribute suggests that optimization passes and code generator
1896     passes make choices that keep the code size of this function as small
1897     as possible and perform optimizations that may sacrifice runtime
1898     performance in order to minimize the size of the generated code.
1899     This attribute is incompatible with the ``optdebug`` and ``optnone``
1900     attributes.
1901 ``naked``
1902     This attribute disables prologue / epilogue emission for the
1903     function. This can have very system-specific consequences.
1904 ``"no-inline-line-tables"``
1905     When this attribute is set to true, the inliner discards source locations
1906     when inlining code and instead uses the source location of the call site.
1907     Breakpoints set on code that was inlined into the current function will
1908     not fire during the execution of the inlined call sites. If the debugger
1909     stops inside an inlined call site, it will appear to be stopped at the
1910     outermost inlined call site.
1911 ``no-jump-tables``
1912     When this attribute is set to true, the jump tables and lookup tables that
1913     can be generated from a switch case lowering are disabled.
1914 ``nobuiltin``
1915     This indicates that the callee function at a call site is not recognized as
1916     a built-in function. LLVM will retain the original call and not replace it
1917     with equivalent code based on the semantics of the built-in function, unless
1918     the call site uses the ``builtin`` attribute. This is valid at call sites
1919     and on function declarations and definitions.
1920 ``nocallback``
1921     This attribute indicates that the function is only allowed to jump back into
1922     caller's module by a return or an exception, and is not allowed to jump back
1923     by invoking a callback function, a direct, possibly transitive, external
1924     function call, use of ``longjmp``, or other means. It is a compiler hint that
1925     is used at module level to improve dataflow analysis, dropped during linking,
1926     and has no effect on functions defined in the current module.
1927 ``noduplicate``
1928     This attribute indicates that calls to the function cannot be
1929     duplicated. A call to a ``noduplicate`` function may be moved
1930     within its parent function, but may not be duplicated within
1931     its parent function.
1933     A function containing a ``noduplicate`` call may still
1934     be an inlining candidate, provided that the call is not
1935     duplicated by inlining. That implies that the function has
1936     internal linkage and only has one call site, so the original
1937     call is dead after inlining.
1938 ``nofree``
1939     This function attribute indicates that the function does not, directly or
1940     transitively, call a memory-deallocation function (``free``, for example)
1941     on a memory allocation which existed before the call.
1943     As a result, uncaptured pointers that are known to be dereferenceable
1944     prior to a call to a function with the ``nofree`` attribute are still
1945     known to be dereferenceable after the call. The capturing condition is
1946     necessary in environments where the function might communicate the
1947     pointer to another thread which then deallocates the memory.  Alternatively,
1948     ``nosync`` would ensure such communication cannot happen and even captured
1949     pointers cannot be freed by the function.
1951     A ``nofree`` function is explicitly allowed to free memory which it
1952     allocated or (if not ``nosync``) arrange for another thread to free
1953     memory on it's behalf.  As a result, perhaps surprisingly, a ``nofree``
1954     function can return a pointer to a previously deallocated memory object.
1955 ``noimplicitfloat``
1956     Disallows implicit floating-point code. This inhibits optimizations that
1957     use floating-point code and floating-point registers for operations that are
1958     not nominally floating-point. LLVM instructions that perform floating-point
1959     operations or require access to floating-point registers may still cause
1960     floating-point code to be generated.
1962     Also inhibits optimizations that create SIMD/vector code and registers from
1963     scalar code such as vectorization or memcpy/memset optimization. This
1964     includes integer vectors. Vector instructions present in IR may still cause
1965     vector code to be generated.
1966 ``noinline``
1967     This attribute indicates that the inliner should never inline this
1968     function in any situation. This attribute may not be used together
1969     with the ``alwaysinline`` attribute.
1970 ``nomerge``
1971     This attribute indicates that calls to this function should never be merged
1972     during optimization. For example, it will prevent tail merging otherwise
1973     identical code sequences that raise an exception or terminate the program.
1974     Tail merging normally reduces the precision of source location information,
1975     making stack traces less useful for debugging. This attribute gives the
1976     user control over the tradeoff between code size and debug information
1977     precision.
1978 ``nonlazybind``
1979     This attribute suppresses lazy symbol binding for the function. This
1980     may make calls to the function faster, at the cost of extra program
1981     startup time if the function is not called during program startup.
1982 ``noprofile``
1983     This function attribute prevents instrumentation based profiling, used for
1984     coverage or profile based optimization, from being added to a function. It
1985     also blocks inlining if the caller and callee have different values of this
1986     attribute.
1987 ``skipprofile``
1988     This function attribute prevents instrumentation based profiling, used for
1989     coverage or profile based optimization, from being added to a function. This
1990     attribute does not restrict inlining, so instrumented instruction could end
1991     up in this function.
1992 ``noredzone``
1993     This attribute indicates that the code generator should not use a
1994     red zone, even if the target-specific ABI normally permits it.
1995 ``indirect-tls-seg-refs``
1996     This attribute indicates that the code generator should not use
1997     direct TLS access through segment registers, even if the
1998     target-specific ABI normally permits it.
1999 ``noreturn``
2000     This function attribute indicates that the function never returns
2001     normally, hence through a return instruction. This produces undefined
2002     behavior at runtime if the function ever does dynamically return. Annotated
2003     functions may still raise an exception, i.a., ``nounwind`` is not implied.
2004 ``norecurse``
2005     This function attribute indicates that the function does not call itself
2006     either directly or indirectly down any possible call path. This produces
2007     undefined behavior at runtime if the function ever does recurse.
2009 .. _langref_willreturn:
2011 ``willreturn``
2012     This function attribute indicates that a call of this function will
2013     either exhibit undefined behavior or comes back and continues execution
2014     at a point in the existing call stack that includes the current invocation.
2015     Annotated functions may still raise an exception, i.a., ``nounwind`` is not implied.
2016     If an invocation of an annotated function does not return control back
2017     to a point in the call stack, the behavior is undefined.
2018 ``nosync``
2019     This function attribute indicates that the function does not communicate
2020     (synchronize) with another thread through memory or other well-defined means.
2021     Synchronization is considered possible in the presence of `atomic` accesses
2022     that enforce an order, thus not "unordered" and "monotonic", `volatile` accesses,
2023     as well as `convergent` function calls.
2025     Note that `convergent` operations can involve communication that is
2026     considered to be not through memory and does not necessarily imply an
2027     ordering between threads for the purposes of the memory model. Therefore,
2028     an operation can be both `convergent` and `nosync`.
2030     If a `nosync` function does ever synchronize with another thread,
2031     the behavior is undefined.
2032 ``nounwind``
2033     This function attribute indicates that the function never raises an
2034     exception. If the function does raise an exception, its runtime
2035     behavior is undefined. However, functions marked nounwind may still
2036     trap or generate asynchronous exceptions. Exception handling schemes
2037     that are recognized by LLVM to handle asynchronous exceptions, such
2038     as SEH, will still provide their implementation defined semantics.
2039 ``nosanitize_bounds``
2040     This attribute indicates that bounds checking sanitizer instrumentation
2041     is disabled for this function.
2042 ``nosanitize_coverage``
2043     This attribute indicates that SanitizerCoverage instrumentation is disabled
2044     for this function.
2045 ``null_pointer_is_valid``
2046    If ``null_pointer_is_valid`` is set, then the ``null`` address
2047    in address-space 0 is considered to be a valid address for memory loads and
2048    stores. Any analysis or optimization should not treat dereferencing a
2049    pointer to ``null`` as undefined behavior in this function.
2050    Note: Comparing address of a global variable to ``null`` may still
2051    evaluate to false because of a limitation in querying this attribute inside
2052    constant expressions.
2053 ``optdebug``
2054     This attribute suggests that optimization passes and code generator passes
2055     should make choices that try to preserve debug info without significantly
2056     degrading runtime performance.
2057     This attribute is incompatible with the ``minsize``, ``optsize``, and
2058     ``optnone`` attributes.
2059 ``optforfuzzing``
2060     This attribute indicates that this function should be optimized
2061     for maximum fuzzing signal.
2062 ``optnone``
2063     This function attribute indicates that most optimization passes will skip
2064     this function, with the exception of interprocedural optimization passes.
2065     Code generation defaults to the "fast" instruction selector.
2066     This attribute cannot be used together with the ``alwaysinline``
2067     attribute; this attribute is also incompatible
2068     with the ``minsize``, ``optsize``, and ``optdebug`` attributes.
2070     This attribute requires the ``noinline`` attribute to be specified on
2071     the function as well, so the function is never inlined into any caller.
2072     Only functions with the ``alwaysinline`` attribute are valid
2073     candidates for inlining into the body of this function.
2074 ``optsize``
2075     This attribute suggests that optimization passes and code generator
2076     passes make choices that keep the code size of this function low,
2077     and otherwise do optimizations specifically to reduce code size as
2078     long as they do not significantly impact runtime performance.
2079     This attribute is incompatible with the ``optdebug`` and ``optnone``
2080     attributes.
2081 ``"patchable-function"``
2082     This attribute tells the code generator that the code
2083     generated for this function needs to follow certain conventions that
2084     make it possible for a runtime function to patch over it later.
2085     The exact effect of this attribute depends on its string value,
2086     for which there currently is one legal possibility:
2088      * ``"prologue-short-redirect"`` - This style of patchable
2089        function is intended to support patching a function prologue to
2090        redirect control away from the function in a thread safe
2091        manner.  It guarantees that the first instruction of the
2092        function will be large enough to accommodate a short jump
2093        instruction, and will be sufficiently aligned to allow being
2094        fully changed via an atomic compare-and-swap instruction.
2095        While the first requirement can be satisfied by inserting large
2096        enough NOP, LLVM can and will try to re-purpose an existing
2097        instruction (i.e. one that would have to be emitted anyway) as
2098        the patchable instruction larger than a short jump.
2100        ``"prologue-short-redirect"`` is currently only supported on
2101        x86-64.
2103     This attribute by itself does not imply restrictions on
2104     inter-procedural optimizations.  All of the semantic effects the
2105     patching may have to be separately conveyed via the linkage type.
2106 ``"probe-stack"``
2107     This attribute indicates that the function will trigger a guard region
2108     in the end of the stack. It ensures that accesses to the stack must be
2109     no further apart than the size of the guard region to a previous
2110     access of the stack. It takes one required string value, the name of
2111     the stack probing function that will be called.
2113     If a function that has a ``"probe-stack"`` attribute is inlined into
2114     a function with another ``"probe-stack"`` attribute, the resulting
2115     function has the ``"probe-stack"`` attribute of the caller. If a
2116     function that has a ``"probe-stack"`` attribute is inlined into a
2117     function that has no ``"probe-stack"`` attribute at all, the resulting
2118     function has the ``"probe-stack"`` attribute of the callee.
2119 ``"stack-probe-size"``
2120     This attribute controls the behavior of stack probes: either
2121     the ``"probe-stack"`` attribute, or ABI-required stack probes, if any.
2122     It defines the size of the guard region. It ensures that if the function
2123     may use more stack space than the size of the guard region, stack probing
2124     sequence will be emitted. It takes one required integer value, which
2125     is 4096 by default.
2127     If a function that has a ``"stack-probe-size"`` attribute is inlined into
2128     a function with another ``"stack-probe-size"`` attribute, the resulting
2129     function has the ``"stack-probe-size"`` attribute that has the lower
2130     numeric value. If a function that has a ``"stack-probe-size"`` attribute is
2131     inlined into a function that has no ``"stack-probe-size"`` attribute
2132     at all, the resulting function has the ``"stack-probe-size"`` attribute
2133     of the callee.
2134 ``"no-stack-arg-probe"``
2135     This attribute disables ABI-required stack probes, if any.
2136 ``returns_twice``
2137     This attribute indicates that this function can return twice. The C
2138     ``setjmp`` is an example of such a function. The compiler disables
2139     some optimizations (like tail calls) in the caller of these
2140     functions.
2141 ``safestack``
2142     This attribute indicates that
2143     `SafeStack <https://clang.llvm.org/docs/SafeStack.html>`_
2144     protection is enabled for this function.
2146     If a function that has a ``safestack`` attribute is inlined into a
2147     function that doesn't have a ``safestack`` attribute or which has an
2148     ``ssp``, ``sspstrong`` or ``sspreq`` attribute, then the resulting
2149     function will have a ``safestack`` attribute.
2150 ``sanitize_address``
2151     This attribute indicates that AddressSanitizer checks
2152     (dynamic address safety analysis) are enabled for this function.
2153 ``sanitize_memory``
2154     This attribute indicates that MemorySanitizer checks (dynamic detection
2155     of accesses to uninitialized memory) are enabled for this function.
2156 ``sanitize_thread``
2157     This attribute indicates that ThreadSanitizer checks
2158     (dynamic thread safety analysis) are enabled for this function.
2159 ``sanitize_hwaddress``
2160     This attribute indicates that HWAddressSanitizer checks
2161     (dynamic address safety analysis based on tagged pointers) are enabled for
2162     this function.
2163 ``sanitize_memtag``
2164     This attribute indicates that MemTagSanitizer checks
2165     (dynamic address safety analysis based on Armv8 MTE) are enabled for
2166     this function.
2167 ``speculative_load_hardening``
2168     This attribute indicates that
2169     `Speculative Load Hardening <https://llvm.org/docs/SpeculativeLoadHardening.html>`_
2170     should be enabled for the function body.
2172     Speculative Load Hardening is a best-effort mitigation against
2173     information leak attacks that make use of control flow
2174     miss-speculation - specifically miss-speculation of whether a branch
2175     is taken or not. Typically vulnerabilities enabling such attacks are
2176     classified as "Spectre variant #1". Notably, this does not attempt to
2177     mitigate against miss-speculation of branch target, classified as
2178     "Spectre variant #2" vulnerabilities.
2180     When inlining, the attribute is sticky. Inlining a function that carries
2181     this attribute will cause the caller to gain the attribute. This is intended
2182     to provide a maximally conservative model where the code in a function
2183     annotated with this attribute will always (even after inlining) end up
2184     hardened.
2185 ``speculatable``
2186     This function attribute indicates that the function does not have any
2187     effects besides calculating its result and does not have undefined behavior.
2188     Note that ``speculatable`` is not enough to conclude that along any
2189     particular execution path the number of calls to this function will not be
2190     externally observable. This attribute is only valid on functions
2191     and declarations, not on individual call sites. If a function is
2192     incorrectly marked as speculatable and really does exhibit
2193     undefined behavior, the undefined behavior may be observed even
2194     if the call site is dead code.
2196 ``ssp``
2197     This attribute indicates that the function should emit a stack
2198     smashing protector. It is in the form of a "canary" --- a random value
2199     placed on the stack before the local variables that's checked upon
2200     return from the function to see if it has been overwritten. A
2201     heuristic is used to determine if a function needs stack protectors
2202     or not. The heuristic used will enable protectors for functions with:
2204     - Character arrays larger than ``ssp-buffer-size`` (default 8).
2205     - Aggregates containing character arrays larger than ``ssp-buffer-size``.
2206     - Calls to alloca() with variable sizes or constant sizes greater than
2207       ``ssp-buffer-size``.
2209     Variables that are identified as requiring a protector will be arranged
2210     on the stack such that they are adjacent to the stack protector guard.
2212     If a function with an ``ssp`` attribute is inlined into a calling function,
2213     the attribute is not carried over to the calling function.
2215 ``sspstrong``
2216     This attribute indicates that the function should emit a stack smashing
2217     protector. This attribute causes a strong heuristic to be used when
2218     determining if a function needs stack protectors. The strong heuristic
2219     will enable protectors for functions with:
2221     - Arrays of any size and type
2222     - Aggregates containing an array of any size and type.
2223     - Calls to alloca().
2224     - Local variables that have had their address taken.
2226     Variables that are identified as requiring a protector will be arranged
2227     on the stack such that they are adjacent to the stack protector guard.
2228     The specific layout rules are:
2230     #. Large arrays and structures containing large arrays
2231        (``>= ssp-buffer-size``) are closest to the stack protector.
2232     #. Small arrays and structures containing small arrays
2233        (``< ssp-buffer-size``) are 2nd closest to the protector.
2234     #. Variables that have had their address taken are 3rd closest to the
2235        protector.
2237     This overrides the ``ssp`` function attribute.
2239     If a function with an ``sspstrong`` attribute is inlined into a calling
2240     function which has an ``ssp`` attribute, the calling function's attribute
2241     will be upgraded to ``sspstrong``.
2243 ``sspreq``
2244     This attribute indicates that the function should *always* emit a stack
2245     smashing protector. This overrides the ``ssp`` and ``sspstrong`` function
2246     attributes.
2248     Variables that are identified as requiring a protector will be arranged
2249     on the stack such that they are adjacent to the stack protector guard.
2250     The specific layout rules are:
2252     #. Large arrays and structures containing large arrays
2253        (``>= ssp-buffer-size``) are closest to the stack protector.
2254     #. Small arrays and structures containing small arrays
2255        (``< ssp-buffer-size``) are 2nd closest to the protector.
2256     #. Variables that have had their address taken are 3rd closest to the
2257        protector.
2259     If a function with an ``sspreq`` attribute is inlined into a calling
2260     function which has an ``ssp`` or ``sspstrong`` attribute, the calling
2261     function's attribute will be upgraded to ``sspreq``.
2263 ``strictfp``
2264     This attribute indicates that the function was called from a scope that
2265     requires strict floating-point semantics.  LLVM will not attempt any
2266     optimizations that require assumptions about the floating-point rounding
2267     mode or that might alter the state of floating-point status flags that
2268     might otherwise be set or cleared by calling this function. LLVM will
2269     not introduce any new floating-point instructions that may trap.
2271 .. _denormal_fp_math:
2273 ``"denormal-fp-math"``
2274     This indicates the denormal (subnormal) handling that may be
2275     assumed for the default floating-point environment. This is a
2276     comma separated pair. The elements may be one of ``"ieee"``,
2277     ``"preserve-sign"``, ``"positive-zero"``, or ``"dynamic"``. The
2278     first entry indicates the flushing mode for the result of floating
2279     point operations. The second indicates the handling of denormal inputs
2280     to floating point instructions. For compatibility with older
2281     bitcode, if the second value is omitted, both input and output
2282     modes will assume the same mode.
2284     If this is attribute is not specified, the default is ``"ieee,ieee"``.
2286     If the output mode is ``"preserve-sign"``, or ``"positive-zero"``,
2287     denormal outputs may be flushed to zero by standard floating-point
2288     operations. It is not mandated that flushing to zero occurs, but if
2289     a denormal output is flushed to zero, it must respect the sign
2290     mode. Not all targets support all modes.
2292     If the mode is ``"dynamic"``, the behavior is derived from the
2293     dynamic state of the floating-point environment. Transformations
2294     which depend on the behavior of denormal values should not be
2295     performed.
2297     While this indicates the expected floating point mode the function
2298     will be executed with, this does not make any attempt to ensure
2299     the mode is consistent. User or platform code is expected to set
2300     the floating point mode appropriately before function entry.
2302     If the input mode is ``"preserve-sign"``, or ``"positive-zero"``,
2303     a floating-point operation must treat any input denormal value as
2304     zero. In some situations, if an instruction does not respect this
2305     mode, the input may need to be converted to 0 as if by
2306     ``@llvm.canonicalize`` during lowering for correctness.
2308 ``"denormal-fp-math-f32"``
2309     Same as ``"denormal-fp-math"``, but only controls the behavior of
2310     the 32-bit float type (or vectors of 32-bit floats). If both are
2311     are present, this overrides ``"denormal-fp-math"``. Not all targets
2312     support separately setting the denormal mode per type, and no
2313     attempt is made to diagnose unsupported uses. Currently this
2314     attribute is respected by the AMDGPU and NVPTX backends.
2316 ``"thunk"``
2317     This attribute indicates that the function will delegate to some other
2318     function with a tail call. The prototype of a thunk should not be used for
2319     optimization purposes. The caller is expected to cast the thunk prototype to
2320     match the thunk target prototype.
2322 ``"tls-load-hoist"``
2323     This attribute indicates that the function will try to reduce redundant
2324     tls address calculation by hoisting tls variable.
2326 ``uwtable[(sync|async)]``
2327     This attribute indicates that the ABI being targeted requires that
2328     an unwind table entry be produced for this function even if we can
2329     show that no exceptions passes by it. This is normally the case for
2330     the ELF x86-64 abi, but it can be disabled for some compilation
2331     units. The optional parameter describes what kind of unwind tables
2332     to generate: ``sync`` for normal unwind tables, ``async`` for asynchronous
2333     (instruction precise) unwind tables. Without the parameter, the attribute
2334     ``uwtable`` is equivalent to ``uwtable(async)``.
2335 ``nocf_check``
2336     This attribute indicates that no control-flow check will be performed on
2337     the attributed entity. It disables -fcf-protection=<> for a specific
2338     entity to fine grain the HW control flow protection mechanism. The flag
2339     is target independent and currently appertains to a function or function
2340     pointer.
2341 ``shadowcallstack``
2342     This attribute indicates that the ShadowCallStack checks are enabled for
2343     the function. The instrumentation checks that the return address for the
2344     function has not changed between the function prolog and epilog. It is
2345     currently x86_64-specific.
2347 .. _langref_mustprogress:
2349 ``mustprogress``
2350     This attribute indicates that the function is required to return, unwind,
2351     or interact with the environment in an observable way e.g. via a volatile
2352     memory access, I/O, or other synchronization.  The ``mustprogress``
2353     attribute is intended to model the requirements of the first section of
2354     [intro.progress] of the C++ Standard. As a consequence, a loop in a
2355     function with the `mustprogress` attribute can be assumed to terminate if
2356     it does not interact with the environment in an observable way, and
2357     terminating loops without side-effects can be removed. If a `mustprogress`
2358     function does not satisfy this contract, the behavior is undefined.  This
2359     attribute does not apply transitively to callees, but does apply to call
2360     sites within the function. Note that `willreturn` implies `mustprogress`.
2361 ``"warn-stack-size"="<threshold>"``
2362     This attribute sets a threshold to emit diagnostics once the frame size is
2363     known should the frame size exceed the specified value.  It takes one
2364     required integer value, which should be a non-negative integer, and less
2365     than `UINT_MAX`.  It's unspecified which threshold will be used when
2366     duplicate definitions are linked together with differing values.
2367 ``vscale_range(<min>[, <max>])``
2368     This function attribute indicates `vscale` is a power-of-two within a
2369     specified range. `min` must be a power-of-two that is greater than 0. When
2370     specified, `max` must be a power-of-two greater-than-or-equal to `min` or 0
2371     to signify an unbounded maximum. The syntax `vscale_range(<val>)` can be
2372     used to set both `min` and `max` to the same value. Functions that don't
2373     include this attribute make no assumptions about the value of `vscale`.
2374 ``"nooutline"``
2375     This attribute indicates that outlining passes should not modify the
2376     function.
2378 Call Site Attributes
2379 ----------------------
2381 In addition to function attributes the following call site only
2382 attributes are supported:
2384 ``vector-function-abi-variant``
2385     This attribute can be attached to a :ref:`call <i_call>` to list
2386     the vector functions associated to the function. Notice that the
2387     attribute cannot be attached to a :ref:`invoke <i_invoke>` or a
2388     :ref:`callbr <i_callbr>` instruction. The attribute consists of a
2389     comma separated list of mangled names. The order of the list does
2390     not imply preference (it is logically a set). The compiler is free
2391     to pick any listed vector function of its choosing.
2393     The syntax for the mangled names is as follows:::
2395         _ZGV<isa><mask><vlen><parameters>_<scalar_name>[(<vector_redirection>)]
2397     When present, the attribute informs the compiler that the function
2398     ``<scalar_name>`` has a corresponding vector variant that can be
2399     used to perform the concurrent invocation of ``<scalar_name>`` on
2400     vectors. The shape of the vector function is described by the
2401     tokens between the prefix ``_ZGV`` and the ``<scalar_name>``
2402     token. The standard name of the vector function is
2403     ``_ZGV<isa><mask><vlen><parameters>_<scalar_name>``. When present,
2404     the optional token ``(<vector_redirection>)`` informs the compiler
2405     that a custom name is provided in addition to the standard one
2406     (custom names can be provided for example via the use of ``declare
2407     variant`` in OpenMP 5.0). The declaration of the variant must be
2408     present in the IR Module. The signature of the vector variant is
2409     determined by the rules of the Vector Function ABI (VFABI)
2410     specifications of the target. For Arm and X86, the VFABI can be
2411     found at https://github.com/ARM-software/abi-aa and
2412     https://software.intel.com/content/www/us/en/develop/download/vector-simd-function-abi.html,
2413     respectively.
2415     For X86 and Arm targets, the values of the tokens in the standard
2416     name are those that are defined in the VFABI. LLVM has an internal
2417     ``<isa>`` token that can be used to create scalar-to-vector
2418     mappings for functions that are not directly associated to any of
2419     the target ISAs (for example, some of the mappings stored in the
2420     TargetLibraryInfo). Valid values for the ``<isa>`` token are:::
2422         <isa>:= b | c | d | e  -> X86 SSE, AVX, AVX2, AVX512
2423               | n | s          -> Armv8 Advanced SIMD, SVE
2424               | __LLVM__       -> Internal LLVM Vector ISA
2426     For all targets currently supported (x86, Arm and Internal LLVM),
2427     the remaining tokens can have the following values:::
2429         <mask>:= M | N         -> mask | no mask
2431         <vlen>:= number        -> number of lanes
2432                | x             -> VLA (Vector Length Agnostic)
2434         <parameters>:= v              -> vector
2435                      | l | l <number> -> linear
2436                      | R | R <number> -> linear with ref modifier
2437                      | L | L <number> -> linear with val modifier
2438                      | U | U <number> -> linear with uval modifier
2439                      | ls <pos>       -> runtime linear
2440                      | Rs <pos>       -> runtime linear with ref modifier
2441                      | Ls <pos>       -> runtime linear with val modifier
2442                      | Us <pos>       -> runtime linear with uval modifier
2443                      | u              -> uniform
2445         <scalar_name>:= name of the scalar function
2447         <vector_redirection>:= optional, custom name of the vector function
2449 ``preallocated(<ty>)``
2450     This attribute is required on calls to ``llvm.call.preallocated.arg``
2451     and cannot be used on any other call. See
2452     :ref:`llvm.call.preallocated.arg<int_call_preallocated_arg>` for more
2453     details.
2455 .. _glattrs:
2457 Global Attributes
2458 -----------------
2460 Attributes may be set to communicate additional information about a global variable.
2461 Unlike :ref:`function attributes <fnattrs>`, attributes on a global variable
2462 are grouped into a single :ref:`attribute group <attrgrp>`.
2464 ``no_sanitize_address``
2465     This attribute indicates that the global variable should not have
2466     AddressSanitizer instrumentation applied to it, because it was annotated
2467     with `__attribute__((no_sanitize("address")))`,
2468     `__attribute__((disable_sanitizer_instrumentation))`, or included in the
2469     `-fsanitize-ignorelist` file.
2470 ``no_sanitize_hwaddress``
2471     This attribute indicates that the global variable should not have
2472     HWAddressSanitizer instrumentation applied to it, because it was annotated
2473     with `__attribute__((no_sanitize("hwaddress")))`,
2474     `__attribute__((disable_sanitizer_instrumentation))`, or included in the
2475     `-fsanitize-ignorelist` file.
2476 ``sanitize_memtag``
2477     This attribute indicates that the global variable should have AArch64 memory
2478     tags (MTE) instrumentation applied to it. This attribute causes the
2479     suppression of certain optimisations, like GlobalMerge, as well as ensuring
2480     extra directives are emitted in the assembly and extra bits of metadata are
2481     placed in the object file so that the linker can ensure the accesses are
2482     protected by MTE. This attribute is added by clang when
2483     `-fsanitize=memtag-globals` is provided, as long as the global is not marked
2484     with `__attribute__((no_sanitize("memtag")))`,
2485     `__attribute__((disable_sanitizer_instrumentation))`, or included in the
2486     `-fsanitize-ignorelist` file. The AArch64 Globals Tagging pass may remove
2487     this attribute when it's not possible to tag the global (e.g. it's a TLS
2488     variable).
2489 ``sanitize_address_dyninit``
2490     This attribute indicates that the global variable, when instrumented with
2491     AddressSanitizer, should be checked for ODR violations. This attribute is
2492     applied to global variables that are dynamically initialized according to
2493     C++ rules.
2495 .. _opbundles:
2497 Operand Bundles
2498 ---------------
2500 Operand bundles are tagged sets of SSA values that can be associated
2501 with certain LLVM instructions (currently only ``call`` s and
2502 ``invoke`` s).  In a way they are like metadata, but dropping them is
2503 incorrect and will change program semantics.
2505 Syntax::
2507     operand bundle set ::= '[' operand bundle (, operand bundle )* ']'
2508     operand bundle ::= tag '(' [ bundle operand ] (, bundle operand )* ')'
2509     bundle operand ::= SSA value
2510     tag ::= string constant
2512 Operand bundles are **not** part of a function's signature, and a
2513 given function may be called from multiple places with different kinds
2514 of operand bundles.  This reflects the fact that the operand bundles
2515 are conceptually a part of the ``call`` (or ``invoke``), not the
2516 callee being dispatched to.
2518 Operand bundles are a generic mechanism intended to support
2519 runtime-introspection-like functionality for managed languages.  While
2520 the exact semantics of an operand bundle depend on the bundle tag,
2521 there are certain limitations to how much the presence of an operand
2522 bundle can influence the semantics of a program.  These restrictions
2523 are described as the semantics of an "unknown" operand bundle.  As
2524 long as the behavior of an operand bundle is describable within these
2525 restrictions, LLVM does not need to have special knowledge of the
2526 operand bundle to not miscompile programs containing it.
2528 - The bundle operands for an unknown operand bundle escape in unknown
2529   ways before control is transferred to the callee or invokee.
2530 - Calls and invokes with operand bundles have unknown read / write
2531   effect on the heap on entry and exit (even if the call target specifies
2532   a ``memory`` attribute), unless they're overridden with
2533   callsite specific attributes.
2534 - An operand bundle at a call site cannot change the implementation
2535   of the called function.  Inter-procedural optimizations work as
2536   usual as long as they take into account the first two properties.
2538 More specific types of operand bundles are described below.
2540 .. _deopt_opbundles:
2542 Deoptimization Operand Bundles
2543 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2545 Deoptimization operand bundles are characterized by the ``"deopt"``
2546 operand bundle tag.  These operand bundles represent an alternate
2547 "safe" continuation for the call site they're attached to, and can be
2548 used by a suitable runtime to deoptimize the compiled frame at the
2549 specified call site.  There can be at most one ``"deopt"`` operand
2550 bundle attached to a call site.  Exact details of deoptimization is
2551 out of scope for the language reference, but it usually involves
2552 rewriting a compiled frame into a set of interpreted frames.
2554 From the compiler's perspective, deoptimization operand bundles make
2555 the call sites they're attached to at least ``readonly``.  They read
2556 through all of their pointer typed operands (even if they're not
2557 otherwise escaped) and the entire visible heap.  Deoptimization
2558 operand bundles do not capture their operands except during
2559 deoptimization, in which case control will not be returned to the
2560 compiled frame.
2562 The inliner knows how to inline through calls that have deoptimization
2563 operand bundles.  Just like inlining through a normal call site
2564 involves composing the normal and exceptional continuations, inlining
2565 through a call site with a deoptimization operand bundle needs to
2566 appropriately compose the "safe" deoptimization continuation.  The
2567 inliner does this by prepending the parent's deoptimization
2568 continuation to every deoptimization continuation in the inlined body.
2569 E.g. inlining ``@f`` into ``@g`` in the following example
2571 .. code-block:: llvm
2573     define void @f() {
2574       call void @x()  ;; no deopt state
2575       call void @y() [ "deopt"(i32 10) ]
2576       call void @y() [ "deopt"(i32 10), "unknown"(ptr null) ]
2577       ret void
2578     }
2580     define void @g() {
2581       call void @f() [ "deopt"(i32 20) ]
2582       ret void
2583     }
2585 will result in
2587 .. code-block:: llvm
2589     define void @g() {
2590       call void @x()  ;; still no deopt state
2591       call void @y() [ "deopt"(i32 20, i32 10) ]
2592       call void @y() [ "deopt"(i32 20, i32 10), "unknown"(ptr null) ]
2593       ret void
2594     }
2596 It is the frontend's responsibility to structure or encode the
2597 deoptimization state in a way that syntactically prepending the
2598 caller's deoptimization state to the callee's deoptimization state is
2599 semantically equivalent to composing the caller's deoptimization
2600 continuation after the callee's deoptimization continuation.
2602 .. _ob_funclet:
2604 Funclet Operand Bundles
2605 ^^^^^^^^^^^^^^^^^^^^^^^
2607 Funclet operand bundles are characterized by the ``"funclet"``
2608 operand bundle tag.  These operand bundles indicate that a call site
2609 is within a particular funclet.  There can be at most one
2610 ``"funclet"`` operand bundle attached to a call site and it must have
2611 exactly one bundle operand.
2613 If any funclet EH pads have been "entered" but not "exited" (per the
2614 `description in the EH doc\ <ExceptionHandling.html#wineh-constraints>`_),
2615 it is undefined behavior to execute a ``call`` or ``invoke`` which:
2617 * does not have a ``"funclet"`` bundle and is not a ``call`` to a nounwind
2618   intrinsic, or
2619 * has a ``"funclet"`` bundle whose operand is not the most-recently-entered
2620   not-yet-exited funclet EH pad.
2622 Similarly, if no funclet EH pads have been entered-but-not-yet-exited,
2623 executing a ``call`` or ``invoke`` with a ``"funclet"`` bundle is undefined behavior.
2625 GC Transition Operand Bundles
2626 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2628 GC transition operand bundles are characterized by the
2629 ``"gc-transition"`` operand bundle tag. These operand bundles mark a
2630 call as a transition between a function with one GC strategy to a
2631 function with a different GC strategy. If coordinating the transition
2632 between GC strategies requires additional code generation at the call
2633 site, these bundles may contain any values that are needed by the
2634 generated code.  For more details, see :ref:`GC Transitions
2635 <gc_transition_args>`.
2637 The bundle contain an arbitrary list of Values which need to be passed
2638 to GC transition code. They will be lowered and passed as operands to
2639 the appropriate GC_TRANSITION nodes in the selection DAG. It is assumed
2640 that these arguments must be available before and after (but not
2641 necessarily during) the execution of the callee.
2643 .. _assume_opbundles:
2645 Assume Operand Bundles
2646 ^^^^^^^^^^^^^^^^^^^^^^
2648 Operand bundles on an :ref:`llvm.assume <int_assume>` allows representing
2649 assumptions, such as that a :ref:`parameter attribute <paramattrs>` or a
2650 :ref:`function attribute <fnattrs>` holds for a certain value at a certain
2651 location. Operand bundles enable assumptions that are either hard or impossible
2652 to represent as a boolean argument of an :ref:`llvm.assume <int_assume>`.
2654 An assume operand bundle has the form:
2658       "<tag>"([ <arguments>] ])
2660 In the case of function or parameter attributes, the operand bundle has the
2661 restricted form:
2665       "<tag>"([ <holds for value> [, <attribute argument>] ])
2667 * The tag of the operand bundle is usually the name of attribute that can be
2668   assumed to hold. It can also be `ignore`, this tag doesn't contain any
2669   information and should be ignored.
2670 * The first argument if present is the value for which the attribute hold.
2671 * The second argument if present is an argument of the attribute.
2673 If there are no arguments the attribute is a property of the call location.
2675 For example:
2677 .. code-block:: llvm
2679       call void @llvm.assume(i1 true) ["align"(ptr %val, i32 8)]
2681 allows the optimizer to assume that at location of call to
2682 :ref:`llvm.assume <int_assume>` ``%val`` has an alignment of at least 8.
2684 .. code-block:: llvm
2686       call void @llvm.assume(i1 %cond) ["cold"(), "nonnull"(ptr %val)]
2688 allows the optimizer to assume that the :ref:`llvm.assume <int_assume>`
2689 call location is cold and that ``%val`` may not be null.
2691 Just like for the argument of :ref:`llvm.assume <int_assume>`, if any of the
2692 provided guarantees are violated at runtime the behavior is undefined.
2694 While attributes expect constant arguments, assume operand bundles may be
2695 provided a dynamic value, for example:
2697 .. code-block:: llvm
2699       call void @llvm.assume(i1 true) ["align"(ptr %val, i32 %align)]
2701 If the operand bundle value violates any requirements on the attribute value,
2702 the behavior is undefined, unless one of the following exceptions applies:
2704 * ``"align"`` operand bundles may specify a non-power-of-two alignment
2705   (including a zero alignment). If this is the case, then the pointer value
2706   must be a null pointer, otherwise the behavior is undefined.
2708 In addition to allowing operand bundles encoding function and parameter
2709 attributes, an assume operand bundle my also encode a ``separate_storage``
2710 operand bundle. This has the form:
2712 .. code-block:: llvm
2714     separate_storage(<val1>, <val2>)``
2716 This indicates that no pointer :ref:`based <pointeraliasing>` on one of its
2717 arguments can alias any pointer based on the other.
2719 Even if the assumed property can be encoded as a boolean value, like
2720 ``nonnull``, using operand bundles to express the property can still have
2721 benefits:
2723 * Attributes that can be expressed via operand bundles are directly the
2724   property that the optimizer uses and cares about. Encoding attributes as
2725   operand bundles removes the need for an instruction sequence that represents
2726   the property (e.g., `icmp ne ptr %p, null` for `nonnull`) and for the
2727   optimizer to deduce the property from that instruction sequence.
2728 * Expressing the property using operand bundles makes it easy to identify the
2729   use of the value as a use in an :ref:`llvm.assume <int_assume>`. This then
2730   simplifies and improves heuristics, e.g., for use "use-sensitive"
2731   optimizations.
2733 .. _ob_preallocated:
2735 Preallocated Operand Bundles
2736 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2738 Preallocated operand bundles are characterized by the ``"preallocated"``
2739 operand bundle tag.  These operand bundles allow separation of the allocation
2740 of the call argument memory from the call site.  This is necessary to pass
2741 non-trivially copyable objects by value in a way that is compatible with MSVC
2742 on some targets.  There can be at most one ``"preallocated"`` operand bundle
2743 attached to a call site and it must have exactly one bundle operand, which is
2744 a token generated by ``@llvm.call.preallocated.setup``.  A call with this
2745 operand bundle should not adjust the stack before entering the function, as
2746 that will have been done by one of the ``@llvm.call.preallocated.*`` intrinsics.
2748 .. code-block:: llvm
2750       %foo = type { i64, i32 }
2752       ...
2754       %t = call token @llvm.call.preallocated.setup(i32 1)
2755       %a = call ptr @llvm.call.preallocated.arg(token %t, i32 0) preallocated(%foo)
2756       ; initialize %b
2757       call void @bar(i32 42, ptr preallocated(%foo) %a) ["preallocated"(token %t)]
2759 .. _ob_gc_live:
2761 GC Live Operand Bundles
2762 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2764 A "gc-live" operand bundle is only valid on a :ref:`gc.statepoint <gc_statepoint>`
2765 intrinsic. The operand bundle must contain every pointer to a garbage collected
2766 object which potentially needs to be updated by the garbage collector.
2768 When lowered, any relocated value will be recorded in the corresponding
2769 :ref:`stackmap entry <statepoint-stackmap-format>`.  See the intrinsic description
2770 for further details.
2772 ObjC ARC Attached Call Operand Bundles
2773 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2775 A ``"clang.arc.attachedcall"`` operand bundle on a call indicates the call is
2776 implicitly followed by a marker instruction and a call to an ObjC runtime
2777 function that uses the result of the call. The operand bundle takes a mandatory
2778 pointer to the runtime function (``@objc_retainAutoreleasedReturnValue`` or
2779 ``@objc_unsafeClaimAutoreleasedReturnValue``).
2780 The return value of a call with this bundle is used by a call to
2781 ``@llvm.objc.clang.arc.noop.use`` unless the called function's return type is
2782 void, in which case the operand bundle is ignored.
2784 .. code-block:: llvm
2786    ; The marker instruction and a runtime function call are inserted after the call
2787    ; to @foo.
2788    call ptr @foo() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
2789    call ptr @foo() [ "clang.arc.attachedcall"(ptr @objc_unsafeClaimAutoreleasedReturnValue) ]
2791 The operand bundle is needed to ensure the call is immediately followed by the
2792 marker instruction and the ObjC runtime call in the final output.
2794 .. _ob_ptrauth:
2796 Pointer Authentication Operand Bundles
2797 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2799 Pointer Authentication operand bundles are characterized by the
2800 ``"ptrauth"`` operand bundle tag.  They are described in the
2801 `Pointer Authentication <PointerAuth.html#operand-bundle>`__ document.
2803 .. _ob_kcfi:
2805 KCFI Operand Bundles
2806 ^^^^^^^^^^^^^^^^^^^^
2808 A ``"kcfi"`` operand bundle on an indirect call indicates that the call will
2809 be preceded by a runtime type check, which validates that the call target is
2810 prefixed with a :ref:`type identifier<md_kcfi_type>` that matches the operand
2811 bundle attribute. For example:
2813 .. code-block:: llvm
2815       call void %0() ["kcfi"(i32 1234)]
2817 Clang emits KCFI operand bundles and the necessary metadata with
2818 ``-fsanitize=kcfi``.
2820 .. _convergencectrl:
2822 Convergence Control Operand Bundles
2823 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2825 A "convergencectrl" operand bundle is only valid on a ``convergent`` operation.
2826 When present, the operand bundle must contain exactly one value of token type.
2827 See the :doc:`ConvergentOperations` document for details.
2829 .. _moduleasm:
2831 Module-Level Inline Assembly
2832 ----------------------------
2834 Modules may contain "module-level inline asm" blocks, which corresponds
2835 to the GCC "file scope inline asm" blocks. These blocks are internally
2836 concatenated by LLVM and treated as a single unit, but may be separated
2837 in the ``.ll`` file if desired. The syntax is very simple:
2839 .. code-block:: llvm
2841     module asm "inline asm code goes here"
2842     module asm "more can go here"
2844 The strings can contain any character by escaping non-printable
2845 characters. The escape sequence used is simply "\\xx" where "xx" is the
2846 two digit hex code for the number.
2848 Note that the assembly string *must* be parseable by LLVM's integrated assembler
2849 (unless it is disabled), even when emitting a ``.s`` file.
2851 .. _langref_datalayout:
2853 Data Layout
2854 -----------
2856 A module may specify a target specific data layout string that specifies
2857 how data is to be laid out in memory. The syntax for the data layout is
2858 simply:
2860 .. code-block:: llvm
2862     target datalayout = "layout specification"
2864 The *layout specification* consists of a list of specifications
2865 separated by the minus sign character ('-'). Each specification starts
2866 with a letter and may include other information after the letter to
2867 define some aspect of the data layout. The specifications accepted are
2868 as follows:
2870 ``E``
2871     Specifies that the target lays out data in big-endian form. That is,
2872     the bits with the most significance have the lowest address
2873     location.
2874 ``e``
2875     Specifies that the target lays out data in little-endian form. That
2876     is, the bits with the least significance have the lowest address
2877     location.
2878 ``S<size>``
2879     Specifies the natural alignment of the stack in bits. Alignment
2880     promotion of stack variables is limited to the natural stack
2881     alignment to avoid dynamic stack realignment. The stack alignment
2882     must be a multiple of 8-bits. If omitted, the natural stack
2883     alignment defaults to "unspecified", which does not prevent any
2884     alignment promotions.
2885 ``P<address space>``
2886     Specifies the address space that corresponds to program memory.
2887     Harvard architectures can use this to specify what space LLVM
2888     should place things such as functions into. If omitted, the
2889     program memory space defaults to the default address space of 0,
2890     which corresponds to a Von Neumann architecture that has code
2891     and data in the same space.
2892 ``G<address space>``
2893     Specifies the address space to be used by default when creating global
2894     variables. If omitted, the globals address space defaults to the default
2895     address space 0.
2896     Note: variable declarations without an address space are always created in
2897     address space 0, this property only affects the default value to be used
2898     when creating globals without additional contextual information (e.g. in
2899     LLVM passes).
2901 .. _alloca_addrspace:
2903 ``A<address space>``
2904     Specifies the address space of objects created by '``alloca``'.
2905     Defaults to the default address space of 0.
2906 ``p[n]:<size>:<abi>[:<pref>][:<idx>]``
2907     This specifies the *size* of a pointer and its ``<abi>`` and
2908     ``<pref>``\erred alignments for address space ``n``. ``<pref>`` is optional
2909     and defaults to ``<abi>``. The fourth parameter ``<idx>`` is the size of the
2910     index that used for address calculation, which must be less than or equal
2911     to the pointer size. If not
2912     specified, the default index size is equal to the pointer size. All sizes
2913     are in bits. The address space, ``n``, is optional, and if not specified,
2914     denotes the default address space 0. The value of ``n`` must be
2915     in the range [1,2^24).
2916 ``i<size>:<abi>[:<pref>]``
2917     This specifies the alignment for an integer type of a given bit
2918     ``<size>``. The value of ``<size>`` must be in the range [1,2^24).
2919     ``<pref>`` is optional and defaults to ``<abi>``.
2920     For ``i8``, the ``<abi>`` value must equal 8,
2921     that is, ``i8`` must be naturally aligned.
2922 ``v<size>:<abi>[:<pref>]``
2923     This specifies the alignment for a vector type of a given bit
2924     ``<size>``. The value of ``<size>`` must be in the range [1,2^24).
2925     ``<pref>`` is optional and defaults to ``<abi>``.
2926 ``f<size>:<abi>[:<pref>]``
2927     This specifies the alignment for a floating-point type of a given bit
2928     ``<size>``. Only values of ``<size>`` that are supported by the target
2929     will work. 32 (float) and 64 (double) are supported on all targets; 80
2930     or 128 (different flavors of long double) are also supported on some
2931     targets. The value of ``<size>`` must be in the range [1,2^24).
2932     ``<pref>`` is optional and defaults to ``<abi>``.
2933 ``a:<abi>[:<pref>]``
2934     This specifies the alignment for an object of aggregate type.
2935     ``<pref>`` is optional and defaults to ``<abi>``.
2936 ``F<type><abi>``
2937     This specifies the alignment for function pointers.
2938     The options for ``<type>`` are:
2940     * ``i``: The alignment of function pointers is independent of the alignment
2941       of functions, and is a multiple of ``<abi>``.
2942     * ``n``: The alignment of function pointers is a multiple of the explicit
2943       alignment specified on the function, and is a multiple of ``<abi>``.
2944 ``m:<mangling>``
2945     If present, specifies that llvm names are mangled in the output. Symbols
2946     prefixed with the mangling escape character ``\01`` are passed through
2947     directly to the assembler without the escape character. The mangling style
2948     options are
2950     * ``e``: ELF mangling: Private symbols get a ``.L`` prefix.
2951     * ``l``: GOFF mangling: Private symbols get a ``@`` prefix.
2952     * ``m``: Mips mangling: Private symbols get a ``$`` prefix.
2953     * ``o``: Mach-O mangling: Private symbols get ``L`` prefix. Other
2954       symbols get a ``_`` prefix.
2955     * ``x``: Windows x86 COFF mangling: Private symbols get the usual prefix.
2956       Regular C symbols get a ``_`` prefix. Functions with ``__stdcall``,
2957       ``__fastcall``, and ``__vectorcall`` have custom mangling that appends
2958       ``@N`` where N is the number of bytes used to pass parameters. C++ symbols
2959       starting with ``?`` are not mangled in any way.
2960     * ``w``: Windows COFF mangling: Similar to ``x``, except that normal C
2961       symbols do not receive a ``_`` prefix.
2962     * ``a``: XCOFF mangling: Private symbols get a ``L..`` prefix.
2963 ``n<size1>:<size2>:<size3>...``
2964     This specifies a set of native integer widths for the target CPU in
2965     bits. For example, it might contain ``n32`` for 32-bit PowerPC,
2966     ``n32:64`` for PowerPC 64, or ``n8:16:32:64`` for X86-64. Elements of
2967     this set are considered to support most general arithmetic operations
2968     efficiently.
2969 ``ni:<address space0>:<address space1>:<address space2>...``
2970     This specifies pointer types with the specified address spaces
2971     as :ref:`Non-Integral Pointer Type <nointptrtype>` s.  The ``0``
2972     address space cannot be specified as non-integral.
2974 On every specification that takes a ``<abi>:<pref>``, specifying the
2975 ``<pref>`` alignment is optional. If omitted, the preceding ``:``
2976 should be omitted too and ``<pref>`` will be equal to ``<abi>``.
2978 When constructing the data layout for a given target, LLVM starts with a
2979 default set of specifications which are then (possibly) overridden by
2980 the specifications in the ``datalayout`` keyword. The default
2981 specifications are given in this list:
2983 -  ``e`` - little endian
2984 -  ``p:64:64:64`` - 64-bit pointers with 64-bit alignment.
2985 -  ``p[n]:64:64:64`` - Other address spaces are assumed to be the
2986    same as the default address space.
2987 -  ``S0`` - natural stack alignment is unspecified
2988 -  ``i1:8:8`` - i1 is 8-bit (byte) aligned
2989 -  ``i8:8:8`` - i8 is 8-bit (byte) aligned as mandated
2990 -  ``i16:16:16`` - i16 is 16-bit aligned
2991 -  ``i32:32:32`` - i32 is 32-bit aligned
2992 -  ``i64:32:64`` - i64 has ABI alignment of 32-bits but preferred
2993    alignment of 64-bits
2994 -  ``f16:16:16`` - half is 16-bit aligned
2995 -  ``f32:32:32`` - float is 32-bit aligned
2996 -  ``f64:64:64`` - double is 64-bit aligned
2997 -  ``f128:128:128`` - quad is 128-bit aligned
2998 -  ``v64:64:64`` - 64-bit vector is 64-bit aligned
2999 -  ``v128:128:128`` - 128-bit vector is 128-bit aligned
3000 -  ``a:0:64`` - aggregates are 64-bit aligned
3002 When LLVM is determining the alignment for a given type, it uses the
3003 following rules:
3005 #. If the type sought is an exact match for one of the specifications,
3006    that specification is used.
3007 #. If no match is found, and the type sought is an integer type, then
3008    the smallest integer type that is larger than the bitwidth of the
3009    sought type is used. If none of the specifications are larger than
3010    the bitwidth then the largest integer type is used. For example,
3011    given the default specifications above, the i7 type will use the
3012    alignment of i8 (next largest) while both i65 and i256 will use the
3013    alignment of i64 (largest specified).
3015 The function of the data layout string may not be what you expect.
3016 Notably, this is not a specification from the frontend of what alignment
3017 the code generator should use.
3019 Instead, if specified, the target data layout is required to match what
3020 the ultimate *code generator* expects. This string is used by the
3021 mid-level optimizers to improve code, and this only works if it matches
3022 what the ultimate code generator uses. There is no way to generate IR
3023 that does not embed this target-specific detail into the IR. If you
3024 don't specify the string, the default specifications will be used to
3025 generate a Data Layout and the optimization phases will operate
3026 accordingly and introduce target specificity into the IR with respect to
3027 these default specifications.
3029 .. _langref_triple:
3031 Target Triple
3032 -------------
3034 A module may specify a target triple string that describes the target
3035 host. The syntax for the target triple is simply:
3037 .. code-block:: llvm
3039     target triple = "x86_64-apple-macosx10.7.0"
3041 The *target triple* string consists of a series of identifiers delimited
3042 by the minus sign character ('-'). The canonical forms are:
3046     ARCHITECTURE-VENDOR-OPERATING_SYSTEM
3047     ARCHITECTURE-VENDOR-OPERATING_SYSTEM-ENVIRONMENT
3049 This information is passed along to the backend so that it generates
3050 code for the proper architecture. It's possible to override this on the
3051 command line with the ``-mtriple`` command line option.
3053 .. _objectlifetime:
3055 Object Lifetime
3056 ----------------------
3058 A memory object, or simply object, is a region of a memory space that is
3059 reserved by a memory allocation such as :ref:`alloca <i_alloca>`, heap
3060 allocation calls, and global variable definitions.
3061 Once it is allocated, the bytes stored in the region can only be read or written
3062 through a pointer that is :ref:`based on <pointeraliasing>` the allocation
3063 value.
3064 If a pointer that is not based on the object tries to read or write to the
3065 object, it is undefined behavior.
3067 A lifetime of a memory object is a property that decides its accessibility.
3068 Unless stated otherwise, a memory object is alive since its allocation, and
3069 dead after its deallocation.
3070 It is undefined behavior to access a memory object that isn't alive, but
3071 operations that don't dereference it such as
3072 :ref:`getelementptr <i_getelementptr>`, :ref:`ptrtoint <i_ptrtoint>` and
3073 :ref:`icmp <i_icmp>` return a valid result.
3074 This explains code motion of these instructions across operations that
3075 impact the object's lifetime.
3076 A stack object's lifetime can be explicitly specified using
3077 :ref:`llvm.lifetime.start <int_lifestart>` and
3078 :ref:`llvm.lifetime.end <int_lifeend>` intrinsic function calls.
3080 .. _pointeraliasing:
3082 Pointer Aliasing Rules
3083 ----------------------
3085 Any memory access must be done through a pointer value associated with
3086 an address range of the memory access, otherwise the behavior is
3087 undefined. Pointer values are associated with address ranges according
3088 to the following rules:
3090 -  A pointer value is associated with the addresses associated with any
3091    value it is *based* on.
3092 -  An address of a global variable is associated with the address range
3093    of the variable's storage.
3094 -  The result value of an allocation instruction is associated with the
3095    address range of the allocated storage.
3096 -  A null pointer in the default address-space is associated with no
3097    address.
3098 -  An :ref:`undef value <undefvalues>` in *any* address-space is
3099    associated with no address.
3100 -  An integer constant other than zero or a pointer value returned from
3101    a function not defined within LLVM may be associated with address
3102    ranges allocated through mechanisms other than those provided by
3103    LLVM. Such ranges shall not overlap with any ranges of addresses
3104    allocated by mechanisms provided by LLVM.
3106 A pointer value is *based* on another pointer value according to the
3107 following rules:
3109 -  A pointer value formed from a scalar ``getelementptr`` operation is *based* on
3110    the pointer-typed operand of the ``getelementptr``.
3111 -  The pointer in lane *l* of the result of a vector ``getelementptr`` operation
3112    is *based* on the pointer in lane *l* of the vector-of-pointers-typed operand
3113    of the ``getelementptr``.
3114 -  The result value of a ``bitcast`` is *based* on the operand of the
3115    ``bitcast``.
3116 -  A pointer value formed by an ``inttoptr`` is *based* on all pointer
3117    values that contribute (directly or indirectly) to the computation of
3118    the pointer's value.
3119 -  The "*based* on" relationship is transitive.
3121 Note that this definition of *"based"* is intentionally similar to the
3122 definition of *"based"* in C99, though it is slightly weaker.
3124 LLVM IR does not associate types with memory. The result type of a
3125 ``load`` merely indicates the size and alignment of the memory from
3126 which to load, as well as the interpretation of the value. The first
3127 operand type of a ``store`` similarly only indicates the size and
3128 alignment of the store.
3130 Consequently, type-based alias analysis, aka TBAA, aka
3131 ``-fstrict-aliasing``, is not applicable to general unadorned LLVM IR.
3132 :ref:`Metadata <metadata>` may be used to encode additional information
3133 which specialized optimization passes may use to implement type-based
3134 alias analysis.
3136 .. _pointercapture:
3138 Pointer Capture
3139 ---------------
3141 Given a function call and a pointer that is passed as an argument or stored in
3142 the memory before the call, a pointer is *captured* by the call if it makes a
3143 copy of any part of the pointer that outlives the call.
3144 To be precise, a pointer is captured if one or more of the following conditions
3145 hold:
3147 1. The call stores any bit of the pointer carrying information into a place,
3148    and the stored bits can be read from the place by the caller after this call
3149    exits.
3151 .. code-block:: llvm
3153     @glb  = global ptr null
3154     @glb2 = global ptr null
3155     @glb3 = global ptr null
3156     @glbi = global i32 0
3158     define ptr @f(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) {
3159       store ptr %a, ptr @glb ; %a is captured by this call
3161       store ptr %b,   ptr @glb2 ; %b isn't captured because the stored value is overwritten by the store below
3162       store ptr null, ptr @glb2
3164       store ptr %c,   ptr @glb3
3165       call void @g() ; If @g makes a copy of %c that outlives this call (@f), %c is captured
3166       store ptr null, ptr @glb3
3168       %i = ptrtoint ptr %d to i64
3169       %j = trunc i64 %i to i32
3170       store i32 %j, ptr @glbi ; %d is captured
3172       ret ptr %e ; %e is captured
3173     }
3175 2. The call stores any bit of the pointer carrying information into a place,
3176    and the stored bits can be safely read from the place by another thread via
3177    synchronization.
3179 .. code-block:: llvm
3181     @lock = global i1 true
3183     define void @f(ptr %a) {
3184       store ptr %a, ptr* @glb
3185       store atomic i1 false, ptr @lock release ; %a is captured because another thread can safely read @glb
3186       store ptr null, ptr @glb
3187       ret void
3188     }
3190 3. The call's behavior depends on any bit of the pointer carrying information.
3192 .. code-block:: llvm
3194     @glb = global i8 0
3196     define void @f(ptr %a) {
3197       %c = icmp eq ptr %a, @glb
3198       br i1 %c, label %BB_EXIT, label %BB_CONTINUE ; escapes %a
3199     BB_EXIT:
3200       call void @exit()
3201       unreachable
3202     BB_CONTINUE:
3203       ret void
3204     }
3206 4. The pointer is used in a volatile access as its address.
3209 .. _volatile:
3211 Volatile Memory Accesses
3212 ------------------------
3214 Certain memory accesses, such as :ref:`load <i_load>`'s,
3215 :ref:`store <i_store>`'s, and :ref:`llvm.memcpy <int_memcpy>`'s may be
3216 marked ``volatile``. The optimizers must not change the number of
3217 volatile operations or change their order of execution relative to other
3218 volatile operations. The optimizers *may* change the order of volatile
3219 operations relative to non-volatile operations. This is not Java's
3220 "volatile" and has no cross-thread synchronization behavior.
3222 A volatile load or store may have additional target-specific semantics.
3223 Any volatile operation can have side effects, and any volatile operation
3224 can read and/or modify state which is not accessible via a regular load
3225 or store in this module. Volatile operations may use addresses which do
3226 not point to memory (like MMIO registers). This means the compiler may
3227 not use a volatile operation to prove a non-volatile access to that
3228 address has defined behavior.
3230 The allowed side-effects for volatile accesses are limited.  If a
3231 non-volatile store to a given address would be legal, a volatile
3232 operation may modify the memory at that address. A volatile operation
3233 may not modify any other memory accessible by the module being compiled.
3234 A volatile operation may not call any code in the current module.
3236 In general (without target specific context), the address space of a
3237 volatile operation may not be changed. Different address spaces may
3238 have different trapping behavior when dereferencing an invalid
3239 pointer.
3241 The compiler may assume execution will continue after a volatile operation,
3242 so operations which modify memory or may have undefined behavior can be
3243 hoisted past a volatile operation.
3245 As an exception to the preceding rule, the compiler may not assume execution
3246 will continue after a volatile store operation. This restriction is necessary
3247 to support the somewhat common pattern in C of intentionally storing to an
3248 invalid pointer to crash the program. In the future, it might make sense to
3249 allow frontends to control this behavior.
3251 IR-level volatile loads and stores cannot safely be optimized into llvm.memcpy
3252 or llvm.memmove intrinsics even when those intrinsics are flagged volatile.
3253 Likewise, the backend should never split or merge target-legal volatile
3254 load/store instructions. Similarly, IR-level volatile loads and stores cannot
3255 change from integer to floating-point or vice versa.
3257 .. admonition:: Rationale
3259  Platforms may rely on volatile loads and stores of natively supported
3260  data width to be executed as single instruction. For example, in C
3261  this holds for an l-value of volatile primitive type with native
3262  hardware support, but not necessarily for aggregate types. The
3263  frontend upholds these expectations, which are intentionally
3264  unspecified in the IR. The rules above ensure that IR transformations
3265  do not violate the frontend's contract with the language.
3267 .. _memmodel:
3269 Memory Model for Concurrent Operations
3270 --------------------------------------
3272 The LLVM IR does not define any way to start parallel threads of
3273 execution or to register signal handlers. Nonetheless, there are
3274 platform-specific ways to create them, and we define LLVM IR's behavior
3275 in their presence. This model is inspired by the C++0x memory model.
3277 For a more informal introduction to this model, see the :doc:`Atomics`.
3279 We define a *happens-before* partial order as the least partial order
3280 that
3282 -  Is a superset of single-thread program order, and
3283 -  When a *synchronizes-with* ``b``, includes an edge from ``a`` to
3284    ``b``. *Synchronizes-with* pairs are introduced by platform-specific
3285    techniques, like pthread locks, thread creation, thread joining,
3286    etc., and by atomic instructions. (See also :ref:`Atomic Memory Ordering
3287    Constraints <ordering>`).
3289 Note that program order does not introduce *happens-before* edges
3290 between a thread and signals executing inside that thread.
3292 Every (defined) read operation (load instructions, memcpy, atomic
3293 loads/read-modify-writes, etc.) R reads a series of bytes written by
3294 (defined) write operations (store instructions, atomic
3295 stores/read-modify-writes, memcpy, etc.). For the purposes of this
3296 section, initialized globals are considered to have a write of the
3297 initializer which is atomic and happens before any other read or write
3298 of the memory in question. For each byte of a read R, R\ :sub:`byte`
3299 may see any write to the same byte, except:
3301 -  If write\ :sub:`1`  happens before write\ :sub:`2`, and
3302    write\ :sub:`2` happens before R\ :sub:`byte`, then
3303    R\ :sub:`byte` does not see write\ :sub:`1`.
3304 -  If R\ :sub:`byte` happens before write\ :sub:`3`, then
3305    R\ :sub:`byte` does not see write\ :sub:`3`.
3307 Given that definition, R\ :sub:`byte` is defined as follows:
3309 -  If R is volatile, the result is target-dependent. (Volatile is
3310    supposed to give guarantees which can support ``sig_atomic_t`` in
3311    C/C++, and may be used for accesses to addresses that do not behave
3312    like normal memory. It does not generally provide cross-thread
3313    synchronization.)
3314 -  Otherwise, if there is no write to the same byte that happens before
3315    R\ :sub:`byte`, R\ :sub:`byte` returns ``undef`` for that byte.
3316 -  Otherwise, if R\ :sub:`byte` may see exactly one write,
3317    R\ :sub:`byte` returns the value written by that write.
3318 -  Otherwise, if R is atomic, and all the writes R\ :sub:`byte` may
3319    see are atomic, it chooses one of the values written. See the :ref:`Atomic
3320    Memory Ordering Constraints <ordering>` section for additional
3321    constraints on how the choice is made.
3322 -  Otherwise R\ :sub:`byte` returns ``undef``.
3324 R returns the value composed of the series of bytes it read. This
3325 implies that some bytes within the value may be ``undef`` **without**
3326 the entire value being ``undef``. Note that this only defines the
3327 semantics of the operation; it doesn't mean that targets will emit more
3328 than one instruction to read the series of bytes.
3330 Note that in cases where none of the atomic intrinsics are used, this
3331 model places only one restriction on IR transformations on top of what
3332 is required for single-threaded execution: introducing a store to a byte
3333 which might not otherwise be stored is not allowed in general.
3334 (Specifically, in the case where another thread might write to and read
3335 from an address, introducing a store can change a load that may see
3336 exactly one write into a load that may see multiple writes.)
3338 .. _ordering:
3340 Atomic Memory Ordering Constraints
3341 ----------------------------------
3343 Atomic instructions (:ref:`cmpxchg <i_cmpxchg>`,
3344 :ref:`atomicrmw <i_atomicrmw>`, :ref:`fence <i_fence>`,
3345 :ref:`atomic load <i_load>`, and :ref:`atomic store <i_store>`) take
3346 ordering parameters that determine which other atomic instructions on
3347 the same address they *synchronize with*. These semantics are borrowed
3348 from Java and C++0x, but are somewhat more colloquial. If these
3349 descriptions aren't precise enough, check those specs (see spec
3350 references in the :doc:`atomics guide <Atomics>`).
3351 :ref:`fence <i_fence>` instructions treat these orderings somewhat
3352 differently since they don't take an address. See that instruction's
3353 documentation for details.
3355 For a simpler introduction to the ordering constraints, see the
3356 :doc:`Atomics`.
3358 ``unordered``
3359     The set of values that can be read is governed by the happens-before
3360     partial order. A value cannot be read unless some operation wrote
3361     it. This is intended to provide a guarantee strong enough to model
3362     Java's non-volatile shared variables. This ordering cannot be
3363     specified for read-modify-write operations; it is not strong enough
3364     to make them atomic in any interesting way.
3365 ``monotonic``
3366     In addition to the guarantees of ``unordered``, there is a single
3367     total order for modifications by ``monotonic`` operations on each
3368     address. All modification orders must be compatible with the
3369     happens-before order. There is no guarantee that the modification
3370     orders can be combined to a global total order for the whole program
3371     (and this often will not be possible). The read in an atomic
3372     read-modify-write operation (:ref:`cmpxchg <i_cmpxchg>` and
3373     :ref:`atomicrmw <i_atomicrmw>`) reads the value in the modification
3374     order immediately before the value it writes. If one atomic read
3375     happens before another atomic read of the same address, the later
3376     read must see the same value or a later value in the address's
3377     modification order. This disallows reordering of ``monotonic`` (or
3378     stronger) operations on the same address. If an address is written
3379     ``monotonic``-ally by one thread, and other threads ``monotonic``-ally
3380     read that address repeatedly, the other threads must eventually see
3381     the write. This corresponds to the C++0x/C1x
3382     ``memory_order_relaxed``.
3383 ``acquire``
3384     In addition to the guarantees of ``monotonic``, a
3385     *synchronizes-with* edge may be formed with a ``release`` operation.
3386     This is intended to model C++'s ``memory_order_acquire``.
3387 ``release``
3388     In addition to the guarantees of ``monotonic``, if this operation
3389     writes a value which is subsequently read by an ``acquire``
3390     operation, it *synchronizes-with* that operation. (This isn't a
3391     complete description; see the C++0x definition of a release
3392     sequence.) This corresponds to the C++0x/C1x
3393     ``memory_order_release``.
3394 ``acq_rel`` (acquire+release)
3395     Acts as both an ``acquire`` and ``release`` operation on its
3396     address. This corresponds to the C++0x/C1x ``memory_order_acq_rel``.
3397 ``seq_cst`` (sequentially consistent)
3398     In addition to the guarantees of ``acq_rel`` (``acquire`` for an
3399     operation that only reads, ``release`` for an operation that only
3400     writes), there is a global total order on all
3401     sequentially-consistent operations on all addresses, which is
3402     consistent with the *happens-before* partial order and with the
3403     modification orders of all the affected addresses. Each
3404     sequentially-consistent read sees the last preceding write to the
3405     same address in this global order. This corresponds to the C++0x/C1x
3406     ``memory_order_seq_cst`` and Java volatile.
3408 .. _syncscope:
3410 If an atomic operation is marked ``syncscope("singlethread")``, it only
3411 *synchronizes with* and only participates in the seq\_cst total orderings of
3412 other operations running in the same thread (for example, in signal handlers).
3414 If an atomic operation is marked ``syncscope("<target-scope>")``, where
3415 ``<target-scope>`` is a target specific synchronization scope, then it is target
3416 dependent if it *synchronizes with* and participates in the seq\_cst total
3417 orderings of other operations.
3419 Otherwise, an atomic operation that is not marked ``syncscope("singlethread")``
3420 or ``syncscope("<target-scope>")`` *synchronizes with* and participates in the
3421 seq\_cst total orderings of other operations that are not marked
3422 ``syncscope("singlethread")`` or ``syncscope("<target-scope>")``.
3424 .. _floatenv:
3426 Floating-Point Environment
3427 --------------------------
3429 The default LLVM floating-point environment assumes that traps are disabled and
3430 status flags are not observable. Therefore, floating-point math operations do
3431 not have side effects and may be speculated freely. Results assume the
3432 round-to-nearest rounding mode, and subnormals are assumed to be preserved.
3434 Running LLVM code in an environment where these assumptions are not met can lead
3435 to undefined behavior. The ``strictfp`` and ``denormal-fp-math`` attributes as
3436 well as :ref:`Constrained Floating-Point Intrinsics <constrainedfp>` can be used
3437 to weaken LLVM's assumptions and ensure defined behavior in non-default
3438 floating-point environments; see their respective documentation for details.
3440 .. _floatnan:
3442 Behavior of Floating-Point NaN values
3443 -------------------------------------
3445 A floating-point NaN value consists of a sign bit, a quiet/signaling bit, and a
3446 payload (which makes up the rest of the mantissa except for the quiet/signaling
3447 bit). LLVM assumes that the quiet/signaling bit being set to ``1`` indicates a
3448 quiet NaN (QNaN), and a value of ``0`` indicates a signaling NaN (SNaN). In the
3449 following we will hence just call it the "quiet bit".
3451 The representation bits of a floating-point value do not mutate arbitrarily; in
3452 particular, if there is no floating-point operation being performed, NaN signs,
3453 quiet bits, and payloads are preserved.
3455 For the purpose of this section, ``bitcast`` as well as the following operations
3456 are not "floating-point math operations": ``fneg``, ``llvm.fabs``, and
3457 ``llvm.copysign``. These operations act directly on the underlying bit
3458 representation and never change anything except possibly for the sign bit.
3460 For floating-point math operations, unless specified otherwise, the following
3461 rules apply when a NaN value is returned: the result has a non-deterministic
3462 sign; the quiet bit and payload are non-deterministically chosen from the
3463 following set of options:
3465 - The quiet bit is set and the payload is all-zero. ("Preferred NaN" case)
3466 - The quiet bit is set and the payload is copied from any input operand that is
3467   a NaN. ("Quieting NaN propagation" case)
3468 - The quiet bit and payload are copied from any input operand that is a NaN.
3469   ("Unchanged NaN propagation" case)
3470 - The quiet bit is set and the payload is picked from a target-specific set of
3471   "extra" possible NaN payloads. The set can depend on the input operand values.
3472   This set is empty on x86 and ARM, but can be non-empty on other architectures.
3473   (For instance, on wasm, if any input NaN does not have the preferred all-zero
3474   payload or any input NaN is an SNaN, then this set contains all possible
3475   payloads; otherwise, it is empty. On SPARC, this set consists of the all-one
3476   payload.)
3478 In particular, if all input NaNs are quiet (or if there are no input NaNs), then
3479 the output NaN is definitely quiet. Signaling NaN outputs can only occur if they
3480 are provided as an input value. For example, "fmul SNaN, 1.0" may be simplified
3481 to SNaN rather than QNaN. Similarly, if all input NaNs are preferred (or if
3482 there are no input NaNs) and the target does not have any "extra" NaN payloads,
3483 then the output NaN is guaranteed to be preferred.
3485 Floating-point math operations are allowed to treat all NaNs as if they were
3486 quiet NaNs. For example, "pow(1.0, SNaN)" may be simplified to 1.0.
3488 Code that requires different behavior than this should use the
3489 :ref:`Constrained Floating-Point Intrinsics <constrainedfp>`.
3490 In particular, constrained intrinsics rule out the "Unchanged NaN propagation"
3491 case; they are guaranteed to return a QNaN.
3493 Unfortunately, due to hard-or-impossible-to-fix issues, LLVM violates its own
3494 specification on some architectures:
3496 - x86-32 without SSE2 enabled may convert floating-point values to x86_fp80 and
3497   back when performing floating-point math operations; this can lead to results
3498   with different precision than expected and it can alter NaN values. Since
3499   optimizations can make contradicting assumptions, this can lead to arbitrary
3500   miscompilations. See `issue #44218
3501   <https://github.com/llvm/llvm-project/issues/44218>`_.
3502 - x86-32 (even with SSE2 enabled) may implicitly perform such a conversion on
3503   values returned from a function for some calling conventions. See `issue
3504   #66803 <https://github.com/llvm/llvm-project/issues/66803>`_.
3505 - Older MIPS versions use the opposite polarity for the quiet/signaling bit, and
3506   LLVM does not correctly represent this. See `issue #60796
3507   <https://github.com/llvm/llvm-project/issues/60796>`_.
3509 .. _fastmath:
3511 Fast-Math Flags
3512 ---------------
3514 LLVM IR floating-point operations (:ref:`fneg <i_fneg>`, :ref:`fadd <i_fadd>`,
3515 :ref:`fsub <i_fsub>`, :ref:`fmul <i_fmul>`, :ref:`fdiv <i_fdiv>`,
3516 :ref:`frem <i_frem>`, :ref:`fcmp <i_fcmp>`), :ref:`phi <i_phi>`,
3517 :ref:`select <i_select>` and :ref:`call <i_call>`
3518 may use the following flags to enable otherwise unsafe
3519 floating-point transformations.
3521 ``nnan``
3522    No NaNs - Allow optimizations to assume the arguments and result are not
3523    NaN. If an argument is a nan, or the result would be a nan, it produces
3524    a :ref:`poison value <poisonvalues>` instead.
3526 ``ninf``
3527    No Infs - Allow optimizations to assume the arguments and result are not
3528    +/-Inf. If an argument is +/-Inf, or the result would be +/-Inf, it
3529    produces a :ref:`poison value <poisonvalues>` instead.
3531 ``nsz``
3532    No Signed Zeros - Allow optimizations to treat the sign of a zero
3533    argument or zero result as insignificant. This does not imply that -0.0
3534    is poison and/or guaranteed to not exist in the operation.
3536 ``arcp``
3537    Allow Reciprocal - Allow optimizations to use the reciprocal of an
3538    argument rather than perform division.
3540 ``contract``
3541    Allow floating-point contraction (e.g. fusing a multiply followed by an
3542    addition into a fused multiply-and-add). This does not enable reassociating
3543    to form arbitrary contractions. For example, ``(a*b) + (c*d) + e`` can not
3544    be transformed into ``(a*b) + ((c*d) + e)`` to create two fma operations.
3546 .. _fastmath_afn:
3548 ``afn``
3549    Approximate functions - Allow substitution of approximate calculations for
3550    functions (sin, log, sqrt, etc). See floating-point intrinsic definitions
3551    for places where this can apply to LLVM's intrinsic math functions.
3553 ``reassoc``
3554    Allow reassociation transformations for floating-point instructions.
3555    This may dramatically change results in floating-point.
3557 ``fast``
3558    This flag implies all of the others.
3560 .. _uselistorder:
3562 Use-list Order Directives
3563 -------------------------
3565 Use-list directives encode the in-memory order of each use-list, allowing the
3566 order to be recreated. ``<order-indexes>`` is a comma-separated list of
3567 indexes that are assigned to the referenced value's uses. The referenced
3568 value's use-list is immediately sorted by these indexes.
3570 Use-list directives may appear at function scope or global scope. They are not
3571 instructions, and have no effect on the semantics of the IR. When they're at
3572 function scope, they must appear after the terminator of the final basic block.
3574 If basic blocks have their address taken via ``blockaddress()`` expressions,
3575 ``uselistorder_bb`` can be used to reorder their use-lists from outside their
3576 function's scope.
3578 :Syntax:
3582     uselistorder <ty> <value>, { <order-indexes> }
3583     uselistorder_bb @function, %block { <order-indexes> }
3585 :Examples:
3589     define void @foo(i32 %arg1, i32 %arg2) {
3590     entry:
3591       ; ... instructions ...
3592     bb:
3593       ; ... instructions ...
3595       ; At function scope.
3596       uselistorder i32 %arg1, { 1, 0, 2 }
3597       uselistorder label %bb, { 1, 0 }
3598     }
3600     ; At global scope.
3601     uselistorder ptr @global, { 1, 2, 0 }
3602     uselistorder i32 7, { 1, 0 }
3603     uselistorder i32 (i32) @bar, { 1, 0 }
3604     uselistorder_bb @foo, %bb, { 5, 1, 3, 2, 0, 4 }
3606 .. _source_filename:
3608 Source Filename
3609 ---------------
3611 The *source filename* string is set to the original module identifier,
3612 which will be the name of the compiled source file when compiling from
3613 source through the clang front end, for example. It is then preserved through
3614 the IR and bitcode.
3616 This is currently necessary to generate a consistent unique global
3617 identifier for local functions used in profile data, which prepends the
3618 source file name to the local function name.
3620 The syntax for the source file name is simply:
3622 .. code-block:: text
3624     source_filename = "/path/to/source.c"
3626 .. _typesystem:
3628 Type System
3629 ===========
3631 The LLVM type system is one of the most important features of the
3632 intermediate representation. Being typed enables a number of
3633 optimizations to be performed on the intermediate representation
3634 directly, without having to do extra analyses on the side before the
3635 transformation. A strong type system makes it easier to read the
3636 generated code and enables novel analyses and transformations that are
3637 not feasible to perform on normal three address code representations.
3639 .. _t_void:
3641 Void Type
3642 ---------
3644 :Overview:
3647 The void type does not represent any value and has no size.
3649 :Syntax:
3654       void
3657 .. _t_function:
3659 Function Type
3660 -------------
3662 :Overview:
3665 The function type can be thought of as a function signature. It consists of a
3666 return type and a list of formal parameter types. The return type of a function
3667 type is a void type or first class type --- except for :ref:`label <t_label>`
3668 and :ref:`metadata <t_metadata>` types.
3670 :Syntax:
3674       <returntype> (<parameter list>)
3676 ...where '``<parameter list>``' is a comma-separated list of type
3677 specifiers. Optionally, the parameter list may include a type ``...``, which
3678 indicates that the function takes a variable number of arguments. Variable
3679 argument functions can access their arguments with the :ref:`variable argument
3680 handling intrinsic <int_varargs>` functions. '``<returntype>``' is any type
3681 except :ref:`label <t_label>` and :ref:`metadata <t_metadata>`.
3683 :Examples:
3685 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3686 | ``i32 (i32)``                   | function taking an ``i32``, returning an ``i32``                                                                                                                    |
3687 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3688 | ``i32 (ptr, ...)``              | A vararg function that takes at least one :ref:`pointer <t_pointer>` argument and returns an integer. This is the signature for ``printf`` in LLVM.                 |
3689 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3690 | ``{i32, i32} (i32)``            | A function taking an ``i32``, returning a :ref:`structure <t_struct>` containing two ``i32`` values                                                                 |
3691 +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3693 .. _t_firstclass:
3695 First Class Types
3696 -----------------
3698 The :ref:`first class <t_firstclass>` types are perhaps the most important.
3699 Values of these types are the only ones which can be produced by
3700 instructions.
3702 .. _t_single_value:
3704 Single Value Types
3705 ^^^^^^^^^^^^^^^^^^
3707 These are the types that are valid in registers from CodeGen's perspective.
3709 .. _t_integer:
3711 Integer Type
3712 """"""""""""
3714 :Overview:
3716 The integer type is a very simple type that simply specifies an
3717 arbitrary bit width for the integer type desired. Any bit width from 1
3718 bit to 2\ :sup:`23`\ (about 8 million) can be specified.
3720 :Syntax:
3724       iN
3726 The number of bits the integer will occupy is specified by the ``N``
3727 value.
3729 Examples:
3730 *********
3732 +----------------+------------------------------------------------+
3733 | ``i1``         | a single-bit integer.                          |
3734 +----------------+------------------------------------------------+
3735 | ``i32``        | a 32-bit integer.                              |
3736 +----------------+------------------------------------------------+
3737 | ``i1942652``   | a really big integer of over 1 million bits.   |
3738 +----------------+------------------------------------------------+
3740 .. _t_floating:
3742 Floating-Point Types
3743 """"""""""""""""""""
3745 .. list-table::
3746    :header-rows: 1
3748    * - Type
3749      - Description
3751    * - ``half``
3752      - 16-bit floating-point value
3754    * - ``bfloat``
3755      - 16-bit "brain" floating-point value (7-bit significand).  Provides the
3756        same number of exponent bits as ``float``, so that it matches its dynamic
3757        range, but with greatly reduced precision.  Used in Intel's AVX-512 BF16
3758        extensions and Arm's ARMv8.6-A extensions, among others.
3760    * - ``float``
3761      - 32-bit floating-point value
3763    * - ``double``
3764      - 64-bit floating-point value
3766    * - ``fp128``
3767      - 128-bit floating-point value (113-bit significand)
3769    * - ``x86_fp80``
3770      -  80-bit floating-point value (X87)
3772    * - ``ppc_fp128``
3773      - 128-bit floating-point value (two 64-bits)
3775 The binary format of half, float, double, and fp128 correspond to the
3776 IEEE-754-2008 specifications for binary16, binary32, binary64, and binary128
3777 respectively.
3779 X86_amx Type
3780 """"""""""""
3782 :Overview:
3784 The x86_amx type represents a value held in an AMX tile register on an x86
3785 machine. The operations allowed on it are quite limited. Only few intrinsics
3786 are allowed: stride load and store, zero and dot product. No instruction is
3787 allowed for this type. There are no arguments, arrays, pointers, vectors
3788 or constants of this type.
3790 :Syntax:
3794       x86_amx
3797 X86_mmx Type
3798 """"""""""""
3800 :Overview:
3802 The x86_mmx type represents a value held in an MMX register on an x86
3803 machine. The operations allowed on it are quite limited: parameters and
3804 return values, load and store, and bitcast. User-specified MMX
3805 instructions are represented as intrinsic or asm calls with arguments
3806 and/or results of this type. There are no arrays, vectors or constants
3807 of this type.
3809 :Syntax:
3813       x86_mmx
3816 .. _t_pointer:
3818 Pointer Type
3819 """"""""""""
3821 :Overview:
3823 The pointer type ``ptr`` is used to specify memory locations. Pointers are
3824 commonly used to reference objects in memory.
3826 Pointer types may have an optional address space attribute defining
3827 the numbered address space where the pointed-to object resides. For
3828 example, ``ptr addrspace(5)`` is a pointer to address space 5.
3829 In addition to integer constants, ``addrspace`` can also reference one of the
3830 address spaces defined in the :ref:`datalayout string<langref_datalayout>`.
3831 ``addrspace("A")`` will use the alloca address space, ``addrspace("G")``
3832 the default globals address space and ``addrspace("P")`` the program address
3833 space.
3835 The default address space is number zero.
3837 The semantics of non-zero address spaces are target-specific. Memory
3838 access through a non-dereferenceable pointer is undefined behavior in
3839 any address space. Pointers with the bit-value 0 are only assumed to
3840 be non-dereferenceable in address space 0, unless the function is
3841 marked with the ``null_pointer_is_valid`` attribute.
3843 If an object can be proven accessible through a pointer with a
3844 different address space, the access may be modified to use that
3845 address space. Exceptions apply if the operation is ``volatile``.
3847 Prior to LLVM 15, pointer types also specified a pointee type, such as
3848 ``i8*``, ``[4 x i32]*`` or ``i32 (i32*)*``. In LLVM 15, such "typed
3849 pointers" are still supported under non-default options. See the
3850 `opaque pointers document <OpaquePointers.html>`__ for more information.
3852 .. _t_target_type:
3854 Target Extension Type
3855 """""""""""""""""""""
3857 :Overview:
3859 Target extension types represent types that must be preserved through
3860 optimization, but are otherwise generally opaque to the compiler. They may be
3861 used as function parameters or arguments, and in :ref:`phi <i_phi>` or
3862 :ref:`select <i_select>` instructions. Some types may be also used in
3863 :ref:`alloca <i_alloca>` instructions or as global values, and correspondingly
3864 it is legal to use :ref:`load <i_load>` and :ref:`store <i_store>` instructions
3865 on them. Full semantics for these types are defined by the target.
3867 The only constants that target extension types may have are ``zeroinitializer``,
3868 ``undef``, and ``poison``. Other possible values for target extension types may
3869 arise from target-specific intrinsics and functions.
3871 These types cannot be converted to other types. As such, it is not legal to use
3872 them in :ref:`bitcast <i_bitcast>` instructions (as a source or target type),
3873 nor is it legal to use them in :ref:`ptrtoint <i_ptrtoint>` or
3874 :ref:`inttoptr <i_inttoptr>` instructions. Similarly, they are not legal to use
3875 in an :ref:`icmp <i_icmp>` instruction.
3877 Target extension types have a name and optional type or integer parameters. The
3878 meanings of name and parameters are defined by the target. When being defined in
3879 LLVM IR, all of the type parameters must precede all of the integer parameters.
3881 Specific target extension types are registered with LLVM as having specific
3882 properties. These properties can be used to restrict the type from appearing in
3883 certain contexts, such as being the type of a global variable or having a
3884 ``zeroinitializer`` constant be valid. A complete list of type properties may be
3885 found in the documentation for ``llvm::TargetExtType::Property`` (`doxygen
3886 <https://llvm.org/doxygen/classllvm_1_1TargetExtType.html>`_).
3888 :Syntax:
3890 .. code-block:: llvm
3892       target("label")
3893       target("label", void)
3894       target("label", void, i32)
3895       target("label", 0, 1, 2)
3896       target("label", void, i32, 0, 1, 2)
3899 .. _t_vector:
3901 Vector Type
3902 """""""""""
3904 :Overview:
3906 A vector type is a simple derived type that represents a vector of
3907 elements. Vector types are used when multiple primitive data are
3908 operated in parallel using a single instruction (SIMD). A vector type
3909 requires a size (number of elements), an underlying primitive data type,
3910 and a scalable property to represent vectors where the exact hardware
3911 vector length is unknown at compile time. Vector types are considered
3912 :ref:`first class <t_firstclass>`.
3914 :Memory Layout:
3916 In general vector elements are laid out in memory in the same way as
3917 :ref:`array types <t_array>`. Such an analogy works fine as long as the vector
3918 elements are byte sized. However, when the elements of the vector aren't byte
3919 sized it gets a bit more complicated. One way to describe the layout is by
3920 describing what happens when a vector such as <N x iM> is bitcasted to an
3921 integer type with N*M bits, and then following the rules for storing such an
3922 integer to memory.
3924 A bitcast from a vector type to a scalar integer type will see the elements
3925 being packed together (without padding). The order in which elements are
3926 inserted in the integer depends on endianness. For little endian element zero
3927 is put in the least significant bits of the integer, and for big endian
3928 element zero is put in the most significant bits.
3930 Using a vector such as ``<i4 1, i4 2, i4 3, i4 5>`` as an example, together
3931 with the analogy that we can replace a vector store by a bitcast followed by
3932 an integer store, we get this for big endian:
3934 .. code-block:: llvm
3936       %val = bitcast <4 x i4> <i4 1, i4 2, i4 3, i4 5> to i16
3938       ; Bitcasting from a vector to an integral type can be seen as
3939       ; concatenating the values:
3940       ;   %val now has the hexadecimal value 0x1235.
3942       store i16 %val, ptr %ptr
3944       ; In memory the content will be (8-bit addressing):
3945       ;
3946       ;    [%ptr + 0]: 00010010  (0x12)
3947       ;    [%ptr + 1]: 00110101  (0x35)
3949 The same example for little endian:
3951 .. code-block:: llvm
3953       %val = bitcast <4 x i4> <i4 1, i4 2, i4 3, i4 5> to i16
3955       ; Bitcasting from a vector to an integral type can be seen as
3956       ; concatenating the values:
3957       ;   %val now has the hexadecimal value 0x5321.
3959       store i16 %val, ptr %ptr
3961       ; In memory the content will be (8-bit addressing):
3962       ;
3963       ;    [%ptr + 0]: 00100001  (0x21)
3964       ;    [%ptr + 1]: 01010011  (0x53)
3966 When ``<N*M>`` isn't evenly divisible by the byte size the exact memory layout
3967 is unspecified (just like it is for an integral type of the same size). This
3968 is because different targets could put the padding at different positions when
3969 the type size is smaller than the type's store size.
3971 :Syntax:
3975       < <# elements> x <elementtype> >          ; Fixed-length vector
3976       < vscale x <# elements> x <elementtype> > ; Scalable vector
3978 The number of elements is a constant integer value larger than 0;
3979 elementtype may be any integer, floating-point or pointer type. Vectors
3980 of size zero are not allowed. For scalable vectors, the total number of
3981 elements is a constant multiple (called vscale) of the specified number
3982 of elements; vscale is a positive integer that is unknown at compile time
3983 and the same hardware-dependent constant for all scalable vectors at run
3984 time. The size of a specific scalable vector type is thus constant within
3985 IR, even if the exact size in bytes cannot be determined until run time.
3987 :Examples:
3989 +------------------------+----------------------------------------------------+
3990 | ``<4 x i32>``          | Vector of 4 32-bit integer values.                 |
3991 +------------------------+----------------------------------------------------+
3992 | ``<8 x float>``        | Vector of 8 32-bit floating-point values.          |
3993 +------------------------+----------------------------------------------------+
3994 | ``<2 x i64>``          | Vector of 2 64-bit integer values.                 |
3995 +------------------------+----------------------------------------------------+
3996 | ``<4 x ptr>``          | Vector of 4 pointers                               |
3997 +------------------------+----------------------------------------------------+
3998 | ``<vscale x 4 x i32>`` | Vector with a multiple of 4 32-bit integer values. |
3999 +------------------------+----------------------------------------------------+
4001 .. _t_label:
4003 Label Type
4004 ^^^^^^^^^^
4006 :Overview:
4008 The label type represents code labels.
4010 :Syntax:
4014       label
4016 .. _t_token:
4018 Token Type
4019 ^^^^^^^^^^
4021 :Overview:
4023 The token type is used when a value is associated with an instruction
4024 but all uses of the value must not attempt to introspect or obscure it.
4025 As such, it is not appropriate to have a :ref:`phi <i_phi>` or
4026 :ref:`select <i_select>` of type token.
4028 :Syntax:
4032       token
4036 .. _t_metadata:
4038 Metadata Type
4039 ^^^^^^^^^^^^^
4041 :Overview:
4043 The metadata type represents embedded metadata. No derived types may be
4044 created from metadata except for :ref:`function <t_function>` arguments.
4046 :Syntax:
4050       metadata
4052 .. _t_aggregate:
4054 Aggregate Types
4055 ^^^^^^^^^^^^^^^
4057 Aggregate Types are a subset of derived types that can contain multiple
4058 member types. :ref:`Arrays <t_array>` and :ref:`structs <t_struct>` are
4059 aggregate types. :ref:`Vectors <t_vector>` are not considered to be
4060 aggregate types.
4062 .. _t_array:
4064 Array Type
4065 """"""""""
4067 :Overview:
4069 The array type is a very simple derived type that arranges elements
4070 sequentially in memory. The array type requires a size (number of
4071 elements) and an underlying data type.
4073 :Syntax:
4077       [<# elements> x <elementtype>]
4079 The number of elements is a constant integer value; ``elementtype`` may
4080 be any type with a size.
4082 :Examples:
4084 +------------------+--------------------------------------+
4085 | ``[40 x i32]``   | Array of 40 32-bit integer values.   |
4086 +------------------+--------------------------------------+
4087 | ``[41 x i32]``   | Array of 41 32-bit integer values.   |
4088 +------------------+--------------------------------------+
4089 | ``[4 x i8]``     | Array of 4 8-bit integer values.     |
4090 +------------------+--------------------------------------+
4092 Here are some examples of multidimensional arrays:
4094 +-----------------------------+----------------------------------------------------------+
4095 | ``[3 x [4 x i32]]``         | 3x4 array of 32-bit integer values.                      |
4096 +-----------------------------+----------------------------------------------------------+
4097 | ``[12 x [10 x float]]``     | 12x10 array of single precision floating-point values.   |
4098 +-----------------------------+----------------------------------------------------------+
4099 | ``[2 x [3 x [4 x i16]]]``   | 2x3x4 array of 16-bit integer values.                    |
4100 +-----------------------------+----------------------------------------------------------+
4102 There is no restriction on indexing beyond the end of the array implied
4103 by a static type (though there are restrictions on indexing beyond the
4104 bounds of an allocated object in some cases). This means that
4105 single-dimension 'variable sized array' addressing can be implemented in
4106 LLVM with a zero length array type. An implementation of 'pascal style
4107 arrays' in LLVM could use the type "``{ i32, [0 x float]}``", for
4108 example.
4110 .. _t_struct:
4112 Structure Type
4113 """"""""""""""
4115 :Overview:
4117 The structure type is used to represent a collection of data members
4118 together in memory. The elements of a structure may be any type that has
4119 a size.
4121 Structures in memory are accessed using '``load``' and '``store``' by
4122 getting a pointer to a field with the '``getelementptr``' instruction.
4123 Structures in registers are accessed using the '``extractvalue``' and
4124 '``insertvalue``' instructions.
4126 Structures may optionally be "packed" structures, which indicate that
4127 the alignment of the struct is one byte, and that there is no padding
4128 between the elements. In non-packed structs, padding between field types
4129 is inserted as defined by the DataLayout string in the module, which is
4130 required to match what the underlying code generator expects.
4132 Structures can either be "literal" or "identified". A literal structure
4133 is defined inline with other types (e.g. ``[2 x {i32, i32}]``) whereas
4134 identified types are always defined at the top level with a name.
4135 Literal types are uniqued by their contents and can never be recursive
4136 or opaque since there is no way to write one. Identified types can be
4137 recursive, can be opaqued, and are never uniqued.
4139 :Syntax:
4143       %T1 = type { <type list> }     ; Identified normal struct type
4144       %T2 = type <{ <type list> }>   ; Identified packed struct type
4146 :Examples:
4148 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4149 | ``{ i32, i32, i32 }``        | A triple of three ``i32`` values                                                                                                                                                      |
4150 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4151 | ``{ float, ptr }``           | A pair, where the first element is a ``float`` and the second element is a :ref:`pointer <t_pointer>`.                                                                                |
4152 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4153 | ``<{ i8, i32 }>``            | A packed struct known to be 5 bytes in size.                                                                                                                                          |
4154 +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4156 .. _t_opaque:
4158 Opaque Structure Types
4159 """"""""""""""""""""""
4161 :Overview:
4163 Opaque structure types are used to represent structure types that
4164 do not have a body specified. This corresponds (for example) to the C
4165 notion of a forward declared structure. They can be named (``%X``) or
4166 unnamed (``%52``).
4168 :Syntax:
4172       %X = type opaque
4173       %52 = type opaque
4175 :Examples:
4177 +--------------+-------------------+
4178 | ``opaque``   | An opaque type.   |
4179 +--------------+-------------------+
4181 .. _constants:
4183 Constants
4184 =========
4186 LLVM has several different basic types of constants. This section
4187 describes them all and their syntax.
4189 Simple Constants
4190 ----------------
4192 **Boolean constants**
4193     The two strings '``true``' and '``false``' are both valid constants
4194     of the ``i1`` type.
4195 **Integer constants**
4196     Standard integers (such as '4') are constants of the :ref:`integer
4197     <t_integer>` type. They can be either decimal or
4198     hexadecimal. Decimal integers can be prefixed with - to represent
4199     negative integers, e.g. '``-1234``'. Hexadecimal integers must be
4200     prefixed with either u or s to indicate whether they are unsigned
4201     or signed respectively. e.g '``u0x8000``' gives 32768, whilst
4202     '``s0x8000``' gives -32768.
4204     Note that hexadecimal integers are sign extended from the number
4205     of active bits, i.e. the bit width minus the number of leading
4206     zeros. So '``s0x0001``' of type '``i16``' will be -1, not 1.
4207 **Floating-point constants**
4208     Floating-point constants use standard decimal notation (e.g.
4209     123.421), exponential notation (e.g. 1.23421e+2), or a more precise
4210     hexadecimal notation (see below). The assembler requires the exact
4211     decimal value of a floating-point constant. For example, the
4212     assembler accepts 1.25 but rejects 1.3 because 1.3 is a repeating
4213     decimal in binary. Floating-point constants must have a
4214     :ref:`floating-point <t_floating>` type.
4215 **Null pointer constants**
4216     The identifier '``null``' is recognized as a null pointer constant
4217     and must be of :ref:`pointer type <t_pointer>`.
4218 **Token constants**
4219     The identifier '``none``' is recognized as an empty token constant
4220     and must be of :ref:`token type <t_token>`.
4222 The one non-intuitive notation for constants is the hexadecimal form of
4223 floating-point constants. For example, the form
4224 '``double    0x432ff973cafa8000``' is equivalent to (but harder to read
4225 than) '``double 4.5e+15``'. The only time hexadecimal floating-point
4226 constants are required (and the only time that they are generated by the
4227 disassembler) is when a floating-point constant must be emitted but it
4228 cannot be represented as a decimal floating-point number in a reasonable
4229 number of digits. For example, NaN's, infinities, and other special
4230 values are represented in their IEEE hexadecimal format so that assembly
4231 and disassembly do not cause any bits to change in the constants.
4233 When using the hexadecimal form, constants of types bfloat, half, float, and
4234 double are represented using the 16-digit form shown above (which matches the
4235 IEEE754 representation for double); bfloat, half and float values must, however,
4236 be exactly representable as bfloat, IEEE 754 half, and IEEE 754 single
4237 precision respectively. Hexadecimal format is always used for long double, and
4238 there are three forms of long double. The 80-bit format used by x86 is
4239 represented as ``0xK`` followed by 20 hexadecimal digits. The 128-bit format
4240 used by PowerPC (two adjacent doubles) is represented by ``0xM`` followed by 32
4241 hexadecimal digits. The IEEE 128-bit format is represented by ``0xL`` followed
4242 by 32 hexadecimal digits. Long doubles will only work if they match the long
4243 double format on your target.  The IEEE 16-bit format (half precision) is
4244 represented by ``0xH`` followed by 4 hexadecimal digits. The bfloat 16-bit
4245 format is represented by ``0xR`` followed by 4 hexadecimal digits. All
4246 hexadecimal formats are big-endian (sign bit at the left).
4248 There are no constants of type x86_mmx and x86_amx.
4250 .. _complexconstants:
4252 Complex Constants
4253 -----------------
4255 Complex constants are a (potentially recursive) combination of simple
4256 constants and smaller complex constants.
4258 **Structure constants**
4259     Structure constants are represented with notation similar to
4260     structure type definitions (a comma separated list of elements,
4261     surrounded by braces (``{}``)). For example:
4262     "``{ i32 4, float 17.0, ptr @G }``", where "``@G``" is declared as
4263     "``@G = external global i32``". Structure constants must have
4264     :ref:`structure type <t_struct>`, and the number and types of elements
4265     must match those specified by the type.
4266 **Array constants**
4267     Array constants are represented with notation similar to array type
4268     definitions (a comma separated list of elements, surrounded by
4269     square brackets (``[]``)). For example:
4270     "``[ i32 42, i32 11, i32 74 ]``". Array constants must have
4271     :ref:`array type <t_array>`, and the number and types of elements must
4272     match those specified by the type. As a special case, character array
4273     constants may also be represented as a double-quoted string using the ``c``
4274     prefix. For example: "``c"Hello World\0A\00"``".
4275 **Vector constants**
4276     Vector constants are represented with notation similar to vector
4277     type definitions (a comma separated list of elements, surrounded by
4278     less-than/greater-than's (``<>``)). For example:
4279     "``< i32 42, i32 11, i32 74, i32 100 >``". Vector constants
4280     must have :ref:`vector type <t_vector>`, and the number and types of
4281     elements must match those specified by the type.
4282 **Zero initialization**
4283     The string '``zeroinitializer``' can be used to zero initialize a
4284     value to zero of *any* type, including scalar and
4285     :ref:`aggregate <t_aggregate>` types. This is often used to avoid
4286     having to print large zero initializers (e.g. for large arrays) and
4287     is always exactly equivalent to using explicit zero initializers.
4288 **Metadata node**
4289     A metadata node is a constant tuple without types. For example:
4290     "``!{!0, !{!2, !0}, !"test"}``". Metadata can reference constant values,
4291     for example: "``!{!0, i32 0, ptr @global, ptr @function, !"str"}``".
4292     Unlike other typed constants that are meant to be interpreted as part of
4293     the instruction stream, metadata is a place to attach additional
4294     information such as debug info.
4296 Global Variable and Function Addresses
4297 --------------------------------------
4299 The addresses of :ref:`global variables <globalvars>` and
4300 :ref:`functions <functionstructure>` are always implicitly valid
4301 (link-time) constants. These constants are explicitly referenced when
4302 the :ref:`identifier for the global <identifiers>` is used and always have
4303 :ref:`pointer <t_pointer>` type. For example, the following is a legal LLVM
4304 file:
4306 .. code-block:: llvm
4308     @X = global i32 17
4309     @Y = global i32 42
4310     @Z = global [2 x ptr] [ ptr @X, ptr @Y ]
4312 .. _undefvalues:
4314 Undefined Values
4315 ----------------
4317 The string '``undef``' can be used anywhere a constant is expected, and
4318 indicates that the user of the value may receive an unspecified
4319 bit-pattern. Undefined values may be of any type (other than '``label``'
4320 or '``void``') and be used anywhere a constant is permitted.
4322 .. note::
4324   A '``poison``' value (described in the next section) should be used instead of
4325   '``undef``' whenever possible. Poison values are stronger than undef, and
4326   enable more optimizations. Just the existence of '``undef``' blocks certain
4327   optimizations (see the examples below).
4329 Undefined values are useful because they indicate to the compiler that
4330 the program is well defined no matter what value is used. This gives the
4331 compiler more freedom to optimize. Here are some examples of
4332 (potentially surprising) transformations that are valid (in pseudo IR):
4334 .. code-block:: llvm
4336       %A = add %X, undef
4337       %B = sub %X, undef
4338       %C = xor %X, undef
4339     Safe:
4340       %A = undef
4341       %B = undef
4342       %C = undef
4344 This is safe because all of the output bits are affected by the undef
4345 bits. Any output bit can have a zero or one depending on the input bits.
4347 .. code-block:: llvm
4349       %A = or %X, undef
4350       %B = and %X, undef
4351     Safe:
4352       %A = -1
4353       %B = 0
4354     Safe:
4355       %A = %X  ;; By choosing undef as 0
4356       %B = %X  ;; By choosing undef as -1
4357     Unsafe:
4358       %A = undef
4359       %B = undef
4361 These logical operations have bits that are not always affected by the
4362 input. For example, if ``%X`` has a zero bit, then the output of the
4363 '``and``' operation will always be a zero for that bit, no matter what
4364 the corresponding bit from the '``undef``' is. As such, it is unsafe to
4365 optimize or assume that the result of the '``and``' is '``undef``'.
4366 However, it is safe to assume that all bits of the '``undef``' could be
4367 0, and optimize the '``and``' to 0. Likewise, it is safe to assume that
4368 all the bits of the '``undef``' operand to the '``or``' could be set,
4369 allowing the '``or``' to be folded to -1.
4371 .. code-block:: llvm
4373       %A = select undef, %X, %Y
4374       %B = select undef, 42, %Y
4375       %C = select %X, %Y, undef
4376     Safe:
4377       %A = %X     (or %Y)
4378       %B = 42     (or %Y)
4379       %C = %Y     (if %Y is provably not poison; unsafe otherwise)
4380     Unsafe:
4381       %A = undef
4382       %B = undef
4383       %C = undef
4385 This set of examples shows that undefined '``select``' (and conditional
4386 branch) conditions can go *either way*, but they have to come from one
4387 of the two operands. In the ``%A`` example, if ``%X`` and ``%Y`` were
4388 both known to have a clear low bit, then ``%A`` would have to have a
4389 cleared low bit. However, in the ``%C`` example, the optimizer is
4390 allowed to assume that the '``undef``' operand could be the same as
4391 ``%Y`` if ``%Y`` is provably not '``poison``', allowing the whole '``select``'
4392 to be eliminated. This is because '``poison``' is stronger than '``undef``'.
4394 .. code-block:: llvm
4396       %A = xor undef, undef
4398       %B = undef
4399       %C = xor %B, %B
4401       %D = undef
4402       %E = icmp slt %D, 4
4403       %F = icmp gte %D, 4
4405     Safe:
4406       %A = undef
4407       %B = undef
4408       %C = undef
4409       %D = undef
4410       %E = undef
4411       %F = undef
4413 This example points out that two '``undef``' operands are not
4414 necessarily the same. This can be surprising to people (and also matches
4415 C semantics) where they assume that "``X^X``" is always zero, even if
4416 ``X`` is undefined. This isn't true for a number of reasons, but the
4417 short answer is that an '``undef``' "variable" can arbitrarily change
4418 its value over its "live range". This is true because the variable
4419 doesn't actually *have a live range*. Instead, the value is logically
4420 read from arbitrary registers that happen to be around when needed, so
4421 the value is not necessarily consistent over time. In fact, ``%A`` and
4422 ``%C`` need to have the same semantics or the core LLVM "replace all
4423 uses with" concept would not hold.
4425 To ensure all uses of a given register observe the same value (even if
4426 '``undef``'), the :ref:`freeze instruction <i_freeze>` can be used.
4428 .. code-block:: llvm
4430       %A = sdiv undef, %X
4431       %B = sdiv %X, undef
4432     Safe:
4433       %A = 0
4434     b: unreachable
4436 These examples show the crucial difference between an *undefined value*
4437 and *undefined behavior*. An undefined value (like '``undef``') is
4438 allowed to have an arbitrary bit-pattern. This means that the ``%A``
4439 operation can be constant folded to '``0``', because the '``undef``'
4440 could be zero, and zero divided by any value is zero.
4441 However, in the second example, we can make a more aggressive
4442 assumption: because the ``undef`` is allowed to be an arbitrary value,
4443 we are allowed to assume that it could be zero. Since a divide by zero
4444 has *undefined behavior*, we are allowed to assume that the operation
4445 does not execute at all. This allows us to delete the divide and all
4446 code after it. Because the undefined operation "can't happen", the
4447 optimizer can assume that it occurs in dead code.
4449 .. code-block:: text
4451     a:  store undef -> %X
4452     b:  store %X -> undef
4453     Safe:
4454     a: <deleted>     (if the stored value in %X is provably not poison)
4455     b: unreachable
4457 A store *of* an undefined value can be assumed to not have any effect;
4458 we can assume that the value is overwritten with bits that happen to
4459 match what was already there. This argument is only valid if the stored value
4460 is provably not ``poison``. However, a store *to* an undefined
4461 location could clobber arbitrary memory, therefore, it has undefined
4462 behavior.
4464 Branching on an undefined value is undefined behavior.
4465 This explains optimizations that depend on branch conditions to construct
4466 predicates, such as Correlated Value Propagation and Global Value Numbering.
4467 In case of switch instruction, the branch condition should be frozen, otherwise
4468 it is undefined behavior.
4470 .. code-block:: llvm
4472     Unsafe:
4473       br undef, BB1, BB2 ; UB
4475       %X = and i32 undef, 255
4476       switch %X, label %ret [ .. ] ; UB
4478       store undef, ptr %ptr
4479       %X = load ptr %ptr ; %X is undef
4480       switch i8 %X, label %ret [ .. ] ; UB
4482     Safe:
4483       %X = or i8 undef, 255 ; always 255
4484       switch i8 %X, label %ret [ .. ] ; Well-defined
4486       %X = freeze i1 undef
4487       br %X, BB1, BB2 ; Well-defined (non-deterministic jump)
4491 .. _poisonvalues:
4493 Poison Values
4494 -------------
4496 A poison value is a result of an erroneous operation.
4497 In order to facilitate speculative execution, many instructions do not
4498 invoke immediate undefined behavior when provided with illegal operands,
4499 and return a poison value instead.
4500 The string '``poison``' can be used anywhere a constant is expected, and
4501 operations such as :ref:`add <i_add>` with the ``nsw`` flag can produce
4502 a poison value.
4504 Most instructions return '``poison``' when one of their arguments is
4505 '``poison``'. A notable exception is the :ref:`select instruction <i_select>`.
4506 Propagation of poison can be stopped with the
4507 :ref:`freeze instruction <i_freeze>`.
4509 It is correct to replace a poison value with an
4510 :ref:`undef value <undefvalues>` or any value of the type.
4512 This means that immediate undefined behavior occurs if a poison value is
4513 used as an instruction operand that has any values that trigger undefined
4514 behavior. Notably this includes (but is not limited to):
4516 -  The pointer operand of a :ref:`load <i_load>`, :ref:`store <i_store>` or
4517    any other pointer dereferencing instruction (independent of address
4518    space).
4519 -  The divisor operand of a ``udiv``, ``sdiv``, ``urem`` or ``srem``
4520    instruction.
4521 -  The condition operand of a :ref:`br <i_br>` instruction.
4522 -  The callee operand of a :ref:`call <i_call>` or :ref:`invoke <i_invoke>`
4523    instruction.
4524 -  The parameter operand of a :ref:`call <i_call>` or :ref:`invoke <i_invoke>`
4525    instruction, when the function or invoking call site has a ``noundef``
4526    attribute in the corresponding position.
4527 -  The operand of a :ref:`ret <i_ret>` instruction if the function or invoking
4528    call site has a `noundef` attribute in the return value position.
4530 Here are some examples:
4532 .. code-block:: llvm
4534     entry:
4535       %poison = sub nuw i32 0, 1           ; Results in a poison value.
4536       %poison2 = sub i32 poison, 1         ; Also results in a poison value.
4537       %still_poison = and i32 %poison, 0   ; 0, but also poison.
4538       %poison_yet_again = getelementptr i32, ptr @h, i32 %still_poison
4539       store i32 0, ptr %poison_yet_again   ; Undefined behavior due to
4540                                            ; store to poison.
4542       store i32 %poison, ptr @g            ; Poison value stored to memory.
4543       %poison3 = load i32, ptr @g          ; Poison value loaded back from memory.
4545       %poison4 = load i16, ptr @g          ; Returns a poison value.
4546       %poison5 = load i64, ptr @g          ; Returns a poison value.
4548       %cmp = icmp slt i32 %poison, 0       ; Returns a poison value.
4549       br i1 %cmp, label %end, label %end   ; undefined behavior
4551     end:
4553 .. _welldefinedvalues:
4555 Well-Defined Values
4556 -------------------
4558 Given a program execution, a value is *well defined* if the value does not
4559 have an undef bit and is not poison in the execution.
4560 An aggregate value or vector is well defined if its elements are well defined.
4561 The padding of an aggregate isn't considered, since it isn't visible
4562 without storing it into memory and loading it with a different type.
4564 A constant of a :ref:`single value <t_single_value>`, non-vector type is well
4565 defined if it is neither '``undef``' constant nor '``poison``' constant.
4566 The result of :ref:`freeze instruction <i_freeze>` is well defined regardless
4567 of its operand.
4569 .. _blockaddress:
4571 Addresses of Basic Blocks
4572 -------------------------
4574 ``blockaddress(@function, %block)``
4576 The '``blockaddress``' constant computes the address of the specified
4577 basic block in the specified function.
4579 It always has an ``ptr addrspace(P)`` type, where ``P`` is the address space
4580 of the function containing ``%block`` (usually ``addrspace(0)``).
4582 Taking the address of the entry block is illegal.
4584 This value only has defined behavior when used as an operand to the
4585 ':ref:`indirectbr <i_indirectbr>`' or for comparisons against null. Pointer
4586 equality tests between labels addresses results in undefined behavior ---
4587 though, again, comparison against null is ok, and no label is equal to the null
4588 pointer. This may be passed around as an opaque pointer sized value as long as
4589 the bits are not inspected. This allows ``ptrtoint`` and arithmetic to be
4590 performed on these values so long as the original value is reconstituted before
4591 the ``indirectbr`` instruction.
4593 Finally, some targets may provide defined semantics when using the value
4594 as the operand to an inline assembly, but that is target specific.
4596 .. _dso_local_equivalent:
4598 DSO Local Equivalent
4599 --------------------
4601 ``dso_local_equivalent @func``
4603 A '``dso_local_equivalent``' constant represents a function which is
4604 functionally equivalent to a given function, but is always defined in the
4605 current linkage unit. The resulting pointer has the same type as the underlying
4606 function. The resulting pointer is permitted, but not required, to be different
4607 from a pointer to the function, and it may have different values in different
4608 translation units.
4610 The target function may not have ``extern_weak`` linkage.
4612 ``dso_local_equivalent`` can be implemented as such:
4614 - If the function has local linkage, hidden visibility, or is
4615   ``dso_local``, ``dso_local_equivalent`` can be implemented as simply a pointer
4616   to the function.
4617 - ``dso_local_equivalent`` can be implemented with a stub that tail-calls the
4618   function. Many targets support relocations that resolve at link time to either
4619   a function or a stub for it, depending on if the function is defined within the
4620   linkage unit; LLVM will use this when available. (This is commonly called a
4621   "PLT stub".) On other targets, the stub may need to be emitted explicitly.
4623 This can be used wherever a ``dso_local`` instance of a function is needed without
4624 needing to explicitly make the original function ``dso_local``. An instance where
4625 this can be used is for static offset calculations between a function and some other
4626 ``dso_local`` symbol. This is especially useful for the Relative VTables C++ ABI,
4627 where dynamic relocations for function pointers in VTables can be replaced with
4628 static relocations for offsets between the VTable and virtual functions which
4629 may not be ``dso_local``.
4631 This is currently only supported for ELF binary formats.
4633 .. _no_cfi:
4635 No CFI
4636 ------
4638 ``no_cfi @func``
4640 With `Control-Flow Integrity (CFI)
4641 <https://clang.llvm.org/docs/ControlFlowIntegrity.html>`_, a '``no_cfi``'
4642 constant represents a function reference that does not get replaced with a
4643 reference to the CFI jump table in the ``LowerTypeTests`` pass. These constants
4644 may be useful in low-level programs, such as operating system kernels, which
4645 need to refer to the actual function body.
4647 .. _constantexprs:
4649 Constant Expressions
4650 --------------------
4652 Constant expressions are used to allow expressions involving other
4653 constants to be used as constants. Constant expressions may be of any
4654 :ref:`first class <t_firstclass>` type and may involve any LLVM operation
4655 that does not have side effects (e.g. load and call are not supported).
4656 The following is the syntax for constant expressions:
4658 ``trunc (CST to TYPE)``
4659     Perform the :ref:`trunc operation <i_trunc>` on constants.
4660 ``zext (CST to TYPE)``
4661     Perform the :ref:`zext operation <i_zext>` on constants.
4662 ``sext (CST to TYPE)``
4663     Perform the :ref:`sext operation <i_sext>` on constants.
4664 ``fptrunc (CST to TYPE)``
4665     Truncate a floating-point constant to another floating-point type.
4666     The size of CST must be larger than the size of TYPE. Both types
4667     must be floating-point.
4668 ``fpext (CST to TYPE)``
4669     Floating-point extend a constant to another type. The size of CST
4670     must be smaller or equal to the size of TYPE. Both types must be
4671     floating-point.
4672 ``fptoui (CST to TYPE)``
4673     Convert a floating-point constant to the corresponding unsigned
4674     integer constant. TYPE must be a scalar or vector integer type. CST
4675     must be of scalar or vector floating-point type. Both CST and TYPE
4676     must be scalars, or vectors of the same number of elements. If the
4677     value won't fit in the integer type, the result is a
4678     :ref:`poison value <poisonvalues>`.
4679 ``fptosi (CST to TYPE)``
4680     Convert a floating-point constant to the corresponding signed
4681     integer constant. TYPE must be a scalar or vector integer type. CST
4682     must be of scalar or vector floating-point type. Both CST and TYPE
4683     must be scalars, or vectors of the same number of elements. If the
4684     value won't fit in the integer type, the result is a
4685     :ref:`poison value <poisonvalues>`.
4686 ``uitofp (CST to TYPE)``
4687     Convert an unsigned integer constant to the corresponding
4688     floating-point constant. TYPE must be a scalar or vector floating-point
4689     type.  CST must be of scalar or vector integer type. Both CST and TYPE must
4690     be scalars, or vectors of the same number of elements.
4691 ``sitofp (CST to TYPE)``
4692     Convert a signed integer constant to the corresponding floating-point
4693     constant. TYPE must be a scalar or vector floating-point type.
4694     CST must be of scalar or vector integer type. Both CST and TYPE must
4695     be scalars, or vectors of the same number of elements.
4696 ``ptrtoint (CST to TYPE)``
4697     Perform the :ref:`ptrtoint operation <i_ptrtoint>` on constants.
4698 ``inttoptr (CST to TYPE)``
4699     Perform the :ref:`inttoptr operation <i_inttoptr>` on constants.
4700     This one is *really* dangerous!
4701 ``bitcast (CST to TYPE)``
4702     Convert a constant, CST, to another TYPE.
4703     The constraints of the operands are the same as those for the
4704     :ref:`bitcast instruction <i_bitcast>`.
4705 ``addrspacecast (CST to TYPE)``
4706     Convert a constant pointer or constant vector of pointer, CST, to another
4707     TYPE in a different address space. The constraints of the operands are the
4708     same as those for the :ref:`addrspacecast instruction <i_addrspacecast>`.
4709 ``getelementptr (TY, CSTPTR, IDX0, IDX1, ...)``, ``getelementptr inbounds (TY, CSTPTR, IDX0, IDX1, ...)``
4710     Perform the :ref:`getelementptr operation <i_getelementptr>` on
4711     constants. As with the :ref:`getelementptr <i_getelementptr>`
4712     instruction, the index list may have one or more indexes, which are
4713     required to make sense for the type of "pointer to TY". These indexes
4714     may be implicitly sign-extended or truncated to match the index size
4715     of CSTPTR's address space.
4716 ``icmp COND (VAL1, VAL2)``
4717     Perform the :ref:`icmp operation <i_icmp>` on constants.
4718 ``fcmp COND (VAL1, VAL2)``
4719     Perform the :ref:`fcmp operation <i_fcmp>` on constants.
4720 ``extractelement (VAL, IDX)``
4721     Perform the :ref:`extractelement operation <i_extractelement>` on
4722     constants.
4723 ``insertelement (VAL, ELT, IDX)``
4724     Perform the :ref:`insertelement operation <i_insertelement>` on
4725     constants.
4726 ``shufflevector (VEC1, VEC2, IDXMASK)``
4727     Perform the :ref:`shufflevector operation <i_shufflevector>` on
4728     constants.
4729 ``add (LHS, RHS)``
4730     Perform an addition on constants.
4731 ``sub (LHS, RHS)``
4732     Perform a subtraction on constants.
4733 ``mul (LHS, RHS)``
4734     Perform a multiplication on constants.
4735 ``shl (LHS, RHS)``
4736     Perform a left shift on constants.
4737 ``lshr (LHS, RHS)``
4738     Perform a logical right shift on constants.
4739 ``ashr (LHS, RHS)``
4740     Perform an arithmetic right shift on constants.
4741 ``xor (LHS, RHS)``
4742     Perform a bitwise xor on constants.
4744 Other Values
4745 ============
4747 .. _inlineasmexprs:
4749 Inline Assembler Expressions
4750 ----------------------------
4752 LLVM supports inline assembler expressions (as opposed to :ref:`Module-Level
4753 Inline Assembly <moduleasm>`) through the use of a special value. This value
4754 represents the inline assembler as a template string (containing the
4755 instructions to emit), a list of operand constraints (stored as a string), a
4756 flag that indicates whether or not the inline asm expression has side effects,
4757 and a flag indicating whether the function containing the asm needs to align its
4758 stack conservatively.
4760 The template string supports argument substitution of the operands using "``$``"
4761 followed by a number, to indicate substitution of the given register/memory
4762 location, as specified by the constraint string. "``${NUM:MODIFIER}``" may also
4763 be used, where ``MODIFIER`` is a target-specific annotation for how to print the
4764 operand (See :ref:`inline-asm-modifiers`).
4766 A literal "``$``" may be included by using "``$$``" in the template. To include
4767 other special characters into the output, the usual "``\XX``" escapes may be
4768 used, just as in other strings. Note that after template substitution, the
4769 resulting assembly string is parsed by LLVM's integrated assembler unless it is
4770 disabled -- even when emitting a ``.s`` file -- and thus must contain assembly
4771 syntax known to LLVM.
4773 LLVM also supports a few more substitutions useful for writing inline assembly:
4775 - ``${:uid}``: Expands to a decimal integer unique to this inline assembly blob.
4776   This substitution is useful when declaring a local label. Many standard
4777   compiler optimizations, such as inlining, may duplicate an inline asm blob.
4778   Adding a blob-unique identifier ensures that the two labels will not conflict
4779   during assembly. This is used to implement `GCC's %= special format
4780   string <https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html>`_.
4781 - ``${:comment}``: Expands to the comment character of the current target's
4782   assembly dialect. This is usually ``#``, but many targets use other strings,
4783   such as ``;``, ``//``, or ``!``.
4784 - ``${:private}``: Expands to the assembler private label prefix. Labels with
4785   this prefix will not appear in the symbol table of the assembled object.
4786   Typically the prefix is ``L``, but targets may use other strings. ``.L`` is
4787   relatively popular.
4789 LLVM's support for inline asm is modeled closely on the requirements of Clang's
4790 GCC-compatible inline-asm support. Thus, the feature-set and the constraint and
4791 modifier codes listed here are similar or identical to those in GCC's inline asm
4792 support. However, to be clear, the syntax of the template and constraint strings
4793 described here is *not* the same as the syntax accepted by GCC and Clang, and,
4794 while most constraint letters are passed through as-is by Clang, some get
4795 translated to other codes when converting from the C source to the LLVM
4796 assembly.
4798 An example inline assembler expression is:
4800 .. code-block:: llvm
4802     i32 (i32) asm "bswap $0", "=r,r"
4804 Inline assembler expressions may **only** be used as the callee operand
4805 of a :ref:`call <i_call>` or an :ref:`invoke <i_invoke>` instruction.
4806 Thus, typically we have:
4808 .. code-block:: llvm
4810     %X = call i32 asm "bswap $0", "=r,r"(i32 %Y)
4812 Inline asms with side effects not visible in the constraint list must be
4813 marked as having side effects. This is done through the use of the
4814 '``sideeffect``' keyword, like so:
4816 .. code-block:: llvm
4818     call void asm sideeffect "eieio", ""()
4820 In some cases inline asms will contain code that will not work unless
4821 the stack is aligned in some way, such as calls or SSE instructions on
4822 x86, yet will not contain code that does that alignment within the asm.
4823 The compiler should make conservative assumptions about what the asm
4824 might contain and should generate its usual stack alignment code in the
4825 prologue if the '``alignstack``' keyword is present:
4827 .. code-block:: llvm
4829     call void asm alignstack "eieio", ""()
4831 Inline asms also support using non-standard assembly dialects. The
4832 assumed dialect is ATT. When the '``inteldialect``' keyword is present,
4833 the inline asm is using the Intel dialect. Currently, ATT and Intel are
4834 the only supported dialects. An example is:
4836 .. code-block:: llvm
4838     call void asm inteldialect "eieio", ""()
4840 In the case that the inline asm might unwind the stack,
4841 the '``unwind``' keyword must be used, so that the compiler emits
4842 unwinding information:
4844 .. code-block:: llvm
4846     call void asm unwind "call func", ""()
4848 If the inline asm unwinds the stack and isn't marked with
4849 the '``unwind``' keyword, the behavior is undefined.
4851 If multiple keywords appear, the '``sideeffect``' keyword must come
4852 first, the '``alignstack``' keyword second, the '``inteldialect``' keyword
4853 third and the '``unwind``' keyword last.
4855 Inline Asm Constraint String
4856 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4858 The constraint list is a comma-separated string, each element containing one or
4859 more constraint codes.
4861 For each element in the constraint list an appropriate register or memory
4862 operand will be chosen, and it will be made available to assembly template
4863 string expansion as ``$0`` for the first constraint in the list, ``$1`` for the
4864 second, etc.
4866 There are three different types of constraints, which are distinguished by a
4867 prefix symbol in front of the constraint code: Output, Input, and Clobber. The
4868 constraints must always be given in that order: outputs first, then inputs, then
4869 clobbers. They cannot be intermingled.
4871 There are also three different categories of constraint codes:
4873 - Register constraint. This is either a register class, or a fixed physical
4874   register. This kind of constraint will allocate a register, and if necessary,
4875   bitcast the argument or result to the appropriate type.
4876 - Memory constraint. This kind of constraint is for use with an instruction
4877   taking a memory operand. Different constraints allow for different addressing
4878   modes used by the target.
4879 - Immediate value constraint. This kind of constraint is for an integer or other
4880   immediate value which can be rendered directly into an instruction. The
4881   various target-specific constraints allow the selection of a value in the
4882   proper range for the instruction you wish to use it with.
4884 Output constraints
4885 """"""""""""""""""
4887 Output constraints are specified by an "``=``" prefix (e.g. "``=r``"). This
4888 indicates that the assembly will write to this operand, and the operand will
4889 then be made available as a return value of the ``asm`` expression. Output
4890 constraints do not consume an argument from the call instruction. (Except, see
4891 below about indirect outputs).
4893 Normally, it is expected that no output locations are written to by the assembly
4894 expression until *all* of the inputs have been read. As such, LLVM may assign
4895 the same register to an output and an input. If this is not safe (e.g. if the
4896 assembly contains two instructions, where the first writes to one output, and
4897 the second reads an input and writes to a second output), then the "``&``"
4898 modifier must be used (e.g. "``=&r``") to specify that the output is an
4899 "early-clobber" output. Marking an output as "early-clobber" ensures that LLVM
4900 will not use the same register for any inputs (other than an input tied to this
4901 output).
4903 Input constraints
4904 """""""""""""""""
4906 Input constraints do not have a prefix -- just the constraint codes. Each input
4907 constraint will consume one argument from the call instruction. It is not
4908 permitted for the asm to write to any input register or memory location (unless
4909 that input is tied to an output). Note also that multiple inputs may all be
4910 assigned to the same register, if LLVM can determine that they necessarily all
4911 contain the same value.
4913 Instead of providing a Constraint Code, input constraints may also "tie"
4914 themselves to an output constraint, by providing an integer as the constraint
4915 string. Tied inputs still consume an argument from the call instruction, and
4916 take up a position in the asm template numbering as is usual -- they will simply
4917 be constrained to always use the same register as the output they've been tied
4918 to. For example, a constraint string of "``=r,0``" says to assign a register for
4919 output, and use that register as an input as well (it being the 0'th
4920 constraint).
4922 It is permitted to tie an input to an "early-clobber" output. In that case, no
4923 *other* input may share the same register as the input tied to the early-clobber
4924 (even when the other input has the same value).
4926 You may only tie an input to an output which has a register constraint, not a
4927 memory constraint. Only a single input may be tied to an output.
4929 There is also an "interesting" feature which deserves a bit of explanation: if a
4930 register class constraint allocates a register which is too small for the value
4931 type operand provided as input, the input value will be split into multiple
4932 registers, and all of them passed to the inline asm.
4934 However, this feature is often not as useful as you might think.
4936 Firstly, the registers are *not* guaranteed to be consecutive. So, on those
4937 architectures that have instructions which operate on multiple consecutive
4938 instructions, this is not an appropriate way to support them. (e.g. the 32-bit
4939 SparcV8 has a 64-bit load, which instruction takes a single 32-bit register. The
4940 hardware then loads into both the named register, and the next register. This
4941 feature of inline asm would not be useful to support that.)
4943 A few of the targets provide a template string modifier allowing explicit access
4944 to the second register of a two-register operand (e.g. MIPS ``L``, ``M``, and
4945 ``D``). On such an architecture, you can actually access the second allocated
4946 register (yet, still, not any subsequent ones). But, in that case, you're still
4947 probably better off simply splitting the value into two separate operands, for
4948 clarity. (e.g. see the description of the ``A`` constraint on X86, which,
4949 despite existing only for use with this feature, is not really a good idea to
4950 use)
4952 Indirect inputs and outputs
4953 """""""""""""""""""""""""""
4955 Indirect output or input constraints can be specified by the "``*``" modifier
4956 (which goes after the "``=``" in case of an output). This indicates that the asm
4957 will write to or read from the contents of an *address* provided as an input
4958 argument. (Note that in this way, indirect outputs act more like an *input* than
4959 an output: just like an input, they consume an argument of the call expression,
4960 rather than producing a return value. An indirect output constraint is an
4961 "output" only in that the asm is expected to write to the contents of the input
4962 memory location, instead of just read from it).
4964 This is most typically used for memory constraint, e.g. "``=*m``", to pass the
4965 address of a variable as a value.
4967 It is also possible to use an indirect *register* constraint, but only on output
4968 (e.g. "``=*r``"). This will cause LLVM to allocate a register for an output
4969 value normally, and then, separately emit a store to the address provided as
4970 input, after the provided inline asm. (It's not clear what value this
4971 functionality provides, compared to writing the store explicitly after the asm
4972 statement, and it can only produce worse code, since it bypasses many
4973 optimization passes. I would recommend not using it.)
4975 Call arguments for indirect constraints must have pointer type and must specify
4976 the :ref:`elementtype <attr_elementtype>` attribute to indicate the pointer
4977 element type.
4979 Clobber constraints
4980 """""""""""""""""""
4982 A clobber constraint is indicated by a "``~``" prefix. A clobber does not
4983 consume an input operand, nor generate an output. Clobbers cannot use any of the
4984 general constraint code letters -- they may use only explicit register
4985 constraints, e.g. "``~{eax}``". The one exception is that a clobber string of
4986 "``~{memory}``" indicates that the assembly writes to arbitrary undeclared
4987 memory locations -- not only the memory pointed to by a declared indirect
4988 output.
4990 Note that clobbering named registers that are also present in output
4991 constraints is not legal.
4993 Label constraints
4994 """""""""""""""""
4996 A label constraint is indicated by a "``!``" prefix and typically used in the
4997 form ``"!i"``. Instead of consuming call arguments, label constraints consume
4998 indirect destination labels of ``callbr`` instructions.
5000 Label constraints can only be used in conjunction with ``callbr`` and the
5001 number of label constraints must match the number of indirect destination
5002 labels in the ``callbr`` instruction.
5005 Constraint Codes
5006 """"""""""""""""
5007 After a potential prefix comes constraint code, or codes.
5009 A Constraint Code is either a single letter (e.g. "``r``"), a "``^``" character
5010 followed by two letters (e.g. "``^wc``"), or "``{``" register-name "``}``"
5011 (e.g. "``{eax}``").
5013 The one and two letter constraint codes are typically chosen to be the same as
5014 GCC's constraint codes.
5016 A single constraint may include one or more than constraint code in it, leaving
5017 it up to LLVM to choose which one to use. This is included mainly for
5018 compatibility with the translation of GCC inline asm coming from clang.
5020 There are two ways to specify alternatives, and either or both may be used in an
5021 inline asm constraint list:
5023 1) Append the codes to each other, making a constraint code set. E.g. "``im``"
5024    or "``{eax}m``". This means "choose any of the options in the set". The
5025    choice of constraint is made independently for each constraint in the
5026    constraint list.
5028 2) Use "``|``" between constraint code sets, creating alternatives. Every
5029    constraint in the constraint list must have the same number of alternative
5030    sets. With this syntax, the same alternative in *all* of the items in the
5031    constraint list will be chosen together.
5033 Putting those together, you might have a two operand constraint string like
5034 ``"rm|r,ri|rm"``. This indicates that if operand 0 is ``r`` or ``m``, then
5035 operand 1 may be one of ``r`` or ``i``. If operand 0 is ``r``, then operand 1
5036 may be one of ``r`` or ``m``. But, operand 0 and 1 cannot both be of type m.
5038 However, the use of either of the alternatives features is *NOT* recommended, as
5039 LLVM is not able to make an intelligent choice about which one to use. (At the
5040 point it currently needs to choose, not enough information is available to do so
5041 in a smart way.) Thus, it simply tries to make a choice that's most likely to
5042 compile, not one that will be optimal performance. (e.g., given "``rm``", it'll
5043 always choose to use memory, not registers). And, if given multiple registers,
5044 or multiple register classes, it will simply choose the first one. (In fact, it
5045 doesn't currently even ensure explicitly specified physical registers are
5046 unique, so specifying multiple physical registers as alternatives, like
5047 ``{r11}{r12},{r11}{r12}``, will assign r11 to both operands, not at all what was
5048 intended.)
5050 Supported Constraint Code List
5051 """"""""""""""""""""""""""""""
5053 The constraint codes are, in general, expected to behave the same way they do in
5054 GCC. LLVM's support is often implemented on an 'as-needed' basis, to support C
5055 inline asm code which was supported by GCC. A mismatch in behavior between LLVM
5056 and GCC likely indicates a bug in LLVM.
5058 Some constraint codes are typically supported by all targets:
5060 - ``r``: A register in the target's general purpose register class.
5061 - ``m``: A memory address operand. It is target-specific what addressing modes
5062   are supported, typical examples are register, or register + register offset,
5063   or register + immediate offset (of some target-specific size).
5064 - ``p``: An address operand. Similar to ``m``, but used by "load address"
5065   type instructions without touching memory.
5066 - ``i``: An integer constant (of target-specific width). Allows either a simple
5067   immediate, or a relocatable value.
5068 - ``n``: An integer constant -- *not* including relocatable values.
5069 - ``s``: An integer constant, but allowing *only* relocatable values.
5070 - ``X``: Allows an operand of any kind, no constraint whatsoever. Typically
5071   useful to pass a label for an asm branch or call.
5073   .. FIXME: but that surely isn't actually okay to jump out of an asm
5074      block without telling llvm about the control transfer???)
5076 - ``{register-name}``: Requires exactly the named physical register.
5078 Other constraints are target-specific:
5080 AArch64:
5082 - ``z``: An immediate integer 0. Outputs ``WZR`` or ``XZR``, as appropriate.
5083 - ``I``: An immediate integer valid for an ``ADD`` or ``SUB`` instruction,
5084   i.e. 0 to 4095 with optional shift by 12.
5085 - ``J``: An immediate integer that, when negated, is valid for an ``ADD`` or
5086   ``SUB`` instruction, i.e. -1 to -4095 with optional left shift by 12.
5087 - ``K``: An immediate integer that is valid for the 'bitmask immediate 32' of a
5088   logical instruction like ``AND``, ``EOR``, or ``ORR`` with a 32-bit register.
5089 - ``L``: An immediate integer that is valid for the 'bitmask immediate 64' of a
5090   logical instruction like ``AND``, ``EOR``, or ``ORR`` with a 64-bit register.
5091 - ``M``: An immediate integer for use with the ``MOV`` assembly alias on a
5092   32-bit register. This is a superset of ``K``: in addition to the bitmask
5093   immediate, also allows immediate integers which can be loaded with a single
5094   ``MOVZ`` or ``MOVL`` instruction.
5095 - ``N``: An immediate integer for use with the ``MOV`` assembly alias on a
5096   64-bit register. This is a superset of ``L``.
5097 - ``Q``: Memory address operand must be in a single register (no
5098   offsets). (However, LLVM currently does this for the ``m`` constraint as
5099   well.)
5100 - ``r``: A 32 or 64-bit integer register (W* or X*).
5101 - ``w``: A 32, 64, or 128-bit floating-point, SIMD or SVE vector register.
5102 - ``x``: Like w, but restricted to registers 0 to 15 inclusive.
5103 - ``y``: Like w, but restricted to SVE vector registers Z0 to Z7 inclusive.
5104 - ``Uph``: One of the upper eight SVE predicate registers (P8 to P15)
5105 - ``Upl``: One of the lower eight SVE predicate registers (P0 to P7)
5106 - ``Upa``: Any of the SVE predicate registers (P0 to P15)
5108 AMDGPU:
5110 - ``r``: A 32 or 64-bit integer register.
5111 - ``[0-9]v``: The 32-bit VGPR register, number 0-9.
5112 - ``[0-9]s``: The 32-bit SGPR register, number 0-9.
5113 - ``[0-9]a``: The 32-bit AGPR register, number 0-9.
5114 - ``I``: An integer inline constant in the range from -16 to 64.
5115 - ``J``: A 16-bit signed integer constant.
5116 - ``A``: An integer or a floating-point inline constant.
5117 - ``B``: A 32-bit signed integer constant.
5118 - ``C``: A 32-bit unsigned integer constant or an integer inline constant in the range from -16 to 64.
5119 - ``DA``: A 64-bit constant that can be split into two "A" constants.
5120 - ``DB``: A 64-bit constant that can be split into two "B" constants.
5122 All ARM modes:
5124 - ``Q``, ``Um``, ``Un``, ``Uq``, ``Us``, ``Ut``, ``Uv``, ``Uy``: Memory address
5125   operand. Treated the same as operand ``m``, at the moment.
5126 - ``Te``: An even general-purpose 32-bit integer register: ``r0,r2,...,r12,r14``
5127 - ``To``: An odd general-purpose 32-bit integer register: ``r1,r3,...,r11``
5129 ARM and ARM's Thumb2 mode:
5131 - ``j``: An immediate integer between 0 and 65535 (valid for ``MOVW``)
5132 - ``I``: An immediate integer valid for a data-processing instruction.
5133 - ``J``: An immediate integer between -4095 and 4095.
5134 - ``K``: An immediate integer whose bitwise inverse is valid for a
5135   data-processing instruction. (Can be used with template modifier "``B``" to
5136   print the inverted value).
5137 - ``L``: An immediate integer whose negation is valid for a data-processing
5138   instruction. (Can be used with template modifier "``n``" to print the negated
5139   value).
5140 - ``M``: A power of two or an integer between 0 and 32.
5141 - ``N``: Invalid immediate constraint.
5142 - ``O``: Invalid immediate constraint.
5143 - ``r``: A general-purpose 32-bit integer register (``r0-r15``).
5144 - ``l``: In Thumb2 mode, low 32-bit GPR registers (``r0-r7``). In ARM mode, same
5145   as ``r``.
5146 - ``h``: In Thumb2 mode, a high 32-bit GPR register (``r8-r15``). In ARM mode,
5147   invalid.
5148 - ``w``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5149   ``s0-s31``, ``d0-d31``, or ``q0-q15``, respectively.
5150 - ``t``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5151   ``s0-s31``, ``d0-d15``, or ``q0-q7``, respectively.
5152 - ``x``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5153   ``s0-s15``, ``d0-d7``, or ``q0-q3``, respectively.
5155 ARM's Thumb1 mode:
5157 - ``I``: An immediate integer between 0 and 255.
5158 - ``J``: An immediate integer between -255 and -1.
5159 - ``K``: An immediate integer between 0 and 255, with optional left-shift by
5160   some amount.
5161 - ``L``: An immediate integer between -7 and 7.
5162 - ``M``: An immediate integer which is a multiple of 4 between 0 and 1020.
5163 - ``N``: An immediate integer between 0 and 31.
5164 - ``O``: An immediate integer which is a multiple of 4 between -508 and 508.
5165 - ``r``: A low 32-bit GPR register (``r0-r7``).
5166 - ``l``: A low 32-bit GPR register (``r0-r7``).
5167 - ``h``: A high GPR register (``r0-r7``).
5168 - ``w``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5169   ``s0-s31``, ``d0-d31``, or ``q0-q15``, respectively.
5170 - ``t``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5171   ``s0-s31``, ``d0-d15``, or ``q0-q7``, respectively.
5172 - ``x``: A 32, 64, or 128-bit floating-point/SIMD register in the ranges
5173   ``s0-s15``, ``d0-d7``, or ``q0-q3``, respectively.
5175 Hexagon:
5177 - ``o``, ``v``: A memory address operand, treated the same as constraint ``m``,
5178   at the moment.
5179 - ``r``: A 32 or 64-bit register.
5181 LoongArch:
5183 - ``f``: A floating-point register (if available).
5184 - ``k``: A memory operand whose address is formed by a base register and
5185   (optionally scaled) index register.
5186 - ``l``: A signed 16-bit constant.
5187 - ``m``: A memory operand whose address is formed by a base register and
5188   offset that is suitable for use in instructions with the same addressing
5189   mode as st.w and ld.w.
5190 - ``I``: A signed 12-bit constant (for arithmetic instructions).
5191 - ``J``: An immediate integer zero.
5192 - ``K``: An unsigned 12-bit constant (for logic instructions).
5193 - ``ZB``: An address that is held in a general-purpose register. The offset
5194   is zero.
5195 - ``ZC``: A memory operand whose address is formed by a base register and
5196   offset that is suitable for use in instructions with the same addressing
5197   mode as ll.w and sc.w.
5199 MSP430:
5201 - ``r``: An 8 or 16-bit register.
5203 MIPS:
5205 - ``I``: An immediate signed 16-bit integer.
5206 - ``J``: An immediate integer zero.
5207 - ``K``: An immediate unsigned 16-bit integer.
5208 - ``L``: An immediate 32-bit integer, where the lower 16 bits are 0.
5209 - ``N``: An immediate integer between -65535 and -1.
5210 - ``O``: An immediate signed 15-bit integer.
5211 - ``P``: An immediate integer between 1 and 65535.
5212 - ``m``: A memory address operand. In MIPS-SE mode, allows a base address
5213   register plus 16-bit immediate offset. In MIPS mode, just a base register.
5214 - ``R``: A memory address operand. In MIPS-SE mode, allows a base address
5215   register plus a 9-bit signed offset. In MIPS mode, the same as constraint
5216   ``m``.
5217 - ``ZC``: A memory address operand, suitable for use in a ``pref``, ``ll``, or
5218   ``sc`` instruction on the given subtarget (details vary).
5219 - ``r``, ``d``,  ``y``: A 32 or 64-bit GPR register.
5220 - ``f``: A 32 or 64-bit FPU register (``F0-F31``), or a 128-bit MSA register
5221   (``W0-W31``). In the case of MSA registers, it is recommended to use the ``w``
5222   argument modifier for compatibility with GCC.
5223 - ``c``: A 32-bit or 64-bit GPR register suitable for indirect jump (always
5224   ``25``).
5225 - ``l``: The ``lo`` register, 32 or 64-bit.
5226 - ``x``: Invalid.
5228 NVPTX:
5230 - ``b``: A 1-bit integer register.
5231 - ``c`` or ``h``: A 16-bit integer register.
5232 - ``r``: A 32-bit integer register.
5233 - ``l`` or ``N``: A 64-bit integer register.
5234 - ``f``: A 32-bit float register.
5235 - ``d``: A 64-bit float register.
5238 PowerPC:
5240 - ``I``: An immediate signed 16-bit integer.
5241 - ``J``: An immediate unsigned 16-bit integer, shifted left 16 bits.
5242 - ``K``: An immediate unsigned 16-bit integer.
5243 - ``L``: An immediate signed 16-bit integer, shifted left 16 bits.
5244 - ``M``: An immediate integer greater than 31.
5245 - ``N``: An immediate integer that is an exact power of 2.
5246 - ``O``: The immediate integer constant 0.
5247 - ``P``: An immediate integer constant whose negation is a signed 16-bit
5248   constant.
5249 - ``es``, ``o``, ``Q``, ``Z``, ``Zy``: A memory address operand, currently
5250   treated the same as ``m``.
5251 - ``r``: A 32 or 64-bit integer register.
5252 - ``b``: A 32 or 64-bit integer register, excluding ``R0`` (that is:
5253   ``R1-R31``).
5254 - ``f``: A 32 or 64-bit float register (``F0-F31``),
5255 - ``v``: For ``4 x f32`` or ``4 x f64`` types, a 128-bit altivec vector
5256    register (``V0-V31``).
5258 - ``y``: Condition register (``CR0-CR7``).
5259 - ``wc``: An individual CR bit in a CR register.
5260 - ``wa``, ``wd``, ``wf``: Any 128-bit VSX vector register, from the full VSX
5261   register set (overlapping both the floating-point and vector register files).
5262 - ``ws``: A 32 or 64-bit floating-point register, from the full VSX register
5263   set.
5265 RISC-V:
5267 - ``A``: An address operand (using a general-purpose register, without an
5268   offset).
5269 - ``I``: A 12-bit signed integer immediate operand.
5270 - ``J``: A zero integer immediate operand.
5271 - ``K``: A 5-bit unsigned integer immediate operand.
5272 - ``f``: A 32- or 64-bit floating-point register (requires F or D extension).
5273 - ``r``: A 32- or 64-bit general-purpose register (depending on the platform
5274   ``XLEN``).
5275 - ``vr``: A vector register. (requires V extension).
5276 - ``vm``: A vector register for masking operand. (requires V extension).
5278 Sparc:
5280 - ``I``: An immediate 13-bit signed integer.
5281 - ``r``: A 32-bit integer register.
5282 - ``f``: Any floating-point register on SparcV8, or a floating-point
5283   register in the "low" half of the registers on SparcV9.
5284 - ``e``: Any floating-point register. (Same as ``f`` on SparcV8.)
5286 SystemZ:
5288 - ``I``: An immediate unsigned 8-bit integer.
5289 - ``J``: An immediate unsigned 12-bit integer.
5290 - ``K``: An immediate signed 16-bit integer.
5291 - ``L``: An immediate signed 20-bit integer.
5292 - ``M``: An immediate integer 0x7fffffff.
5293 - ``Q``: A memory address operand with a base address and a 12-bit immediate
5294   unsigned displacement.
5295 - ``R``: A memory address operand with a base address, a 12-bit immediate
5296   unsigned displacement, and an index register.
5297 - ``S``: A memory address operand with a base address and a 20-bit immediate
5298   signed displacement.
5299 - ``T``: A memory address operand with a base address, a 20-bit immediate
5300   signed displacement, and an index register.
5301 - ``r`` or ``d``: A 32, 64, or 128-bit integer register.
5302 - ``a``: A 32, 64, or 128-bit integer address register (excludes R0, which in an
5303   address context evaluates as zero).
5304 - ``h``: A 32-bit value in the high part of a 64bit data register
5305   (LLVM-specific)
5306 - ``f``: A 32, 64, or 128-bit floating-point register.
5308 X86:
5310 - ``I``: An immediate integer between 0 and 31.
5311 - ``J``: An immediate integer between 0 and 64.
5312 - ``K``: An immediate signed 8-bit integer.
5313 - ``L``: An immediate integer, 0xff or 0xffff or (in 64-bit mode only)
5314   0xffffffff.
5315 - ``M``: An immediate integer between 0 and 3.
5316 - ``N``: An immediate unsigned 8-bit integer.
5317 - ``O``: An immediate integer between 0 and 127.
5318 - ``e``: An immediate 32-bit signed integer.
5319 - ``Z``: An immediate 32-bit unsigned integer.
5320 - ``q``: An 8, 16, 32, or 64-bit register which can be accessed as an 8-bit
5321   ``l`` integer register. On X86-32, this is the ``a``, ``b``, ``c``, and ``d``
5322   registers, and on X86-64, it is all of the integer registers.
5323 - ``Q``: An 8, 16, 32, or 64-bit register which can be accessed as an 8-bit
5324   ``h`` integer register. This is the ``a``, ``b``, ``c``, and ``d`` registers.
5325 - ``r`` or ``l``: An 8, 16, 32, or 64-bit integer register.
5326 - ``R``: An 8, 16, 32, or 64-bit "legacy" integer register -- one which has
5327   existed since i386, and can be accessed without the REX prefix.
5328 - ``f``: A 32, 64, or 80-bit '387 FPU stack pseudo-register.
5329 - ``y``: A 64-bit MMX register, if MMX is enabled.
5330 - ``v``: If SSE is enabled: a 32 or 64-bit scalar operand, or 128-bit vector
5331   operand in a SSE register. If AVX is also enabled, can also be a 256-bit
5332   vector operand in an AVX register. If AVX-512 is also enabled, can also be a
5333   512-bit vector operand in an AVX512 register. Otherwise, an error.
5334 - ``x``: The same as ``v``, except that when AVX-512 is enabled, the ``x`` code
5335   only allocates into the first 16 AVX-512 registers, while the ``v`` code
5336   allocates into any of the 32 AVX-512 registers.
5337 - ``Y``: The same as ``x``, if *SSE2* is enabled, otherwise an error.
5338 - ``A``: Special case: allocates EAX first, then EDX, for a single operand (in
5339   32-bit mode, a 64-bit integer operand will get split into two registers). It
5340   is not recommended to use this constraint, as in 64-bit mode, the 64-bit
5341   operand will get allocated only to RAX -- if two 32-bit operands are needed,
5342   you're better off splitting it yourself, before passing it to the asm
5343   statement.
5345 XCore:
5347 - ``r``: A 32-bit integer register.
5350 .. _inline-asm-modifiers:
5352 Asm template argument modifiers
5353 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5355 In the asm template string, modifiers can be used on the operand reference, like
5356 "``${0:n}``".
5358 The modifiers are, in general, expected to behave the same way they do in
5359 GCC. LLVM's support is often implemented on an 'as-needed' basis, to support C
5360 inline asm code which was supported by GCC. A mismatch in behavior between LLVM
5361 and GCC likely indicates a bug in LLVM.
5363 Target-independent:
5365 - ``c``: Print an immediate integer constant unadorned, without
5366   the target-specific immediate punctuation (e.g. no ``$`` prefix).
5367 - ``n``: Negate and print immediate integer constant unadorned, without the
5368   target-specific immediate punctuation (e.g. no ``$`` prefix).
5369 - ``l``: Print as an unadorned label, without the target-specific label
5370   punctuation (e.g. no ``$`` prefix).
5372 AArch64:
5374 - ``w``: Print a GPR register with a ``w*`` name instead of ``x*`` name. E.g.,
5375   instead of ``x30``, print ``w30``.
5376 - ``x``: Print a GPR register with a ``x*`` name. (this is the default, anyhow).
5377 - ``b``, ``h``, ``s``, ``d``, ``q``: Print a floating-point/SIMD register with a
5378   ``b*``, ``h*``, ``s*``, ``d*``, or ``q*`` name, rather than the default of
5379   ``v*``.
5381 AMDGPU:
5383 - ``r``: No effect.
5385 ARM:
5387 - ``a``: Print an operand as an address (with ``[`` and ``]`` surrounding a
5388   register).
5389 - ``P``: No effect.
5390 - ``q``: No effect.
5391 - ``y``: Print a VFP single-precision register as an indexed double (e.g. print
5392   as ``d4[1]`` instead of ``s9``)
5393 - ``B``: Bitwise invert and print an immediate integer constant without ``#``
5394   prefix.
5395 - ``L``: Print the low 16-bits of an immediate integer constant.
5396 - ``M``: Print as a register set suitable for ldm/stm. Also prints *all*
5397   register operands subsequent to the specified one (!), so use carefully.
5398 - ``Q``: Print the low-order register of a register-pair, or the low-order
5399   register of a two-register operand.
5400 - ``R``: Print the high-order register of a register-pair, or the high-order
5401   register of a two-register operand.
5402 - ``H``: Print the second register of a register-pair. (On a big-endian system,
5403   ``H`` is equivalent to ``Q``, and on little-endian system, ``H`` is equivalent
5404   to ``R``.)
5406   .. FIXME: H doesn't currently support printing the second register
5407      of a two-register operand.
5409 - ``e``: Print the low doubleword register of a NEON quad register.
5410 - ``f``: Print the high doubleword register of a NEON quad register.
5411 - ``m``: Print the base register of a memory operand without the ``[`` and ``]``
5412   adornment.
5414 Hexagon:
5416 - ``L``: Print the second register of a two-register operand. Requires that it
5417   has been allocated consecutively to the first.
5419   .. FIXME: why is it restricted to consecutive ones? And there's
5420      nothing that ensures that happens, is there?
5422 - ``I``: Print the letter 'i' if the operand is an integer constant, otherwise
5423   nothing. Used to print 'addi' vs 'add' instructions.
5425 LoongArch:
5427 - ``z``: Print $zero register if operand is zero, otherwise print it normally.
5429 MSP430:
5431 No additional modifiers.
5433 MIPS:
5435 - ``X``: Print an immediate integer as hexadecimal
5436 - ``x``: Print the low 16 bits of an immediate integer as hexadecimal.
5437 - ``d``: Print an immediate integer as decimal.
5438 - ``m``: Subtract one and print an immediate integer as decimal.
5439 - ``z``: Print $0 if an immediate zero, otherwise print normally.
5440 - ``L``: Print the low-order register of a two-register operand, or prints the
5441   address of the low-order word of a double-word memory operand.
5443   .. FIXME: L seems to be missing memory operand support.
5445 - ``M``: Print the high-order register of a two-register operand, or prints the
5446   address of the high-order word of a double-word memory operand.
5448   .. FIXME: M seems to be missing memory operand support.
5450 - ``D``: Print the second register of a two-register operand, or prints the
5451   second word of a double-word memory operand. (On a big-endian system, ``D`` is
5452   equivalent to ``L``, and on little-endian system, ``D`` is equivalent to
5453   ``M``.)
5454 - ``w``: No effect. Provided for compatibility with GCC which requires this
5455   modifier in order to print MSA registers (``W0-W31``) with the ``f``
5456   constraint.
5458 NVPTX:
5460 - ``r``: No effect.
5462 PowerPC:
5464 - ``L``: Print the second register of a two-register operand. Requires that it
5465   has been allocated consecutively to the first.
5467   .. FIXME: why is it restricted to consecutive ones? And there's
5468      nothing that ensures that happens, is there?
5470 - ``I``: Print the letter 'i' if the operand is an integer constant, otherwise
5471   nothing. Used to print 'addi' vs 'add' instructions.
5472 - ``y``: For a memory operand, prints formatter for a two-register X-form
5473   instruction. (Currently always prints ``r0,OPERAND``).
5474 - ``U``: Prints 'u' if the memory operand is an update form, and nothing
5475   otherwise. (NOTE: LLVM does not support update form, so this will currently
5476   always print nothing)
5477 - ``X``: Prints 'x' if the memory operand is an indexed form. (NOTE: LLVM does
5478   not support indexed form, so this will currently always print nothing)
5480 RISC-V:
5482 - ``i``: Print the letter 'i' if the operand is not a register, otherwise print
5483   nothing. Used to print 'addi' vs 'add' instructions, etc.
5484 - ``z``: Print the register ``zero`` if an immediate zero, otherwise print
5485   normally.
5487 Sparc:
5489 - ``r``: No effect.
5491 SystemZ:
5493 SystemZ implements only ``n``, and does *not* support any of the other
5494 target-independent modifiers.
5496 X86:
5498 - ``c``: Print an unadorned integer or symbol name. (The latter is
5499   target-specific behavior for this typically target-independent modifier).
5500 - ``A``: Print a register name with a '``*``' before it.
5501 - ``b``: Print an 8-bit register name (e.g. ``al``); do nothing on a memory
5502   operand.
5503 - ``h``: Print the upper 8-bit register name (e.g. ``ah``); do nothing on a
5504   memory operand.
5505 - ``w``: Print the 16-bit register name (e.g. ``ax``); do nothing on a memory
5506   operand.
5507 - ``k``: Print the 32-bit register name (e.g. ``eax``); do nothing on a memory
5508   operand.
5509 - ``q``: Print the 64-bit register name (e.g. ``rax``), if 64-bit registers are
5510   available, otherwise the 32-bit register name; do nothing on a memory operand.
5511 - ``n``: Negate and print an unadorned integer, or, for operands other than an
5512   immediate integer (e.g. a relocatable symbol expression), print a '-' before
5513   the operand. (The behavior for relocatable symbol expressions is a
5514   target-specific behavior for this typically target-independent modifier)
5515 - ``H``: Print a memory reference with additional offset +8.
5516 - ``P``: Print a memory reference used as the argument of a call instruction or
5517   used with explicit base reg and index reg as its offset. So it can not use
5518   additional regs to present the memory reference. (E.g. omit ``(rip)``, even
5519   though it's PC-relative.)
5521 XCore:
5523 No additional modifiers.
5526 Inline Asm Metadata
5527 ^^^^^^^^^^^^^^^^^^^
5529 The call instructions that wrap inline asm nodes may have a
5530 "``!srcloc``" MDNode attached to it that contains a list of constant
5531 integers. If present, the code generator will use the integer as the
5532 location cookie value when report errors through the ``LLVMContext``
5533 error reporting mechanisms. This allows a front-end to correlate backend
5534 errors that occur with inline asm back to the source code that produced
5535 it. For example:
5537 .. code-block:: llvm
5539     call void asm sideeffect "something bad", ""(), !srcloc !42
5540     ...
5541     !42 = !{ i32 1234567 }
5543 It is up to the front-end to make sense of the magic numbers it places
5544 in the IR. If the MDNode contains multiple constants, the code generator
5545 will use the one that corresponds to the line of the asm that the error
5546 occurs on.
5548 .. _metadata:
5550 Metadata
5551 ========
5553 LLVM IR allows metadata to be attached to instructions and global objects in the
5554 program that can convey extra information about the code to the optimizers and
5555 code generator. One example application of metadata is source-level
5556 debug information. There are two metadata primitives: strings and nodes.
5558 Metadata does not have a type, and is not a value. If referenced from a
5559 ``call`` instruction, it uses the ``metadata`` type.
5561 All metadata are identified in syntax by an exclamation point ('``!``').
5563 .. _metadata-string:
5565 Metadata Nodes and Metadata Strings
5566 -----------------------------------
5568 A metadata string is a string surrounded by double quotes. It can
5569 contain any character by escaping non-printable characters with
5570 "``\xx``" where "``xx``" is the two digit hex code. For example:
5571 "``!"test\00"``".
5573 Metadata nodes are represented with notation similar to structure
5574 constants (a comma separated list of elements, surrounded by braces and
5575 preceded by an exclamation point). Metadata nodes can have any values as
5576 their operand. For example:
5578 .. code-block:: llvm
5580     !{ !"test\00", i32 10}
5582 Metadata nodes that aren't uniqued use the ``distinct`` keyword. For example:
5584 .. code-block:: text
5586     !0 = distinct !{!"test\00", i32 10}
5588 ``distinct`` nodes are useful when nodes shouldn't be merged based on their
5589 content. They can also occur when transformations cause uniquing collisions
5590 when metadata operands change.
5592 A :ref:`named metadata <namedmetadatastructure>` is a collection of
5593 metadata nodes, which can be looked up in the module symbol table. For
5594 example:
5596 .. code-block:: llvm
5598     !foo = !{!4, !3}
5600 Metadata can be used as function arguments. Here the ``llvm.dbg.value``
5601 intrinsic is using three metadata arguments:
5603 .. code-block:: llvm
5605     call void @llvm.dbg.value(metadata !24, metadata !25, metadata !26)
5607 Metadata can be attached to an instruction. Here metadata ``!21`` is attached
5608 to the ``add`` instruction using the ``!dbg`` identifier:
5610 .. code-block:: llvm
5612     %indvar.next = add i64 %indvar, 1, !dbg !21
5614 Instructions may not have multiple metadata attachments with the same
5615 identifier.
5617 Metadata can also be attached to a function or a global variable. Here metadata
5618 ``!22`` is attached to the ``f1`` and ``f2`` functions, and the globals ``g1``
5619 and ``g2`` using the ``!dbg`` identifier:
5621 .. code-block:: llvm
5623     declare !dbg !22 void @f1()
5624     define void @f2() !dbg !22 {
5625       ret void
5626     }
5628     @g1 = global i32 0, !dbg !22
5629     @g2 = external global i32, !dbg !22
5631 Unlike instructions, global objects (functions and global variables) may have
5632 multiple metadata attachments with the same identifier.
5634 A transformation is required to drop any metadata attachment that it
5635 does not know or know it can't preserve. Currently there is an
5636 exception for metadata attachment to globals for ``!func_sanitize``,
5637 ``!type``, ``!absolute_symbol`` and ``!associated`` which can't be
5638 unconditionally dropped unless the global is itself deleted.
5640 Metadata attached to a module using named metadata may not be dropped, with
5641 the exception of debug metadata (named metadata with the name ``!llvm.dbg.*``).
5643 More information about specific metadata nodes recognized by the
5644 optimizers and code generator is found below.
5646 .. _specialized-metadata:
5648 Specialized Metadata Nodes
5649 ^^^^^^^^^^^^^^^^^^^^^^^^^^
5651 Specialized metadata nodes are custom data structures in metadata (as opposed
5652 to generic tuples). Their fields are labelled, and can be specified in any
5653 order.
5655 These aren't inherently debug info centric, but currently all the specialized
5656 metadata nodes are related to debug info.
5658 .. _DICompileUnit:
5660 DICompileUnit
5661 """""""""""""
5663 ``DICompileUnit`` nodes represent a compile unit. The ``enums:``,
5664 ``retainedTypes:``, ``globals:``, ``imports:`` and ``macros:`` fields are tuples
5665 containing the debug info to be emitted along with the compile unit, regardless
5666 of code optimizations (some nodes are only emitted if there are references to
5667 them from instructions). The ``debugInfoForProfiling:`` field is a boolean
5668 indicating whether or not line-table discriminators are updated to provide
5669 more-accurate debug info for profiling results.
5671 .. code-block:: text
5673     !0 = !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang",
5674                         isOptimized: true, flags: "-O2", runtimeVersion: 2,
5675                         splitDebugFilename: "abc.debug", emissionKind: FullDebug,
5676                         enums: !2, retainedTypes: !3, globals: !4, imports: !5,
5677                         macros: !6, dwoId: 0x0abcd)
5679 Compile unit descriptors provide the root scope for objects declared in a
5680 specific compilation unit. File descriptors are defined using this scope.  These
5681 descriptors are collected by a named metadata node ``!llvm.dbg.cu``. They keep
5682 track of global variables, type information, and imported entities (declarations
5683 and namespaces).
5685 .. _DIFile:
5687 DIFile
5688 """"""
5690 ``DIFile`` nodes represent files. The ``filename:`` can include slashes.
5692 .. code-block:: none
5694     !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir",
5695                  checksumkind: CSK_MD5,
5696                  checksum: "000102030405060708090a0b0c0d0e0f")
5698 Files are sometimes used in ``scope:`` fields, and are the only valid target
5699 for ``file:`` fields.
5701 The ``checksum:`` and ``checksumkind:`` fields are optional. If one of these
5702 fields is present, then the other is required to be present as well. Valid
5703 values for ``checksumkind:`` field are: {CSK_MD5, CSK_SHA1, CSK_SHA256}
5705 .. _DIBasicType:
5707 DIBasicType
5708 """""""""""
5710 ``DIBasicType`` nodes represent primitive types, such as ``int``, ``bool`` and
5711 ``float``. ``tag:`` defaults to ``DW_TAG_base_type``.
5713 .. code-block:: text
5715     !0 = !DIBasicType(name: "unsigned char", size: 8, align: 8,
5716                       encoding: DW_ATE_unsigned_char)
5717     !1 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
5719 The ``encoding:`` describes the details of the type. Usually it's one of the
5720 following:
5722 .. code-block:: text
5724   DW_ATE_address       = 1
5725   DW_ATE_boolean       = 2
5726   DW_ATE_float         = 4
5727   DW_ATE_signed        = 5
5728   DW_ATE_signed_char   = 6
5729   DW_ATE_unsigned      = 7
5730   DW_ATE_unsigned_char = 8
5732 .. _DISubroutineType:
5734 DISubroutineType
5735 """"""""""""""""
5737 ``DISubroutineType`` nodes represent subroutine types. Their ``types:`` field
5738 refers to a tuple; the first operand is the return type, while the rest are the
5739 types of the formal arguments in order. If the first operand is ``null``, that
5740 represents a function with no return value (such as ``void foo() {}`` in C++).
5742 .. code-block:: text
5744     !0 = !BasicType(name: "int", size: 32, align: 32, DW_ATE_signed)
5745     !1 = !BasicType(name: "char", size: 8, align: 8, DW_ATE_signed_char)
5746     !2 = !DISubroutineType(types: !{null, !0, !1}) ; void (int, char)
5748 .. _DIDerivedType:
5750 DIDerivedType
5751 """""""""""""
5753 ``DIDerivedType`` nodes represent types derived from other types, such as
5754 qualified types.
5756 .. code-block:: text
5758     !0 = !DIBasicType(name: "unsigned char", size: 8, align: 8,
5759                       encoding: DW_ATE_unsigned_char)
5760     !1 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !0, size: 32,
5761                         align: 32)
5763 The following ``tag:`` values are valid:
5765 .. code-block:: text
5767   DW_TAG_member             = 13
5768   DW_TAG_pointer_type       = 15
5769   DW_TAG_reference_type     = 16
5770   DW_TAG_typedef            = 22
5771   DW_TAG_inheritance        = 28
5772   DW_TAG_ptr_to_member_type = 31
5773   DW_TAG_const_type         = 38
5774   DW_TAG_friend             = 42
5775   DW_TAG_volatile_type      = 53
5776   DW_TAG_restrict_type      = 55
5777   DW_TAG_atomic_type        = 71
5778   DW_TAG_immutable_type     = 75
5780 .. _DIDerivedTypeMember:
5782 ``DW_TAG_member`` is used to define a member of a :ref:`composite type
5783 <DICompositeType>`. The type of the member is the ``baseType:``. The
5784 ``offset:`` is the member's bit offset.  If the composite type has an ODR
5785 ``identifier:`` and does not set ``flags: DIFwdDecl``, then the member is
5786 uniqued based only on its ``name:`` and ``scope:``.
5788 ``DW_TAG_inheritance`` and ``DW_TAG_friend`` are used in the ``elements:``
5789 field of :ref:`composite types <DICompositeType>` to describe parents and
5790 friends.
5792 ``DW_TAG_typedef`` is used to provide a name for the ``baseType:``.
5794 ``DW_TAG_pointer_type``, ``DW_TAG_reference_type``, ``DW_TAG_const_type``,
5795 ``DW_TAG_volatile_type``, ``DW_TAG_restrict_type``, ``DW_TAG_atomic_type`` and
5796 ``DW_TAG_immutable_type`` are used to qualify the ``baseType:``.
5798 Note that the ``void *`` type is expressed as a type derived from NULL.
5800 .. _DICompositeType:
5802 DICompositeType
5803 """""""""""""""
5805 ``DICompositeType`` nodes represent types composed of other types, like
5806 structures and unions. ``elements:`` points to a tuple of the composed types.
5808 If the source language supports ODR, the ``identifier:`` field gives the unique
5809 identifier used for type merging between modules.  When specified,
5810 :ref:`subprogram declarations <DISubprogramDeclaration>` and :ref:`member
5811 derived types <DIDerivedTypeMember>` that reference the ODR-type in their
5812 ``scope:`` change uniquing rules.
5814 For a given ``identifier:``, there should only be a single composite type that
5815 does not have  ``flags: DIFlagFwdDecl`` set.  LLVM tools that link modules
5816 together will unique such definitions at parse time via the ``identifier:``
5817 field, even if the nodes are ``distinct``.
5819 .. code-block:: text
5821     !0 = !DIEnumerator(name: "SixKind", value: 7)
5822     !1 = !DIEnumerator(name: "SevenKind", value: 7)
5823     !2 = !DIEnumerator(name: "NegEightKind", value: -8)
5824     !3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum", file: !12,
5825                           line: 2, size: 32, align: 32, identifier: "_M4Enum",
5826                           elements: !{!0, !1, !2})
5828 The following ``tag:`` values are valid:
5830 .. code-block:: text
5832   DW_TAG_array_type       = 1
5833   DW_TAG_class_type       = 2
5834   DW_TAG_enumeration_type = 4
5835   DW_TAG_structure_type   = 19
5836   DW_TAG_union_type       = 23
5838 For ``DW_TAG_array_type``, the ``elements:`` should be :ref:`subrange
5839 descriptors <DISubrange>`, each representing the range of subscripts at that
5840 level of indexing. The ``DIFlagVector`` flag to ``flags:`` indicates that an
5841 array type is a native packed vector. The optional ``dataLocation`` is a
5842 DIExpression that describes how to get from an object's address to the actual
5843 raw data, if they aren't equivalent. This is only supported for array types,
5844 particularly to describe Fortran arrays, which have an array descriptor in
5845 addition to the array data. Alternatively it can also be DIVariable which
5846 has the address of the actual raw data. The Fortran language supports pointer
5847 arrays which can be attached to actual arrays, this attachment between pointer
5848 and pointee is called association.  The optional ``associated`` is a
5849 DIExpression that describes whether the pointer array is currently associated.
5850 The optional ``allocated`` is a DIExpression that describes whether the
5851 allocatable array is currently allocated.  The optional ``rank`` is a
5852 DIExpression that describes the rank (number of dimensions) of fortran assumed
5853 rank array (rank is known at runtime).
5855 For ``DW_TAG_enumeration_type``, the ``elements:`` should be :ref:`enumerator
5856 descriptors <DIEnumerator>`, each representing the definition of an enumeration
5857 value for the set. All enumeration type descriptors are collected in the
5858 ``enums:`` field of the :ref:`compile unit <DICompileUnit>`.
5860 For ``DW_TAG_structure_type``, ``DW_TAG_class_type``, and
5861 ``DW_TAG_union_type``, the ``elements:`` should be :ref:`derived types
5862 <DIDerivedType>` with ``tag: DW_TAG_member``, ``tag: DW_TAG_inheritance``, or
5863 ``tag: DW_TAG_friend``; or :ref:`subprograms <DISubprogram>` with
5864 ``isDefinition: false``.
5866 .. _DISubrange:
5868 DISubrange
5869 """"""""""
5871 ``DISubrange`` nodes are the elements for ``DW_TAG_array_type`` variants of
5872 :ref:`DICompositeType`.
5874 - ``count: -1`` indicates an empty array.
5875 - ``count: !10`` describes the count with a :ref:`DILocalVariable`.
5876 - ``count: !12`` describes the count with a :ref:`DIGlobalVariable`.
5878 .. code-block:: text
5880     !0 = !DISubrange(count: 5, lowerBound: 0) ; array counting from 0
5881     !1 = !DISubrange(count: 5, lowerBound: 1) ; array counting from 1
5882     !2 = !DISubrange(count: -1) ; empty array.
5884     ; Scopes used in rest of example
5885     !6 = !DIFile(filename: "vla.c", directory: "/path/to/file")
5886     !7 = distinct !DICompileUnit(language: DW_LANG_C99, file: !6)
5887     !8 = distinct !DISubprogram(name: "foo", scope: !7, file: !6, line: 5)
5889     ; Use of local variable as count value
5890     !9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
5891     !10 = !DILocalVariable(name: "count", scope: !8, file: !6, line: 42, type: !9)
5892     !11 = !DISubrange(count: !10, lowerBound: 0)
5894     ; Use of global variable as count value
5895     !12 = !DIGlobalVariable(name: "count", scope: !8, file: !6, line: 22, type: !9)
5896     !13 = !DISubrange(count: !12, lowerBound: 0)
5898 .. _DIEnumerator:
5900 DIEnumerator
5901 """"""""""""
5903 ``DIEnumerator`` nodes are the elements for ``DW_TAG_enumeration_type``
5904 variants of :ref:`DICompositeType`.
5906 .. code-block:: text
5908     !0 = !DIEnumerator(name: "SixKind", value: 7)
5909     !1 = !DIEnumerator(name: "SevenKind", value: 7)
5910     !2 = !DIEnumerator(name: "NegEightKind", value: -8)
5912 DITemplateTypeParameter
5913 """""""""""""""""""""""
5915 ``DITemplateTypeParameter`` nodes represent type parameters to generic source
5916 language constructs. They are used (optionally) in :ref:`DICompositeType` and
5917 :ref:`DISubprogram` ``templateParams:`` fields.
5919 .. code-block:: text
5921     !0 = !DITemplateTypeParameter(name: "Ty", type: !1)
5923 DITemplateValueParameter
5924 """"""""""""""""""""""""
5926 ``DITemplateValueParameter`` nodes represent value parameters to generic source
5927 language constructs. ``tag:`` defaults to ``DW_TAG_template_value_parameter``,
5928 but if specified can also be set to ``DW_TAG_GNU_template_template_param`` or
5929 ``DW_TAG_GNU_template_param_pack``. They are used (optionally) in
5930 :ref:`DICompositeType` and :ref:`DISubprogram` ``templateParams:`` fields.
5932 .. code-block:: text
5934     !0 = !DITemplateValueParameter(name: "Ty", type: !1, value: i32 7)
5936 DINamespace
5937 """""""""""
5939 ``DINamespace`` nodes represent namespaces in the source language.
5941 .. code-block:: text
5943     !0 = !DINamespace(name: "myawesomeproject", scope: !1, file: !2, line: 7)
5945 .. _DIGlobalVariable:
5947 DIGlobalVariable
5948 """"""""""""""""
5950 ``DIGlobalVariable`` nodes represent global variables in the source language.
5952 .. code-block:: text
5954     @foo = global i32, !dbg !0
5955     !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
5956     !1 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !2,
5957                            file: !3, line: 7, type: !4, isLocal: true,
5958                            isDefinition: false, declaration: !5)
5961 DIGlobalVariableExpression
5962 """"""""""""""""""""""""""
5964 ``DIGlobalVariableExpression`` nodes tie a :ref:`DIGlobalVariable` together
5965 with a :ref:`DIExpression`.
5967 .. code-block:: text
5969     @lower = global i32, !dbg !0
5970     @upper = global i32, !dbg !1
5971     !0 = !DIGlobalVariableExpression(
5972              var: !2,
5973              expr: !DIExpression(DW_OP_LLVM_fragment, 0, 32)
5974              )
5975     !1 = !DIGlobalVariableExpression(
5976              var: !2,
5977              expr: !DIExpression(DW_OP_LLVM_fragment, 32, 32)
5978              )
5979     !2 = !DIGlobalVariable(name: "split64", linkageName: "split64", scope: !3,
5980                            file: !4, line: 8, type: !5, declaration: !6)
5982 All global variable expressions should be referenced by the `globals:` field of
5983 a :ref:`compile unit <DICompileUnit>`.
5985 .. _DISubprogram:
5987 DISubprogram
5988 """"""""""""
5990 ``DISubprogram`` nodes represent functions from the source language. A distinct
5991 ``DISubprogram`` may be attached to a function definition using ``!dbg``
5992 metadata. A unique ``DISubprogram`` may be attached to a function declaration
5993 used for call site debug info. The ``retainedNodes:`` field is a list of
5994 :ref:`variables <DILocalVariable>` and :ref:`labels <DILabel>` that must be
5995 retained, even if their IR counterparts are optimized out of the IR. The
5996 ``type:`` field must point at an :ref:`DISubroutineType`.
5998 .. _DISubprogramDeclaration:
6000 When ``spFlags: DISPFlagDefinition`` is not present, subprograms describe a
6001 declaration in the type tree as opposed to a definition of a function. In this
6002 case, the ``declaration`` field must be empty. If the scope is a composite type
6003 with an ODR ``identifier:`` and that does not set ``flags: DIFwdDecl``, then
6004 the subprogram declaration is uniqued based only on its ``linkageName:`` and
6005 ``scope:``.
6007 .. code-block:: text
6009     define void @_Z3foov() !dbg !0 {
6010       ...
6011     }
6013     !0 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,
6014                                 file: !2, line: 7, type: !3,
6015                                 spFlags: DISPFlagDefinition | DISPFlagLocalToUnit,
6016                                 scopeLine: 8, containingType: !4,
6017                                 virtuality: DW_VIRTUALITY_pure_virtual,
6018                                 virtualIndex: 10, flags: DIFlagPrototyped,
6019                                 isOptimized: true, unit: !5, templateParams: !6,
6020                                 declaration: !7, retainedNodes: !8,
6021                                 thrownTypes: !9)
6023 .. _DILexicalBlock:
6025 DILexicalBlock
6026 """"""""""""""
6028 ``DILexicalBlock`` nodes describe nested blocks within a :ref:`subprogram
6029 <DISubprogram>`. The line number and column numbers are used to distinguish
6030 two lexical blocks at same depth. They are valid targets for ``scope:``
6031 fields.
6033 .. code-block:: text
6035     !0 = distinct !DILexicalBlock(scope: !1, file: !2, line: 7, column: 35)
6037 Usually lexical blocks are ``distinct`` to prevent node merging based on
6038 operands.
6040 .. _DILexicalBlockFile:
6042 DILexicalBlockFile
6043 """"""""""""""""""
6045 ``DILexicalBlockFile`` nodes are used to discriminate between sections of a
6046 :ref:`lexical block <DILexicalBlock>`. The ``file:`` field can be changed to
6047 indicate textual inclusion, or the ``discriminator:`` field can be used to
6048 discriminate between control flow within a single block in the source language.
6050 .. code-block:: text
6052     !0 = !DILexicalBlock(scope: !3, file: !4, line: 7, column: 35)
6053     !1 = !DILexicalBlockFile(scope: !0, file: !4, discriminator: 0)
6054     !2 = !DILexicalBlockFile(scope: !0, file: !4, discriminator: 1)
6056 .. _DILocation:
6058 DILocation
6059 """"""""""
6061 ``DILocation`` nodes represent source debug locations. The ``scope:`` field is
6062 mandatory, and points at an :ref:`DILexicalBlockFile`, an
6063 :ref:`DILexicalBlock`, or an :ref:`DISubprogram`.
6065 .. code-block:: text
6067     !0 = !DILocation(line: 2900, column: 42, scope: !1, inlinedAt: !2)
6069 .. _DILocalVariable:
6071 DILocalVariable
6072 """""""""""""""
6074 ``DILocalVariable`` nodes represent local variables in the source language. If
6075 the ``arg:`` field is set to non-zero, then this variable is a subprogram
6076 parameter, and it will be included in the ``retainedNodes:`` field of its
6077 :ref:`DISubprogram`.
6079 .. code-block:: text
6081     !0 = !DILocalVariable(name: "this", arg: 1, scope: !3, file: !2, line: 7,
6082                           type: !3, flags: DIFlagArtificial)
6083     !1 = !DILocalVariable(name: "x", arg: 2, scope: !4, file: !2, line: 7,
6084                           type: !3)
6085     !2 = !DILocalVariable(name: "y", scope: !5, file: !2, line: 7, type: !3)
6087 .. _DIExpression:
6089 DIExpression
6090 """"""""""""
6092 ``DIExpression`` nodes represent expressions that are inspired by the DWARF
6093 expression language. They are used in :ref:`debug intrinsics<dbg_intrinsics>`
6094 (such as ``llvm.dbg.declare`` and ``llvm.dbg.value``) to describe how the
6095 referenced LLVM variable relates to the source language variable. Debug
6096 intrinsics are interpreted left-to-right: start by pushing the value/address
6097 operand of the intrinsic onto a stack, then repeatedly push and evaluate
6098 opcodes from the DIExpression until the final variable description is produced.
6100 The current supported opcode vocabulary is limited:
6102 - ``DW_OP_deref`` dereferences the top of the expression stack.
6103 - ``DW_OP_plus`` pops the last two entries from the expression stack, adds
6104   them together and appends the result to the expression stack.
6105 - ``DW_OP_minus`` pops the last two entries from the expression stack, subtracts
6106   the last entry from the second last entry and appends the result to the
6107   expression stack.
6108 - ``DW_OP_plus_uconst, 93`` adds ``93`` to the working expression.
6109 - ``DW_OP_LLVM_fragment, 16, 8`` specifies the offset and size (``16`` and ``8``
6110   here, respectively) of the variable fragment from the working expression. Note
6111   that contrary to DW_OP_bit_piece, the offset is describing the location
6112   within the described source variable.
6113 - ``DW_OP_LLVM_convert, 16, DW_ATE_signed`` specifies a bit size and encoding
6114   (``16`` and ``DW_ATE_signed`` here, respectively) to which the top of the
6115   expression stack is to be converted. Maps into a ``DW_OP_convert`` operation
6116   that references a base type constructed from the supplied values.
6117 - ``DW_OP_LLVM_tag_offset, tag_offset`` specifies that a memory tag should be
6118   optionally applied to the pointer. The memory tag is derived from the
6119   given tag offset in an implementation-defined manner.
6120 - ``DW_OP_swap`` swaps top two stack entries.
6121 - ``DW_OP_xderef`` provides extended dereference mechanism. The entry at the top
6122   of the stack is treated as an address. The second stack entry is treated as an
6123   address space identifier.
6124 - ``DW_OP_stack_value`` marks a constant value.
6125 - ``DW_OP_LLVM_entry_value, N`` refers to the value a register had upon
6126   function entry. When targeting DWARF, a ``DBG_VALUE(reg, ...,
6127   DIExpression(DW_OP_LLVM_entry_value, 1, ...)`` is lowered to
6128   ``DW_OP_entry_value [reg], ...``, which pushes the value ``reg`` had upon
6129   function entry onto the DWARF expression stack.
6131   The next ``(N - 1)`` operations will be part of the ``DW_OP_entry_value``
6132   block argument. For example, ``!DIExpression(DW_OP_LLVM_entry_value, 1,
6133   DW_OP_plus_uconst, 123, DW_OP_stack_value)`` specifies an expression where
6134   the entry value of ``reg`` is pushed onto the stack, and is added with 123.
6135   Due to framework limitations ``N`` must be 1, in other words,
6136   ``DW_OP_entry_value`` always refers to the value/address operand of the
6137   instruction.
6139   Because ``DW_OP_LLVM_entry_value`` is defined in terms of registers, it is
6140   usually used in MIR, but it is also allowed in LLVM IR when targetting a
6141   :ref:`swiftasync <swiftasync>` argument. The operation is introduced by:
6143     - ``LiveDebugValues`` pass, which applies it to function parameters that
6144       are unmodified throughout the function. Support is limited to simple
6145       register location descriptions, or as indirect locations (e.g.,
6146       parameters passed-by-value to a callee via a pointer to a temporary copy
6147       made in the caller).
6148     - ``AsmPrinter`` pass when a call site parameter value
6149       (``DW_AT_call_site_parameter_value``) is represented as entry value of
6150       the parameter.
6151     - ``CoroSplit`` pass, which may move variables from allocas into a
6152       coroutine frame. If the coroutine frame is a
6153       :ref:`swiftasync <swiftasync>` argument, the variable is described with
6154       an ``DW_OP_LLVM_entry_value`` operation.
6156 - ``DW_OP_LLVM_arg, N`` is used in debug intrinsics that refer to more than one
6157   value, such as one that calculates the sum of two registers. This is always
6158   used in combination with an ordered list of values, such that
6159   ``DW_OP_LLVM_arg, N`` refers to the ``N``\ :sup:`th` element in that list. For
6160   example, ``!DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_minus,
6161   DW_OP_stack_value)`` used with the list ``(%reg1, %reg2)`` would evaluate to
6162   ``%reg1 - reg2``. This list of values should be provided by the containing
6163   intrinsic/instruction.
6164 - ``DW_OP_breg`` (or ``DW_OP_bregx``) represents a content on the provided
6165   signed offset of the specified register. The opcode is only generated by the
6166   ``AsmPrinter`` pass to describe call site parameter value which requires an
6167   expression over two registers.
6168 - ``DW_OP_push_object_address`` pushes the address of the object which can then
6169   serve as a descriptor in subsequent calculation. This opcode can be used to
6170   calculate bounds of fortran allocatable array which has array descriptors.
6171 - ``DW_OP_over`` duplicates the entry currently second in the stack at the top
6172   of the stack. This opcode can be used to calculate bounds of fortran assumed
6173   rank array which has rank known at run time and current dimension number is
6174   implicitly first element of the stack.
6175 - ``DW_OP_LLVM_implicit_pointer`` It specifies the dereferenced value. It can
6176   be used to represent pointer variables which are optimized out but the value
6177   it points to is known. This operator is required as it is different than DWARF
6178   operator DW_OP_implicit_pointer in representation and specification (number
6179   and types of operands) and later can not be used as multiple level.
6181 .. code-block:: text
6183     IR for "*ptr = 4;"
6184     --------------
6185     call void @llvm.dbg.value(metadata i32 4, metadata !17, metadata !20)
6186     !17 = !DILocalVariable(name: "ptr1", scope: !12, file: !3, line: 5,
6187                            type: !18)
6188     !18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !19, size: 64)
6189     !19 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
6190     !20 = !DIExpression(DW_OP_LLVM_implicit_pointer))
6192     IR for "**ptr = 4;"
6193     --------------
6194     call void @llvm.dbg.value(metadata i32 4, metadata !17, metadata !21)
6195     !17 = !DILocalVariable(name: "ptr1", scope: !12, file: !3, line: 5,
6196                            type: !18)
6197     !18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !19, size: 64)
6198     !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
6199     !20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
6200     !21 = !DIExpression(DW_OP_LLVM_implicit_pointer,
6201                         DW_OP_LLVM_implicit_pointer))
6203 DWARF specifies three kinds of simple location descriptions: Register, memory,
6204 and implicit location descriptions.  Note that a location description is
6205 defined over certain ranges of a program, i.e the location of a variable may
6206 change over the course of the program. Register and memory location
6207 descriptions describe the *concrete location* of a source variable (in the
6208 sense that a debugger might modify its value), whereas *implicit locations*
6209 describe merely the actual *value* of a source variable which might not exist
6210 in registers or in memory (see ``DW_OP_stack_value``).
6212 A ``llvm.dbg.declare`` intrinsic describes an indirect value (the address) of a
6213 source variable. The first operand of the intrinsic must be an address of some
6214 kind. A DIExpression attached to the intrinsic refines this address to produce a
6215 concrete location for the source variable.
6217 A ``llvm.dbg.value`` intrinsic describes the direct value of a source variable.
6218 The first operand of the intrinsic may be a direct or indirect value. A
6219 DIExpression attached to the intrinsic refines the first operand to produce a
6220 direct value. For example, if the first operand is an indirect value, it may be
6221 necessary to insert ``DW_OP_deref`` into the DIExpression in order to produce a
6222 valid debug intrinsic.
6224 .. note::
6226    A DIExpression is interpreted in the same way regardless of which kind of
6227    debug intrinsic it's attached to.
6229 .. code-block:: text
6231     !0 = !DIExpression(DW_OP_deref)
6232     !1 = !DIExpression(DW_OP_plus_uconst, 3)
6233     !1 = !DIExpression(DW_OP_constu, 3, DW_OP_plus)
6234     !2 = !DIExpression(DW_OP_bit_piece, 3, 7)
6235     !3 = !DIExpression(DW_OP_deref, DW_OP_constu, 3, DW_OP_plus, DW_OP_LLVM_fragment, 3, 7)
6236     !4 = !DIExpression(DW_OP_constu, 2, DW_OP_swap, DW_OP_xderef)
6237     !5 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
6239 DIAssignID
6240 """"""""""""
6242 ``DIAssignID`` nodes have no operands and are always distinct. They are used to
6243 link together `@llvm.dbg.assign` intrinsics (:ref:`debug
6244 intrinsics<dbg_intrinsics>`) and instructions that store in IR. See `Debug Info
6245 Assignment Tracking <AssignmentTracking.html>`_ for more info.
6247 .. code-block:: llvm
6249     store i32 %a, ptr %a.addr, align 4, !DIAssignID !2
6250     llvm.dbg.assign(metadata %a, metadata !1, metadata !DIExpression(), !2, metadata %a.addr, metadata !DIExpression()), !dbg !3
6252     !2 = distinct !DIAssignID()
6254 DIArgList
6255 """"""""""""
6257 ``DIArgList`` nodes hold a list of constant or SSA value references. These are
6258 used in :ref:`debug intrinsics<dbg_intrinsics>` (currently only in
6259 ``llvm.dbg.value``) in combination with a ``DIExpression`` that uses the
6260 ``DW_OP_LLVM_arg`` operator. Because a DIArgList may refer to local values
6261 within a function, it must only be used as a function argument, must always be
6262 inlined, and cannot appear in named metadata.
6264 .. code-block:: text
6266     llvm.dbg.value(metadata !DIArgList(i32 %a, i32 %b),
6267                    metadata !16,
6268                    metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus))
6270 DIFlags
6271 """""""""""""""
6273 These flags encode various properties of DINodes.
6275 The `ExportSymbols` flag marks a class, struct or union whose members
6276 may be referenced as if they were defined in the containing class or
6277 union. This flag is used to decide whether the DW_AT_export_symbols can
6278 be used for the structure type.
6280 DIObjCProperty
6281 """"""""""""""
6283 ``DIObjCProperty`` nodes represent Objective-C property nodes.
6285 .. code-block:: text
6287     !3 = !DIObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo",
6288                          getter: "getFoo", attributes: 7, type: !2)
6290 DIImportedEntity
6291 """"""""""""""""
6293 ``DIImportedEntity`` nodes represent entities (such as modules) imported into a
6294 compile unit. The ``elements`` field is a list of renamed entities (such as
6295 variables and subprograms) in the imported entity (such as module).
6297 .. code-block:: text
6299    !2 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "foo", scope: !0,
6300                           entity: !1, line: 7, elements: !3)
6301    !3 = !{!4}
6302    !4 = !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "bar", scope: !0,
6303                           entity: !5, line: 7)
6305 DIMacro
6306 """""""
6308 ``DIMacro`` nodes represent definition or undefinition of a macro identifiers.
6309 The ``name:`` field is the macro identifier, followed by macro parameters when
6310 defining a function-like macro, and the ``value`` field is the token-string
6311 used to expand the macro identifier.
6313 .. code-block:: text
6315    !2 = !DIMacro(macinfo: DW_MACINFO_define, line: 7, name: "foo(x)",
6316                  value: "((x) + 1)")
6317    !3 = !DIMacro(macinfo: DW_MACINFO_undef, line: 30, name: "foo")
6319 DIMacroFile
6320 """""""""""
6322 ``DIMacroFile`` nodes represent inclusion of source files.
6323 The ``nodes:`` field is a list of ``DIMacro`` and ``DIMacroFile`` nodes that
6324 appear in the included source file.
6326 .. code-block:: text
6328    !2 = !DIMacroFile(macinfo: DW_MACINFO_start_file, line: 7, file: !2,
6329                      nodes: !3)
6331 .. _DILabel:
6333 DILabel
6334 """""""
6336 ``DILabel`` nodes represent labels within a :ref:`DISubprogram`. All fields of
6337 a ``DILabel`` are mandatory. The ``scope:`` field must be one of either a
6338 :ref:`DILexicalBlockFile`, a :ref:`DILexicalBlock`, or a :ref:`DISubprogram`.
6339 The ``name:`` field is the label identifier. The ``file:`` field is the
6340 :ref:`DIFile` the label is present in. The ``line:`` field is the source line
6341 within the file where the label is declared.
6343 .. code-block:: text
6345   !2 = !DILabel(scope: !0, name: "foo", file: !1, line: 7)
6347 '``tbaa``' Metadata
6348 ^^^^^^^^^^^^^^^^^^^
6350 In LLVM IR, memory does not have types, so LLVM's own type system is not
6351 suitable for doing type based alias analysis (TBAA). Instead, metadata is
6352 added to the IR to describe a type system of a higher level language. This
6353 can be used to implement C/C++ strict type aliasing rules, but it can also
6354 be used to implement custom alias analysis behavior for other languages.
6356 This description of LLVM's TBAA system is broken into two parts:
6357 :ref:`Semantics<tbaa_node_semantics>` talks about high level issues, and
6358 :ref:`Representation<tbaa_node_representation>` talks about the metadata
6359 encoding of various entities.
6361 It is always possible to trace any TBAA node to a "root" TBAA node (details
6362 in the :ref:`Representation<tbaa_node_representation>` section).  TBAA
6363 nodes with different roots have an unknown aliasing relationship, and LLVM
6364 conservatively infers ``MayAlias`` between them.  The rules mentioned in
6365 this section only pertain to TBAA nodes living under the same root.
6367 .. _tbaa_node_semantics:
6369 Semantics
6370 """""""""
6372 The TBAA metadata system, referred to as "struct path TBAA" (not to be
6373 confused with ``tbaa.struct``), consists of the following high level
6374 concepts: *Type Descriptors*, further subdivided into scalar type
6375 descriptors and struct type descriptors; and *Access Tags*.
6377 **Type descriptors** describe the type system of the higher level language
6378 being compiled.  **Scalar type descriptors** describe types that do not
6379 contain other types.  Each scalar type has a parent type, which must also
6380 be a scalar type or the TBAA root.  Via this parent relation, scalar types
6381 within a TBAA root form a tree.  **Struct type descriptors** denote types
6382 that contain a sequence of other type descriptors, at known offsets.  These
6383 contained type descriptors can either be struct type descriptors themselves
6384 or scalar type descriptors.
6386 **Access tags** are metadata nodes attached to load and store instructions.
6387 Access tags use type descriptors to describe the *location* being accessed
6388 in terms of the type system of the higher level language.  Access tags are
6389 tuples consisting of a base type, an access type and an offset.  The base
6390 type is a scalar type descriptor or a struct type descriptor, the access
6391 type is a scalar type descriptor, and the offset is a constant integer.
6393 The access tag ``(BaseTy, AccessTy, Offset)`` can describe one of two
6394 things:
6396  * If ``BaseTy`` is a struct type, the tag describes a memory access (load
6397    or store) of a value of type ``AccessTy`` contained in the struct type
6398    ``BaseTy`` at offset ``Offset``.
6400  * If ``BaseTy`` is a scalar type, ``Offset`` must be 0 and ``BaseTy`` and
6401    ``AccessTy`` must be the same; and the access tag describes a scalar
6402    access with scalar type ``AccessTy``.
6404 We first define an ``ImmediateParent`` relation on ``(BaseTy, Offset)``
6405 tuples this way:
6407  * If ``BaseTy`` is a scalar type then ``ImmediateParent(BaseTy, 0)`` is
6408    ``(ParentTy, 0)`` where ``ParentTy`` is the parent of the scalar type as
6409    described in the TBAA metadata.  ``ImmediateParent(BaseTy, Offset)`` is
6410    undefined if ``Offset`` is non-zero.
6412  * If ``BaseTy`` is a struct type then ``ImmediateParent(BaseTy, Offset)``
6413    is ``(NewTy, NewOffset)`` where ``NewTy`` is the type contained in
6414    ``BaseTy`` at offset ``Offset`` and ``NewOffset`` is ``Offset`` adjusted
6415    to be relative within that inner type.
6417 A memory access with an access tag ``(BaseTy1, AccessTy1, Offset1)``
6418 aliases a memory access with an access tag ``(BaseTy2, AccessTy2,
6419 Offset2)`` if either ``(BaseTy1, Offset1)`` is reachable from ``(Base2,
6420 Offset2)`` via the ``Parent`` relation or vice versa.
6422 As a concrete example, the type descriptor graph for the following program
6424 .. code-block:: c
6426     struct Inner {
6427       int i;    // offset 0
6428       float f;  // offset 4
6429     };
6431     struct Outer {
6432       float f;  // offset 0
6433       double d; // offset 4
6434       struct Inner inner_a;  // offset 12
6435     };
6437     void f(struct Outer* outer, struct Inner* inner, float* f, int* i, char* c) {
6438       outer->f = 0;            // tag0: (OuterStructTy, FloatScalarTy, 0)
6439       outer->inner_a.i = 0;    // tag1: (OuterStructTy, IntScalarTy, 12)
6440       outer->inner_a.f = 0.0;  // tag2: (OuterStructTy, FloatScalarTy, 16)
6441       *f = 0.0;                // tag3: (FloatScalarTy, FloatScalarTy, 0)
6442     }
6444 is (note that in C and C++, ``char`` can be used to access any arbitrary
6445 type):
6447 .. code-block:: text
6449     Root = "TBAA Root"
6450     CharScalarTy = ("char", Root, 0)
6451     FloatScalarTy = ("float", CharScalarTy, 0)
6452     DoubleScalarTy = ("double", CharScalarTy, 0)
6453     IntScalarTy = ("int", CharScalarTy, 0)
6454     InnerStructTy = {"Inner" (IntScalarTy, 0), (FloatScalarTy, 4)}
6455     OuterStructTy = {"Outer", (FloatScalarTy, 0), (DoubleScalarTy, 4),
6456                      (InnerStructTy, 12)}
6459 with (e.g.) ``ImmediateParent(OuterStructTy, 12)`` = ``(InnerStructTy,
6460 0)``, ``ImmediateParent(InnerStructTy, 0)`` = ``(IntScalarTy, 0)``, and
6461 ``ImmediateParent(IntScalarTy, 0)`` = ``(CharScalarTy, 0)``.
6463 .. _tbaa_node_representation:
6465 Representation
6466 """"""""""""""
6468 The root node of a TBAA type hierarchy is an ``MDNode`` with 0 operands or
6469 with exactly one ``MDString`` operand.
6471 Scalar type descriptors are represented as an ``MDNode`` s with two
6472 operands.  The first operand is an ``MDString`` denoting the name of the
6473 struct type.  LLVM does not assign meaning to the value of this operand, it
6474 only cares about it being an ``MDString``.  The second operand is an
6475 ``MDNode`` which points to the parent for said scalar type descriptor,
6476 which is either another scalar type descriptor or the TBAA root.  Scalar
6477 type descriptors can have an optional third argument, but that must be the
6478 constant integer zero.
6480 Struct type descriptors are represented as ``MDNode`` s with an odd number
6481 of operands greater than 1.  The first operand is an ``MDString`` denoting
6482 the name of the struct type.  Like in scalar type descriptors the actual
6483 value of this name operand is irrelevant to LLVM.  After the name operand,
6484 the struct type descriptors have a sequence of alternating ``MDNode`` and
6485 ``ConstantInt`` operands.  With N starting from 1, the 2N - 1 th operand,
6486 an ``MDNode``, denotes a contained field, and the 2N th operand, a
6487 ``ConstantInt``, is the offset of the said contained field.  The offsets
6488 must be in non-decreasing order.
6490 Access tags are represented as ``MDNode`` s with either 3 or 4 operands.
6491 The first operand is an ``MDNode`` pointing to the node representing the
6492 base type.  The second operand is an ``MDNode`` pointing to the node
6493 representing the access type.  The third operand is a ``ConstantInt`` that
6494 states the offset of the access.  If a fourth field is present, it must be
6495 a ``ConstantInt`` valued at 0 or 1.  If it is 1 then the access tag states
6496 that the location being accessed is "constant" (meaning
6497 ``pointsToConstantMemory`` should return true; see `other useful
6498 AliasAnalysis methods <AliasAnalysis.html#OtherItfs>`_).  The TBAA root of
6499 the access type and the base type of an access tag must be the same, and
6500 that is the TBAA root of the access tag.
6502 '``tbaa.struct``' Metadata
6503 ^^^^^^^^^^^^^^^^^^^^^^^^^^
6505 The :ref:`llvm.memcpy <int_memcpy>` is often used to implement
6506 aggregate assignment operations in C and similar languages, however it
6507 is defined to copy a contiguous region of memory, which is more than
6508 strictly necessary for aggregate types which contain holes due to
6509 padding. Also, it doesn't contain any TBAA information about the fields
6510 of the aggregate.
6512 ``!tbaa.struct`` metadata can describe which memory subregions in a
6513 memcpy are padding and what the TBAA tags of the struct are.
6515 The current metadata format is very simple. ``!tbaa.struct`` metadata
6516 nodes are a list of operands which are in conceptual groups of three.
6517 For each group of three, the first operand gives the byte offset of a
6518 field in bytes, the second gives its size in bytes, and the third gives
6519 its tbaa tag. e.g.:
6521 .. code-block:: llvm
6523     !4 = !{ i64 0, i64 4, !1, i64 8, i64 4, !2 }
6525 This describes a struct with two fields. The first is at offset 0 bytes
6526 with size 4 bytes, and has tbaa tag !1. The second is at offset 8 bytes
6527 and has size 4 bytes and has tbaa tag !2.
6529 Note that the fields need not be contiguous. In this example, there is a
6530 4 byte gap between the two fields. This gap represents padding which
6531 does not carry useful data and need not be preserved.
6533 '``noalias``' and '``alias.scope``' Metadata
6534 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6536 ``noalias`` and ``alias.scope`` metadata provide the ability to specify generic
6537 noalias memory-access sets. This means that some collection of memory access
6538 instructions (loads, stores, memory-accessing calls, etc.) that carry
6539 ``noalias`` metadata can specifically be specified not to alias with some other
6540 collection of memory access instructions that carry ``alias.scope`` metadata.
6541 Each type of metadata specifies a list of scopes where each scope has an id and
6542 a domain.
6544 When evaluating an aliasing query, if for some domain, the set
6545 of scopes with that domain in one instruction's ``alias.scope`` list is a
6546 subset of (or equal to) the set of scopes for that domain in another
6547 instruction's ``noalias`` list, then the two memory accesses are assumed not to
6548 alias.
6550 Because scopes in one domain don't affect scopes in other domains, separate
6551 domains can be used to compose multiple independent noalias sets.  This is
6552 used for example during inlining.  As the noalias function parameters are
6553 turned into noalias scope metadata, a new domain is used every time the
6554 function is inlined.
6556 The metadata identifying each domain is itself a list containing one or two
6557 entries. The first entry is the name of the domain. Note that if the name is a
6558 string then it can be combined across functions and translation units. A
6559 self-reference can be used to create globally unique domain names. A
6560 descriptive string may optionally be provided as a second list entry.
6562 The metadata identifying each scope is also itself a list containing two or
6563 three entries. The first entry is the name of the scope. Note that if the name
6564 is a string then it can be combined across functions and translation units. A
6565 self-reference can be used to create globally unique scope names. A metadata
6566 reference to the scope's domain is the second entry. A descriptive string may
6567 optionally be provided as a third list entry.
6569 For example,
6571 .. code-block:: llvm
6573     ; Two scope domains:
6574     !0 = !{!0}
6575     !1 = !{!1}
6577     ; Some scopes in these domains:
6578     !2 = !{!2, !0}
6579     !3 = !{!3, !0}
6580     !4 = !{!4, !1}
6582     ; Some scope lists:
6583     !5 = !{!4} ; A list containing only scope !4
6584     !6 = !{!4, !3, !2}
6585     !7 = !{!3}
6587     ; These two instructions don't alias:
6588     %0 = load float, ptr %c, align 4, !alias.scope !5
6589     store float %0, ptr %arrayidx.i, align 4, !noalias !5
6591     ; These two instructions also don't alias (for domain !1, the set of scopes
6592     ; in the !alias.scope equals that in the !noalias list):
6593     %2 = load float, ptr %c, align 4, !alias.scope !5
6594     store float %2, ptr %arrayidx.i2, align 4, !noalias !6
6596     ; These two instructions may alias (for domain !0, the set of scopes in
6597     ; the !noalias list is not a superset of, or equal to, the scopes in the
6598     ; !alias.scope list):
6599     %2 = load float, ptr %c, align 4, !alias.scope !6
6600     store float %0, ptr %arrayidx.i, align 4, !noalias !7
6602 '``fpmath``' Metadata
6603 ^^^^^^^^^^^^^^^^^^^^^
6605 ``fpmath`` metadata may be attached to any instruction of floating-point
6606 type. It can be used to express the maximum acceptable error in the
6607 result of that instruction, in ULPs, thus potentially allowing the
6608 compiler to use a more efficient but less accurate method of computing
6609 it. ULP is defined as follows:
6611     If ``x`` is a real number that lies between two finite consecutive
6612     floating-point numbers ``a`` and ``b``, without being equal to one
6613     of them, then ``ulp(x) = |b - a|``, otherwise ``ulp(x)`` is the
6614     distance between the two non-equal finite floating-point numbers
6615     nearest ``x``. Moreover, ``ulp(NaN)`` is ``NaN``.
6617 The metadata node shall consist of a single positive float type number
6618 representing the maximum relative error, for example:
6620 .. code-block:: llvm
6622     !0 = !{ float 2.5 } ; maximum acceptable inaccuracy is 2.5 ULPs
6624 .. _range-metadata:
6626 '``range``' Metadata
6627 ^^^^^^^^^^^^^^^^^^^^
6629 ``range`` metadata may be attached only to ``load``, ``call`` and ``invoke`` of
6630 integer or vector of integer types. It expresses the possible ranges the loaded
6631 value or the value returned by the called function at this call site is in. If
6632 the loaded or returned value is not in the specified range, a poison value is
6633 returned instead. The ranges are represented with a flattened list of integers.
6634 The loaded value or the value returned is known to be in the union of the ranges
6635 defined by each consecutive pair. Each pair has the following properties:
6637 -  The type must match the scalar type of the instruction.
6638 -  The pair ``a,b`` represents the range ``[a,b)``.
6639 -  Both ``a`` and ``b`` are constants.
6640 -  The range is allowed to wrap.
6641 -  The range should not represent the full or empty set. That is,
6642    ``a!=b``.
6644 In addition, the pairs must be in signed order of the lower bound and
6645 they must be non-contiguous.
6647 For vector-typed instructions, the range is applied element-wise.
6649 Examples:
6651 .. code-block:: llvm
6653       %a = load i8, ptr %x, align 1, !range !0 ; Can only be 0 or 1
6654       %b = load i8, ptr %y, align 1, !range !1 ; Can only be 255 (-1), 0 or 1
6655       %c = call i8 @foo(),       !range !2 ; Can only be 0, 1, 3, 4 or 5
6656       %d = invoke i8 @bar() to label %cont
6657              unwind label %lpad, !range !3 ; Can only be -2, -1, 3, 4 or 5
6658       %e = load <2 x i8>, ptr %x, !range 0 ; Can only be <0 or 1, 0 or 1>
6659     ...
6660     !0 = !{ i8 0, i8 2 }
6661     !1 = !{ i8 255, i8 2 }
6662     !2 = !{ i8 0, i8 2, i8 3, i8 6 }
6663     !3 = !{ i8 -2, i8 0, i8 3, i8 6 }
6665 '``absolute_symbol``' Metadata
6666 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6668 ``absolute_symbol`` metadata may be attached to a global variable
6669 declaration. It marks the declaration as a reference to an absolute symbol,
6670 which causes the backend to use absolute relocations for the symbol even
6671 in position independent code, and expresses the possible ranges that the
6672 global variable's *address* (not its value) is in, in the same format as
6673 ``range`` metadata, with the extension that the pair ``all-ones,all-ones``
6674 may be used to represent the full set.
6676 Example (assuming 64-bit pointers):
6678 .. code-block:: llvm
6680       @a = external global i8, !absolute_symbol !0 ; Absolute symbol in range [0,256)
6681       @b = external global i8, !absolute_symbol !1 ; Absolute symbol in range [0,2^64)
6683     ...
6684     !0 = !{ i64 0, i64 256 }
6685     !1 = !{ i64 -1, i64 -1 }
6687 '``callees``' Metadata
6688 ^^^^^^^^^^^^^^^^^^^^^^
6690 ``callees`` metadata may be attached to indirect call sites. If ``callees``
6691 metadata is attached to a call site, and any callee is not among the set of
6692 functions provided by the metadata, the behavior is undefined. The intent of
6693 this metadata is to facilitate optimizations such as indirect-call promotion.
6694 For example, in the code below, the call instruction may only target the
6695 ``add`` or ``sub`` functions:
6697 .. code-block:: llvm
6699     %result = call i64 %binop(i64 %x, i64 %y), !callees !0
6701     ...
6702     !0 = !{ptr @add, ptr @sub}
6704 '``callback``' Metadata
6705 ^^^^^^^^^^^^^^^^^^^^^^^
6707 ``callback`` metadata may be attached to a function declaration, or definition.
6708 (Call sites are excluded only due to the lack of a use case.) For ease of
6709 exposition, we'll refer to the function annotated w/ metadata as a broker
6710 function. The metadata describes how the arguments of a call to the broker are
6711 in turn passed to the callback function specified by the metadata. Thus, the
6712 ``callback`` metadata provides a partial description of a call site inside the
6713 broker function with regards to the arguments of a call to the broker. The only
6714 semantic restriction on the broker function itself is that it is not allowed to
6715 inspect or modify arguments referenced in the ``callback`` metadata as
6716 pass-through to the callback function.
6718 The broker is not required to actually invoke the callback function at runtime.
6719 However, the assumptions about not inspecting or modifying arguments that would
6720 be passed to the specified callback function still hold, even if the callback
6721 function is not dynamically invoked. The broker is allowed to invoke the
6722 callback function more than once per invocation of the broker. The broker is
6723 also allowed to invoke (directly or indirectly) the function passed as a
6724 callback through another use. Finally, the broker is also allowed to relay the
6725 callback callee invocation to a different thread.
6727 The metadata is structured as follows: At the outer level, ``callback``
6728 metadata is a list of ``callback`` encodings. Each encoding starts with a
6729 constant ``i64`` which describes the argument position of the callback function
6730 in the call to the broker. The following elements, except the last, describe
6731 what arguments are passed to the callback function. Each element is again an
6732 ``i64`` constant identifying the argument of the broker that is passed through,
6733 or ``i64 -1`` to indicate an unknown or inspected argument. The order in which
6734 they are listed has to be the same in which they are passed to the callback
6735 callee. The last element of the encoding is a boolean which specifies how
6736 variadic arguments of the broker are handled. If it is true, all variadic
6737 arguments of the broker are passed through to the callback function *after* the
6738 arguments encoded explicitly before.
6740 In the code below, the ``pthread_create`` function is marked as a broker
6741 through the ``!callback !1`` metadata. In the example, there is only one
6742 callback encoding, namely ``!2``, associated with the broker. This encoding
6743 identifies the callback function as the second argument of the broker (``i64
6744 2``) and the sole argument of the callback function as the third one of the
6745 broker function (``i64 3``).
6747 .. FIXME why does the llvm-sphinx-docs builder give a highlighting
6748    error if the below is set to highlight as 'llvm', despite that we
6749    have misc.highlighting_failure set?
6751 .. code-block:: text
6753     declare !callback !1 dso_local i32 @pthread_create(ptr, ptr, ptr, ptr)
6755     ...
6756     !2 = !{i64 2, i64 3, i1 false}
6757     !1 = !{!2}
6759 Another example is shown below. The callback callee is the second argument of
6760 the ``__kmpc_fork_call`` function (``i64 2``). The callee is given two unknown
6761 values (each identified by a ``i64 -1``) and afterwards all
6762 variadic arguments that are passed to the ``__kmpc_fork_call`` call (due to the
6763 final ``i1 true``).
6765 .. FIXME why does the llvm-sphinx-docs builder give a highlighting
6766    error if the below is set to highlight as 'llvm', despite that we
6767    have misc.highlighting_failure set?
6769 .. code-block:: text
6771     declare !callback !0 dso_local void @__kmpc_fork_call(ptr, i32, ptr, ...)
6773     ...
6774     !1 = !{i64 2, i64 -1, i64 -1, i1 true}
6775     !0 = !{!1}
6777 '``exclude``' Metadata
6778 ^^^^^^^^^^^^^^^^^^^^^^
6780 ``exclude`` metadata may be attached to a global variable to signify that its
6781 section should not be included in the final executable or shared library. This
6782 option is only valid for global variables with an explicit section targeting ELF
6783 or COFF. This is done using the ``SHF_EXCLUDE`` flag on ELF targets and the
6784 ``IMAGE_SCN_LNK_REMOVE`` and ``IMAGE_SCN_MEM_DISCARDABLE`` flags for COFF
6785 targets. Additionally, this metadata is only used as a flag, so the associated
6786 node must be empty. The explicit section should not conflict with any other
6787 sections that the user does not want removed after linking.
6789 .. code-block:: text
6791   @object = private constant [1 x i8] c"\00", section ".foo" !exclude !0
6793   ...
6794   !0 = !{}
6796 '``unpredictable``' Metadata
6797 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6799 ``unpredictable`` metadata may be attached to any branch or switch
6800 instruction. It can be used to express the unpredictability of control
6801 flow. Similar to the llvm.expect intrinsic, it may be used to alter
6802 optimizations related to compare and branch instructions. The metadata
6803 is treated as a boolean value; if it exists, it signals that the branch
6804 or switch that it is attached to is completely unpredictable.
6806 .. _md_dereferenceable:
6808 '``dereferenceable``' Metadata
6809 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6811 The existence of the ``!dereferenceable`` metadata on the instruction
6812 tells the optimizer that the value loaded is known to be dereferenceable,
6813 otherwise the behavior is undefined.
6814 The number of bytes known to be dereferenceable is specified by the integer
6815 value in the metadata node. This is analogous to the ''dereferenceable''
6816 attribute on parameters and return values.
6818 .. _md_dereferenceable_or_null:
6820 '``dereferenceable_or_null``' Metadata
6821 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6823 The existence of the ``!dereferenceable_or_null`` metadata on the
6824 instruction tells the optimizer that the value loaded is known to be either
6825 dereferenceable or null, otherwise the behavior is undefined.
6826 The number of bytes known to be dereferenceable is specified by the integer
6827 value in the metadata node. This is analogous to the ''dereferenceable_or_null''
6828 attribute on parameters and return values.
6830 .. _llvm.loop:
6832 '``llvm.loop``'
6833 ^^^^^^^^^^^^^^^
6835 It is sometimes useful to attach information to loop constructs. Currently,
6836 loop metadata is implemented as metadata attached to the branch instruction
6837 in the loop latch block. The loop metadata node is a list of
6838 other metadata nodes, each representing a property of the loop. Usually,
6839 the first item of the property node is a string. For example, the
6840 ``llvm.loop.unroll.count`` suggests an unroll factor to the loop
6841 unroller:
6843 .. code-block:: llvm
6845       br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0
6846     ...
6847     !0 = !{!0, !1, !2}
6848     !1 = !{!"llvm.loop.unroll.enable"}
6849     !2 = !{!"llvm.loop.unroll.count", i32 4}
6851 For legacy reasons, the first item of a loop metadata node must be a
6852 reference to itself. Before the advent of the 'distinct' keyword, this
6853 forced the preservation of otherwise identical metadata nodes. Since
6854 the loop-metadata node can be attached to multiple nodes, the 'distinct'
6855 keyword has become unnecessary.
6857 Prior to the property nodes, one or two ``DILocation`` (debug location)
6858 nodes can be present in the list. The first, if present, identifies the
6859 source-code location where the loop begins. The second, if present,
6860 identifies the source-code location where the loop ends.
6862 Loop metadata nodes cannot be used as unique identifiers. They are
6863 neither persistent for the same loop through transformations nor
6864 necessarily unique to just one loop.
6866 '``llvm.loop.disable_nonforced``'
6867 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6869 This metadata disables all optional loop transformations unless
6870 explicitly instructed using other transformation metadata such as
6871 ``llvm.loop.unroll.enable``. That is, no heuristic will try to determine
6872 whether a transformation is profitable. The purpose is to avoid that the
6873 loop is transformed to a different loop before an explicitly requested
6874 (forced) transformation is applied. For instance, loop fusion can make
6875 other transformations impossible. Mandatory loop canonicalizations such
6876 as loop rotation are still applied.
6878 It is recommended to use this metadata in addition to any llvm.loop.*
6879 transformation directive. Also, any loop should have at most one
6880 directive applied to it (and a sequence of transformations built using
6881 followup-attributes). Otherwise, which transformation will be applied
6882 depends on implementation details such as the pass pipeline order.
6884 See :ref:`transformation-metadata` for details.
6886 '``llvm.loop.vectorize``' and '``llvm.loop.interleave``'
6887 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6889 Metadata prefixed with ``llvm.loop.vectorize`` or ``llvm.loop.interleave`` are
6890 used to control per-loop vectorization and interleaving parameters such as
6891 vectorization width and interleave count. These metadata should be used in
6892 conjunction with ``llvm.loop`` loop identification metadata. The
6893 ``llvm.loop.vectorize`` and ``llvm.loop.interleave`` metadata are only
6894 optimization hints and the optimizer will only interleave and vectorize loops if
6895 it believes it is safe to do so. The ``llvm.loop.parallel_accesses`` metadata
6896 which contains information about loop-carried memory dependencies can be helpful
6897 in determining the safety of these transformations.
6899 '``llvm.loop.interleave.count``' Metadata
6900 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6902 This metadata suggests an interleave count to the loop interleaver.
6903 The first operand is the string ``llvm.loop.interleave.count`` and the
6904 second operand is an integer specifying the interleave count. For
6905 example:
6907 .. code-block:: llvm
6909    !0 = !{!"llvm.loop.interleave.count", i32 4}
6911 Note that setting ``llvm.loop.interleave.count`` to 1 disables interleaving
6912 multiple iterations of the loop. If ``llvm.loop.interleave.count`` is set to 0
6913 then the interleave count will be determined automatically.
6915 '``llvm.loop.vectorize.enable``' Metadata
6916 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6918 This metadata selectively enables or disables vectorization for the loop. The
6919 first operand is the string ``llvm.loop.vectorize.enable`` and the second operand
6920 is a bit. If the bit operand value is 1 vectorization is enabled. A value of
6921 0 disables vectorization:
6923 .. code-block:: llvm
6925    !0 = !{!"llvm.loop.vectorize.enable", i1 0}
6926    !1 = !{!"llvm.loop.vectorize.enable", i1 1}
6928 '``llvm.loop.vectorize.predicate.enable``' Metadata
6929 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6931 This metadata selectively enables or disables creating predicated instructions
6932 for the loop, which can enable folding of the scalar epilogue loop into the
6933 main loop. The first operand is the string
6934 ``llvm.loop.vectorize.predicate.enable`` and the second operand is a bit. If
6935 the bit operand value is 1 vectorization is enabled. A value of 0 disables
6936 vectorization:
6938 .. code-block:: llvm
6940    !0 = !{!"llvm.loop.vectorize.predicate.enable", i1 0}
6941    !1 = !{!"llvm.loop.vectorize.predicate.enable", i1 1}
6943 '``llvm.loop.vectorize.scalable.enable``' Metadata
6944 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6946 This metadata selectively enables or disables scalable vectorization for the
6947 loop, and only has any effect if vectorization for the loop is already enabled.
6948 The first operand is the string ``llvm.loop.vectorize.scalable.enable``
6949 and the second operand is a bit. If the bit operand value is 1 scalable
6950 vectorization is enabled, whereas a value of 0 reverts to the default fixed
6951 width vectorization:
6953 .. code-block:: llvm
6955    !0 = !{!"llvm.loop.vectorize.scalable.enable", i1 0}
6956    !1 = !{!"llvm.loop.vectorize.scalable.enable", i1 1}
6958 '``llvm.loop.vectorize.width``' Metadata
6959 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6961 This metadata sets the target width of the vectorizer. The first
6962 operand is the string ``llvm.loop.vectorize.width`` and the second
6963 operand is an integer specifying the width. For example:
6965 .. code-block:: llvm
6967    !0 = !{!"llvm.loop.vectorize.width", i32 4}
6969 Note that setting ``llvm.loop.vectorize.width`` to 1 disables
6970 vectorization of the loop. If ``llvm.loop.vectorize.width`` is set to
6971 0 or if the loop does not have this metadata the width will be
6972 determined automatically.
6974 '``llvm.loop.vectorize.followup_vectorized``' Metadata
6975 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6977 This metadata defines which loop attributes the vectorized loop will
6978 have. See :ref:`transformation-metadata` for details.
6980 '``llvm.loop.vectorize.followup_epilogue``' Metadata
6981 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6983 This metadata defines which loop attributes the epilogue will have. The
6984 epilogue is not vectorized and is executed when either the vectorized
6985 loop is not known to preserve semantics (because e.g., it processes two
6986 arrays that are found to alias by a runtime check) or for the last
6987 iterations that do not fill a complete set of vector lanes. See
6988 :ref:`Transformation Metadata <transformation-metadata>` for details.
6990 '``llvm.loop.vectorize.followup_all``' Metadata
6991 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6993 Attributes in the metadata will be added to both the vectorized and
6994 epilogue loop.
6995 See :ref:`Transformation Metadata <transformation-metadata>` for details.
6997 '``llvm.loop.unroll``'
6998 ^^^^^^^^^^^^^^^^^^^^^^
7000 Metadata prefixed with ``llvm.loop.unroll`` are loop unrolling
7001 optimization hints such as the unroll factor. ``llvm.loop.unroll``
7002 metadata should be used in conjunction with ``llvm.loop`` loop
7003 identification metadata. The ``llvm.loop.unroll`` metadata are only
7004 optimization hints and the unrolling will only be performed if the
7005 optimizer believes it is safe to do so.
7007 '``llvm.loop.unroll.count``' Metadata
7008 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7010 This metadata suggests an unroll factor to the loop unroller. The
7011 first operand is the string ``llvm.loop.unroll.count`` and the second
7012 operand is a positive integer specifying the unroll factor. For
7013 example:
7015 .. code-block:: llvm
7017    !0 = !{!"llvm.loop.unroll.count", i32 4}
7019 If the trip count of the loop is less than the unroll count the loop
7020 will be partially unrolled.
7022 '``llvm.loop.unroll.disable``' Metadata
7023 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7025 This metadata disables loop unrolling. The metadata has a single operand
7026 which is the string ``llvm.loop.unroll.disable``. For example:
7028 .. code-block:: llvm
7030    !0 = !{!"llvm.loop.unroll.disable"}
7032 '``llvm.loop.unroll.runtime.disable``' Metadata
7033 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7035 This metadata disables runtime loop unrolling. The metadata has a single
7036 operand which is the string ``llvm.loop.unroll.runtime.disable``. For example:
7038 .. code-block:: llvm
7040    !0 = !{!"llvm.loop.unroll.runtime.disable"}
7042 '``llvm.loop.unroll.enable``' Metadata
7043 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7045 This metadata suggests that the loop should be fully unrolled if the trip count
7046 is known at compile time and partially unrolled if the trip count is not known
7047 at compile time. The metadata has a single operand which is the string
7048 ``llvm.loop.unroll.enable``.  For example:
7050 .. code-block:: llvm
7052    !0 = !{!"llvm.loop.unroll.enable"}
7054 '``llvm.loop.unroll.full``' Metadata
7055 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7057 This metadata suggests that the loop should be unrolled fully. The
7058 metadata has a single operand which is the string ``llvm.loop.unroll.full``.
7059 For example:
7061 .. code-block:: llvm
7063    !0 = !{!"llvm.loop.unroll.full"}
7065 '``llvm.loop.unroll.followup``' Metadata
7066 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7068 This metadata defines which loop attributes the unrolled loop will have.
7069 See :ref:`Transformation Metadata <transformation-metadata>` for details.
7071 '``llvm.loop.unroll.followup_remainder``' Metadata
7072 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7074 This metadata defines which loop attributes the remainder loop after
7075 partial/runtime unrolling will have. See
7076 :ref:`Transformation Metadata <transformation-metadata>` for details.
7078 '``llvm.loop.unroll_and_jam``'
7079 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7081 This metadata is treated very similarly to the ``llvm.loop.unroll`` metadata
7082 above, but affect the unroll and jam pass. In addition any loop with
7083 ``llvm.loop.unroll`` metadata but no ``llvm.loop.unroll_and_jam`` metadata will
7084 disable unroll and jam (so ``llvm.loop.unroll`` metadata will be left to the
7085 unroller, plus ``llvm.loop.unroll.disable`` metadata will disable unroll and jam
7086 too.)
7088 The metadata for unroll and jam otherwise is the same as for ``unroll``.
7089 ``llvm.loop.unroll_and_jam.enable``, ``llvm.loop.unroll_and_jam.disable`` and
7090 ``llvm.loop.unroll_and_jam.count`` do the same as for unroll.
7091 ``llvm.loop.unroll_and_jam.full`` is not supported. Again these are only hints
7092 and the normal safety checks will still be performed.
7094 '``llvm.loop.unroll_and_jam.count``' Metadata
7095 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7097 This metadata suggests an unroll and jam factor to use, similarly to
7098 ``llvm.loop.unroll.count``. The first operand is the string
7099 ``llvm.loop.unroll_and_jam.count`` and the second operand is a positive integer
7100 specifying the unroll factor. For example:
7102 .. code-block:: llvm
7104    !0 = !{!"llvm.loop.unroll_and_jam.count", i32 4}
7106 If the trip count of the loop is less than the unroll count the loop
7107 will be partially unroll and jammed.
7109 '``llvm.loop.unroll_and_jam.disable``' Metadata
7110 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7112 This metadata disables loop unroll and jamming. The metadata has a single
7113 operand which is the string ``llvm.loop.unroll_and_jam.disable``. For example:
7115 .. code-block:: llvm
7117    !0 = !{!"llvm.loop.unroll_and_jam.disable"}
7119 '``llvm.loop.unroll_and_jam.enable``' Metadata
7120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7122 This metadata suggests that the loop should be fully unroll and jammed if the
7123 trip count is known at compile time and partially unrolled if the trip count is
7124 not known at compile time. The metadata has a single operand which is the
7125 string ``llvm.loop.unroll_and_jam.enable``.  For example:
7127 .. code-block:: llvm
7129    !0 = !{!"llvm.loop.unroll_and_jam.enable"}
7131 '``llvm.loop.unroll_and_jam.followup_outer``' Metadata
7132 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7134 This metadata defines which loop attributes the outer unrolled loop will
7135 have. See :ref:`Transformation Metadata <transformation-metadata>` for
7136 details.
7138 '``llvm.loop.unroll_and_jam.followup_inner``' Metadata
7139 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7141 This metadata defines which loop attributes the inner jammed loop will
7142 have. See :ref:`Transformation Metadata <transformation-metadata>` for
7143 details.
7145 '``llvm.loop.unroll_and_jam.followup_remainder_outer``' Metadata
7146 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7148 This metadata defines which attributes the epilogue of the outer loop
7149 will have. This loop is usually unrolled, meaning there is no such
7150 loop. This attribute will be ignored in this case. See
7151 :ref:`Transformation Metadata <transformation-metadata>` for details.
7153 '``llvm.loop.unroll_and_jam.followup_remainder_inner``' Metadata
7154 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7156 This metadata defines which attributes the inner loop of the epilogue
7157 will have. The outer epilogue will usually be unrolled, meaning there
7158 can be multiple inner remainder loops. See
7159 :ref:`Transformation Metadata <transformation-metadata>` for details.
7161 '``llvm.loop.unroll_and_jam.followup_all``' Metadata
7162 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7164 Attributes specified in the metadata is added to all
7165 ``llvm.loop.unroll_and_jam.*`` loops. See
7166 :ref:`Transformation Metadata <transformation-metadata>` for details.
7168 '``llvm.loop.licm_versioning.disable``' Metadata
7169 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7171 This metadata indicates that the loop should not be versioned for the purpose
7172 of enabling loop-invariant code motion (LICM). The metadata has a single operand
7173 which is the string ``llvm.loop.licm_versioning.disable``. For example:
7175 .. code-block:: llvm
7177    !0 = !{!"llvm.loop.licm_versioning.disable"}
7179 '``llvm.loop.distribute.enable``' Metadata
7180 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7182 Loop distribution allows splitting a loop into multiple loops.  Currently,
7183 this is only performed if the entire loop cannot be vectorized due to unsafe
7184 memory dependencies.  The transformation will attempt to isolate the unsafe
7185 dependencies into their own loop.
7187 This metadata can be used to selectively enable or disable distribution of the
7188 loop.  The first operand is the string ``llvm.loop.distribute.enable`` and the
7189 second operand is a bit. If the bit operand value is 1 distribution is
7190 enabled. A value of 0 disables distribution:
7192 .. code-block:: llvm
7194    !0 = !{!"llvm.loop.distribute.enable", i1 0}
7195    !1 = !{!"llvm.loop.distribute.enable", i1 1}
7197 This metadata should be used in conjunction with ``llvm.loop`` loop
7198 identification metadata.
7200 '``llvm.loop.distribute.followup_coincident``' Metadata
7201 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7203 This metadata defines which attributes extracted loops with no cyclic
7204 dependencies will have (i.e. can be vectorized). See
7205 :ref:`Transformation Metadata <transformation-metadata>` for details.
7207 '``llvm.loop.distribute.followup_sequential``' Metadata
7208 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7210 This metadata defines which attributes the isolated loops with unsafe
7211 memory dependencies will have. See
7212 :ref:`Transformation Metadata <transformation-metadata>` for details.
7214 '``llvm.loop.distribute.followup_fallback``' Metadata
7215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7217 If loop versioning is necessary, this metadata defined the attributes
7218 the non-distributed fallback version will have. See
7219 :ref:`Transformation Metadata <transformation-metadata>` for details.
7221 '``llvm.loop.distribute.followup_all``' Metadata
7222 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7224 The attributes in this metadata is added to all followup loops of the
7225 loop distribution pass. See
7226 :ref:`Transformation Metadata <transformation-metadata>` for details.
7228 '``llvm.licm.disable``' Metadata
7229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7231 This metadata indicates that loop-invariant code motion (LICM) should not be
7232 performed on this loop. The metadata has a single operand which is the string
7233 ``llvm.licm.disable``. For example:
7235 .. code-block:: llvm
7237    !0 = !{!"llvm.licm.disable"}
7239 Note that although it operates per loop it isn't given the llvm.loop prefix
7240 as it is not affected by the ``llvm.loop.disable_nonforced`` metadata.
7242 '``llvm.access.group``' Metadata
7243 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7245 ``llvm.access.group`` metadata can be attached to any instruction that
7246 potentially accesses memory. It can point to a single distinct metadata
7247 node, which we call access group. This node represents all memory access
7248 instructions referring to it via ``llvm.access.group``. When an
7249 instruction belongs to multiple access groups, it can also point to a
7250 list of accesses groups, illustrated by the following example.
7252 .. code-block:: llvm
7254    %val = load i32, ptr %arrayidx, !llvm.access.group !0
7255    ...
7256    !0 = !{!1, !2}
7257    !1 = distinct !{}
7258    !2 = distinct !{}
7260 It is illegal for the list node to be empty since it might be confused
7261 with an access group.
7263 The access group metadata node must be 'distinct' to avoid collapsing
7264 multiple access groups by content. An access group metadata node must
7265 always be empty which can be used to distinguish an access group
7266 metadata node from a list of access groups. Being empty avoids the
7267 situation that the content must be updated which, because metadata is
7268 immutable by design, would required finding and updating all references
7269 to the access group node.
7271 The access group can be used to refer to a memory access instruction
7272 without pointing to it directly (which is not possible in global
7273 metadata). Currently, the only metadata making use of it is
7274 ``llvm.loop.parallel_accesses``.
7276 '``llvm.loop.parallel_accesses``' Metadata
7277 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7279 The ``llvm.loop.parallel_accesses`` metadata refers to one or more
7280 access group metadata nodes (see ``llvm.access.group``). It denotes that
7281 no loop-carried memory dependence exist between it and other instructions
7282 in the loop with this metadata.
7284 Let ``m1`` and ``m2`` be two instructions that both have the
7285 ``llvm.access.group`` metadata to the access group ``g1``, respectively
7286 ``g2`` (which might be identical). If a loop contains both access groups
7287 in its ``llvm.loop.parallel_accesses`` metadata, then the compiler can
7288 assume that there is no dependency between ``m1`` and ``m2`` carried by
7289 this loop. Instructions that belong to multiple access groups are
7290 considered having this property if at least one of the access groups
7291 matches the ``llvm.loop.parallel_accesses`` list.
7293 If all memory-accessing instructions in a loop have
7294 ``llvm.access.group`` metadata that each refer to one of the access
7295 groups of a loop's ``llvm.loop.parallel_accesses`` metadata, then the
7296 loop has no loop carried memory dependences and is considered to be a
7297 parallel loop.
7299 Note that if not all memory access instructions belong to an access
7300 group referred to by ``llvm.loop.parallel_accesses``, then the loop must
7301 not be considered trivially parallel. Additional
7302 memory dependence analysis is required to make that determination. As a fail
7303 safe mechanism, this causes loops that were originally parallel to be considered
7304 sequential (if optimization passes that are unaware of the parallel semantics
7305 insert new memory instructions into the loop body).
7307 Example of a loop that is considered parallel due to its correct use of
7308 both ``llvm.access.group`` and ``llvm.loop.parallel_accesses``
7309 metadata types.
7311 .. code-block:: llvm
7313    for.body:
7314      ...
7315      %val0 = load i32, ptr %arrayidx, !llvm.access.group !1
7316      ...
7317      store i32 %val0, ptr %arrayidx1, !llvm.access.group !1
7318      ...
7319      br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
7321    for.end:
7322    ...
7323    !0 = distinct !{!0, !{!"llvm.loop.parallel_accesses", !1}}
7324    !1 = distinct !{}
7326 It is also possible to have nested parallel loops:
7328 .. code-block:: llvm
7330    outer.for.body:
7331      ...
7332      %val1 = load i32, ptr %arrayidx3, !llvm.access.group !4
7333      ...
7334      br label %inner.for.body
7336    inner.for.body:
7337      ...
7338      %val0 = load i32, ptr %arrayidx1, !llvm.access.group !3
7339      ...
7340      store i32 %val0, ptr %arrayidx2, !llvm.access.group !3
7341      ...
7342      br i1 %exitcond, label %inner.for.end, label %inner.for.body, !llvm.loop !1
7344    inner.for.end:
7345      ...
7346      store i32 %val1, ptr %arrayidx4, !llvm.access.group !4
7347      ...
7348      br i1 %exitcond, label %outer.for.end, label %outer.for.body, !llvm.loop !2
7350    outer.for.end:                                          ; preds = %for.body
7351    ...
7352    !1 = distinct !{!1, !{!"llvm.loop.parallel_accesses", !3}}     ; metadata for the inner loop
7353    !2 = distinct !{!2, !{!"llvm.loop.parallel_accesses", !3, !4}} ; metadata for the outer loop
7354    !3 = distinct !{} ; access group for instructions in the inner loop (which are implicitly contained in outer loop as well)
7355    !4 = distinct !{} ; access group for instructions in the outer, but not the inner loop
7357 .. _langref_llvm_loop_mustprogress:
7359 '``llvm.loop.mustprogress``' Metadata
7360 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7362 The ``llvm.loop.mustprogress`` metadata indicates that this loop is required to
7363 terminate, unwind, or interact with the environment in an observable way e.g.
7364 via a volatile memory access, I/O, or other synchronization. If such a loop is
7365 not found to interact with the environment in an observable way, the loop may
7366 be removed. This corresponds to the ``mustprogress`` function attribute.
7368 '``irr_loop``' Metadata
7369 ^^^^^^^^^^^^^^^^^^^^^^^
7371 ``irr_loop`` metadata may be attached to the terminator instruction of a basic
7372 block that's an irreducible loop header (note that an irreducible loop has more
7373 than once header basic blocks.) If ``irr_loop`` metadata is attached to the
7374 terminator instruction of a basic block that is not really an irreducible loop
7375 header, the behavior is undefined. The intent of this metadata is to improve the
7376 accuracy of the block frequency propagation. For example, in the code below, the
7377 block ``header0`` may have a loop header weight (relative to the other headers of
7378 the irreducible loop) of 100:
7380 .. code-block:: llvm
7382     header0:
7383     ...
7384     br i1 %cmp, label %t1, label %t2, !irr_loop !0
7386     ...
7387     !0 = !{"loop_header_weight", i64 100}
7389 Irreducible loop header weights are typically based on profile data.
7391 .. _md_invariant.group:
7393 '``invariant.group``' Metadata
7394 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7396 The experimental ``invariant.group`` metadata may be attached to
7397 ``load``/``store`` instructions referencing a single metadata with no entries.
7398 The existence of the ``invariant.group`` metadata on the instruction tells
7399 the optimizer that every ``load`` and ``store`` to the same pointer operand
7400 can be assumed to load or store the same
7401 value (but see the ``llvm.launder.invariant.group`` intrinsic which affects
7402 when two pointers are considered the same). Pointers returned by bitcast or
7403 getelementptr with only zero indices are considered the same.
7405 Examples:
7407 .. code-block:: llvm
7409    @unknownPtr = external global i8
7410    ...
7411    %ptr = alloca i8
7412    store i8 42, ptr %ptr, !invariant.group !0
7413    call void @foo(ptr %ptr)
7415    %a = load i8, ptr %ptr, !invariant.group !0 ; Can assume that value under %ptr didn't change
7416    call void @foo(ptr %ptr)
7418    %newPtr = call ptr @getPointer(ptr %ptr)
7419    %c = load i8, ptr %newPtr, !invariant.group !0 ; Can't assume anything, because we only have information about %ptr
7421    %unknownValue = load i8, ptr @unknownPtr
7422    store i8 %unknownValue, ptr %ptr, !invariant.group !0 ; Can assume that %unknownValue == 42
7424    call void @foo(ptr %ptr)
7425    %newPtr2 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr)
7426    %d = load i8, ptr %newPtr2, !invariant.group !0  ; Can't step through launder.invariant.group to get value of %ptr
7428    ...
7429    declare void @foo(ptr)
7430    declare ptr @getPointer(ptr)
7431    declare ptr @llvm.launder.invariant.group.p0(ptr)
7433    !0 = !{}
7435 The invariant.group metadata must be dropped when replacing one pointer by
7436 another based on aliasing information. This is because invariant.group is tied
7437 to the SSA value of the pointer operand.
7439 .. code-block:: llvm
7441   %v = load i8, ptr %x, !invariant.group !0
7442   ; if %x mustalias %y then we can replace the above instruction with
7443   %v = load i8, ptr %y
7445 Note that this is an experimental feature, which means that its semantics might
7446 change in the future.
7448 '``type``' Metadata
7449 ^^^^^^^^^^^^^^^^^^^
7451 See :doc:`TypeMetadata`.
7453 '``associated``' Metadata
7454 ^^^^^^^^^^^^^^^^^^^^^^^^^
7456 The ``associated`` metadata may be attached to a global variable definition with
7457 a single argument that references a global object (optionally through an alias).
7459 This metadata lowers to the ELF section flag ``SHF_LINK_ORDER`` which prevents
7460 discarding of the global variable in linker GC unless the referenced object is
7461 also discarded. The linker support for this feature is spotty. For best
7462 compatibility, globals carrying this metadata should:
7464 - Be in ``@llvm.compiler.used``.
7465 - If the referenced global variable is in a comdat, be in the same comdat.
7467 ``!associated`` can not express many-to-one relationship. A global variable with
7468 the metadata should generally not be referenced by a function: the function may
7469 be inlined into other functions, leading to more references to the metadata.
7470 Ideally we would want to keep metadata alive as long as any inline location is
7471 alive, but this many-to-one relationship is not representable. Moreover, if the
7472 metadata is retained while the function is discarded, the linker will report an
7473 error of a relocation referencing a discarded section.
7475 The metadata is often used with an explicit section consisting of valid C
7476 identifiers so that the runtime can find the metadata section with
7477 linker-defined encapsulation symbols ``__start_<section_name>`` and
7478 ``__stop_<section_name>``.
7480 It does not have any effect on non-ELF targets.
7482 Example:
7484 .. code-block:: text
7486     $a = comdat any
7487     @a = global i32 1, comdat $a
7488     @b = internal global i32 2, comdat $a, section "abc", !associated !0
7489     !0 = !{ptr @a}
7492 '``prof``' Metadata
7493 ^^^^^^^^^^^^^^^^^^^
7495 The ``prof`` metadata is used to record profile data in the IR.
7496 The first operand of the metadata node indicates the profile metadata
7497 type. There are currently 3 types:
7498 :ref:`branch_weights<prof_node_branch_weights>`,
7499 :ref:`function_entry_count<prof_node_function_entry_count>`, and
7500 :ref:`VP<prof_node_VP>`.
7502 .. _prof_node_branch_weights:
7504 branch_weights
7505 """"""""""""""
7507 Branch weight metadata attached to a branch, select, switch or call instruction
7508 represents the likeliness of the associated branch being taken.
7509 For more information, see :doc:`BranchWeightMetadata`.
7511 .. _prof_node_function_entry_count:
7513 function_entry_count
7514 """"""""""""""""""""
7516 Function entry count metadata can be attached to function definitions
7517 to record the number of times the function is called. Used with BFI
7518 information, it is also used to derive the basic block profile count.
7519 For more information, see :doc:`BranchWeightMetadata`.
7521 .. _prof_node_VP:
7526 VP (value profile) metadata can be attached to instructions that have
7527 value profile information. Currently this is indirect calls (where it
7528 records the hottest callees) and calls to memory intrinsics such as memcpy,
7529 memmove, and memset (where it records the hottest byte lengths).
7531 Each VP metadata node contains "VP" string, then a uint32_t value for the value
7532 profiling kind, a uint64_t value for the total number of times the instruction
7533 is executed, followed by uint64_t value and execution count pairs.
7534 The value profiling kind is 0 for indirect call targets and 1 for memory
7535 operations. For indirect call targets, each profile value is a hash
7536 of the callee function name, and for memory operations each value is the
7537 byte length.
7539 Note that the value counts do not need to add up to the total count
7540 listed in the third operand (in practice only the top hottest values
7541 are tracked and reported).
7543 Indirect call example:
7545 .. code-block:: llvm
7547     call void %f(), !prof !1
7548     !1 = !{!"VP", i32 0, i64 1600, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410}
7550 Note that the VP type is 0 (the second operand), which indicates this is
7551 an indirect call value profile data. The third operand indicates that the
7552 indirect call executed 1600 times. The 4th and 6th operands give the
7553 hashes of the 2 hottest target functions' names (this is the same hash used
7554 to represent function names in the profile database), and the 5th and 7th
7555 operands give the execution count that each of the respective prior target
7556 functions was called.
7558 .. _md_annotation:
7560 '``annotation``' Metadata
7561 ^^^^^^^^^^^^^^^^^^^^^^^^^
7563 The ``annotation`` metadata can be used to attach a tuple of annotation strings
7564 or a tuple of a tuple of annotation strings to any instruction. This metadata does
7565 not impact the semantics of the program and may only be used to provide additional
7566 insight about the program and transformations to users.
7568 Example:
7570 .. code-block:: text
7572     %a.addr = alloca ptr, align 8, !annotation !0
7573     !0 = !{!"auto-init"}
7575 Embedding tuple of strings example:
7577 .. code-block:: text
7579   %a.ptr = getelementptr ptr, ptr %base, i64 0. !annotation !0
7580   !0 = !{!1}
7581   !1 = !{!"gep offset", !"0"}
7583 '``func_sanitize``' Metadata
7584 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7586 The ``func_sanitize`` metadata is used to attach two values for the function
7587 sanitizer instrumentation. The first value is the ubsan function signature.
7588 The second value is the address of the proxy variable which stores the address
7589 of the RTTI descriptor. If :ref:`prologue <prologuedata>` and '``func_sanitize``'
7590 are used at the same time, :ref:`prologue <prologuedata>` is emitted before
7591 '``func_sanitize``' in the output.
7593 Example:
7595 .. code-block:: text
7597     @__llvm_rtti_proxy = private unnamed_addr constant ptr @_ZTIFvvE
7598     define void @_Z3funv() !func_sanitize !0 {
7599       return void
7600     }
7601     !0 = !{i32 846595819, ptr @__llvm_rtti_proxy}
7603 .. _md_kcfi_type:
7605 '``kcfi_type``' Metadata
7606 ^^^^^^^^^^^^^^^^^^^^^^^^
7608 The ``kcfi_type`` metadata can be used to attach a type identifier to
7609 functions that can be called indirectly. The type data is emitted before the
7610 function entry in the assembly. Indirect calls with the :ref:`kcfi operand
7611 bundle<ob_kcfi>` will emit a check that compares the type identifier to the
7612 metadata.
7614 Example:
7616 .. code-block:: text
7618     define dso_local i32 @f() !kcfi_type !0 {
7619       ret i32 0
7620     }
7621     !0 = !{i32 12345678}
7623 Clang emits ``kcfi_type`` metadata nodes for address-taken functions with
7624 ``-fsanitize=kcfi``.
7626 .. _md_memprof:
7628 '``memprof``' Metadata
7629 ^^^^^^^^^^^^^^^^^^^^^^^^
7631 The ``memprof`` metadata is used to record memory profile data on heap
7632 allocation calls. Multiple context-sensitive profiles can be represented
7633 with a single ``memprof`` metadata attachment.
7635 Example:
7637 .. code-block:: text
7639     %call = call ptr @_Znam(i64 10), !memprof !0, !callsite !5
7640     !0 = !{!1, !3}
7641     !1 = !{!2, !"cold"}
7642     !2 = !{i64 4854880825882961848, i64 1905834578520680781}
7643     !3 = !{!4, !"notcold"}
7644     !4 = !{i64 4854880825882961848, i64 -6528110295079665978}
7645     !5 = !{i64 4854880825882961848}
7647 Each operand in the ``memprof`` metadata attachment describes the profiled
7648 behavior of memory allocated by the associated allocation for a given context.
7649 In the above example, there were 2 profiled contexts, one allocating memory
7650 that was typically cold and one allocating memory that was typically not cold.
7652 The format of the metadata describing a context specific profile (e.g.
7653 ``!1`` and ``!3`` above) requires a first operand that is a metadata node
7654 describing the context, followed by a list of string metadata tags describing
7655 the profile behavior (e.g. ``cold`` and ``notcold``) above. The metadata nodes
7656 describing the context (e.g. ``!2`` and ``!4`` above) are unique ids
7657 corresponding to callsites, which can be matched to associated IR calls via
7658 :ref:`callsite metadata<md_callsite>`. In practice these ids are formed via
7659 a hash of the callsite's debug info, and the associated call may be in a
7660 different module. The contexts are listed in order from leaf-most call (the
7661 allocation itself) to the outermost callsite context required for uniquely
7662 identifying the described profile behavior (note this may not be the top of
7663 the profiled call stack).
7665 .. _md_callsite:
7667 '``callsite``' Metadata
7668 ^^^^^^^^^^^^^^^^^^^^^^^^
7670 The ``callsite`` metadata is used to identify callsites involved in memory
7671 profile contexts described in :ref:`memprof metadata<md_memprof>`.
7673 It is attached both to the profile allocation calls (see the example in
7674 :ref:`memprof metadata<md_memprof>`), as well as to other callsites
7675 in profiled contexts described in heap allocation ``memprof`` metadata.
7677 Example:
7679 .. code-block:: text
7681     %call = call ptr @_Z1Bb(void), !callsite !0
7682     !0 = !{i64 -6528110295079665978, i64 5462047985461644151}
7684 Each operand in the ``callsite`` metadata attachment is a unique id
7685 corresponding to a callsite (possibly inlined). In practice these ids are
7686 formed via a hash of the callsite's debug info. If the call was not inlined
7687 into any callers it will contain a single operand (id). If it was inlined
7688 it will contain a list of ids, including the ids of the callsites in the
7689 full inline sequence, in order from the leaf-most call's id to the outermost
7690 inlined call.
7692 Module Flags Metadata
7693 =====================
7695 Information about the module as a whole is difficult to convey to LLVM's
7696 subsystems. The LLVM IR isn't sufficient to transmit this information.
7697 The ``llvm.module.flags`` named metadata exists in order to facilitate
7698 this. These flags are in the form of key / value pairs --- much like a
7699 dictionary --- making it easy for any subsystem who cares about a flag to
7700 look it up.
7702 The ``llvm.module.flags`` metadata contains a list of metadata triplets.
7703 Each triplet has the following form:
7705 -  The first element is a *behavior* flag, which specifies the behavior
7706    when two (or more) modules are merged together, and it encounters two
7707    (or more) metadata with the same ID. The supported behaviors are
7708    described below.
7709 -  The second element is a metadata string that is a unique ID for the
7710    metadata. Each module may only have one flag entry for each unique ID (not
7711    including entries with the **Require** behavior).
7712 -  The third element is the value of the flag.
7714 When two (or more) modules are merged together, the resulting
7715 ``llvm.module.flags`` metadata is the union of the modules' flags. That is, for
7716 each unique metadata ID string, there will be exactly one entry in the merged
7717 modules ``llvm.module.flags`` metadata table, and the value for that entry will
7718 be determined by the merge behavior flag, as described below. The only exception
7719 is that entries with the *Require* behavior are always preserved.
7721 The following behaviors are supported:
7723 .. list-table::
7724    :header-rows: 1
7725    :widths: 10 90
7727    * - Value
7728      - Behavior
7730    * - 1
7731      - **Error**
7732            Emits an error if two values disagree, otherwise the resulting value
7733            is that of the operands.
7735    * - 2
7736      - **Warning**
7737            Emits a warning if two values disagree. The result value will be the
7738            operand for the flag from the first module being linked, unless the
7739            other module uses **Min** or **Max**, in which case the result will
7740            be **Min** (with the min value) or **Max** (with the max value),
7741            respectively.
7743    * - 3
7744      - **Require**
7745            Adds a requirement that another module flag be present and have a
7746            specified value after linking is performed. The value must be a
7747            metadata pair, where the first element of the pair is the ID of the
7748            module flag to be restricted, and the second element of the pair is
7749            the value the module flag should be restricted to. This behavior can
7750            be used to restrict the allowable results (via triggering of an
7751            error) of linking IDs with the **Override** behavior.
7753    * - 4
7754      - **Override**
7755            Uses the specified value, regardless of the behavior or value of the
7756            other module. If both modules specify **Override**, but the values
7757            differ, an error will be emitted.
7759    * - 5
7760      - **Append**
7761            Appends the two values, which are required to be metadata nodes.
7763    * - 6
7764      - **AppendUnique**
7765            Appends the two values, which are required to be metadata
7766            nodes. However, duplicate entries in the second list are dropped
7767            during the append operation.
7769    * - 7
7770      - **Max**
7771            Takes the max of the two values, which are required to be integers.
7773    * - 8
7774      - **Min**
7775            Takes the min of the two values, which are required to be non-negative integers.
7776            An absent module flag is treated as having the value 0.
7778 It is an error for a particular unique flag ID to have multiple behaviors,
7779 except in the case of **Require** (which adds restrictions on another metadata
7780 value) or **Override**.
7782 An example of module flags:
7784 .. code-block:: llvm
7786     !0 = !{ i32 1, !"foo", i32 1 }
7787     !1 = !{ i32 4, !"bar", i32 37 }
7788     !2 = !{ i32 2, !"qux", i32 42 }
7789     !3 = !{ i32 3, !"qux",
7790       !{
7791         !"foo", i32 1
7792       }
7793     }
7794     !llvm.module.flags = !{ !0, !1, !2, !3 }
7796 -  Metadata ``!0`` has the ID ``!"foo"`` and the value '1'. The behavior
7797    if two or more ``!"foo"`` flags are seen is to emit an error if their
7798    values are not equal.
7800 -  Metadata ``!1`` has the ID ``!"bar"`` and the value '37'. The
7801    behavior if two or more ``!"bar"`` flags are seen is to use the value
7802    '37'.
7804 -  Metadata ``!2`` has the ID ``!"qux"`` and the value '42'. The
7805    behavior if two or more ``!"qux"`` flags are seen is to emit a
7806    warning if their values are not equal.
7808 -  Metadata ``!3`` has the ID ``!"qux"`` and the value:
7810    ::
7812        !{ !"foo", i32 1 }
7814    The behavior is to emit an error if the ``llvm.module.flags`` does not
7815    contain a flag with the ID ``!"foo"`` that has the value '1' after linking is
7816    performed.
7818 Synthesized Functions Module Flags Metadata
7819 -------------------------------------------
7821 These metadata specify the default attributes synthesized functions should have.
7822 These metadata are currently respected by a few instrumentation passes, such as
7823 sanitizers.
7825 These metadata correspond to a few function attributes with significant code
7826 generation behaviors. Function attributes with just optimization purposes
7827 should not be listed because the performance impact of these synthesized
7828 functions is small.
7830 - "frame-pointer": **Max**. The value can be 0, 1, or 2. A synthesized function
7831   will get the "frame-pointer" function attribute, with value being "none",
7832   "non-leaf", or "all", respectively.
7833 - "function_return_thunk_extern": The synthesized function will get the
7834   ``fn_return_thunk_extern`` function attribute.
7835 - "uwtable": **Max**. The value can be 0, 1, or 2. If the value is 1, a synthesized
7836   function will get the ``uwtable(sync)`` function attribute, if the value is 2,
7837   a synthesized function will get the ``uwtable(async)`` function attribute.
7839 Objective-C Garbage Collection Module Flags Metadata
7840 ----------------------------------------------------
7842 On the Mach-O platform, Objective-C stores metadata about garbage
7843 collection in a special section called "image info". The metadata
7844 consists of a version number and a bitmask specifying what types of
7845 garbage collection are supported (if any) by the file. If two or more
7846 modules are linked together their garbage collection metadata needs to
7847 be merged rather than appended together.
7849 The Objective-C garbage collection module flags metadata consists of the
7850 following key-value pairs:
7852 .. list-table::
7853    :header-rows: 1
7854    :widths: 30 70
7856    * - Key
7857      - Value
7859    * - ``Objective-C Version``
7860      - **[Required]** --- The Objective-C ABI version. Valid values are 1 and 2.
7862    * - ``Objective-C Image Info Version``
7863      - **[Required]** --- The version of the image info section. Currently
7864        always 0.
7866    * - ``Objective-C Image Info Section``
7867      - **[Required]** --- The section to place the metadata. Valid values are
7868        ``"__OBJC, __image_info, regular"`` for Objective-C ABI version 1, and
7869        ``"__DATA,__objc_imageinfo, regular, no_dead_strip"`` for
7870        Objective-C ABI version 2.
7872    * - ``Objective-C Garbage Collection``
7873      - **[Required]** --- Specifies whether garbage collection is supported or
7874        not. Valid values are 0, for no garbage collection, and 2, for garbage
7875        collection supported.
7877    * - ``Objective-C GC Only``
7878      - **[Optional]** --- Specifies that only garbage collection is supported.
7879        If present, its value must be 6. This flag requires that the
7880        ``Objective-C Garbage Collection`` flag have the value 2.
7882 Some important flag interactions:
7884 -  If a module with ``Objective-C Garbage Collection`` set to 0 is
7885    merged with a module with ``Objective-C Garbage Collection`` set to
7886    2, then the resulting module has the
7887    ``Objective-C Garbage Collection`` flag set to 0.
7888 -  A module with ``Objective-C Garbage Collection`` set to 0 cannot be
7889    merged with a module with ``Objective-C GC Only`` set to 6.
7891 C type width Module Flags Metadata
7892 ----------------------------------
7894 The ARM backend emits a section into each generated object file describing the
7895 options that it was compiled with (in a compiler-independent way) to prevent
7896 linking incompatible objects, and to allow automatic library selection. Some
7897 of these options are not visible at the IR level, namely wchar_t width and enum
7898 width.
7900 To pass this information to the backend, these options are encoded in module
7901 flags metadata, using the following key-value pairs:
7903 .. list-table::
7904    :header-rows: 1
7905    :widths: 30 70
7907    * - Key
7908      - Value
7910    * - short_wchar
7911      - * 0 --- sizeof(wchar_t) == 4
7912        * 1 --- sizeof(wchar_t) == 2
7914    * - short_enum
7915      - * 0 --- Enums are at least as large as an ``int``.
7916        * 1 --- Enums are stored in the smallest integer type which can
7917          represent all of its values.
7919 For example, the following metadata section specifies that the module was
7920 compiled with a ``wchar_t`` width of 4 bytes, and the underlying type of an
7921 enum is the smallest type which can represent all of its values::
7923     !llvm.module.flags = !{!0, !1}
7924     !0 = !{i32 1, !"short_wchar", i32 1}
7925     !1 = !{i32 1, !"short_enum", i32 0}
7927 Stack Alignment Metadata
7928 ------------------------
7930 Changes the default stack alignment from the target ABI's implicit default
7931 stack alignment. Takes an i32 value in bytes. It is considered an error to link
7932 two modules together with different values for this metadata.
7934 For example:
7936     !llvm.module.flags = !{!0}
7937     !0 = !{i32 1, !"override-stack-alignment", i32 8}
7939 This will change the stack alignment to 8B.
7941 Embedded Objects Names Metadata
7942 ===============================
7944 Offloading compilations need to embed device code into the host section table to
7945 create a fat binary. This metadata node references each global that will be
7946 embedded in the module. The primary use for this is to make referencing these
7947 globals more efficient in the IR. The metadata references nodes containing
7948 pointers to the global to be embedded followed by the section name it will be
7949 stored at::
7951     !llvm.embedded.objects = !{!0}
7952     !0 = !{ptr @object, !".section"}
7954 Automatic Linker Flags Named Metadata
7955 =====================================
7957 Some targets support embedding of flags to the linker inside individual object
7958 files. Typically this is used in conjunction with language extensions which
7959 allow source files to contain linker command line options, and have these
7960 automatically be transmitted to the linker via object files.
7962 These flags are encoded in the IR using named metadata with the name
7963 ``!llvm.linker.options``. Each operand is expected to be a metadata node
7964 which should be a list of other metadata nodes, each of which should be a
7965 list of metadata strings defining linker options.
7967 For example, the following metadata section specifies two separate sets of
7968 linker options, presumably to link against ``libz`` and the ``Cocoa``
7969 framework::
7971     !0 = !{ !"-lz" }
7972     !1 = !{ !"-framework", !"Cocoa" }
7973     !llvm.linker.options = !{ !0, !1 }
7975 The metadata encoding as lists of lists of options, as opposed to a collapsed
7976 list of options, is chosen so that the IR encoding can use multiple option
7977 strings to specify e.g., a single library, while still having that specifier be
7978 preserved as an atomic element that can be recognized by a target specific
7979 assembly writer or object file emitter.
7981 Each individual option is required to be either a valid option for the target's
7982 linker, or an option that is reserved by the target specific assembly writer or
7983 object file emitter. No other aspect of these options is defined by the IR.
7985 Dependent Libs Named Metadata
7986 =============================
7988 Some targets support embedding of strings into object files to indicate
7989 a set of libraries to add to the link. Typically this is used in conjunction
7990 with language extensions which allow source files to explicitly declare the
7991 libraries they depend on, and have these automatically be transmitted to the
7992 linker via object files.
7994 The list is encoded in the IR using named metadata with the name
7995 ``!llvm.dependent-libraries``. Each operand is expected to be a metadata node
7996 which should contain a single string operand.
7998 For example, the following metadata section contains two library specifiers::
8000     !0 = !{!"a library specifier"}
8001     !1 = !{!"another library specifier"}
8002     !llvm.dependent-libraries = !{ !0, !1 }
8004 Each library specifier will be handled independently by the consuming linker.
8005 The effect of the library specifiers are defined by the consuming linker.
8007 .. _summary:
8009 ThinLTO Summary
8010 ===============
8012 Compiling with `ThinLTO <https://clang.llvm.org/docs/ThinLTO.html>`_
8013 causes the building of a compact summary of the module that is emitted into
8014 the bitcode. The summary is emitted into the LLVM assembly and identified
8015 in syntax by a caret ('``^``').
8017 The summary is parsed into a bitcode output, along with the Module
8018 IR, via the "``llvm-as``" tool. Tools that parse the Module IR for the purposes
8019 of optimization (e.g. "``clang -x ir``" and "``opt``"), will ignore the
8020 summary entries (just as they currently ignore summary entries in a bitcode
8021 input file).
8023 Eventually, the summary will be parsed into a ModuleSummaryIndex object under
8024 the same conditions where summary index is currently built from bitcode.
8025 Specifically, tools that test the Thin Link portion of a ThinLTO compile
8026 (i.e. llvm-lto and llvm-lto2), or when parsing a combined index
8027 for a distributed ThinLTO backend via clang's "``-fthinlto-index=<>``" flag
8028 (this part is not yet implemented, use llvm-as to create a bitcode object
8029 before feeding into thin link tools for now).
8031 There are currently 3 types of summary entries in the LLVM assembly:
8032 :ref:`module paths<module_path_summary>`,
8033 :ref:`global values<gv_summary>`, and
8034 :ref:`type identifiers<typeid_summary>`.
8036 .. _module_path_summary:
8038 Module Path Summary Entry
8039 -------------------------
8041 Each module path summary entry lists a module containing global values included
8042 in the summary. For a single IR module there will be one such entry, but
8043 in a combined summary index produced during the thin link, there will be
8044 one module path entry per linked module with summary.
8046 Example:
8048 .. code-block:: text
8050     ^0 = module: (path: "/path/to/file.o", hash: (2468601609, 1329373163, 1565878005, 638838075, 3148790418))
8052 The ``path`` field is a string path to the bitcode file, and the ``hash``
8053 field is the 160-bit SHA-1 hash of the IR bitcode contents, used for
8054 incremental builds and caching.
8056 .. _gv_summary:
8058 Global Value Summary Entry
8059 --------------------------
8061 Each global value summary entry corresponds to a global value defined or
8062 referenced by a summarized module.
8064 Example:
8066 .. code-block:: text
8068     ^4 = gv: (name: "f"[, summaries: (Summary)[, (Summary)]*]?) ; guid = 14740650423002898831
8070 For declarations, there will not be a summary list. For definitions, a
8071 global value will contain a list of summaries, one per module containing
8072 a definition. There can be multiple entries in a combined summary index
8073 for symbols with weak linkage.
8075 Each ``Summary`` format will depend on whether the global value is a
8076 :ref:`function<function_summary>`, :ref:`variable<variable_summary>`, or
8077 :ref:`alias<alias_summary>`.
8079 .. _function_summary:
8081 Function Summary
8082 ^^^^^^^^^^^^^^^^
8084 If the global value is a function, the ``Summary`` entry will look like:
8086 .. code-block:: text
8088     function: (module: ^0, flags: (linkage: external, notEligibleToImport: 0, live: 0, dsoLocal: 0), insts: 2[, FuncFlags]?[, Calls]?[, TypeIdInfo]?[, Params]?[, Refs]?
8090 The ``module`` field includes the summary entry id for the module containing
8091 this definition, and the ``flags`` field contains information such as
8092 the linkage type, a flag indicating whether it is legal to import the
8093 definition, whether it is globally live and whether the linker resolved it
8094 to a local definition (the latter two are populated during the thin link).
8095 The ``insts`` field contains the number of IR instructions in the function.
8096 Finally, there are several optional fields: :ref:`FuncFlags<funcflags_summary>`,
8097 :ref:`Calls<calls_summary>`, :ref:`TypeIdInfo<typeidinfo_summary>`,
8098 :ref:`Params<params_summary>`, :ref:`Refs<refs_summary>`.
8100 .. _variable_summary:
8102 Global Variable Summary
8103 ^^^^^^^^^^^^^^^^^^^^^^^
8105 If the global value is a variable, the ``Summary`` entry will look like:
8107 .. code-block:: text
8109     variable: (module: ^0, flags: (linkage: external, notEligibleToImport: 0, live: 0, dsoLocal: 0)[, Refs]?
8111 The variable entry contains a subset of the fields in a
8112 :ref:`function summary <function_summary>`, see the descriptions there.
8114 .. _alias_summary:
8116 Alias Summary
8117 ^^^^^^^^^^^^^
8119 If the global value is an alias, the ``Summary`` entry will look like:
8121 .. code-block:: text
8123     alias: (module: ^0, flags: (linkage: external, notEligibleToImport: 0, live: 0, dsoLocal: 0), aliasee: ^2)
8125 The ``module`` and ``flags`` fields are as described for a
8126 :ref:`function summary <function_summary>`. The ``aliasee`` field
8127 contains a reference to the global value summary entry of the aliasee.
8129 .. _funcflags_summary:
8131 Function Flags
8132 ^^^^^^^^^^^^^^
8134 The optional ``FuncFlags`` field looks like:
8136 .. code-block:: text
8138     funcFlags: (readNone: 0, readOnly: 0, noRecurse: 0, returnDoesNotAlias: 0, noInline: 0, alwaysInline: 0, noUnwind: 1, mayThrow: 0, hasUnknownCall: 0)
8140 If unspecified, flags are assumed to hold the conservative ``false`` value of
8141 ``0``.
8143 .. _calls_summary:
8145 Calls
8146 ^^^^^
8148 The optional ``Calls`` field looks like:
8150 .. code-block:: text
8152     calls: ((Callee)[, (Callee)]*)
8154 where each ``Callee`` looks like:
8156 .. code-block:: text
8158     callee: ^1[, hotness: None]?[, relbf: 0]?
8160 The ``callee`` refers to the summary entry id of the callee. At most one
8161 of ``hotness`` (which can take the values ``Unknown``, ``Cold``, ``None``,
8162 ``Hot``, and ``Critical``), and ``relbf`` (which holds the integer
8163 branch frequency relative to the entry frequency, scaled down by 2^8)
8164 may be specified. The defaults are ``Unknown`` and ``0``, respectively.
8166 .. _params_summary:
8168 Params
8169 ^^^^^^
8171 The optional ``Params`` is used by ``StackSafety`` and looks like:
8173 .. code-block:: text
8175     Params: ((Param)[, (Param)]*)
8177 where each ``Param`` describes pointer parameter access inside of the
8178 function and looks like:
8180 .. code-block:: text
8182     param: 4, offset: [0, 5][, calls: ((Callee)[, (Callee)]*)]?
8184 where the first ``param`` is the number of the parameter it describes,
8185 ``offset`` is the inclusive range of offsets from the pointer parameter to bytes
8186 which can be accessed by the function. This range does not include accesses by
8187 function calls from ``calls`` list.
8189 where each ``Callee`` describes how parameter is forwarded into other
8190 functions and looks like:
8192 .. code-block:: text
8194     callee: ^3, param: 5, offset: [-3, 3]
8196 The ``callee`` refers to the summary entry id of the callee,  ``param`` is
8197 the number of the callee parameter which points into the callers parameter
8198 with offset known to be inside of the ``offset`` range. ``calls`` will be
8199 consumed and removed by thin link stage to update ``Param::offset`` so it
8200 covers all accesses possible by ``calls``.
8202 Pointer parameter without corresponding ``Param`` is considered unsafe and we
8203 assume that access with any offset is possible.
8205 Example:
8207 If we have the following function:
8209 .. code-block:: text
8211     define i64 @foo(ptr %0, ptr %1, ptr %2, i8 %3) {
8212       store ptr %1, ptr @x
8213       %5 = getelementptr inbounds i8, ptr %2, i64 5
8214       %6 = load i8, ptr %5
8215       %7 = getelementptr inbounds i8, ptr %2, i8 %3
8216       tail call void @bar(i8 %3, ptr %7)
8217       %8 = load i64, ptr %0
8218       ret i64 %8
8219     }
8221 We can expect the record like this:
8223 .. code-block:: text
8225     params: ((param: 0, offset: [0, 7]),(param: 2, offset: [5, 5], calls: ((callee: ^3, param: 1, offset: [-128, 127]))))
8227 The function may access just 8 bytes of the parameter %0 . ``calls`` is empty,
8228 so the parameter is either not used for function calls or ``offset`` already
8229 covers all accesses from nested function calls.
8230 Parameter %1 escapes, so access is unknown.
8231 The function itself can access just a single byte of the parameter %2. Additional
8232 access is possible inside of the ``@bar`` or ``^3``. The function adds signed
8233 offset to the pointer and passes the result as the argument %1 into ``^3``.
8234 This record itself does not tell us how ``^3`` will access the parameter.
8235 Parameter %3 is not a pointer.
8237 .. _refs_summary:
8239 Refs
8240 ^^^^
8242 The optional ``Refs`` field looks like:
8244 .. code-block:: text
8246     refs: ((Ref)[, (Ref)]*)
8248 where each ``Ref`` contains a reference to the summary id of the referenced
8249 value (e.g. ``^1``).
8251 .. _typeidinfo_summary:
8253 TypeIdInfo
8254 ^^^^^^^^^^
8256 The optional ``TypeIdInfo`` field, used for
8257 `Control Flow Integrity <https://clang.llvm.org/docs/ControlFlowIntegrity.html>`_,
8258 looks like:
8260 .. code-block:: text
8262     typeIdInfo: [(TypeTests)]?[, (TypeTestAssumeVCalls)]?[, (TypeCheckedLoadVCalls)]?[, (TypeTestAssumeConstVCalls)]?[, (TypeCheckedLoadConstVCalls)]?
8264 These optional fields have the following forms:
8266 TypeTests
8267 """""""""
8269 .. code-block:: text
8271     typeTests: (TypeIdRef[, TypeIdRef]*)
8273 Where each ``TypeIdRef`` refers to a :ref:`type id<typeid_summary>`
8274 by summary id or ``GUID``.
8276 TypeTestAssumeVCalls
8277 """"""""""""""""""""
8279 .. code-block:: text
8281     typeTestAssumeVCalls: (VFuncId[, VFuncId]*)
8283 Where each VFuncId has the format:
8285 .. code-block:: text
8287     vFuncId: (TypeIdRef, offset: 16)
8289 Where each ``TypeIdRef`` refers to a :ref:`type id<typeid_summary>`
8290 by summary id or ``GUID`` preceded by a ``guid:`` tag.
8292 TypeCheckedLoadVCalls
8293 """""""""""""""""""""
8295 .. code-block:: text
8297     typeCheckedLoadVCalls: (VFuncId[, VFuncId]*)
8299 Where each VFuncId has the format described for ``TypeTestAssumeVCalls``.
8301 TypeTestAssumeConstVCalls
8302 """""""""""""""""""""""""
8304 .. code-block:: text
8306     typeTestAssumeConstVCalls: (ConstVCall[, ConstVCall]*)
8308 Where each ConstVCall has the format:
8310 .. code-block:: text
8312     (VFuncId, args: (Arg[, Arg]*))
8314 and where each VFuncId has the format described for ``TypeTestAssumeVCalls``,
8315 and each Arg is an integer argument number.
8317 TypeCheckedLoadConstVCalls
8318 """"""""""""""""""""""""""
8320 .. code-block:: text
8322     typeCheckedLoadConstVCalls: (ConstVCall[, ConstVCall]*)
8324 Where each ConstVCall has the format described for
8325 ``TypeTestAssumeConstVCalls``.
8327 .. _typeid_summary:
8329 Type ID Summary Entry
8330 ---------------------
8332 Each type id summary entry corresponds to a type identifier resolution
8333 which is generated during the LTO link portion of the compile when building
8334 with `Control Flow Integrity <https://clang.llvm.org/docs/ControlFlowIntegrity.html>`_,
8335 so these are only present in a combined summary index.
8337 Example:
8339 .. code-block:: text
8341     ^4 = typeid: (name: "_ZTS1A", summary: (typeTestRes: (kind: allOnes, sizeM1BitWidth: 7[, alignLog2: 0]?[, sizeM1: 0]?[, bitMask: 0]?[, inlineBits: 0]?)[, WpdResolutions]?)) ; guid = 7004155349499253778
8343 The ``typeTestRes`` gives the type test resolution ``kind`` (which may
8344 be ``unsat``, ``byteArray``, ``inline``, ``single``, or ``allOnes``), and
8345 the ``size-1`` bit width. It is followed by optional flags, which default to 0,
8346 and an optional WpdResolutions (whole program devirtualization resolution)
8347 field that looks like:
8349 .. code-block:: text
8351     wpdResolutions: ((offset: 0, WpdRes)[, (offset: 1, WpdRes)]*
8353 where each entry is a mapping from the given byte offset to the whole-program
8354 devirtualization resolution WpdRes, that has one of the following formats:
8356 .. code-block:: text
8358     wpdRes: (kind: branchFunnel)
8359     wpdRes: (kind: singleImpl, singleImplName: "_ZN1A1nEi")
8360     wpdRes: (kind: indir)
8362 Additionally, each wpdRes has an optional ``resByArg`` field, which
8363 describes the resolutions for calls with all constant integer arguments:
8365 .. code-block:: text
8367     resByArg: (ResByArg[, ResByArg]*)
8369 where ResByArg is:
8371 .. code-block:: text
8373     args: (Arg[, Arg]*), byArg: (kind: UniformRetVal[, info: 0][, byte: 0][, bit: 0])
8375 Where the ``kind`` can be ``Indir``, ``UniformRetVal``, ``UniqueRetVal``
8376 or ``VirtualConstProp``. The ``info`` field is only used if the kind
8377 is ``UniformRetVal`` (indicates the uniform return value), or
8378 ``UniqueRetVal`` (holds the return value associated with the unique vtable
8379 (0 or 1)). The ``byte`` and ``bit`` fields are only used if the target does
8380 not support the use of absolute symbols to store constants.
8382 .. _intrinsicglobalvariables:
8384 Intrinsic Global Variables
8385 ==========================
8387 LLVM has a number of "magic" global variables that contain data that
8388 affect code generation or other IR semantics. These are documented here.
8389 All globals of this sort should have a section specified as
8390 "``llvm.metadata``". This section and all globals that start with
8391 "``llvm.``" are reserved for use by LLVM.
8393 .. _gv_llvmused:
8395 The '``llvm.used``' Global Variable
8396 -----------------------------------
8398 The ``@llvm.used`` global is an array which has
8399 :ref:`appending linkage <linkage_appending>`. This array contains a list of
8400 pointers to named global variables, functions and aliases which may optionally
8401 have a pointer cast formed of bitcast or getelementptr. For example, a legal
8402 use of it is:
8404 .. code-block:: llvm
8406     @X = global i8 4
8407     @Y = global i32 123
8409     @llvm.used = appending global [2 x ptr] [
8410        ptr @X,
8411        ptr @Y
8412     ], section "llvm.metadata"
8414 If a symbol appears in the ``@llvm.used`` list, then the compiler, assembler,
8415 and linker are required to treat the symbol as if there is a reference to the
8416 symbol that it cannot see (which is why they have to be named). For example, if
8417 a variable has internal linkage and no references other than that from the
8418 ``@llvm.used`` list, it cannot be deleted. This is commonly used to represent
8419 references from inline asms and other things the compiler cannot "see", and
8420 corresponds to "``attribute((used))``" in GNU C.
8422 On some targets, the code generator must emit a directive to the
8423 assembler or object file to prevent the assembler and linker from
8424 removing the symbol.
8426 .. _gv_llvmcompilerused:
8428 The '``llvm.compiler.used``' Global Variable
8429 --------------------------------------------
8431 The ``@llvm.compiler.used`` directive is the same as the ``@llvm.used``
8432 directive, except that it only prevents the compiler from touching the
8433 symbol. On targets that support it, this allows an intelligent linker to
8434 optimize references to the symbol without being impeded as it would be
8435 by ``@llvm.used``.
8437 This is a rare construct that should only be used in rare circumstances,
8438 and should not be exposed to source languages.
8440 .. _gv_llvmglobalctors:
8442 The '``llvm.global_ctors``' Global Variable
8443 -------------------------------------------
8445 .. code-block:: llvm
8447     %0 = type { i32, ptr, ptr }
8448     @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, ptr @ctor, ptr @data }]
8450 The ``@llvm.global_ctors`` array contains a list of constructor
8451 functions, priorities, and an associated global or function.
8452 The functions referenced by this array will be called in ascending order
8453 of priority (i.e. lowest first) when the module is loaded. The order of
8454 functions with the same priority is not defined.
8456 If the third field is non-null, and points to a global variable
8457 or function, the initializer function will only run if the associated
8458 data from the current module is not discarded.
8459 On ELF the referenced global variable or function must be in a comdat.
8461 .. _llvmglobaldtors:
8463 The '``llvm.global_dtors``' Global Variable
8464 -------------------------------------------
8466 .. code-block:: llvm
8468     %0 = type { i32, ptr, ptr }
8469     @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, ptr @dtor, ptr @data }]
8471 The ``@llvm.global_dtors`` array contains a list of destructor
8472 functions, priorities, and an associated global or function.
8473 The functions referenced by this array will be called in descending
8474 order of priority (i.e. highest first) when the module is unloaded. The
8475 order of functions with the same priority is not defined.
8477 If the third field is non-null, and points to a global variable
8478 or function, the destructor function will only run if the associated
8479 data from the current module is not discarded.
8480 On ELF the referenced global variable or function must be in a comdat.
8482 Instruction Reference
8483 =====================
8485 The LLVM instruction set consists of several different classifications
8486 of instructions: :ref:`terminator instructions <terminators>`, :ref:`binary
8487 instructions <binaryops>`, :ref:`bitwise binary
8488 instructions <bitwiseops>`, :ref:`memory instructions <memoryops>`, and
8489 :ref:`other instructions <otherops>`.
8491 .. _terminators:
8493 Terminator Instructions
8494 -----------------------
8496 As mentioned :ref:`previously <functionstructure>`, every basic block in a
8497 program ends with a "Terminator" instruction, which indicates which
8498 block should be executed after the current block is finished. These
8499 terminator instructions typically yield a '``void``' value: they produce
8500 control flow, not values (the one exception being the
8501 ':ref:`invoke <i_invoke>`' instruction).
8503 The terminator instructions are: ':ref:`ret <i_ret>`',
8504 ':ref:`br <i_br>`', ':ref:`switch <i_switch>`',
8505 ':ref:`indirectbr <i_indirectbr>`', ':ref:`invoke <i_invoke>`',
8506 ':ref:`callbr <i_callbr>`'
8507 ':ref:`resume <i_resume>`', ':ref:`catchswitch <i_catchswitch>`',
8508 ':ref:`catchret <i_catchret>`',
8509 ':ref:`cleanupret <i_cleanupret>`',
8510 and ':ref:`unreachable <i_unreachable>`'.
8512 .. _i_ret:
8514 '``ret``' Instruction
8515 ^^^^^^^^^^^^^^^^^^^^^
8517 Syntax:
8518 """""""
8522       ret <type> <value>       ; Return a value from a non-void function
8523       ret void                 ; Return from void function
8525 Overview:
8526 """""""""
8528 The '``ret``' instruction is used to return control flow (and optionally
8529 a value) from a function back to the caller.
8531 There are two forms of the '``ret``' instruction: one that returns a
8532 value and then causes control flow, and one that just causes control
8533 flow to occur.
8535 Arguments:
8536 """"""""""
8538 The '``ret``' instruction optionally accepts a single argument, the
8539 return value. The type of the return value must be a ':ref:`first
8540 class <t_firstclass>`' type.
8542 A function is not :ref:`well formed <wellformed>` if it has a non-void
8543 return type and contains a '``ret``' instruction with no return value or
8544 a return value with a type that does not match its type, or if it has a
8545 void return type and contains a '``ret``' instruction with a return
8546 value.
8548 Semantics:
8549 """"""""""
8551 When the '``ret``' instruction is executed, control flow returns back to
8552 the calling function's context. If the caller is a
8553 ":ref:`call <i_call>`" instruction, execution continues at the
8554 instruction after the call. If the caller was an
8555 ":ref:`invoke <i_invoke>`" instruction, execution continues at the
8556 beginning of the "normal" destination block. If the instruction returns
8557 a value, that value shall set the call or invoke instruction's return
8558 value.
8560 Example:
8561 """"""""
8563 .. code-block:: llvm
8565       ret i32 5                       ; Return an integer value of 5
8566       ret void                        ; Return from a void function
8567       ret { i32, i8 } { i32 4, i8 2 } ; Return a struct of values 4 and 2
8569 .. _i_br:
8571 '``br``' Instruction
8572 ^^^^^^^^^^^^^^^^^^^^
8574 Syntax:
8575 """""""
8579       br i1 <cond>, label <iftrue>, label <iffalse>
8580       br label <dest>          ; Unconditional branch
8582 Overview:
8583 """""""""
8585 The '``br``' instruction is used to cause control flow to transfer to a
8586 different basic block in the current function. There are two forms of
8587 this instruction, corresponding to a conditional branch and an
8588 unconditional branch.
8590 Arguments:
8591 """"""""""
8593 The conditional branch form of the '``br``' instruction takes a single
8594 '``i1``' value and two '``label``' values. The unconditional form of the
8595 '``br``' instruction takes a single '``label``' value as a target.
8597 Semantics:
8598 """"""""""
8600 Upon execution of a conditional '``br``' instruction, the '``i1``'
8601 argument is evaluated. If the value is ``true``, control flows to the
8602 '``iftrue``' ``label`` argument. If "cond" is ``false``, control flows
8603 to the '``iffalse``' ``label`` argument.
8604 If '``cond``' is ``poison`` or ``undef``, this instruction has undefined
8605 behavior.
8607 Example:
8608 """"""""
8610 .. code-block:: llvm
8612     Test:
8613       %cond = icmp eq i32 %a, %b
8614       br i1 %cond, label %IfEqual, label %IfUnequal
8615     IfEqual:
8616       ret i32 1
8617     IfUnequal:
8618       ret i32 0
8620 .. _i_switch:
8622 '``switch``' Instruction
8623 ^^^^^^^^^^^^^^^^^^^^^^^^
8625 Syntax:
8626 """""""
8630       switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
8632 Overview:
8633 """""""""
8635 The '``switch``' instruction is used to transfer control flow to one of
8636 several different places. It is a generalization of the '``br``'
8637 instruction, allowing a branch to occur to one of many possible
8638 destinations.
8640 Arguments:
8641 """"""""""
8643 The '``switch``' instruction uses three parameters: an integer
8644 comparison value '``value``', a default '``label``' destination, and an
8645 array of pairs of comparison value constants and '``label``'s. The table
8646 is not allowed to contain duplicate constant entries.
8648 Semantics:
8649 """"""""""
8651 The ``switch`` instruction specifies a table of values and destinations.
8652 When the '``switch``' instruction is executed, this table is searched
8653 for the given value. If the value is found, control flow is transferred
8654 to the corresponding destination; otherwise, control flow is transferred
8655 to the default destination.
8656 If '``value``' is ``poison`` or ``undef``, this instruction has undefined
8657 behavior.
8659 Implementation:
8660 """""""""""""""
8662 Depending on properties of the target machine and the particular
8663 ``switch`` instruction, this instruction may be code generated in
8664 different ways. For example, it could be generated as a series of
8665 chained conditional branches or with a lookup table.
8667 Example:
8668 """"""""
8670 .. code-block:: llvm
8672      ; Emulate a conditional br instruction
8673      %Val = zext i1 %value to i32
8674      switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
8676      ; Emulate an unconditional br instruction
8677      switch i32 0, label %dest [ ]
8679      ; Implement a jump table:
8680      switch i32 %val, label %otherwise [ i32 0, label %onzero
8681                                          i32 1, label %onone
8682                                          i32 2, label %ontwo ]
8684 .. _i_indirectbr:
8686 '``indirectbr``' Instruction
8687 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8689 Syntax:
8690 """""""
8694       indirectbr ptr <address>, [ label <dest1>, label <dest2>, ... ]
8696 Overview:
8697 """""""""
8699 The '``indirectbr``' instruction implements an indirect branch to a
8700 label within the current function, whose address is specified by
8701 "``address``". Address must be derived from a
8702 :ref:`blockaddress <blockaddress>` constant.
8704 Arguments:
8705 """"""""""
8707 The '``address``' argument is the address of the label to jump to. The
8708 rest of the arguments indicate the full set of possible destinations
8709 that the address may point to. Blocks are allowed to occur multiple
8710 times in the destination list, though this isn't particularly useful.
8712 This destination list is required so that dataflow analysis has an
8713 accurate understanding of the CFG.
8715 Semantics:
8716 """"""""""
8718 Control transfers to the block specified in the address argument. All
8719 possible destination blocks must be listed in the label list, otherwise
8720 this instruction has undefined behavior. This implies that jumps to
8721 labels defined in other functions have undefined behavior as well.
8722 If '``address``' is ``poison`` or ``undef``, this instruction has undefined
8723 behavior.
8725 Implementation:
8726 """""""""""""""
8728 This is typically implemented with a jump through a register.
8730 Example:
8731 """"""""
8733 .. code-block:: llvm
8735      indirectbr ptr %Addr, [ label %bb1, label %bb2, label %bb3 ]
8737 .. _i_invoke:
8739 '``invoke``' Instruction
8740 ^^^^^^^^^^^^^^^^^^^^^^^^
8742 Syntax:
8743 """""""
8747       <result> = invoke [cconv] [ret attrs] [addrspace(<num>)] <ty>|<fnty> <fnptrval>(<function args>) [fn attrs]
8748                     [operand bundles] to label <normal label> unwind label <exception label>
8750 Overview:
8751 """""""""
8753 The '``invoke``' instruction causes control to transfer to a specified
8754 function, with the possibility of control flow transfer to either the
8755 '``normal``' label or the '``exception``' label. If the callee function
8756 returns with the "``ret``" instruction, control flow will return to the
8757 "normal" label. If the callee (or any indirect callees) returns via the
8758 ":ref:`resume <i_resume>`" instruction or other exception handling
8759 mechanism, control is interrupted and continued at the dynamically
8760 nearest "exception" label.
8762 The '``exception``' label is a `landing
8763 pad <ExceptionHandling.html#overview>`_ for the exception. As such,
8764 '``exception``' label is required to have the
8765 ":ref:`landingpad <i_landingpad>`" instruction, which contains the
8766 information about the behavior of the program after unwinding happens,
8767 as its first non-PHI instruction. The restrictions on the
8768 "``landingpad``" instruction's tightly couples it to the "``invoke``"
8769 instruction, so that the important information contained within the
8770 "``landingpad``" instruction can't be lost through normal code motion.
8772 Arguments:
8773 """"""""""
8775 This instruction requires several arguments:
8777 #. The optional "cconv" marker indicates which :ref:`calling
8778    convention <callingconv>` the call should use. If none is
8779    specified, the call defaults to using C calling conventions.
8780 #. The optional :ref:`Parameter Attributes <paramattrs>` list for return
8781    values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
8782    are valid here.
8783 #. The optional addrspace attribute can be used to indicate the address space
8784    of the called function. If it is not specified, the program address space
8785    from the :ref:`datalayout string<langref_datalayout>` will be used.
8786 #. '``ty``': the type of the call instruction itself which is also the
8787    type of the return value. Functions that return no value are marked
8788    ``void``.
8789 #. '``fnty``': shall be the signature of the function being invoked. The
8790    argument types must match the types implied by this signature. This
8791    type can be omitted if the function is not varargs.
8792 #. '``fnptrval``': An LLVM value containing a pointer to a function to
8793    be invoked. In most cases, this is a direct function invocation, but
8794    indirect ``invoke``'s are just as possible, calling an arbitrary pointer
8795    to function value.
8796 #. '``function args``': argument list whose types match the function
8797    signature argument types and parameter attributes. All arguments must
8798    be of :ref:`first class <t_firstclass>` type. If the function signature
8799    indicates the function accepts a variable number of arguments, the
8800    extra arguments can be specified.
8801 #. '``normal label``': the label reached when the called function
8802    executes a '``ret``' instruction.
8803 #. '``exception label``': the label reached when a callee returns via
8804    the :ref:`resume <i_resume>` instruction or other exception handling
8805    mechanism.
8806 #. The optional :ref:`function attributes <fnattrs>` list.
8807 #. The optional :ref:`operand bundles <opbundles>` list.
8809 Semantics:
8810 """"""""""
8812 This instruction is designed to operate as a standard '``call``'
8813 instruction in most regards. The primary difference is that it
8814 establishes an association with a label, which is used by the runtime
8815 library to unwind the stack.
8817 This instruction is used in languages with destructors to ensure that
8818 proper cleanup is performed in the case of either a ``longjmp`` or a
8819 thrown exception. Additionally, this is important for implementation of
8820 '``catch``' clauses in high-level languages that support them.
8822 For the purposes of the SSA form, the definition of the value returned
8823 by the '``invoke``' instruction is deemed to occur on the edge from the
8824 current block to the "normal" label. If the callee unwinds then no
8825 return value is available.
8827 Example:
8828 """"""""
8830 .. code-block:: llvm
8832       %retval = invoke i32 @Test(i32 15) to label %Continue
8833                   unwind label %TestCleanup              ; i32:retval set
8834       %retval = invoke coldcc i32 %Testfnptr(i32 15) to label %Continue
8835                   unwind label %TestCleanup              ; i32:retval set
8837 .. _i_callbr:
8839 '``callbr``' Instruction
8840 ^^^^^^^^^^^^^^^^^^^^^^^^
8842 Syntax:
8843 """""""
8847       <result> = callbr [cconv] [ret attrs] [addrspace(<num>)] <ty>|<fnty> <fnptrval>(<function args>) [fn attrs]
8848                     [operand bundles] to label <fallthrough label> [indirect labels]
8850 Overview:
8851 """""""""
8853 The '``callbr``' instruction causes control to transfer to a specified
8854 function, with the possibility of control flow transfer to either the
8855 '``fallthrough``' label or one of the '``indirect``' labels.
8857 This instruction should only be used to implement the "goto" feature of gcc
8858 style inline assembly. Any other usage is an error in the IR verifier.
8860 Note that in order to support outputs along indirect edges, LLVM may need to
8861 split critical edges, which may require synthesizing a replacement block for
8862 the ``indirect labels``. Therefore, the address of a label as seen by another
8863 ``callbr`` instruction, or for a :ref:`blockaddress <blockaddress>` constant,
8864 may not be equal to the address provided for the same block to this
8865 instruction's ``indirect labels`` operand. The assembly code may only transfer
8866 control to addresses provided via this instruction's ``indirect labels``.
8868 Arguments:
8869 """"""""""
8871 This instruction requires several arguments:
8873 #. The optional "cconv" marker indicates which :ref:`calling
8874    convention <callingconv>` the call should use. If none is
8875    specified, the call defaults to using C calling conventions.
8876 #. The optional :ref:`Parameter Attributes <paramattrs>` list for return
8877    values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
8878    are valid here.
8879 #. The optional addrspace attribute can be used to indicate the address space
8880    of the called function. If it is not specified, the program address space
8881    from the :ref:`datalayout string<langref_datalayout>` will be used.
8882 #. '``ty``': the type of the call instruction itself which is also the
8883    type of the return value. Functions that return no value are marked
8884    ``void``.
8885 #. '``fnty``': shall be the signature of the function being called. The
8886    argument types must match the types implied by this signature. This
8887    type can be omitted if the function is not varargs.
8888 #. '``fnptrval``': An LLVM value containing a pointer to a function to
8889    be called. In most cases, this is a direct function call, but
8890    other ``callbr``'s are just as possible, calling an arbitrary pointer
8891    to function value.
8892 #. '``function args``': argument list whose types match the function
8893    signature argument types and parameter attributes. All arguments must
8894    be of :ref:`first class <t_firstclass>` type. If the function signature
8895    indicates the function accepts a variable number of arguments, the
8896    extra arguments can be specified.
8897 #. '``fallthrough label``': the label reached when the inline assembly's
8898    execution exits the bottom.
8899 #. '``indirect labels``': the labels reached when a callee transfers control
8900    to a location other than the '``fallthrough label``'. Label constraints
8901    refer to these destinations.
8902 #. The optional :ref:`function attributes <fnattrs>` list.
8903 #. The optional :ref:`operand bundles <opbundles>` list.
8905 Semantics:
8906 """"""""""
8908 This instruction is designed to operate as a standard '``call``'
8909 instruction in most regards. The primary difference is that it
8910 establishes an association with additional labels to define where control
8911 flow goes after the call.
8913 The output values of a '``callbr``' instruction are available only to
8914 the '``fallthrough``' block, not to any '``indirect``' blocks(s).
8916 The only use of this today is to implement the "goto" feature of gcc inline
8917 assembly where additional labels can be provided as locations for the inline
8918 assembly to jump to.
8920 Example:
8921 """"""""
8923 .. code-block:: llvm
8925       ; "asm goto" without output constraints.
8926       callbr void asm "", "r,!i"(i32 %x)
8927                   to label %fallthrough [label %indirect]
8929       ; "asm goto" with output constraints.
8930       <result> = callbr i32 asm "", "=r,r,!i"(i32 %x)
8931                   to label %fallthrough [label %indirect]
8933 .. _i_resume:
8935 '``resume``' Instruction
8936 ^^^^^^^^^^^^^^^^^^^^^^^^
8938 Syntax:
8939 """""""
8943       resume <type> <value>
8945 Overview:
8946 """""""""
8948 The '``resume``' instruction is a terminator instruction that has no
8949 successors.
8951 Arguments:
8952 """"""""""
8954 The '``resume``' instruction requires one argument, which must have the
8955 same type as the result of any '``landingpad``' instruction in the same
8956 function.
8958 Semantics:
8959 """"""""""
8961 The '``resume``' instruction resumes propagation of an existing
8962 (in-flight) exception whose unwinding was interrupted with a
8963 :ref:`landingpad <i_landingpad>` instruction.
8965 Example:
8966 """"""""
8968 .. code-block:: llvm
8970       resume { ptr, i32 } %exn
8972 .. _i_catchswitch:
8974 '``catchswitch``' Instruction
8975 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8977 Syntax:
8978 """""""
8982       <resultval> = catchswitch within <parent> [ label <handler1>, label <handler2>, ... ] unwind to caller
8983       <resultval> = catchswitch within <parent> [ label <handler1>, label <handler2>, ... ] unwind label <default>
8985 Overview:
8986 """""""""
8988 The '``catchswitch``' instruction is used by `LLVM's exception handling system
8989 <ExceptionHandling.html#overview>`_ to describe the set of possible catch handlers
8990 that may be executed by the :ref:`EH personality routine <personalityfn>`.
8992 Arguments:
8993 """"""""""
8995 The ``parent`` argument is the token of the funclet that contains the
8996 ``catchswitch`` instruction. If the ``catchswitch`` is not inside a funclet,
8997 this operand may be the token ``none``.
8999 The ``default`` argument is the label of another basic block beginning with
9000 either a ``cleanuppad`` or ``catchswitch`` instruction.  This unwind destination
9001 must be a legal target with respect to the ``parent`` links, as described in
9002 the `exception handling documentation\ <ExceptionHandling.html#wineh-constraints>`_.
9004 The ``handlers`` are a nonempty list of successor blocks that each begin with a
9005 :ref:`catchpad <i_catchpad>` instruction.
9007 Semantics:
9008 """"""""""
9010 Executing this instruction transfers control to one of the successors in
9011 ``handlers``, if appropriate, or continues to unwind via the unwind label if
9012 present.
9014 The ``catchswitch`` is both a terminator and a "pad" instruction, meaning that
9015 it must be both the first non-phi instruction and last instruction in the basic
9016 block. Therefore, it must be the only non-phi instruction in the block.
9018 Example:
9019 """"""""
9021 .. code-block:: text
9023     dispatch1:
9024       %cs1 = catchswitch within none [label %handler0, label %handler1] unwind to caller
9025     dispatch2:
9026       %cs2 = catchswitch within %parenthandler [label %handler0] unwind label %cleanup
9028 .. _i_catchret:
9030 '``catchret``' Instruction
9031 ^^^^^^^^^^^^^^^^^^^^^^^^^^
9033 Syntax:
9034 """""""
9038       catchret from <token> to label <normal>
9040 Overview:
9041 """""""""
9043 The '``catchret``' instruction is a terminator instruction that has a
9044 single successor.
9047 Arguments:
9048 """"""""""
9050 The first argument to a '``catchret``' indicates which ``catchpad`` it
9051 exits.  It must be a :ref:`catchpad <i_catchpad>`.
9052 The second argument to a '``catchret``' specifies where control will
9053 transfer to next.
9055 Semantics:
9056 """"""""""
9058 The '``catchret``' instruction ends an existing (in-flight) exception whose
9059 unwinding was interrupted with a :ref:`catchpad <i_catchpad>` instruction.  The
9060 :ref:`personality function <personalityfn>` gets a chance to execute arbitrary
9061 code to, for example, destroy the active exception.  Control then transfers to
9062 ``normal``.
9064 The ``token`` argument must be a token produced by a ``catchpad`` instruction.
9065 If the specified ``catchpad`` is not the most-recently-entered not-yet-exited
9066 funclet pad (as described in the `EH documentation\ <ExceptionHandling.html#wineh-constraints>`_),
9067 the ``catchret``'s behavior is undefined.
9069 Example:
9070 """"""""
9072 .. code-block:: text
9074       catchret from %catch to label %continue
9076 .. _i_cleanupret:
9078 '``cleanupret``' Instruction
9079 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9081 Syntax:
9082 """""""
9086       cleanupret from <value> unwind label <continue>
9087       cleanupret from <value> unwind to caller
9089 Overview:
9090 """""""""
9092 The '``cleanupret``' instruction is a terminator instruction that has
9093 an optional successor.
9096 Arguments:
9097 """"""""""
9099 The '``cleanupret``' instruction requires one argument, which indicates
9100 which ``cleanuppad`` it exits, and must be a :ref:`cleanuppad <i_cleanuppad>`.
9101 If the specified ``cleanuppad`` is not the most-recently-entered not-yet-exited
9102 funclet pad (as described in the `EH documentation\ <ExceptionHandling.html#wineh-constraints>`_),
9103 the ``cleanupret``'s behavior is undefined.
9105 The '``cleanupret``' instruction also has an optional successor, ``continue``,
9106 which must be the label of another basic block beginning with either a
9107 ``cleanuppad`` or ``catchswitch`` instruction.  This unwind destination must
9108 be a legal target with respect to the ``parent`` links, as described in the
9109 `exception handling documentation\ <ExceptionHandling.html#wineh-constraints>`_.
9111 Semantics:
9112 """"""""""
9114 The '``cleanupret``' instruction indicates to the
9115 :ref:`personality function <personalityfn>` that one
9116 :ref:`cleanuppad <i_cleanuppad>` it transferred control to has ended.
9117 It transfers control to ``continue`` or unwinds out of the function.
9119 Example:
9120 """"""""
9122 .. code-block:: text
9124       cleanupret from %cleanup unwind to caller
9125       cleanupret from %cleanup unwind label %continue
9127 .. _i_unreachable:
9129 '``unreachable``' Instruction
9130 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9132 Syntax:
9133 """""""
9137       unreachable
9139 Overview:
9140 """""""""
9142 The '``unreachable``' instruction has no defined semantics. This
9143 instruction is used to inform the optimizer that a particular portion of
9144 the code is not reachable. This can be used to indicate that the code
9145 after a no-return function cannot be reached, and other facts.
9147 Semantics:
9148 """"""""""
9150 The '``unreachable``' instruction has no defined semantics.
9152 .. _unaryops:
9154 Unary Operations
9155 -----------------
9157 Unary operators require a single operand, execute an operation on
9158 it, and produce a single value. The operand might represent multiple
9159 data, as is the case with the :ref:`vector <t_vector>` data type. The
9160 result value has the same type as its operand.
9162 .. _i_fneg:
9164 '``fneg``' Instruction
9165 ^^^^^^^^^^^^^^^^^^^^^^
9167 Syntax:
9168 """""""
9172       <result> = fneg [fast-math flags]* <ty> <op1>   ; yields ty:result
9174 Overview:
9175 """""""""
9177 The '``fneg``' instruction returns the negation of its operand.
9179 Arguments:
9180 """"""""""
9182 The argument to the '``fneg``' instruction must be a
9183 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9184 floating-point values.
9186 Semantics:
9187 """"""""""
9189 The value produced is a copy of the operand with its sign bit flipped.
9190 The value is otherwise completely identical; in particular, if the input is a
9191 NaN, then the quiet/signaling bit and payload are perfectly preserved.
9193 This instruction can also take any number of :ref:`fast-math
9194 flags <fastmath>`, which are optimization hints to enable otherwise
9195 unsafe floating-point optimizations:
9197 Example:
9198 """"""""
9200 .. code-block:: text
9202       <result> = fneg float %val          ; yields float:result = -%var
9204 .. _binaryops:
9206 Binary Operations
9207 -----------------
9209 Binary operators are used to do most of the computation in a program.
9210 They require two operands of the same type, execute an operation on
9211 them, and produce a single value. The operands might represent multiple
9212 data, as is the case with the :ref:`vector <t_vector>` data type. The
9213 result value has the same type as its operands.
9215 There are several different binary operators:
9217 .. _i_add:
9219 '``add``' Instruction
9220 ^^^^^^^^^^^^^^^^^^^^^
9222 Syntax:
9223 """""""
9227       <result> = add <ty> <op1>, <op2>          ; yields ty:result
9228       <result> = add nuw <ty> <op1>, <op2>      ; yields ty:result
9229       <result> = add nsw <ty> <op1>, <op2>      ; yields ty:result
9230       <result> = add nuw nsw <ty> <op1>, <op2>  ; yields ty:result
9232 Overview:
9233 """""""""
9235 The '``add``' instruction returns the sum of its two operands.
9237 Arguments:
9238 """"""""""
9240 The two arguments to the '``add``' instruction must be
9241 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9242 arguments must have identical types.
9244 Semantics:
9245 """"""""""
9247 The value produced is the integer sum of the two operands.
9249 If the sum has unsigned overflow, the result returned is the
9250 mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
9251 the result.
9253 Because LLVM integers use a two's complement representation, this
9254 instruction is appropriate for both signed and unsigned integers.
9256 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
9257 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
9258 result value of the ``add`` is a :ref:`poison value <poisonvalues>` if
9259 unsigned and/or signed overflow, respectively, occurs.
9261 Example:
9262 """"""""
9264 .. code-block:: text
9266       <result> = add i32 4, %var          ; yields i32:result = 4 + %var
9268 .. _i_fadd:
9270 '``fadd``' Instruction
9271 ^^^^^^^^^^^^^^^^^^^^^^
9273 Syntax:
9274 """""""
9278       <result> = fadd [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
9280 Overview:
9281 """""""""
9283 The '``fadd``' instruction returns the sum of its two operands.
9285 Arguments:
9286 """"""""""
9288 The two arguments to the '``fadd``' instruction must be
9289 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9290 floating-point values. Both arguments must have identical types.
9292 Semantics:
9293 """"""""""
9295 The value produced is the floating-point sum of the two operands.
9296 This instruction is assumed to execute in the default :ref:`floating-point
9297 environment <floatenv>`.
9298 This instruction can also take any number of :ref:`fast-math
9299 flags <fastmath>`, which are optimization hints to enable otherwise
9300 unsafe floating-point optimizations:
9302 Example:
9303 """"""""
9305 .. code-block:: text
9307       <result> = fadd float 4.0, %var          ; yields float:result = 4.0 + %var
9309 .. _i_sub:
9311 '``sub``' Instruction
9312 ^^^^^^^^^^^^^^^^^^^^^
9314 Syntax:
9315 """""""
9319       <result> = sub <ty> <op1>, <op2>          ; yields ty:result
9320       <result> = sub nuw <ty> <op1>, <op2>      ; yields ty:result
9321       <result> = sub nsw <ty> <op1>, <op2>      ; yields ty:result
9322       <result> = sub nuw nsw <ty> <op1>, <op2>  ; yields ty:result
9324 Overview:
9325 """""""""
9327 The '``sub``' instruction returns the difference of its two operands.
9329 Note that the '``sub``' instruction is used to represent the '``neg``'
9330 instruction present in most other intermediate representations.
9332 Arguments:
9333 """"""""""
9335 The two arguments to the '``sub``' instruction must be
9336 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9337 arguments must have identical types.
9339 Semantics:
9340 """"""""""
9342 The value produced is the integer difference of the two operands.
9344 If the difference has unsigned overflow, the result returned is the
9345 mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
9346 the result.
9348 Because LLVM integers use a two's complement representation, this
9349 instruction is appropriate for both signed and unsigned integers.
9351 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
9352 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
9353 result value of the ``sub`` is a :ref:`poison value <poisonvalues>` if
9354 unsigned and/or signed overflow, respectively, occurs.
9356 Example:
9357 """"""""
9359 .. code-block:: text
9361       <result> = sub i32 4, %var          ; yields i32:result = 4 - %var
9362       <result> = sub i32 0, %val          ; yields i32:result = -%var
9364 .. _i_fsub:
9366 '``fsub``' Instruction
9367 ^^^^^^^^^^^^^^^^^^^^^^
9369 Syntax:
9370 """""""
9374       <result> = fsub [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
9376 Overview:
9377 """""""""
9379 The '``fsub``' instruction returns the difference of its two operands.
9381 Arguments:
9382 """"""""""
9384 The two arguments to the '``fsub``' instruction must be
9385 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9386 floating-point values. Both arguments must have identical types.
9388 Semantics:
9389 """"""""""
9391 The value produced is the floating-point difference of the two operands.
9392 This instruction is assumed to execute in the default :ref:`floating-point
9393 environment <floatenv>`.
9394 This instruction can also take any number of :ref:`fast-math
9395 flags <fastmath>`, which are optimization hints to enable otherwise
9396 unsafe floating-point optimizations:
9398 Example:
9399 """"""""
9401 .. code-block:: text
9403       <result> = fsub float 4.0, %var           ; yields float:result = 4.0 - %var
9404       <result> = fsub float -0.0, %val          ; yields float:result = -%var
9406 .. _i_mul:
9408 '``mul``' Instruction
9409 ^^^^^^^^^^^^^^^^^^^^^
9411 Syntax:
9412 """""""
9416       <result> = mul <ty> <op1>, <op2>          ; yields ty:result
9417       <result> = mul nuw <ty> <op1>, <op2>      ; yields ty:result
9418       <result> = mul nsw <ty> <op1>, <op2>      ; yields ty:result
9419       <result> = mul nuw nsw <ty> <op1>, <op2>  ; yields ty:result
9421 Overview:
9422 """""""""
9424 The '``mul``' instruction returns the product of its two operands.
9426 Arguments:
9427 """"""""""
9429 The two arguments to the '``mul``' instruction must be
9430 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9431 arguments must have identical types.
9433 Semantics:
9434 """"""""""
9436 The value produced is the integer product of the two operands.
9438 If the result of the multiplication has unsigned overflow, the result
9439 returned is the mathematical result modulo 2\ :sup:`n`\ , where n is the
9440 bit width of the result.
9442 Because LLVM integers use a two's complement representation, and the
9443 result is the same width as the operands, this instruction returns the
9444 correct result for both signed and unsigned integers. If a full product
9445 (e.g. ``i32`` * ``i32`` -> ``i64``) is needed, the operands should be
9446 sign-extended or zero-extended as appropriate to the width of the full
9447 product.
9449 ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
9450 respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
9451 result value of the ``mul`` is a :ref:`poison value <poisonvalues>` if
9452 unsigned and/or signed overflow, respectively, occurs.
9454 Example:
9455 """"""""
9457 .. code-block:: text
9459       <result> = mul i32 4, %var          ; yields i32:result = 4 * %var
9461 .. _i_fmul:
9463 '``fmul``' Instruction
9464 ^^^^^^^^^^^^^^^^^^^^^^
9466 Syntax:
9467 """""""
9471       <result> = fmul [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
9473 Overview:
9474 """""""""
9476 The '``fmul``' instruction returns the product of its two operands.
9478 Arguments:
9479 """"""""""
9481 The two arguments to the '``fmul``' instruction must be
9482 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9483 floating-point values. Both arguments must have identical types.
9485 Semantics:
9486 """"""""""
9488 The value produced is the floating-point product of the two operands.
9489 This instruction is assumed to execute in the default :ref:`floating-point
9490 environment <floatenv>`.
9491 This instruction can also take any number of :ref:`fast-math
9492 flags <fastmath>`, which are optimization hints to enable otherwise
9493 unsafe floating-point optimizations:
9495 Example:
9496 """"""""
9498 .. code-block:: text
9500       <result> = fmul float 4.0, %var          ; yields float:result = 4.0 * %var
9502 .. _i_udiv:
9504 '``udiv``' Instruction
9505 ^^^^^^^^^^^^^^^^^^^^^^
9507 Syntax:
9508 """""""
9512       <result> = udiv <ty> <op1>, <op2>         ; yields ty:result
9513       <result> = udiv exact <ty> <op1>, <op2>   ; yields ty:result
9515 Overview:
9516 """""""""
9518 The '``udiv``' instruction returns the quotient of its two operands.
9520 Arguments:
9521 """"""""""
9523 The two arguments to the '``udiv``' instruction must be
9524 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9525 arguments must have identical types.
9527 Semantics:
9528 """"""""""
9530 The value produced is the unsigned integer quotient of the two operands.
9532 Note that unsigned integer division and signed integer division are
9533 distinct operations; for signed integer division, use '``sdiv``'.
9535 Division by zero is undefined behavior. For vectors, if any element
9536 of the divisor is zero, the operation has undefined behavior.
9539 If the ``exact`` keyword is present, the result value of the ``udiv`` is
9540 a :ref:`poison value <poisonvalues>` if %op1 is not a multiple of %op2 (as
9541 such, "((a udiv exact b) mul b) == a").
9543 Example:
9544 """"""""
9546 .. code-block:: text
9548       <result> = udiv i32 4, %var          ; yields i32:result = 4 / %var
9550 .. _i_sdiv:
9552 '``sdiv``' Instruction
9553 ^^^^^^^^^^^^^^^^^^^^^^
9555 Syntax:
9556 """""""
9560       <result> = sdiv <ty> <op1>, <op2>         ; yields ty:result
9561       <result> = sdiv exact <ty> <op1>, <op2>   ; yields ty:result
9563 Overview:
9564 """""""""
9566 The '``sdiv``' instruction returns the quotient of its two operands.
9568 Arguments:
9569 """"""""""
9571 The two arguments to the '``sdiv``' instruction must be
9572 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9573 arguments must have identical types.
9575 Semantics:
9576 """"""""""
9578 The value produced is the signed integer quotient of the two operands
9579 rounded towards zero.
9581 Note that signed integer division and unsigned integer division are
9582 distinct operations; for unsigned integer division, use '``udiv``'.
9584 Division by zero is undefined behavior. For vectors, if any element
9585 of the divisor is zero, the operation has undefined behavior.
9586 Overflow also leads to undefined behavior; this is a rare case, but can
9587 occur, for example, by doing a 32-bit division of -2147483648 by -1.
9589 If the ``exact`` keyword is present, the result value of the ``sdiv`` is
9590 a :ref:`poison value <poisonvalues>` if the result would be rounded.
9592 Example:
9593 """"""""
9595 .. code-block:: text
9597       <result> = sdiv i32 4, %var          ; yields i32:result = 4 / %var
9599 .. _i_fdiv:
9601 '``fdiv``' Instruction
9602 ^^^^^^^^^^^^^^^^^^^^^^
9604 Syntax:
9605 """""""
9609       <result> = fdiv [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
9611 Overview:
9612 """""""""
9614 The '``fdiv``' instruction returns the quotient of its two operands.
9616 Arguments:
9617 """"""""""
9619 The two arguments to the '``fdiv``' instruction must be
9620 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9621 floating-point values. Both arguments must have identical types.
9623 Semantics:
9624 """"""""""
9626 The value produced is the floating-point quotient of the two operands.
9627 This instruction is assumed to execute in the default :ref:`floating-point
9628 environment <floatenv>`.
9629 This instruction can also take any number of :ref:`fast-math
9630 flags <fastmath>`, which are optimization hints to enable otherwise
9631 unsafe floating-point optimizations:
9633 Example:
9634 """"""""
9636 .. code-block:: text
9638       <result> = fdiv float 4.0, %var          ; yields float:result = 4.0 / %var
9640 .. _i_urem:
9642 '``urem``' Instruction
9643 ^^^^^^^^^^^^^^^^^^^^^^
9645 Syntax:
9646 """""""
9650       <result> = urem <ty> <op1>, <op2>   ; yields ty:result
9652 Overview:
9653 """""""""
9655 The '``urem``' instruction returns the remainder from the unsigned
9656 division of its two arguments.
9658 Arguments:
9659 """"""""""
9661 The two arguments to the '``urem``' instruction must be
9662 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9663 arguments must have identical types.
9665 Semantics:
9666 """"""""""
9668 This instruction returns the unsigned integer *remainder* of a division.
9669 This instruction always performs an unsigned division to get the
9670 remainder.
9672 Note that unsigned integer remainder and signed integer remainder are
9673 distinct operations; for signed integer remainder, use '``srem``'.
9675 Taking the remainder of a division by zero is undefined behavior.
9676 For vectors, if any element of the divisor is zero, the operation has
9677 undefined behavior.
9679 Example:
9680 """"""""
9682 .. code-block:: text
9684       <result> = urem i32 4, %var          ; yields i32:result = 4 % %var
9686 .. _i_srem:
9688 '``srem``' Instruction
9689 ^^^^^^^^^^^^^^^^^^^^^^
9691 Syntax:
9692 """""""
9696       <result> = srem <ty> <op1>, <op2>   ; yields ty:result
9698 Overview:
9699 """""""""
9701 The '``srem``' instruction returns the remainder from the signed
9702 division of its two operands. This instruction can also take
9703 :ref:`vector <t_vector>` versions of the values in which case the elements
9704 must be integers.
9706 Arguments:
9707 """"""""""
9709 The two arguments to the '``srem``' instruction must be
9710 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9711 arguments must have identical types.
9713 Semantics:
9714 """"""""""
9716 This instruction returns the *remainder* of a division (where the result
9717 is either zero or has the same sign as the dividend, ``op1``), not the
9718 *modulo* operator (where the result is either zero or has the same sign
9719 as the divisor, ``op2``) of a value. For more information about the
9720 difference, see `The Math
9721 Forum <http://mathforum.org/dr.math/problems/anne.4.28.99.html>`_. For a
9722 table of how this is implemented in various languages, please see
9723 `Wikipedia: modulo
9724 operation <http://en.wikipedia.org/wiki/Modulo_operation>`_.
9726 Note that signed integer remainder and unsigned integer remainder are
9727 distinct operations; for unsigned integer remainder, use '``urem``'.
9729 Taking the remainder of a division by zero is undefined behavior.
9730 For vectors, if any element of the divisor is zero, the operation has
9731 undefined behavior.
9732 Overflow also leads to undefined behavior; this is a rare case, but can
9733 occur, for example, by taking the remainder of a 32-bit division of
9734 -2147483648 by -1. (The remainder doesn't actually overflow, but this
9735 rule lets srem be implemented using instructions that return both the
9736 result of the division and the remainder.)
9738 Example:
9739 """"""""
9741 .. code-block:: text
9743       <result> = srem i32 4, %var          ; yields i32:result = 4 % %var
9745 .. _i_frem:
9747 '``frem``' Instruction
9748 ^^^^^^^^^^^^^^^^^^^^^^
9750 Syntax:
9751 """""""
9755       <result> = frem [fast-math flags]* <ty> <op1>, <op2>   ; yields ty:result
9757 Overview:
9758 """""""""
9760 The '``frem``' instruction returns the remainder from the division of
9761 its two operands.
9763 .. note::
9765         The instruction is implemented as a call to libm's '``fmod``'
9766         for some targets, and using the instruction may thus require linking libm.
9769 Arguments:
9770 """"""""""
9772 The two arguments to the '``frem``' instruction must be
9773 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>` of
9774 floating-point values. Both arguments must have identical types.
9776 Semantics:
9777 """"""""""
9779 The value produced is the floating-point remainder of the two operands.
9780 This is the same output as a libm '``fmod``' function, but without any
9781 possibility of setting ``errno``. The remainder has the same sign as the
9782 dividend.
9783 This instruction is assumed to execute in the default :ref:`floating-point
9784 environment <floatenv>`.
9785 This instruction can also take any number of :ref:`fast-math
9786 flags <fastmath>`, which are optimization hints to enable otherwise
9787 unsafe floating-point optimizations:
9789 Example:
9790 """"""""
9792 .. code-block:: text
9794       <result> = frem float 4.0, %var          ; yields float:result = 4.0 % %var
9796 .. _bitwiseops:
9798 Bitwise Binary Operations
9799 -------------------------
9801 Bitwise binary operators are used to do various forms of bit-twiddling
9802 in a program. They are generally very efficient instructions and can
9803 commonly be strength reduced from other instructions. They require two
9804 operands of the same type, execute an operation on them, and produce a
9805 single value. The resulting value is the same type as its operands.
9807 .. _i_shl:
9809 '``shl``' Instruction
9810 ^^^^^^^^^^^^^^^^^^^^^
9812 Syntax:
9813 """""""
9817       <result> = shl <ty> <op1>, <op2>           ; yields ty:result
9818       <result> = shl nuw <ty> <op1>, <op2>       ; yields ty:result
9819       <result> = shl nsw <ty> <op1>, <op2>       ; yields ty:result
9820       <result> = shl nuw nsw <ty> <op1>, <op2>   ; yields ty:result
9822 Overview:
9823 """""""""
9825 The '``shl``' instruction returns the first operand shifted to the left
9826 a specified number of bits.
9828 Arguments:
9829 """"""""""
9831 Both arguments to the '``shl``' instruction must be the same
9832 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
9833 '``op2``' is treated as an unsigned value.
9835 Semantics:
9836 """"""""""
9838 The value produced is ``op1`` \* 2\ :sup:`op2` mod 2\ :sup:`n`,
9839 where ``n`` is the width of the result. If ``op2`` is (statically or
9840 dynamically) equal to or larger than the number of bits in
9841 ``op1``, this instruction returns a :ref:`poison value <poisonvalues>`.
9842 If the arguments are vectors, each vector element of ``op1`` is shifted
9843 by the corresponding shift amount in ``op2``.
9845 If the ``nuw`` keyword is present, then the shift produces a poison
9846 value if it shifts out any non-zero bits.
9847 If the ``nsw`` keyword is present, then the shift produces a poison
9848 value if it shifts out any bits that disagree with the resultant sign bit.
9850 Example:
9851 """"""""
9853 .. code-block:: text
9855       <result> = shl i32 4, %var   ; yields i32: 4 << %var
9856       <result> = shl i32 4, 2      ; yields i32: 16
9857       <result> = shl i32 1, 10     ; yields i32: 1024
9858       <result> = shl i32 1, 32     ; undefined
9859       <result> = shl <2 x i32> < i32 1, i32 1>, < i32 1, i32 2>   ; yields: result=<2 x i32> < i32 2, i32 4>
9861 .. _i_lshr:
9864 '``lshr``' Instruction
9865 ^^^^^^^^^^^^^^^^^^^^^^
9867 Syntax:
9868 """""""
9872       <result> = lshr <ty> <op1>, <op2>         ; yields ty:result
9873       <result> = lshr exact <ty> <op1>, <op2>   ; yields ty:result
9875 Overview:
9876 """""""""
9878 The '``lshr``' instruction (logical shift right) returns the first
9879 operand shifted to the right a specified number of bits with zero fill.
9881 Arguments:
9882 """"""""""
9884 Both arguments to the '``lshr``' instruction must be the same
9885 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
9886 '``op2``' is treated as an unsigned value.
9888 Semantics:
9889 """"""""""
9891 This instruction always performs a logical shift right operation. The
9892 most significant bits of the result will be filled with zero bits after
9893 the shift. If ``op2`` is (statically or dynamically) equal to or larger
9894 than the number of bits in ``op1``, this instruction returns a :ref:`poison
9895 value <poisonvalues>`. If the arguments are vectors, each vector element
9896 of ``op1`` is shifted by the corresponding shift amount in ``op2``.
9898 If the ``exact`` keyword is present, the result value of the ``lshr`` is
9899 a poison value if any of the bits shifted out are non-zero.
9901 Example:
9902 """"""""
9904 .. code-block:: text
9906       <result> = lshr i32 4, 1   ; yields i32:result = 2
9907       <result> = lshr i32 4, 2   ; yields i32:result = 1
9908       <result> = lshr i8  4, 3   ; yields i8:result = 0
9909       <result> = lshr i8 -2, 1   ; yields i8:result = 0x7F
9910       <result> = lshr i32 1, 32  ; undefined
9911       <result> = lshr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 2>   ; yields: result=<2 x i32> < i32 0x7FFFFFFF, i32 1>
9913 .. _i_ashr:
9915 '``ashr``' Instruction
9916 ^^^^^^^^^^^^^^^^^^^^^^
9918 Syntax:
9919 """""""
9923       <result> = ashr <ty> <op1>, <op2>         ; yields ty:result
9924       <result> = ashr exact <ty> <op1>, <op2>   ; yields ty:result
9926 Overview:
9927 """""""""
9929 The '``ashr``' instruction (arithmetic shift right) returns the first
9930 operand shifted to the right a specified number of bits with sign
9931 extension.
9933 Arguments:
9934 """"""""""
9936 Both arguments to the '``ashr``' instruction must be the same
9937 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
9938 '``op2``' is treated as an unsigned value.
9940 Semantics:
9941 """"""""""
9943 This instruction always performs an arithmetic shift right operation,
9944 The most significant bits of the result will be filled with the sign bit
9945 of ``op1``. If ``op2`` is (statically or dynamically) equal to or larger
9946 than the number of bits in ``op1``, this instruction returns a :ref:`poison
9947 value <poisonvalues>`. If the arguments are vectors, each vector element
9948 of ``op1`` is shifted by the corresponding shift amount in ``op2``.
9950 If the ``exact`` keyword is present, the result value of the ``ashr`` is
9951 a poison value if any of the bits shifted out are non-zero.
9953 Example:
9954 """"""""
9956 .. code-block:: text
9958       <result> = ashr i32 4, 1   ; yields i32:result = 2
9959       <result> = ashr i32 4, 2   ; yields i32:result = 1
9960       <result> = ashr i8  4, 3   ; yields i8:result = 0
9961       <result> = ashr i8 -2, 1   ; yields i8:result = -1
9962       <result> = ashr i32 1, 32  ; undefined
9963       <result> = ashr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 3>   ; yields: result=<2 x i32> < i32 -1, i32 0>
9965 .. _i_and:
9967 '``and``' Instruction
9968 ^^^^^^^^^^^^^^^^^^^^^
9970 Syntax:
9971 """""""
9975       <result> = and <ty> <op1>, <op2>   ; yields ty:result
9977 Overview:
9978 """""""""
9980 The '``and``' instruction returns the bitwise logical and of its two
9981 operands.
9983 Arguments:
9984 """"""""""
9986 The two arguments to the '``and``' instruction must be
9987 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
9988 arguments must have identical types.
9990 Semantics:
9991 """"""""""
9993 The truth table used for the '``and``' instruction is:
9995 +-----+-----+-----+
9996 | In0 | In1 | Out |
9997 +-----+-----+-----+
9998 |   0 |   0 |   0 |
9999 +-----+-----+-----+
10000 |   0 |   1 |   0 |
10001 +-----+-----+-----+
10002 |   1 |   0 |   0 |
10003 +-----+-----+-----+
10004 |   1 |   1 |   1 |
10005 +-----+-----+-----+
10007 Example:
10008 """"""""
10010 .. code-block:: text
10012       <result> = and i32 4, %var         ; yields i32:result = 4 & %var
10013       <result> = and i32 15, 40          ; yields i32:result = 8
10014       <result> = and i32 4, 8            ; yields i32:result = 0
10016 .. _i_or:
10018 '``or``' Instruction
10019 ^^^^^^^^^^^^^^^^^^^^
10021 Syntax:
10022 """""""
10026       <result> = or <ty> <op1>, <op2>   ; yields ty:result
10028 Overview:
10029 """""""""
10031 The '``or``' instruction returns the bitwise logical inclusive or of its
10032 two operands.
10034 Arguments:
10035 """"""""""
10037 The two arguments to the '``or``' instruction must be
10038 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
10039 arguments must have identical types.
10041 Semantics:
10042 """"""""""
10044 The truth table used for the '``or``' instruction is:
10046 +-----+-----+-----+
10047 | In0 | In1 | Out |
10048 +-----+-----+-----+
10049 |   0 |   0 |   0 |
10050 +-----+-----+-----+
10051 |   0 |   1 |   1 |
10052 +-----+-----+-----+
10053 |   1 |   0 |   1 |
10054 +-----+-----+-----+
10055 |   1 |   1 |   1 |
10056 +-----+-----+-----+
10058 Example:
10059 """"""""
10063       <result> = or i32 4, %var         ; yields i32:result = 4 | %var
10064       <result> = or i32 15, 40          ; yields i32:result = 47
10065       <result> = or i32 4, 8            ; yields i32:result = 12
10067 .. _i_xor:
10069 '``xor``' Instruction
10070 ^^^^^^^^^^^^^^^^^^^^^
10072 Syntax:
10073 """""""
10077       <result> = xor <ty> <op1>, <op2>   ; yields ty:result
10079 Overview:
10080 """""""""
10082 The '``xor``' instruction returns the bitwise logical exclusive or of
10083 its two operands. The ``xor`` is used to implement the "one's
10084 complement" operation, which is the "~" operator in C.
10086 Arguments:
10087 """"""""""
10089 The two arguments to the '``xor``' instruction must be
10090 :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
10091 arguments must have identical types.
10093 Semantics:
10094 """"""""""
10096 The truth table used for the '``xor``' instruction is:
10098 +-----+-----+-----+
10099 | In0 | In1 | Out |
10100 +-----+-----+-----+
10101 |   0 |   0 |   0 |
10102 +-----+-----+-----+
10103 |   0 |   1 |   1 |
10104 +-----+-----+-----+
10105 |   1 |   0 |   1 |
10106 +-----+-----+-----+
10107 |   1 |   1 |   0 |
10108 +-----+-----+-----+
10110 Example:
10111 """"""""
10113 .. code-block:: text
10115       <result> = xor i32 4, %var         ; yields i32:result = 4 ^ %var
10116       <result> = xor i32 15, 40          ; yields i32:result = 39
10117       <result> = xor i32 4, 8            ; yields i32:result = 12
10118       <result> = xor i32 %V, -1          ; yields i32:result = ~%V
10120 Vector Operations
10121 -----------------
10123 LLVM supports several instructions to represent vector operations in a
10124 target-independent manner. These instructions cover the element-access
10125 and vector-specific operations needed to process vectors effectively.
10126 While LLVM does directly support these vector operations, many
10127 sophisticated algorithms will want to use target-specific intrinsics to
10128 take full advantage of a specific target.
10130 .. _i_extractelement:
10132 '``extractelement``' Instruction
10133 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10135 Syntax:
10136 """""""
10140       <result> = extractelement <n x <ty>> <val>, <ty2> <idx>  ; yields <ty>
10141       <result> = extractelement <vscale x n x <ty>> <val>, <ty2> <idx> ; yields <ty>
10143 Overview:
10144 """""""""
10146 The '``extractelement``' instruction extracts a single scalar element
10147 from a vector at a specified index.
10149 Arguments:
10150 """"""""""
10152 The first operand of an '``extractelement``' instruction is a value of
10153 :ref:`vector <t_vector>` type. The second operand is an index indicating
10154 the position from which to extract the element. The index may be a
10155 variable of any integer type, and will be treated as an unsigned integer.
10157 Semantics:
10158 """"""""""
10160 The result is a scalar of the same type as the element type of ``val``.
10161 Its value is the value at position ``idx`` of ``val``. If ``idx``
10162 exceeds the length of ``val`` for a fixed-length vector, the result is a
10163 :ref:`poison value <poisonvalues>`. For a scalable vector, if the value
10164 of ``idx`` exceeds the runtime length of the vector, the result is a
10165 :ref:`poison value <poisonvalues>`.
10167 Example:
10168 """"""""
10170 .. code-block:: text
10172       <result> = extractelement <4 x i32> %vec, i32 0    ; yields i32
10174 .. _i_insertelement:
10176 '``insertelement``' Instruction
10177 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10179 Syntax:
10180 """""""
10184       <result> = insertelement <n x <ty>> <val>, <ty> <elt>, <ty2> <idx>    ; yields <n x <ty>>
10185       <result> = insertelement <vscale x n x <ty>> <val>, <ty> <elt>, <ty2> <idx> ; yields <vscale x n x <ty>>
10187 Overview:
10188 """""""""
10190 The '``insertelement``' instruction inserts a scalar element into a
10191 vector at a specified index.
10193 Arguments:
10194 """"""""""
10196 The first operand of an '``insertelement``' instruction is a value of
10197 :ref:`vector <t_vector>` type. The second operand is a scalar value whose
10198 type must equal the element type of the first operand. The third operand
10199 is an index indicating the position at which to insert the value. The
10200 index may be a variable of any integer type, and will be treated as an
10201 unsigned integer.
10203 Semantics:
10204 """"""""""
10206 The result is a vector of the same type as ``val``. Its element values
10207 are those of ``val`` except at position ``idx``, where it gets the value
10208 ``elt``. If ``idx`` exceeds the length of ``val`` for a fixed-length vector,
10209 the result is a :ref:`poison value <poisonvalues>`. For a scalable vector,
10210 if the value of ``idx`` exceeds the runtime length of the vector, the result
10211 is a :ref:`poison value <poisonvalues>`.
10213 Example:
10214 """"""""
10216 .. code-block:: text
10218       <result> = insertelement <4 x i32> %vec, i32 1, i32 0    ; yields <4 x i32>
10220 .. _i_shufflevector:
10222 '``shufflevector``' Instruction
10223 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10225 Syntax:
10226 """""""
10230       <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask>    ; yields <m x <ty>>
10231       <result> = shufflevector <vscale x n x <ty>> <v1>, <vscale x n x <ty>> v2, <vscale x m x i32> <mask>  ; yields <vscale x m x <ty>>
10233 Overview:
10234 """""""""
10236 The '``shufflevector``' instruction constructs a permutation of elements
10237 from two input vectors, returning a vector with the same element type as
10238 the input and length that is the same as the shuffle mask.
10240 Arguments:
10241 """"""""""
10243 The first two operands of a '``shufflevector``' instruction are vectors
10244 with the same type. The third argument is a shuffle mask vector constant
10245 whose element type is ``i32``. The mask vector elements must be constant
10246 integers or ``poison`` values. The result of the instruction is a vector
10247 whose length is the same as the shuffle mask and whose element type is the
10248 same as the element type of the first two operands.
10250 Semantics:
10251 """"""""""
10253 The elements of the two input vectors are numbered from left to right
10254 across both of the vectors. For each element of the result vector, the
10255 shuffle mask selects an element from one of the input vectors to copy
10256 to the result. Non-negative elements in the mask represent an index
10257 into the concatenated pair of input vectors.
10259 A ``poison`` element in the mask vector specifies that the resulting element
10260 is ``poison``.
10261 For backwards-compatibility reasons, LLVM temporarily also accepts ``undef``
10262 mask elements, which will be interpreted the same way as ``poison`` elements.
10263 If the shuffle mask selects an ``undef`` element from one of the input
10264 vectors, the resulting element is ``undef``.
10266 For scalable vectors, the only valid mask values at present are
10267 ``zeroinitializer``, ``undef`` and ``poison``, since we cannot write all indices as
10268 literals for a vector with a length unknown at compile time.
10270 Example:
10271 """"""""
10273 .. code-block:: text
10275       <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
10276                               <4 x i32> <i32 0, i32 4, i32 1, i32 5>  ; yields <4 x i32>
10277       <result> = shufflevector <4 x i32> %v1, <4 x i32> poison,
10278                               <4 x i32> <i32 0, i32 1, i32 2, i32 3>  ; yields <4 x i32> - Identity shuffle.
10279       <result> = shufflevector <8 x i32> %v1, <8 x i32> poison,
10280                               <4 x i32> <i32 0, i32 1, i32 2, i32 3>  ; yields <4 x i32>
10281       <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
10282                               <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 >  ; yields <8 x i32>
10284 Aggregate Operations
10285 --------------------
10287 LLVM supports several instructions for working with
10288 :ref:`aggregate <t_aggregate>` values.
10290 .. _i_extractvalue:
10292 '``extractvalue``' Instruction
10293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10295 Syntax:
10296 """""""
10300       <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}*
10302 Overview:
10303 """""""""
10305 The '``extractvalue``' instruction extracts the value of a member field
10306 from an :ref:`aggregate <t_aggregate>` value.
10308 Arguments:
10309 """"""""""
10311 The first operand of an '``extractvalue``' instruction is a value of
10312 :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The other operands are
10313 constant indices to specify which value to extract in a similar manner
10314 as indices in a '``getelementptr``' instruction.
10316 The major differences to ``getelementptr`` indexing are:
10318 -  Since the value being indexed is not a pointer, the first index is
10319    omitted and assumed to be zero.
10320 -  At least one index must be specified.
10321 -  Not only struct indices but also array indices must be in bounds.
10323 Semantics:
10324 """"""""""
10326 The result is the value at the position in the aggregate specified by
10327 the index operands.
10329 Example:
10330 """"""""
10332 .. code-block:: text
10334       <result> = extractvalue {i32, float} %agg, 0    ; yields i32
10336 .. _i_insertvalue:
10338 '``insertvalue``' Instruction
10339 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10341 Syntax:
10342 """""""
10346       <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}*    ; yields <aggregate type>
10348 Overview:
10349 """""""""
10351 The '``insertvalue``' instruction inserts a value into a member field in
10352 an :ref:`aggregate <t_aggregate>` value.
10354 Arguments:
10355 """"""""""
10357 The first operand of an '``insertvalue``' instruction is a value of
10358 :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The second operand is
10359 a first-class value to insert. The following operands are constant
10360 indices indicating the position at which to insert the value in a
10361 similar manner as indices in a '``extractvalue``' instruction. The value
10362 to insert must have the same type as the value identified by the
10363 indices.
10365 Semantics:
10366 """"""""""
10368 The result is an aggregate of the same type as ``val``. Its value is
10369 that of ``val`` except that the value at the position specified by the
10370 indices is that of ``elt``.
10372 Example:
10373 """"""""
10375 .. code-block:: llvm
10377       %agg1 = insertvalue {i32, float} undef, i32 1, 0              ; yields {i32 1, float undef}
10378       %agg2 = insertvalue {i32, float} %agg1, float %val, 1         ; yields {i32 1, float %val}
10379       %agg3 = insertvalue {i32, {float}} undef, float %val, 1, 0    ; yields {i32 undef, {float %val}}
10381 .. _memoryops:
10383 Memory Access and Addressing Operations
10384 ---------------------------------------
10386 A key design point of an SSA-based representation is how it represents
10387 memory. In LLVM, no memory locations are in SSA form, which makes things
10388 very simple. This section describes how to read, write, and allocate
10389 memory in LLVM.
10391 .. _i_alloca:
10393 '``alloca``' Instruction
10394 ^^^^^^^^^^^^^^^^^^^^^^^^
10396 Syntax:
10397 """""""
10401       <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>] [, addrspace(<num>)]     ; yields type addrspace(num)*:result
10403 Overview:
10404 """""""""
10406 The '``alloca``' instruction allocates memory on the stack frame of the
10407 currently executing function, to be automatically released when this
10408 function returns to its caller.  If the address space is not explicitly
10409 specified, the object is allocated in the alloca address space from the
10410 :ref:`datalayout string<langref_datalayout>`.
10412 Arguments:
10413 """"""""""
10415 The '``alloca``' instruction allocates ``sizeof(<type>)*NumElements``
10416 bytes of memory on the runtime stack, returning a pointer of the
10417 appropriate type to the program. If "NumElements" is specified, it is
10418 the number of elements allocated, otherwise "NumElements" is defaulted
10419 to be one.
10421 If a constant alignment is specified, the value result of the
10422 allocation is guaranteed to be aligned to at least that boundary. The
10423 alignment may not be greater than ``1 << 32``.
10425 The alignment is only optional when parsing textual IR; for in-memory IR,
10426 it is always present. If not specified, the target can choose to align the
10427 allocation on any convenient boundary compatible with the type.
10429 '``type``' may be any sized type.
10431 Structs containing scalable vectors cannot be used in allocas unless all
10432 fields are the same scalable vector type (e.g. ``{<vscale x 2 x i32>,
10433 <vscale x 2 x i32>}`` contains the same type while ``{<vscale x 2 x i32>,
10434 <vscale x 2 x i64>}`` doesn't).
10436 Semantics:
10437 """"""""""
10439 Memory is allocated; a pointer is returned. The allocated memory is
10440 uninitialized, and loading from uninitialized memory produces an undefined
10441 value. The operation itself is undefined if there is insufficient stack
10442 space for the allocation.'``alloca``'d memory is automatically released
10443 when the function returns. The '``alloca``' instruction is commonly used
10444 to represent automatic variables that must have an address available. When
10445 the function returns (either with the ``ret`` or ``resume`` instructions),
10446 the memory is reclaimed. Allocating zero bytes is legal, but the returned
10447 pointer may not be unique. The order in which memory is allocated (ie.,
10448 which way the stack grows) is not specified.
10450 Note that '``alloca``' outside of the alloca address space from the
10451 :ref:`datalayout string<langref_datalayout>` is meaningful only if the
10452 target has assigned it a semantics.
10454 If the returned pointer is used by :ref:`llvm.lifetime.start <int_lifestart>`,
10455 the returned object is initially dead.
10456 See :ref:`llvm.lifetime.start <int_lifestart>` and
10457 :ref:`llvm.lifetime.end <int_lifeend>` for the precise semantics of
10458 lifetime-manipulating intrinsics.
10460 Example:
10461 """"""""
10463 .. code-block:: llvm
10465       %ptr = alloca i32                             ; yields ptr
10466       %ptr = alloca i32, i32 4                      ; yields ptr
10467       %ptr = alloca i32, i32 4, align 1024          ; yields ptr
10468       %ptr = alloca i32, align 1024                 ; yields ptr
10470 .. _i_load:
10472 '``load``' Instruction
10473 ^^^^^^^^^^^^^^^^^^^^^^
10475 Syntax:
10476 """""""
10480       <result> = load [volatile] <ty>, ptr <pointer>[, align <alignment>][, !nontemporal !<nontemp_node>][, !invariant.load !<empty_node>][, !invariant.group !<empty_node>][, !nonnull !<empty_node>][, !dereferenceable !<deref_bytes_node>][, !dereferenceable_or_null !<deref_bytes_node>][, !align !<align_node>][, !noundef !<empty_node>]
10481       <result> = load atomic [volatile] <ty>, ptr <pointer> [syncscope("<target-scope>")] <ordering>, align <alignment> [, !invariant.group !<empty_node>]
10482       !<nontemp_node> = !{ i32 1 }
10483       !<empty_node> = !{}
10484       !<deref_bytes_node> = !{ i64 <dereferenceable_bytes> }
10485       !<align_node> = !{ i64 <value_alignment> }
10487 Overview:
10488 """""""""
10490 The '``load``' instruction is used to read from memory.
10492 Arguments:
10493 """"""""""
10495 The argument to the ``load`` instruction specifies the memory address from which
10496 to load. The type specified must be a :ref:`first class <t_firstclass>` type of
10497 known size (i.e. not containing an :ref:`opaque structural type <t_opaque>`). If
10498 the ``load`` is marked as ``volatile``, then the optimizer is not allowed to
10499 modify the number or order of execution of this ``load`` with other
10500 :ref:`volatile operations <volatile>`.
10502 If the ``load`` is marked as ``atomic``, it takes an extra :ref:`ordering
10503 <ordering>` and optional ``syncscope("<target-scope>")`` argument. The
10504 ``release`` and ``acq_rel`` orderings are not valid on ``load`` instructions.
10505 Atomic loads produce :ref:`defined <memmodel>` results when they may see
10506 multiple atomic stores. The type of the pointee must be an integer, pointer, or
10507 floating-point type whose bit width is a power of two greater than or equal to
10508 eight and less than or equal to a target-specific size limit.  ``align`` must be
10509 explicitly specified on atomic loads, and the load has undefined behavior if the
10510 alignment is not set to a value which is at least the size in bytes of the
10511 pointee. ``!nontemporal`` does not have any defined semantics for atomic loads.
10513 The optional constant ``align`` argument specifies the alignment of the
10514 operation (that is, the alignment of the memory address). It is the
10515 responsibility of the code emitter to ensure that the alignment information is
10516 correct. Overestimating the alignment results in undefined behavior.
10517 Underestimating the alignment may produce less efficient code. An alignment of
10518 1 is always safe. The maximum possible alignment is ``1 << 32``. An alignment
10519 value higher than the size of the loaded type implies memory up to the
10520 alignment value bytes can be safely loaded without trapping in the default
10521 address space. Access of the high bytes can interfere with debugging tools, so
10522 should not be accessed if the function has the ``sanitize_thread`` or
10523 ``sanitize_address`` attributes.
10525 The alignment is only optional when parsing textual IR; for in-memory IR, it is
10526 always present. An omitted ``align`` argument means that the operation has the
10527 ABI alignment for the target.
10529 The optional ``!nontemporal`` metadata must reference a single
10530 metadata name ``<nontemp_node>`` corresponding to a metadata node with one
10531 ``i32`` entry of value 1. The existence of the ``!nontemporal``
10532 metadata on the instruction tells the optimizer and code generator
10533 that this load is not expected to be reused in the cache. The code
10534 generator may select special instructions to save cache bandwidth, such
10535 as the ``MOVNT`` instruction on x86.
10537 The optional ``!invariant.load`` metadata must reference a single
10538 metadata name ``<empty_node>`` corresponding to a metadata node with no
10539 entries. If a load instruction tagged with the ``!invariant.load``
10540 metadata is executed, the memory location referenced by the load has
10541 to contain the same value at all points in the program where the
10542 memory location is dereferenceable; otherwise, the behavior is
10543 undefined.
10545 The optional ``!invariant.group`` metadata must reference a single metadata name
10546  ``<empty_node>`` corresponding to a metadata node with no entries.
10547  See ``invariant.group`` metadata :ref:`invariant.group <md_invariant.group>`.
10549 The optional ``!nonnull`` metadata must reference a single
10550 metadata name ``<empty_node>`` corresponding to a metadata node with no
10551 entries. The existence of the ``!nonnull`` metadata on the
10552 instruction tells the optimizer that the value loaded is known to
10553 never be null. If the value is null at runtime, a poison value is returned
10554 instead.  This is analogous to the ``nonnull`` attribute on parameters and
10555 return values. This metadata can only be applied to loads of a pointer type.
10557 The optional ``!dereferenceable`` metadata must reference a single metadata
10558 name ``<deref_bytes_node>`` corresponding to a metadata node with one ``i64``
10559 entry.
10560 See ``dereferenceable`` metadata :ref:`dereferenceable <md_dereferenceable>`.
10562 The optional ``!dereferenceable_or_null`` metadata must reference a single
10563 metadata name ``<deref_bytes_node>`` corresponding to a metadata node with one
10564 ``i64`` entry.
10565 See ``dereferenceable_or_null`` metadata :ref:`dereferenceable_or_null
10566 <md_dereferenceable_or_null>`.
10568 The optional ``!align`` metadata must reference a single metadata name
10569 ``<align_node>`` corresponding to a metadata node with one ``i64`` entry.
10570 The existence of the ``!align`` metadata on the instruction tells the
10571 optimizer that the value loaded is known to be aligned to a boundary specified
10572 by the integer value in the metadata node. The alignment must be a power of 2.
10573 This is analogous to the ''align'' attribute on parameters and return values.
10574 This metadata can only be applied to loads of a pointer type. If the returned
10575 value is not appropriately aligned at runtime, a poison value is returned
10576 instead.
10578 The optional ``!noundef`` metadata must reference a single metadata name
10579 ``<empty_node>`` corresponding to a node with no entries. The existence of
10580 ``!noundef`` metadata on the instruction tells the optimizer that the value
10581 loaded is known to be :ref:`well defined <welldefinedvalues>`.
10582 If the value isn't well defined, the behavior is undefined. If the ``!noundef``
10583 metadata is combined with poison-generating metadata like ``!nonnull``,
10584 violation of that metadata constraint will also result in undefined behavior.
10586 Semantics:
10587 """"""""""
10589 The location of memory pointed to is loaded. If the value being loaded
10590 is of scalar type then the number of bytes read does not exceed the
10591 minimum number of bytes needed to hold all bits of the type. For
10592 example, loading an ``i24`` reads at most three bytes. When loading a
10593 value of a type like ``i20`` with a size that is not an integral number
10594 of bytes, the result is undefined if the value was not originally
10595 written using a store of the same type.
10596 If the value being loaded is of aggregate type, the bytes that correspond to
10597 padding may be accessed but are ignored, because it is impossible to observe
10598 padding from the loaded aggregate value.
10599 If ``<pointer>`` is not a well-defined value, the behavior is undefined.
10601 Examples:
10602 """""""""
10604 .. code-block:: llvm
10606       %ptr = alloca i32                               ; yields ptr
10607       store i32 3, ptr %ptr                           ; yields void
10608       %val = load i32, ptr %ptr                       ; yields i32:val = i32 3
10610 .. _i_store:
10612 '``store``' Instruction
10613 ^^^^^^^^^^^^^^^^^^^^^^^
10615 Syntax:
10616 """""""
10620       store [volatile] <ty> <value>, ptr <pointer>[, align <alignment>][, !nontemporal !<nontemp_node>][, !invariant.group !<empty_node>]        ; yields void
10621       store atomic [volatile] <ty> <value>, ptr <pointer> [syncscope("<target-scope>")] <ordering>, align <alignment> [, !invariant.group !<empty_node>] ; yields void
10622       !<nontemp_node> = !{ i32 1 }
10623       !<empty_node> = !{}
10625 Overview:
10626 """""""""
10628 The '``store``' instruction is used to write to memory.
10630 Arguments:
10631 """"""""""
10633 There are two arguments to the ``store`` instruction: a value to store and an
10634 address at which to store it. The type of the ``<pointer>`` operand must be a
10635 pointer to the :ref:`first class <t_firstclass>` type of the ``<value>``
10636 operand. If the ``store`` is marked as ``volatile``, then the optimizer is not
10637 allowed to modify the number or order of execution of this ``store`` with other
10638 :ref:`volatile operations <volatile>`.  Only values of :ref:`first class
10639 <t_firstclass>` types of known size (i.e. not containing an :ref:`opaque
10640 structural type <t_opaque>`) can be stored.
10642 If the ``store`` is marked as ``atomic``, it takes an extra :ref:`ordering
10643 <ordering>` and optional ``syncscope("<target-scope>")`` argument. The
10644 ``acquire`` and ``acq_rel`` orderings aren't valid on ``store`` instructions.
10645 Atomic loads produce :ref:`defined <memmodel>` results when they may see
10646 multiple atomic stores. The type of the pointee must be an integer, pointer, or
10647 floating-point type whose bit width is a power of two greater than or equal to
10648 eight and less than or equal to a target-specific size limit.  ``align`` must be
10649 explicitly specified on atomic stores, and the store has undefined behavior if
10650 the alignment is not set to a value which is at least the size in bytes of the
10651 pointee. ``!nontemporal`` does not have any defined semantics for atomic stores.
10653 The optional constant ``align`` argument specifies the alignment of the
10654 operation (that is, the alignment of the memory address). It is the
10655 responsibility of the code emitter to ensure that the alignment information is
10656 correct. Overestimating the alignment results in undefined behavior.
10657 Underestimating the alignment may produce less efficient code. An alignment of
10658 1 is always safe. The maximum possible alignment is ``1 << 32``. An alignment
10659 value higher than the size of the loaded type implies memory up to the
10660 alignment value bytes can be safely loaded without trapping in the default
10661 address space. Access of the high bytes can interfere with debugging tools, so
10662 should not be accessed if the function has the ``sanitize_thread`` or
10663 ``sanitize_address`` attributes.
10665 The alignment is only optional when parsing textual IR; for in-memory IR, it is
10666 always present. An omitted ``align`` argument means that the operation has the
10667 ABI alignment for the target.
10669 The optional ``!nontemporal`` metadata must reference a single metadata
10670 name ``<nontemp_node>`` corresponding to a metadata node with one ``i32`` entry
10671 of value 1. The existence of the ``!nontemporal`` metadata on the instruction
10672 tells the optimizer and code generator that this load is not expected to
10673 be reused in the cache. The code generator may select special
10674 instructions to save cache bandwidth, such as the ``MOVNT`` instruction on
10675 x86.
10677 The optional ``!invariant.group`` metadata must reference a
10678 single metadata name ``<empty_node>``. See ``invariant.group`` metadata.
10680 Semantics:
10681 """"""""""
10683 The contents of memory are updated to contain ``<value>`` at the
10684 location specified by the ``<pointer>`` operand. If ``<value>`` is
10685 of scalar type then the number of bytes written does not exceed the
10686 minimum number of bytes needed to hold all bits of the type. For
10687 example, storing an ``i24`` writes at most three bytes. When writing a
10688 value of a type like ``i20`` with a size that is not an integral number
10689 of bytes, it is unspecified what happens to the extra bits that do not
10690 belong to the type, but they will typically be overwritten.
10691 If ``<value>`` is of aggregate type, padding is filled with
10692 :ref:`undef <undefvalues>`.
10693 If ``<pointer>`` is not a well-defined value, the behavior is undefined.
10695 Example:
10696 """"""""
10698 .. code-block:: llvm
10700       %ptr = alloca i32                               ; yields ptr
10701       store i32 3, ptr %ptr                           ; yields void
10702       %val = load i32, ptr %ptr                       ; yields i32:val = i32 3
10704 .. _i_fence:
10706 '``fence``' Instruction
10707 ^^^^^^^^^^^^^^^^^^^^^^^
10709 Syntax:
10710 """""""
10714       fence [syncscope("<target-scope>")] <ordering>  ; yields void
10716 Overview:
10717 """""""""
10719 The '``fence``' instruction is used to introduce happens-before edges
10720 between operations.
10722 Arguments:
10723 """"""""""
10725 '``fence``' instructions take an :ref:`ordering <ordering>` argument which
10726 defines what *synchronizes-with* edges they add. They can only be given
10727 ``acquire``, ``release``, ``acq_rel``, and ``seq_cst`` orderings.
10729 Semantics:
10730 """"""""""
10732 A fence A which has (at least) ``release`` ordering semantics
10733 *synchronizes with* a fence B with (at least) ``acquire`` ordering
10734 semantics if and only if there exist atomic operations X and Y, both
10735 operating on some atomic object M, such that A is sequenced before X, X
10736 modifies M (either directly or through some side effect of a sequence
10737 headed by X), Y is sequenced before B, and Y observes M. This provides a
10738 *happens-before* dependency between A and B. Rather than an explicit
10739 ``fence``, one (but not both) of the atomic operations X or Y might
10740 provide a ``release`` or ``acquire`` (resp.) ordering constraint and
10741 still *synchronize-with* the explicit ``fence`` and establish the
10742 *happens-before* edge.
10744 A ``fence`` which has ``seq_cst`` ordering, in addition to having both
10745 ``acquire`` and ``release`` semantics specified above, participates in
10746 the global program order of other ``seq_cst`` operations and/or fences.
10748 A ``fence`` instruction can also take an optional
10749 ":ref:`syncscope <syncscope>`" argument.
10751 Example:
10752 """"""""
10754 .. code-block:: text
10756       fence acquire                                        ; yields void
10757       fence syncscope("singlethread") seq_cst              ; yields void
10758       fence syncscope("agent") seq_cst                     ; yields void
10760 .. _i_cmpxchg:
10762 '``cmpxchg``' Instruction
10763 ^^^^^^^^^^^^^^^^^^^^^^^^^
10765 Syntax:
10766 """""""
10770       cmpxchg [weak] [volatile] ptr <pointer>, <ty> <cmp>, <ty> <new> [syncscope("<target-scope>")] <success ordering> <failure ordering>[, align <alignment>] ; yields  { ty, i1 }
10772 Overview:
10773 """""""""
10775 The '``cmpxchg``' instruction is used to atomically modify memory. It
10776 loads a value in memory and compares it to a given value. If they are
10777 equal, it tries to store a new value into the memory.
10779 Arguments:
10780 """"""""""
10782 There are three arguments to the '``cmpxchg``' instruction: an address
10783 to operate on, a value to compare to the value currently be at that
10784 address, and a new value to place at that address if the compared values
10785 are equal. The type of '<cmp>' must be an integer or pointer type whose
10786 bit width is a power of two greater than or equal to eight and less
10787 than or equal to a target-specific size limit. '<cmp>' and '<new>' must
10788 have the same type, and the type of '<pointer>' must be a pointer to
10789 that type. If the ``cmpxchg`` is marked as ``volatile``, then the
10790 optimizer is not allowed to modify the number or order of execution of
10791 this ``cmpxchg`` with other :ref:`volatile operations <volatile>`.
10793 The success and failure :ref:`ordering <ordering>` arguments specify how this
10794 ``cmpxchg`` synchronizes with other atomic operations. Both ordering parameters
10795 must be at least ``monotonic``, the failure ordering cannot be either
10796 ``release`` or ``acq_rel``.
10798 A ``cmpxchg`` instruction can also take an optional
10799 ":ref:`syncscope <syncscope>`" argument.
10801 The alignment must be a power of two greater or equal to the size of the
10802 `<value>` type.
10804 The alignment is only optional when parsing textual IR; for in-memory IR, it is
10805 always present. If unspecified, the alignment is assumed to be equal to the
10806 size of the '<value>' type. Note that this default alignment assumption is
10807 different from the alignment used for the load/store instructions when align
10808 isn't specified.
10810 The pointer passed into cmpxchg must have alignment greater than or
10811 equal to the size in memory of the operand.
10813 Semantics:
10814 """"""""""
10816 The contents of memory at the location specified by the '``<pointer>``' operand
10817 is read and compared to '``<cmp>``'; if the values are equal, '``<new>``' is
10818 written to the location. The original value at the location is returned,
10819 together with a flag indicating success (true) or failure (false).
10821 If the cmpxchg operation is marked as ``weak`` then a spurious failure is
10822 permitted: the operation may not write ``<new>`` even if the comparison
10823 matched.
10825 If the cmpxchg operation is strong (the default), the i1 value is 1 if and only
10826 if the value loaded equals ``cmp``.
10828 A successful ``cmpxchg`` is a read-modify-write instruction for the purpose of
10829 identifying release sequences. A failed ``cmpxchg`` is equivalent to an atomic
10830 load with an ordering parameter determined the second ordering parameter.
10832 Example:
10833 """"""""
10835 .. code-block:: llvm
10837     entry:
10838       %orig = load atomic i32, ptr %ptr unordered, align 4                      ; yields i32
10839       br label %loop
10841     loop:
10842       %cmp = phi i32 [ %orig, %entry ], [%value_loaded, %loop]
10843       %squared = mul i32 %cmp, %cmp
10844       %val_success = cmpxchg ptr %ptr, i32 %cmp, i32 %squared acq_rel monotonic ; yields  { i32, i1 }
10845       %value_loaded = extractvalue { i32, i1 } %val_success, 0
10846       %success = extractvalue { i32, i1 } %val_success, 1
10847       br i1 %success, label %done, label %loop
10849     done:
10850       ...
10852 .. _i_atomicrmw:
10854 '``atomicrmw``' Instruction
10855 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
10857 Syntax:
10858 """""""
10862       atomicrmw [volatile] <operation> ptr <pointer>, <ty> <value> [syncscope("<target-scope>")] <ordering>[, align <alignment>]  ; yields ty
10864 Overview:
10865 """""""""
10867 The '``atomicrmw``' instruction is used to atomically modify memory.
10869 Arguments:
10870 """"""""""
10872 There are three arguments to the '``atomicrmw``' instruction: an
10873 operation to apply, an address whose value to modify, an argument to the
10874 operation. The operation must be one of the following keywords:
10876 -  xchg
10877 -  add
10878 -  sub
10879 -  and
10880 -  nand
10881 -  or
10882 -  xor
10883 -  max
10884 -  min
10885 -  umax
10886 -  umin
10887 -  fadd
10888 -  fsub
10889 -  fmax
10890 -  fmin
10891 -  uinc_wrap
10892 -  udec_wrap
10894 For most of these operations, the type of '<value>' must be an integer
10895 type whose bit width is a power of two greater than or equal to eight
10896 and less than or equal to a target-specific size limit. For xchg, this
10897 may also be a floating point or a pointer type with the same size constraints
10898 as integers.  For fadd/fsub/fmax/fmin, this must be a floating point type.  The
10899 type of the '``<pointer>``' operand must be a pointer to that type. If
10900 the ``atomicrmw`` is marked as ``volatile``, then the optimizer is not
10901 allowed to modify the number or order of execution of this
10902 ``atomicrmw`` with other :ref:`volatile operations <volatile>`.
10904 The alignment must be a power of two greater or equal to the size of the
10905 `<value>` type.
10907 The alignment is only optional when parsing textual IR; for in-memory IR, it is
10908 always present. If unspecified, the alignment is assumed to be equal to the
10909 size of the '<value>' type. Note that this default alignment assumption is
10910 different from the alignment used for the load/store instructions when align
10911 isn't specified.
10913 A ``atomicrmw`` instruction can also take an optional
10914 ":ref:`syncscope <syncscope>`" argument.
10916 Semantics:
10917 """"""""""
10919 The contents of memory at the location specified by the '``<pointer>``'
10920 operand are atomically read, modified, and written back. The original
10921 value at the location is returned. The modification is specified by the
10922 operation argument:
10924 -  xchg: ``*ptr = val``
10925 -  add: ``*ptr = *ptr + val``
10926 -  sub: ``*ptr = *ptr - val``
10927 -  and: ``*ptr = *ptr & val``
10928 -  nand: ``*ptr = ~(*ptr & val)``
10929 -  or: ``*ptr = *ptr | val``
10930 -  xor: ``*ptr = *ptr ^ val``
10931 -  max: ``*ptr = *ptr > val ? *ptr : val`` (using a signed comparison)
10932 -  min: ``*ptr = *ptr < val ? *ptr : val`` (using a signed comparison)
10933 -  umax: ``*ptr = *ptr > val ? *ptr : val`` (using an unsigned comparison)
10934 -  umin: ``*ptr = *ptr < val ? *ptr : val`` (using an unsigned comparison)
10935 - fadd: ``*ptr = *ptr + val`` (using floating point arithmetic)
10936 - fsub: ``*ptr = *ptr - val`` (using floating point arithmetic)
10937 -  fmax: ``*ptr = maxnum(*ptr, val)`` (match the `llvm.maxnum.*`` intrinsic)
10938 -  fmin: ``*ptr = minnum(*ptr, val)`` (match the `llvm.minnum.*`` intrinsic)
10939 -  uinc_wrap: ``*ptr = (*ptr u>= val) ? 0 : (*ptr + 1)`` (increment value with wraparound to zero when incremented above input value)
10940 -  udec_wrap: ``*ptr = ((*ptr == 0) || (*ptr u> val)) ? val : (*ptr - 1)`` (decrement with wraparound to input value when decremented below zero).
10943 Example:
10944 """"""""
10946 .. code-block:: llvm
10948       %old = atomicrmw add ptr %ptr, i32 1 acquire                        ; yields i32
10950 .. _i_getelementptr:
10952 '``getelementptr``' Instruction
10953 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10955 Syntax:
10956 """""""
10960       <result> = getelementptr <ty>, ptr <ptrval>{, [inrange] <ty> <idx>}*
10961       <result> = getelementptr inbounds <ty>, ptr <ptrval>{, [inrange] <ty> <idx>}*
10962       <result> = getelementptr <ty>, <N x ptr> <ptrval>, [inrange] <vector index type> <idx>
10964 Overview:
10965 """""""""
10967 The '``getelementptr``' instruction is used to get the address of a
10968 subelement of an :ref:`aggregate <t_aggregate>` data structure. It performs
10969 address calculation only and does not access memory. The instruction can also
10970 be used to calculate a vector of such addresses.
10972 Arguments:
10973 """"""""""
10975 The first argument is always a type used as the basis for the calculations.
10976 The second argument is always a pointer or a vector of pointers, and is the
10977 base address to start from. The remaining arguments are indices
10978 that indicate which of the elements of the aggregate object are indexed.
10979 The interpretation of each index is dependent on the type being indexed
10980 into. The first index always indexes the pointer value given as the
10981 second argument, the second index indexes a value of the type pointed to
10982 (not necessarily the value directly pointed to, since the first index
10983 can be non-zero), etc. The first type indexed into must be a pointer
10984 value, subsequent types can be arrays, vectors, and structs. Note that
10985 subsequent types being indexed into can never be pointers, since that
10986 would require loading the pointer before continuing calculation.
10988 The type of each index argument depends on the type it is indexing into.
10989 When indexing into a (optionally packed) structure, only ``i32`` integer
10990 **constants** are allowed (when using a vector of indices they must all
10991 be the **same** ``i32`` integer constant). When indexing into an array,
10992 pointer or vector, integers of any width are allowed, and they are not
10993 required to be constant. These integers are treated as signed values
10994 where relevant.
10996 For example, let's consider a C code fragment and how it gets compiled
10997 to LLVM:
10999 .. code-block:: c
11001     struct RT {
11002       char A;
11003       int B[10][20];
11004       char C;
11005     };
11006     struct ST {
11007       int X;
11008       double Y;
11009       struct RT Z;
11010     };
11012     int *foo(struct ST *s) {
11013       return &s[1].Z.B[5][13];
11014     }
11016 The LLVM code generated by Clang is approximately:
11018 .. code-block:: llvm
11020     %struct.RT = type { i8, [10 x [20 x i32]], i8 }
11021     %struct.ST = type { i32, double, %struct.RT }
11023     define ptr @foo(ptr %s) {
11024     entry:
11025       %arrayidx = getelementptr inbounds %struct.ST, ptr %s, i64 1, i32 2, i32 1, i64 5, i64 13
11026       ret ptr %arrayidx
11027     }
11029 Semantics:
11030 """"""""""
11032 In the example above, the first index is indexing into the
11033 '``%struct.ST*``' type, which is a pointer, yielding a '``%struct.ST``'
11034 = '``{ i32, double, %struct.RT }``' type, a structure. The second index
11035 indexes into the third element of the structure, yielding a
11036 '``%struct.RT``' = '``{ i8 , [10 x [20 x i32]], i8 }``' type, another
11037 structure. The third index indexes into the second element of the
11038 structure, yielding a '``[10 x [20 x i32]]``' type, an array. The two
11039 dimensions of the array are subscripted into, yielding an '``i32``'
11040 type. The '``getelementptr``' instruction returns a pointer to this
11041 element.
11043 Note that it is perfectly legal to index partially through a structure,
11044 returning a pointer to an inner element. Because of this, the LLVM code
11045 for the given testcase is equivalent to:
11047 .. code-block:: llvm
11049     define ptr @foo(ptr %s) {
11050       %t1 = getelementptr %struct.ST, ptr %s, i32 1
11051       %t2 = getelementptr %struct.ST, ptr %t1, i32 0, i32 2
11052       %t3 = getelementptr %struct.RT, ptr %t2, i32 0, i32 1
11053       %t4 = getelementptr [10 x [20 x i32]], ptr %t3, i32 0, i32 5
11054       %t5 = getelementptr [20 x i32], ptr %t4, i32 0, i32 13
11055       ret ptr %t5
11056     }
11058 The indices are first converted to offsets in the pointer's index type. If the
11059 currently indexed type is a struct type, the struct offset corresponding to the
11060 index is sign-extended or truncated to the pointer index type. Otherwise, the
11061 index itself is sign-extended or truncated, and then multiplied by the type
11062 allocation size (that is, the size rounded up to the ABI alignment) of the
11063 currently indexed type.
11065 The offsets are then added to the low bits of the base address up to the index
11066 type width, with silently-wrapping two's complement arithmetic. If the pointer
11067 size is larger than the index size, this means that the bits outside the index
11068 type width will not be affected.
11070 The result value of the ``getelementptr`` may be outside the object pointed
11071 to by the base pointer. The result value may not necessarily be used to access
11072 memory though, even if it happens to point into allocated storage. See the
11073 :ref:`Pointer Aliasing Rules <pointeraliasing>` section for more
11074 information.
11076 If the ``inbounds`` keyword is present, the result value of a
11077 ``getelementptr`` with any non-zero indices is a
11078 :ref:`poison value <poisonvalues>` if one of the following rules is violated:
11080 *  The base pointer has an *in bounds* address of an allocated object, which
11081    means that it points into an allocated object, or to its end. Note that the
11082    object does not have to be live anymore; being in-bounds of a deallocated
11083    object is sufficient.
11084 *  If the type of an index is larger than the pointer index type, the
11085    truncation to the pointer index type preserves the signed value.
11086 *  The multiplication of an index by the type size does not wrap the pointer
11087    index type in a signed sense (``nsw``).
11088 *  The successive addition of each offset (without adding the base address) does
11089    not wrap the pointer index type in a signed sense (``nsw``).
11090 *  The successive addition of the current address, interpreted as an unsigned
11091    number, and each offset, interpreted as a signed number, does not wrap the
11092    unsigned address space and remains *in bounds* of the allocated object.
11093    As a corollary, if the added offset is non-negative, the addition does not
11094    wrap in an unsigned sense (``nuw``).
11095 *  In cases where the base is a vector of pointers, the ``inbounds`` keyword
11096    applies to each of the computations element-wise.
11098 Note that ``getelementptr`` with all-zero indices is always considered to be
11099 ``inbounds``, even if the base pointer does not point to an allocated object.
11100 As a corollary, the only pointer in bounds of the null pointer in the default
11101 address space is the null pointer itself.
11103 These rules are based on the assumption that no allocated object may cross
11104 the unsigned address space boundary, and no allocated object may be larger
11105 than half the pointer index type space.
11107 If the ``inrange`` keyword is present before any index, loading from or
11108 storing to any pointer derived from the ``getelementptr`` has undefined
11109 behavior if the load or store would access memory outside of the bounds of
11110 the element selected by the index marked as ``inrange``. The result of a
11111 pointer comparison or ``ptrtoint`` (including ``ptrtoint``-like operations
11112 involving memory) involving a pointer derived from a ``getelementptr`` with
11113 the ``inrange`` keyword is undefined, with the exception of comparisons
11114 in the case where both operands are in the range of the element selected
11115 by the ``inrange`` keyword, inclusive of the address one past the end of
11116 that element. Note that the ``inrange`` keyword is currently only allowed
11117 in constant ``getelementptr`` expressions.
11119 The getelementptr instruction is often confusing. For some more insight
11120 into how it works, see :doc:`the getelementptr FAQ <GetElementPtr>`.
11122 Example:
11123 """"""""
11125 .. code-block:: llvm
11127         %aptr = getelementptr {i32, [12 x i8]}, ptr %saptr, i64 0, i32 1
11128         %vptr = getelementptr {i32, <2 x i8>}, ptr %svptr, i64 0, i32 1, i32 1
11129         %eptr = getelementptr [12 x i8], ptr %aptr, i64 0, i32 1
11130         %iptr = getelementptr [10 x i32], ptr @arr, i16 0, i16 0
11132 Vector of pointers:
11133 """""""""""""""""""
11135 The ``getelementptr`` returns a vector of pointers, instead of a single address,
11136 when one or more of its arguments is a vector. In such cases, all vector
11137 arguments should have the same number of elements, and every scalar argument
11138 will be effectively broadcast into a vector during address calculation.
11140 .. code-block:: llvm
11142      ; All arguments are vectors:
11143      ;   A[i] = ptrs[i] + offsets[i]*sizeof(i8)
11144      %A = getelementptr i8, <4 x i8*> %ptrs, <4 x i64> %offsets
11146      ; Add the same scalar offset to each pointer of a vector:
11147      ;   A[i] = ptrs[i] + offset*sizeof(i8)
11148      %A = getelementptr i8, <4 x ptr> %ptrs, i64 %offset
11150      ; Add distinct offsets to the same pointer:
11151      ;   A[i] = ptr + offsets[i]*sizeof(i8)
11152      %A = getelementptr i8, ptr %ptr, <4 x i64> %offsets
11154      ; In all cases described above the type of the result is <4 x ptr>
11156 The two following instructions are equivalent:
11158 .. code-block:: llvm
11160      getelementptr  %struct.ST, <4 x ptr> %s, <4 x i64> %ind1,
11161        <4 x i32> <i32 2, i32 2, i32 2, i32 2>,
11162        <4 x i32> <i32 1, i32 1, i32 1, i32 1>,
11163        <4 x i32> %ind4,
11164        <4 x i64> <i64 13, i64 13, i64 13, i64 13>
11166      getelementptr  %struct.ST, <4 x ptr> %s, <4 x i64> %ind1,
11167        i32 2, i32 1, <4 x i32> %ind4, i64 13
11169 Let's look at the C code, where the vector version of ``getelementptr``
11170 makes sense:
11172 .. code-block:: c
11174     // Let's assume that we vectorize the following loop:
11175     double *A, *B; int *C;
11176     for (int i = 0; i < size; ++i) {
11177       A[i] = B[C[i]];
11178     }
11180 .. code-block:: llvm
11182     ; get pointers for 8 elements from array B
11183     %ptrs = getelementptr double, ptr %B, <8 x i32> %C
11184     ; load 8 elements from array B into A
11185     %A = call <8 x double> @llvm.masked.gather.v8f64.v8p0f64(<8 x ptr> %ptrs,
11186          i32 8, <8 x i1> %mask, <8 x double> %passthru)
11188 Conversion Operations
11189 ---------------------
11191 The instructions in this category are the conversion instructions
11192 (casting) which all take a single operand and a type. They perform
11193 various bit conversions on the operand.
11195 .. _i_trunc:
11197 '``trunc .. to``' Instruction
11198 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11200 Syntax:
11201 """""""
11205       <result> = trunc <ty> <value> to <ty2>             ; yields ty2
11207 Overview:
11208 """""""""
11210 The '``trunc``' instruction truncates its operand to the type ``ty2``.
11212 Arguments:
11213 """"""""""
11215 The '``trunc``' instruction takes a value to trunc, and a type to trunc
11216 it to. Both types must be of :ref:`integer <t_integer>` types, or vectors
11217 of the same number of integers. The bit size of the ``value`` must be
11218 larger than the bit size of the destination type, ``ty2``. Equal sized
11219 types are not allowed.
11221 Semantics:
11222 """"""""""
11224 The '``trunc``' instruction truncates the high order bits in ``value``
11225 and converts the remaining bits to ``ty2``. Since the source size must
11226 be larger than the destination size, ``trunc`` cannot be a *no-op cast*.
11227 It will always truncate bits.
11229 Example:
11230 """"""""
11232 .. code-block:: llvm
11234       %X = trunc i32 257 to i8                        ; yields i8:1
11235       %Y = trunc i32 123 to i1                        ; yields i1:true
11236       %Z = trunc i32 122 to i1                        ; yields i1:false
11237       %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> ; yields <i8 8, i8 7>
11239 .. _i_zext:
11241 '``zext .. to``' Instruction
11242 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11244 Syntax:
11245 """""""
11249       <result> = zext <ty> <value> to <ty2>             ; yields ty2
11251 Overview:
11252 """""""""
11254 The '``zext``' instruction zero extends its operand to type ``ty2``.
11256 The ``nneg`` (non-negative) flag, if present, specifies that the operand is
11257 non-negative. This property may be used by optimization passes to later
11258 convert the ``zext`` into a ``sext``.
11260 Arguments:
11261 """"""""""
11263 The '``zext``' instruction takes a value to cast, and a type to cast it
11264 to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
11265 the same number of integers. The bit size of the ``value`` must be
11266 smaller than the bit size of the destination type, ``ty2``.
11268 Semantics:
11269 """"""""""
11271 The ``zext`` fills the high order bits of the ``value`` with zero bits
11272 until it reaches the size of the destination type, ``ty2``.
11274 When zero extending from i1, the result will always be either 0 or 1.
11276 If the ``nneg`` flag is set, and the ``zext`` argument is negative, the result
11277 is a poison value.
11279 Example:
11280 """"""""
11282 .. code-block:: llvm
11284       %X = zext i32 257 to i64              ; yields i64:257
11285       %Y = zext i1 true to i32              ; yields i32:1
11286       %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
11288       %a = zext nneg i8 127 to i16 ; yields i16 127
11289       %b = zext nneg i8 -1 to i16  ; yields i16 poison
11291 .. _i_sext:
11293 '``sext .. to``' Instruction
11294 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11296 Syntax:
11297 """""""
11301       <result> = sext <ty> <value> to <ty2>             ; yields ty2
11303 Overview:
11304 """""""""
11306 The '``sext``' sign extends ``value`` to the type ``ty2``.
11308 Arguments:
11309 """"""""""
11311 The '``sext``' instruction takes a value to cast, and a type to cast it
11312 to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
11313 the same number of integers. The bit size of the ``value`` must be
11314 smaller than the bit size of the destination type, ``ty2``.
11316 Semantics:
11317 """"""""""
11319 The '``sext``' instruction performs a sign extension by copying the sign
11320 bit (highest order bit) of the ``value`` until it reaches the bit size
11321 of the type ``ty2``.
11323 When sign extending from i1, the extension always results in -1 or 0.
11325 Example:
11326 """"""""
11328 .. code-block:: llvm
11330       %X = sext i8  -1 to i16              ; yields i16   :65535
11331       %Y = sext i1 true to i32             ; yields i32:-1
11332       %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
11334 '``fptrunc .. to``' Instruction
11335 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11337 Syntax:
11338 """""""
11342       <result> = fptrunc <ty> <value> to <ty2>             ; yields ty2
11344 Overview:
11345 """""""""
11347 The '``fptrunc``' instruction truncates ``value`` to type ``ty2``.
11349 Arguments:
11350 """"""""""
11352 The '``fptrunc``' instruction takes a :ref:`floating-point <t_floating>`
11353 value to cast and a :ref:`floating-point <t_floating>` type to cast it to.
11354 The size of ``value`` must be larger than the size of ``ty2``. This
11355 implies that ``fptrunc`` cannot be used to make a *no-op cast*.
11357 Semantics:
11358 """"""""""
11360 The '``fptrunc``' instruction casts a ``value`` from a larger
11361 :ref:`floating-point <t_floating>` type to a smaller :ref:`floating-point
11362 <t_floating>` type.
11363 This instruction is assumed to execute in the default :ref:`floating-point
11364 environment <floatenv>`.
11366 NaN values follow the usual :ref:`NaN behaviors <floatnan>`, except that _if_ a
11367 NaN payload is propagated from the input ("Quieting NaN propagation" or
11368 "Unchanged NaN propagation" cases), then the low order bits of the NaN payload
11369 which cannot fit in the resulting type are discarded. Note that if discarding
11370 the low order bits leads to an all-0 payload, this cannot be represented as a
11371 signaling NaN (it would represent an infinity instead), so in that case
11372 "Unchanged NaN propagation" is not possible.
11374 Example:
11375 """"""""
11377 .. code-block:: llvm
11379       %X = fptrunc double 16777217.0 to float    ; yields float:16777216.0
11380       %Y = fptrunc double 1.0E+300 to half       ; yields half:+infinity
11382 '``fpext .. to``' Instruction
11383 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11385 Syntax:
11386 """""""
11390       <result> = fpext <ty> <value> to <ty2>             ; yields ty2
11392 Overview:
11393 """""""""
11395 The '``fpext``' extends a floating-point ``value`` to a larger floating-point
11396 value.
11398 Arguments:
11399 """"""""""
11401 The '``fpext``' instruction takes a :ref:`floating-point <t_floating>`
11402 ``value`` to cast, and a :ref:`floating-point <t_floating>` type to cast it
11403 to. The source type must be smaller than the destination type.
11405 Semantics:
11406 """"""""""
11408 The '``fpext``' instruction extends the ``value`` from a smaller
11409 :ref:`floating-point <t_floating>` type to a larger :ref:`floating-point
11410 <t_floating>` type. The ``fpext`` cannot be used to make a
11411 *no-op cast* because it always changes bits. Use ``bitcast`` to make a
11412 *no-op cast* for a floating-point cast.
11414 NaN values follow the usual :ref:`NaN behaviors <floatnan>`, except that _if_ a
11415 NaN payload is propagated from the input ("Quieting NaN propagation" or
11416 "Unchanged NaN propagation" cases), then it is copied to the high order bits of
11417 the resulting payload, and the remaining low order bits are zero.
11419 Example:
11420 """"""""
11422 .. code-block:: llvm
11424       %X = fpext float 3.125 to double         ; yields double:3.125000e+00
11425       %Y = fpext double %X to fp128            ; yields fp128:0xL00000000000000004000900000000000
11427 '``fptoui .. to``' Instruction
11428 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11430 Syntax:
11431 """""""
11435       <result> = fptoui <ty> <value> to <ty2>             ; yields ty2
11437 Overview:
11438 """""""""
11440 The '``fptoui``' converts a floating-point ``value`` to its unsigned
11441 integer equivalent of type ``ty2``.
11443 Arguments:
11444 """"""""""
11446 The '``fptoui``' instruction takes a value to cast, which must be a
11447 scalar or vector :ref:`floating-point <t_floating>` value, and a type to
11448 cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
11449 ``ty`` is a vector floating-point type, ``ty2`` must be a vector integer
11450 type with the same number of elements as ``ty``
11452 Semantics:
11453 """"""""""
11455 The '``fptoui``' instruction converts its :ref:`floating-point
11456 <t_floating>` operand into the nearest (rounding towards zero)
11457 unsigned integer value. If the value cannot fit in ``ty2``, the result
11458 is a :ref:`poison value <poisonvalues>`.
11460 Example:
11461 """"""""
11463 .. code-block:: llvm
11465       %X = fptoui double 123.0 to i32      ; yields i32:123
11466       %Y = fptoui float 1.0E+300 to i1     ; yields undefined:1
11467       %Z = fptoui float 1.04E+17 to i8     ; yields undefined:1
11469 '``fptosi .. to``' Instruction
11470 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11472 Syntax:
11473 """""""
11477       <result> = fptosi <ty> <value> to <ty2>             ; yields ty2
11479 Overview:
11480 """""""""
11482 The '``fptosi``' instruction converts :ref:`floating-point <t_floating>`
11483 ``value`` to type ``ty2``.
11485 Arguments:
11486 """"""""""
11488 The '``fptosi``' instruction takes a value to cast, which must be a
11489 scalar or vector :ref:`floating-point <t_floating>` value, and a type to
11490 cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
11491 ``ty`` is a vector floating-point type, ``ty2`` must be a vector integer
11492 type with the same number of elements as ``ty``
11494 Semantics:
11495 """"""""""
11497 The '``fptosi``' instruction converts its :ref:`floating-point
11498 <t_floating>` operand into the nearest (rounding towards zero)
11499 signed integer value. If the value cannot fit in ``ty2``, the result
11500 is a :ref:`poison value <poisonvalues>`.
11502 Example:
11503 """"""""
11505 .. code-block:: llvm
11507       %X = fptosi double -123.0 to i32      ; yields i32:-123
11508       %Y = fptosi float 1.0E-247 to i1      ; yields undefined:1
11509       %Z = fptosi float 1.04E+17 to i8      ; yields undefined:1
11511 '``uitofp .. to``' Instruction
11512 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11514 Syntax:
11515 """""""
11519       <result> = uitofp <ty> <value> to <ty2>             ; yields ty2
11521 Overview:
11522 """""""""
11524 The '``uitofp``' instruction regards ``value`` as an unsigned integer
11525 and converts that value to the ``ty2`` type.
11527 Arguments:
11528 """"""""""
11530 The '``uitofp``' instruction takes a value to cast, which must be a
11531 scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
11532 ``ty2``, which must be an :ref:`floating-point <t_floating>` type. If
11533 ``ty`` is a vector integer type, ``ty2`` must be a vector floating-point
11534 type with the same number of elements as ``ty``
11536 Semantics:
11537 """"""""""
11539 The '``uitofp``' instruction interprets its operand as an unsigned
11540 integer quantity and converts it to the corresponding floating-point
11541 value. If the value cannot be exactly represented, it is rounded using
11542 the default rounding mode.
11545 Example:
11546 """"""""
11548 .. code-block:: llvm
11550       %X = uitofp i32 257 to float         ; yields float:257.0
11551       %Y = uitofp i8 -1 to double          ; yields double:255.0
11553 '``sitofp .. to``' Instruction
11554 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11556 Syntax:
11557 """""""
11561       <result> = sitofp <ty> <value> to <ty2>             ; yields ty2
11563 Overview:
11564 """""""""
11566 The '``sitofp``' instruction regards ``value`` as a signed integer and
11567 converts that value to the ``ty2`` type.
11569 Arguments:
11570 """"""""""
11572 The '``sitofp``' instruction takes a value to cast, which must be a
11573 scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
11574 ``ty2``, which must be an :ref:`floating-point <t_floating>` type. If
11575 ``ty`` is a vector integer type, ``ty2`` must be a vector floating-point
11576 type with the same number of elements as ``ty``
11578 Semantics:
11579 """"""""""
11581 The '``sitofp``' instruction interprets its operand as a signed integer
11582 quantity and converts it to the corresponding floating-point value. If the
11583 value cannot be exactly represented, it is rounded using the default rounding
11584 mode.
11586 Example:
11587 """"""""
11589 .. code-block:: llvm
11591       %X = sitofp i32 257 to float         ; yields float:257.0
11592       %Y = sitofp i8 -1 to double          ; yields double:-1.0
11594 .. _i_ptrtoint:
11596 '``ptrtoint .. to``' Instruction
11597 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11599 Syntax:
11600 """""""
11604       <result> = ptrtoint <ty> <value> to <ty2>             ; yields ty2
11606 Overview:
11607 """""""""
11609 The '``ptrtoint``' instruction converts the pointer or a vector of
11610 pointers ``value`` to the integer (or vector of integers) type ``ty2``.
11612 Arguments:
11613 """"""""""
11615 The '``ptrtoint``' instruction takes a ``value`` to cast, which must be
11616 a value of type :ref:`pointer <t_pointer>` or a vector of pointers, and a
11617 type to cast it to ``ty2``, which must be an :ref:`integer <t_integer>` or
11618 a vector of integers type.
11620 Semantics:
11621 """"""""""
11623 The '``ptrtoint``' instruction converts ``value`` to integer type
11624 ``ty2`` by interpreting the pointer value as an integer and either
11625 truncating or zero extending that value to the size of the integer type.
11626 If ``value`` is smaller than ``ty2`` then a zero extension is done. If
11627 ``value`` is larger than ``ty2`` then a truncation is done. If they are
11628 the same size, then nothing is done (*no-op cast*) other than a type
11629 change.
11631 Example:
11632 """"""""
11634 .. code-block:: llvm
11636       %X = ptrtoint ptr %P to i8                         ; yields truncation on 32-bit architecture
11637       %Y = ptrtoint ptr %P to i64                        ; yields zero extension on 32-bit architecture
11638       %Z = ptrtoint <4 x ptr> %P to <4 x i64>; yields vector zero extension for a vector of addresses on 32-bit architecture
11640 .. _i_inttoptr:
11642 '``inttoptr .. to``' Instruction
11643 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11645 Syntax:
11646 """""""
11650       <result> = inttoptr <ty> <value> to <ty2>[, !dereferenceable !<deref_bytes_node>][, !dereferenceable_or_null !<deref_bytes_node>]             ; yields ty2
11652 Overview:
11653 """""""""
11655 The '``inttoptr``' instruction converts an integer ``value`` to a
11656 pointer type, ``ty2``.
11658 Arguments:
11659 """"""""""
11661 The '``inttoptr``' instruction takes an :ref:`integer <t_integer>` value to
11662 cast, and a type to cast it to, which must be a :ref:`pointer <t_pointer>`
11663 type.
11665 The optional ``!dereferenceable`` metadata must reference a single metadata
11666 name ``<deref_bytes_node>`` corresponding to a metadata node with one ``i64``
11667 entry.
11668 See ``dereferenceable`` metadata.
11670 The optional ``!dereferenceable_or_null`` metadata must reference a single
11671 metadata name ``<deref_bytes_node>`` corresponding to a metadata node with one
11672 ``i64`` entry.
11673 See ``dereferenceable_or_null`` metadata.
11675 Semantics:
11676 """"""""""
11678 The '``inttoptr``' instruction converts ``value`` to type ``ty2`` by
11679 applying either a zero extension or a truncation depending on the size
11680 of the integer ``value``. If ``value`` is larger than the size of a
11681 pointer then a truncation is done. If ``value`` is smaller than the size
11682 of a pointer then a zero extension is done. If they are the same size,
11683 nothing is done (*no-op cast*).
11685 Example:
11686 """"""""
11688 .. code-block:: llvm
11690       %X = inttoptr i32 255 to ptr           ; yields zero extension on 64-bit architecture
11691       %Y = inttoptr i32 255 to ptr           ; yields no-op on 32-bit architecture
11692       %Z = inttoptr i64 0 to ptr             ; yields truncation on 32-bit architecture
11693       %Z = inttoptr <4 x i32> %G to <4 x ptr>; yields truncation of vector G to four pointers
11695 .. _i_bitcast:
11697 '``bitcast .. to``' Instruction
11698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11700 Syntax:
11701 """""""
11705       <result> = bitcast <ty> <value> to <ty2>             ; yields ty2
11707 Overview:
11708 """""""""
11710 The '``bitcast``' instruction converts ``value`` to type ``ty2`` without
11711 changing any bits.
11713 Arguments:
11714 """"""""""
11716 The '``bitcast``' instruction takes a value to cast, which must be a
11717 non-aggregate first class value, and a type to cast it to, which must
11718 also be a non-aggregate :ref:`first class <t_firstclass>` type. The
11719 bit sizes of ``value`` and the destination type, ``ty2``, must be
11720 identical. If the source type is a pointer, the destination type must
11721 also be a pointer of the same size. This instruction supports bitwise
11722 conversion of vectors to integers and to vectors of other types (as
11723 long as they have the same size).
11725 Semantics:
11726 """"""""""
11728 The '``bitcast``' instruction converts ``value`` to type ``ty2``. It
11729 is always a *no-op cast* because no bits change with this
11730 conversion. The conversion is done as if the ``value`` had been stored
11731 to memory and read back as type ``ty2``. Pointer (or vector of
11732 pointers) types may only be converted to other pointer (or vector of
11733 pointers) types with the same address space through this instruction.
11734 To convert pointers to other types, use the :ref:`inttoptr <i_inttoptr>`
11735 or :ref:`ptrtoint <i_ptrtoint>` instructions first.
11737 There is a caveat for bitcasts involving vector types in relation to
11738 endianness. For example ``bitcast <2 x i8> <value> to i16`` puts element zero
11739 of the vector in the least significant bits of the i16 for little-endian while
11740 element zero ends up in the most significant bits for big-endian.
11742 Example:
11743 """"""""
11745 .. code-block:: text
11747       %X = bitcast i8 255 to i8         ; yields i8 :-1
11748       %Y = bitcast i32* %x to i16*      ; yields i16*:%x
11749       %Z = bitcast <2 x i32> %V to i64; ; yields i64: %V (depends on endianness)
11750       %Z = bitcast <2 x i32*> %V to <2 x i64*> ; yields <2 x i64*>
11752 .. _i_addrspacecast:
11754 '``addrspacecast .. to``' Instruction
11755 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11757 Syntax:
11758 """""""
11762       <result> = addrspacecast <pty> <ptrval> to <pty2>       ; yields pty2
11764 Overview:
11765 """""""""
11767 The '``addrspacecast``' instruction converts ``ptrval`` from ``pty`` in
11768 address space ``n`` to type ``pty2`` in address space ``m``.
11770 Arguments:
11771 """"""""""
11773 The '``addrspacecast``' instruction takes a pointer or vector of pointer value
11774 to cast and a pointer type to cast it to, which must have a different
11775 address space.
11777 Semantics:
11778 """"""""""
11780 The '``addrspacecast``' instruction converts the pointer value
11781 ``ptrval`` to type ``pty2``. It can be a *no-op cast* or a complex
11782 value modification, depending on the target and the address space
11783 pair. Pointer conversions within the same address space must be
11784 performed with the ``bitcast`` instruction. Note that if the address
11785 space conversion produces a dereferenceable result then both result
11786 and operand refer to the same memory location. The conversion must
11787 have no side effects, and must not capture the value of the pointer.
11789 If the source is :ref:`poison <poisonvalues>`, the result is
11790 :ref:`poison <poisonvalues>`.
11792 If the source is not :ref:`poison <poisonvalues>`, and both source and
11793 destination are :ref:`integral pointers <nointptrtype>`, and the
11794 result pointer is dereferenceable, the cast is assumed to be
11795 reversible (i.e. casting the result back to the original address space
11796 should yield the original bit pattern).
11798 Example:
11799 """"""""
11801 .. code-block:: llvm
11803       %X = addrspacecast ptr %x to ptr addrspace(1)
11804       %Y = addrspacecast ptr addrspace(1) %y to ptr addrspace(2)
11805       %Z = addrspacecast <4 x ptr> %z to <4 x ptr addrspace(3)>
11807 .. _otherops:
11809 Other Operations
11810 ----------------
11812 The instructions in this category are the "miscellaneous" instructions,
11813 which defy better classification.
11815 .. _i_icmp:
11817 '``icmp``' Instruction
11818 ^^^^^^^^^^^^^^^^^^^^^^
11820 Syntax:
11821 """""""
11825       <result> = icmp <cond> <ty> <op1>, <op2>   ; yields i1 or <N x i1>:result
11827 Overview:
11828 """""""""
11830 The '``icmp``' instruction returns a boolean value or a vector of
11831 boolean values based on comparison of its two integer, integer vector,
11832 pointer, or pointer vector operands.
11834 Arguments:
11835 """"""""""
11837 The '``icmp``' instruction takes three operands. The first operand is
11838 the condition code indicating the kind of comparison to perform. It is
11839 not a value, just a keyword. The possible condition codes are:
11841 .. _icmp_md_cc:
11843 #. ``eq``: equal
11844 #. ``ne``: not equal
11845 #. ``ugt``: unsigned greater than
11846 #. ``uge``: unsigned greater or equal
11847 #. ``ult``: unsigned less than
11848 #. ``ule``: unsigned less or equal
11849 #. ``sgt``: signed greater than
11850 #. ``sge``: signed greater or equal
11851 #. ``slt``: signed less than
11852 #. ``sle``: signed less or equal
11854 The remaining two arguments must be :ref:`integer <t_integer>` or
11855 :ref:`pointer <t_pointer>` or integer :ref:`vector <t_vector>` typed. They
11856 must also be identical types.
11858 Semantics:
11859 """"""""""
11861 The '``icmp``' compares ``op1`` and ``op2`` according to the condition
11862 code given as ``cond``. The comparison performed always yields either an
11863 :ref:`i1 <t_integer>` or vector of ``i1`` result, as follows:
11865 .. _icmp_md_cc_sem:
11867 #. ``eq``: yields ``true`` if the operands are equal, ``false``
11868    otherwise. No sign interpretation is necessary or performed.
11869 #. ``ne``: yields ``true`` if the operands are unequal, ``false``
11870    otherwise. No sign interpretation is necessary or performed.
11871 #. ``ugt``: interprets the operands as unsigned values and yields
11872    ``true`` if ``op1`` is greater than ``op2``.
11873 #. ``uge``: interprets the operands as unsigned values and yields
11874    ``true`` if ``op1`` is greater than or equal to ``op2``.
11875 #. ``ult``: interprets the operands as unsigned values and yields
11876    ``true`` if ``op1`` is less than ``op2``.
11877 #. ``ule``: interprets the operands as unsigned values and yields
11878    ``true`` if ``op1`` is less than or equal to ``op2``.
11879 #. ``sgt``: interprets the operands as signed values and yields ``true``
11880    if ``op1`` is greater than ``op2``.
11881 #. ``sge``: interprets the operands as signed values and yields ``true``
11882    if ``op1`` is greater than or equal to ``op2``.
11883 #. ``slt``: interprets the operands as signed values and yields ``true``
11884    if ``op1`` is less than ``op2``.
11885 #. ``sle``: interprets the operands as signed values and yields ``true``
11886    if ``op1`` is less than or equal to ``op2``.
11888 If the operands are :ref:`pointer <t_pointer>` typed, the pointer values
11889 are compared as if they were integers.
11891 If the operands are integer vectors, then they are compared element by
11892 element. The result is an ``i1`` vector with the same number of elements
11893 as the values being compared. Otherwise, the result is an ``i1``.
11895 Example:
11896 """"""""
11898 .. code-block:: text
11900       <result> = icmp eq i32 4, 5          ; yields: result=false
11901       <result> = icmp ne ptr %X, %X        ; yields: result=false
11902       <result> = icmp ult i16  4, 5        ; yields: result=true
11903       <result> = icmp sgt i16  4, 5        ; yields: result=false
11904       <result> = icmp ule i16 -4, 5        ; yields: result=false
11905       <result> = icmp sge i16  4, 5        ; yields: result=false
11907 .. _i_fcmp:
11909 '``fcmp``' Instruction
11910 ^^^^^^^^^^^^^^^^^^^^^^
11912 Syntax:
11913 """""""
11917       <result> = fcmp [fast-math flags]* <cond> <ty> <op1>, <op2>     ; yields i1 or <N x i1>:result
11919 Overview:
11920 """""""""
11922 The '``fcmp``' instruction returns a boolean value or vector of boolean
11923 values based on comparison of its operands.
11925 If the operands are floating-point scalars, then the result type is a
11926 boolean (:ref:`i1 <t_integer>`).
11928 If the operands are floating-point vectors, then the result type is a
11929 vector of boolean with the same number of elements as the operands being
11930 compared.
11932 Arguments:
11933 """"""""""
11935 The '``fcmp``' instruction takes three operands. The first operand is
11936 the condition code indicating the kind of comparison to perform. It is
11937 not a value, just a keyword. The possible condition codes are:
11939 #. ``false``: no comparison, always returns false
11940 #. ``oeq``: ordered and equal
11941 #. ``ogt``: ordered and greater than
11942 #. ``oge``: ordered and greater than or equal
11943 #. ``olt``: ordered and less than
11944 #. ``ole``: ordered and less than or equal
11945 #. ``one``: ordered and not equal
11946 #. ``ord``: ordered (no nans)
11947 #. ``ueq``: unordered or equal
11948 #. ``ugt``: unordered or greater than
11949 #. ``uge``: unordered or greater than or equal
11950 #. ``ult``: unordered or less than
11951 #. ``ule``: unordered or less than or equal
11952 #. ``une``: unordered or not equal
11953 #. ``uno``: unordered (either nans)
11954 #. ``true``: no comparison, always returns true
11956 *Ordered* means that neither operand is a QNAN while *unordered* means
11957 that either operand may be a QNAN.
11959 Each of ``val1`` and ``val2`` arguments must be either a :ref:`floating-point
11960 <t_floating>` type or a :ref:`vector <t_vector>` of floating-point type.
11961 They must have identical types.
11963 Semantics:
11964 """"""""""
11966 The '``fcmp``' instruction compares ``op1`` and ``op2`` according to the
11967 condition code given as ``cond``. If the operands are vectors, then the
11968 vectors are compared element by element. Each comparison performed
11969 always yields an :ref:`i1 <t_integer>` result, as follows:
11971 #. ``false``: always yields ``false``, regardless of operands.
11972 #. ``oeq``: yields ``true`` if both operands are not a QNAN and ``op1``
11973    is equal to ``op2``.
11974 #. ``ogt``: yields ``true`` if both operands are not a QNAN and ``op1``
11975    is greater than ``op2``.
11976 #. ``oge``: yields ``true`` if both operands are not a QNAN and ``op1``
11977    is greater than or equal to ``op2``.
11978 #. ``olt``: yields ``true`` if both operands are not a QNAN and ``op1``
11979    is less than ``op2``.
11980 #. ``ole``: yields ``true`` if both operands are not a QNAN and ``op1``
11981    is less than or equal to ``op2``.
11982 #. ``one``: yields ``true`` if both operands are not a QNAN and ``op1``
11983    is not equal to ``op2``.
11984 #. ``ord``: yields ``true`` if both operands are not a QNAN.
11985 #. ``ueq``: yields ``true`` if either operand is a QNAN or ``op1`` is
11986    equal to ``op2``.
11987 #. ``ugt``: yields ``true`` if either operand is a QNAN or ``op1`` is
11988    greater than ``op2``.
11989 #. ``uge``: yields ``true`` if either operand is a QNAN or ``op1`` is
11990    greater than or equal to ``op2``.
11991 #. ``ult``: yields ``true`` if either operand is a QNAN or ``op1`` is
11992    less than ``op2``.
11993 #. ``ule``: yields ``true`` if either operand is a QNAN or ``op1`` is
11994    less than or equal to ``op2``.
11995 #. ``une``: yields ``true`` if either operand is a QNAN or ``op1`` is
11996    not equal to ``op2``.
11997 #. ``uno``: yields ``true`` if either operand is a QNAN.
11998 #. ``true``: always yields ``true``, regardless of operands.
12000 The ``fcmp`` instruction can also optionally take any number of
12001 :ref:`fast-math flags <fastmath>`, which are optimization hints to enable
12002 otherwise unsafe floating-point optimizations.
12004 Any set of fast-math flags are legal on an ``fcmp`` instruction, but the
12005 only flags that have any effect on its semantics are those that allow
12006 assumptions to be made about the values of input arguments; namely
12007 ``nnan``, ``ninf``, and ``reassoc``. See :ref:`fastmath` for more information.
12009 Example:
12010 """"""""
12012 .. code-block:: text
12014       <result> = fcmp oeq float 4.0, 5.0    ; yields: result=false
12015       <result> = fcmp one float 4.0, 5.0    ; yields: result=true
12016       <result> = fcmp olt float 4.0, 5.0    ; yields: result=true
12017       <result> = fcmp ueq double 1.0, 2.0   ; yields: result=false
12019 .. _i_phi:
12021 '``phi``' Instruction
12022 ^^^^^^^^^^^^^^^^^^^^^
12024 Syntax:
12025 """""""
12029       <result> = phi [fast-math-flags] <ty> [ <val0>, <label0>], ...
12031 Overview:
12032 """""""""
12034 The '``phi``' instruction is used to implement the Ï† node in the SSA
12035 graph representing the function.
12037 Arguments:
12038 """"""""""
12040 The type of the incoming values is specified with the first type field.
12041 After this, the '``phi``' instruction takes a list of pairs as
12042 arguments, with one pair for each predecessor basic block of the current
12043 block. Only values of :ref:`first class <t_firstclass>` type may be used as
12044 the value arguments to the PHI node. Only labels may be used as the
12045 label arguments.
12047 There must be no non-phi instructions between the start of a basic block
12048 and the PHI instructions: i.e. PHI instructions must be first in a basic
12049 block.
12051 For the purposes of the SSA form, the use of each incoming value is
12052 deemed to occur on the edge from the corresponding predecessor block to
12053 the current block (but after any definition of an '``invoke``'
12054 instruction's return value on the same edge).
12056 The optional ``fast-math-flags`` marker indicates that the phi has one
12057 or more :ref:`fast-math-flags <fastmath>`. These are optimization hints
12058 to enable otherwise unsafe floating-point optimizations. Fast-math-flags
12059 are only valid for phis that return a floating-point scalar or vector
12060 type, or an array (nested to any depth) of floating-point scalar or vector
12061 types.
12063 Semantics:
12064 """"""""""
12066 At runtime, the '``phi``' instruction logically takes on the value
12067 specified by the pair corresponding to the predecessor basic block that
12068 executed just prior to the current block.
12070 Example:
12071 """"""""
12073 .. code-block:: llvm
12075     Loop:       ; Infinite loop that counts from 0 on up...
12076       %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
12077       %nextindvar = add i32 %indvar, 1
12078       br label %Loop
12080 .. _i_select:
12082 '``select``' Instruction
12083 ^^^^^^^^^^^^^^^^^^^^^^^^
12085 Syntax:
12086 """""""
12090       <result> = select [fast-math flags] selty <cond>, <ty> <val1>, <ty> <val2>             ; yields ty
12092       selty is either i1 or {<N x i1>}
12094 Overview:
12095 """""""""
12097 The '``select``' instruction is used to choose one value based on a
12098 condition, without IR-level branching.
12100 Arguments:
12101 """"""""""
12103 The '``select``' instruction requires an 'i1' value or a vector of 'i1'
12104 values indicating the condition, and two values of the same :ref:`first
12105 class <t_firstclass>` type.
12107 #. The optional ``fast-math flags`` marker indicates that the select has one or more
12108    :ref:`fast-math flags <fastmath>`. These are optimization hints to enable
12109    otherwise unsafe floating-point optimizations. Fast-math flags are only valid
12110    for selects that return a floating-point scalar or vector type, or an array
12111    (nested to any depth) of floating-point scalar or vector types.
12113 Semantics:
12114 """"""""""
12116 If the condition is an i1 and it evaluates to 1, the instruction returns
12117 the first value argument; otherwise, it returns the second value
12118 argument.
12120 If the condition is a vector of i1, then the value arguments must be
12121 vectors of the same size, and the selection is done element by element.
12123 If the condition is an i1 and the value arguments are vectors of the
12124 same size, then an entire vector is selected.
12126 Example:
12127 """"""""
12129 .. code-block:: llvm
12131       %X = select i1 true, i8 17, i8 42          ; yields i8:17
12134 .. _i_freeze:
12136 '``freeze``' Instruction
12137 ^^^^^^^^^^^^^^^^^^^^^^^^
12139 Syntax:
12140 """""""
12144       <result> = freeze ty <val>    ; yields ty:result
12146 Overview:
12147 """""""""
12149 The '``freeze``' instruction is used to stop propagation of
12150 :ref:`undef <undefvalues>` and :ref:`poison <poisonvalues>` values.
12152 Arguments:
12153 """"""""""
12155 The '``freeze``' instruction takes a single argument.
12157 Semantics:
12158 """"""""""
12160 If the argument is ``undef`` or ``poison``, '``freeze``' returns an
12161 arbitrary, but fixed, value of type '``ty``'.
12162 Otherwise, this instruction is a no-op and returns the input argument.
12163 All uses of a value returned by the same '``freeze``' instruction are
12164 guaranteed to always observe the same value, while different '``freeze``'
12165 instructions may yield different values.
12167 While ``undef`` and ``poison`` pointers can be frozen, the result is a
12168 non-dereferenceable pointer. See the
12169 :ref:`Pointer Aliasing Rules <pointeraliasing>` section for more information.
12170 If an aggregate value or vector is frozen, the operand is frozen element-wise.
12171 The padding of an aggregate isn't considered, since it isn't visible
12172 without storing it into memory and loading it with a different type.
12175 Example:
12176 """"""""
12178 .. code-block:: text
12180       %w = i32 undef
12181       %x = freeze i32 %w
12182       %y = add i32 %w, %w         ; undef
12183       %z = add i32 %x, %x         ; even number because all uses of %x observe
12184                                   ; the same value
12185       %x2 = freeze i32 %w
12186       %cmp = icmp eq i32 %x, %x2  ; can be true or false
12188       ; example with vectors
12189       %v = <2 x i32> <i32 undef, i32 poison>
12190       %a = extractelement <2 x i32> %v, i32 0    ; undef
12191       %b = extractelement <2 x i32> %v, i32 1    ; poison
12192       %add = add i32 %a, %a                      ; undef
12194       %v.fr = freeze <2 x i32> %v                ; element-wise freeze
12195       %d = extractelement <2 x i32> %v.fr, i32 0 ; not undef
12196       %add.f = add i32 %d, %d                    ; even number
12198       ; branching on frozen value
12199       %poison = add nsw i1 %k, undef   ; poison
12200       %c = freeze i1 %poison
12201       br i1 %c, label %foo, label %bar ; non-deterministic branch to %foo or %bar
12204 .. _i_call:
12206 '``call``' Instruction
12207 ^^^^^^^^^^^^^^^^^^^^^^
12209 Syntax:
12210 """""""
12214       <result> = [tail | musttail | notail ] call [fast-math flags] [cconv] [ret attrs] [addrspace(<num>)]
12215                  <ty>|<fnty> <fnptrval>(<function args>) [fn attrs] [ operand bundles ]
12217 Overview:
12218 """""""""
12220 The '``call``' instruction represents a simple function call.
12222 Arguments:
12223 """"""""""
12225 This instruction requires several arguments:
12227 #. The optional ``tail`` and ``musttail`` markers indicate that the optimizers
12228    should perform tail call optimization. The ``tail`` marker is a hint that
12229    `can be ignored <CodeGenerator.html#tail-call-optimization>`_. The
12230    ``musttail`` marker means that the call must be tail call optimized in order
12231    for the program to be correct. This is true even in the presence of
12232    attributes like "disable-tail-calls". The ``musttail`` marker provides these
12233    guarantees:
12235    #. The call will not cause unbounded stack growth if it is part of a
12236       recursive cycle in the call graph.
12237    #. Arguments with the :ref:`inalloca <attr_inalloca>` or
12238       :ref:`preallocated <attr_preallocated>` attribute are forwarded in place.
12239    #. If the musttail call appears in a function with the ``"thunk"`` attribute
12240       and the caller and callee both have varargs, than any unprototyped
12241       arguments in register or memory are forwarded to the callee. Similarly,
12242       the return value of the callee is returned to the caller's caller, even
12243       if a void return type is in use.
12245    Both markers imply that the callee does not access allocas from the caller.
12246    The ``tail`` marker additionally implies that the callee does not access
12247    varargs from the caller. Calls marked ``musttail`` must obey the following
12248    additional  rules:
12250    - The call must immediately precede a :ref:`ret <i_ret>` instruction,
12251      or a pointer bitcast followed by a ret instruction.
12252    - The ret instruction must return the (possibly bitcasted) value
12253      produced by the call, undef, or void.
12254    - The calling conventions of the caller and callee must match.
12255    - The callee must be varargs iff the caller is varargs. Bitcasting a
12256      non-varargs function to the appropriate varargs type is legal so
12257      long as the non-varargs prefixes obey the other rules.
12258    - The return type must not undergo automatic conversion to an `sret` pointer.
12260   In addition, if the calling convention is not `swifttailcc` or `tailcc`:
12262    - All ABI-impacting function attributes, such as sret, byval, inreg,
12263      returned, and inalloca, must match.
12264    - The caller and callee prototypes must match. Pointer types of parameters
12265      or return types may differ in pointee type, but not in address space.
12267   On the other hand, if the calling convention is `swifttailcc` or `swiftcc`:
12269    - Only these ABI-impacting attributes attributes are allowed: sret, byval,
12270      swiftself, and swiftasync.
12271    - Prototypes are not required to match.
12273    Tail call optimization for calls marked ``tail`` is guaranteed to occur if
12274    the following conditions are met:
12276    -  Caller and callee both have the calling convention ``fastcc`` or ``tailcc``.
12277    -  The call is in tail position (ret immediately follows call and ret
12278       uses value of call or is void).
12279    -  Option ``-tailcallopt`` is enabled,
12280       ``llvm::GuaranteedTailCallOpt`` is ``true``, or the calling convention
12281       is ``tailcc``
12282    -  `Platform-specific constraints are
12283       met. <CodeGenerator.html#tailcallopt>`_
12285 #. The optional ``notail`` marker indicates that the optimizers should not add
12286    ``tail`` or ``musttail`` markers to the call. It is used to prevent tail
12287    call optimization from being performed on the call.
12289 #. The optional ``fast-math flags`` marker indicates that the call has one or more
12290    :ref:`fast-math flags <fastmath>`, which are optimization hints to enable
12291    otherwise unsafe floating-point optimizations. Fast-math flags are only valid
12292    for calls that return a floating-point scalar or vector type, or an array
12293    (nested to any depth) of floating-point scalar or vector types.
12295 #. The optional "cconv" marker indicates which :ref:`calling
12296    convention <callingconv>` the call should use. If none is
12297    specified, the call defaults to using C calling conventions. The
12298    calling convention of the call must match the calling convention of
12299    the target function, or else the behavior is undefined.
12300 #. The optional :ref:`Parameter Attributes <paramattrs>` list for return
12301    values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
12302    are valid here.
12303 #. The optional addrspace attribute can be used to indicate the address space
12304    of the called function. If it is not specified, the program address space
12305    from the :ref:`datalayout string<langref_datalayout>` will be used.
12306 #. '``ty``': the type of the call instruction itself which is also the
12307    type of the return value. Functions that return no value are marked
12308    ``void``.
12309 #. '``fnty``': shall be the signature of the function being called. The
12310    argument types must match the types implied by this signature. This
12311    type can be omitted if the function is not varargs.
12312 #. '``fnptrval``': An LLVM value containing a pointer to a function to
12313    be called. In most cases, this is a direct function call, but
12314    indirect ``call``'s are just as possible, calling an arbitrary pointer
12315    to function value.
12316 #. '``function args``': argument list whose types match the function
12317    signature argument types and parameter attributes. All arguments must
12318    be of :ref:`first class <t_firstclass>` type. If the function signature
12319    indicates the function accepts a variable number of arguments, the
12320    extra arguments can be specified.
12321 #. The optional :ref:`function attributes <fnattrs>` list.
12322 #. The optional :ref:`operand bundles <opbundles>` list.
12324 Semantics:
12325 """"""""""
12327 The '``call``' instruction is used to cause control flow to transfer to
12328 a specified function, with its incoming arguments bound to the specified
12329 values. Upon a '``ret``' instruction in the called function, control
12330 flow continues with the instruction after the function call, and the
12331 return value of the function is bound to the result argument.
12333 Example:
12334 """"""""
12336 .. code-block:: llvm
12338       %retval = call i32 @test(i32 %argc)
12339       call i32 (ptr, ...) @printf(ptr %msg, i32 12, i8 42)        ; yields i32
12340       %X = tail call i32 @foo()                                    ; yields i32
12341       %Y = tail call fastcc i32 @foo()  ; yields i32
12342       call void %foo(i8 signext 97)
12344       %struct.A = type { i32, i8 }
12345       %r = call %struct.A @foo()                        ; yields { i32, i8 }
12346       %gr = extractvalue %struct.A %r, 0                ; yields i32
12347       %gr1 = extractvalue %struct.A %r, 1               ; yields i8
12348       %Z = call void @foo() noreturn                    ; indicates that %foo never returns normally
12349       %ZZ = call zeroext i32 @bar()                     ; Return value is %zero extended
12351 llvm treats calls to some functions with names and arguments that match
12352 the standard C99 library as being the C99 library functions, and may
12353 perform optimizations or generate code for them under that assumption.
12354 This is something we'd like to change in the future to provide better
12355 support for freestanding environments and non-C-based languages.
12357 .. _i_va_arg:
12359 '``va_arg``' Instruction
12360 ^^^^^^^^^^^^^^^^^^^^^^^^
12362 Syntax:
12363 """""""
12367       <resultval> = va_arg <va_list*> <arglist>, <argty>
12369 Overview:
12370 """""""""
12372 The '``va_arg``' instruction is used to access arguments passed through
12373 the "variable argument" area of a function call. It is used to implement
12374 the ``va_arg`` macro in C.
12376 Arguments:
12377 """"""""""
12379 This instruction takes a ``va_list*`` value and the type of the
12380 argument. It returns a value of the specified argument type and
12381 increments the ``va_list`` to point to the next argument. The actual
12382 type of ``va_list`` is target specific.
12384 Semantics:
12385 """"""""""
12387 The '``va_arg``' instruction loads an argument of the specified type
12388 from the specified ``va_list`` and causes the ``va_list`` to point to
12389 the next argument. For more information, see the variable argument
12390 handling :ref:`Intrinsic Functions <int_varargs>`.
12392 It is legal for this instruction to be called in a function which does
12393 not take a variable number of arguments, for example, the ``vfprintf``
12394 function.
12396 ``va_arg`` is an LLVM instruction instead of an :ref:`intrinsic
12397 function <intrinsics>` because it takes a type as an argument.
12399 Example:
12400 """"""""
12402 See the :ref:`variable argument processing <int_varargs>` section.
12404 Note that the code generator does not yet fully support va\_arg on many
12405 targets. Also, it does not currently support va\_arg with aggregate
12406 types on any target.
12408 .. _i_landingpad:
12410 '``landingpad``' Instruction
12411 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12413 Syntax:
12414 """""""
12418       <resultval> = landingpad <resultty> <clause>+
12419       <resultval> = landingpad <resultty> cleanup <clause>*
12421       <clause> := catch <type> <value>
12422       <clause> := filter <array constant type> <array constant>
12424 Overview:
12425 """""""""
12427 The '``landingpad``' instruction is used by `LLVM's exception handling
12428 system <ExceptionHandling.html#overview>`_ to specify that a basic block
12429 is a landing pad --- one where the exception lands, and corresponds to the
12430 code found in the ``catch`` portion of a ``try``/``catch`` sequence. It
12431 defines values supplied by the :ref:`personality function <personalityfn>` upon
12432 re-entry to the function. The ``resultval`` has the type ``resultty``.
12434 Arguments:
12435 """"""""""
12437 The optional
12438 ``cleanup`` flag indicates that the landing pad block is a cleanup.
12440 A ``clause`` begins with the clause type --- ``catch`` or ``filter`` --- and
12441 contains the global variable representing the "type" that may be caught
12442 or filtered respectively. Unlike the ``catch`` clause, the ``filter``
12443 clause takes an array constant as its argument. Use
12444 "``[0 x ptr] undef``" for a filter which cannot throw. The
12445 '``landingpad``' instruction must contain *at least* one ``clause`` or
12446 the ``cleanup`` flag.
12448 Semantics:
12449 """"""""""
12451 The '``landingpad``' instruction defines the values which are set by the
12452 :ref:`personality function <personalityfn>` upon re-entry to the function, and
12453 therefore the "result type" of the ``landingpad`` instruction. As with
12454 calling conventions, how the personality function results are
12455 represented in LLVM IR is target specific.
12457 The clauses are applied in order from top to bottom. If two
12458 ``landingpad`` instructions are merged together through inlining, the
12459 clauses from the calling function are appended to the list of clauses.
12460 When the call stack is being unwound due to an exception being thrown,
12461 the exception is compared against each ``clause`` in turn. If it doesn't
12462 match any of the clauses, and the ``cleanup`` flag is not set, then
12463 unwinding continues further up the call stack.
12465 The ``landingpad`` instruction has several restrictions:
12467 -  A landing pad block is a basic block which is the unwind destination
12468    of an '``invoke``' instruction.
12469 -  A landing pad block must have a '``landingpad``' instruction as its
12470    first non-PHI instruction.
12471 -  There can be only one '``landingpad``' instruction within the landing
12472    pad block.
12473 -  A basic block that is not a landing pad block may not include a
12474    '``landingpad``' instruction.
12476 Example:
12477 """"""""
12479 .. code-block:: llvm
12481       ;; A landing pad which can catch an integer.
12482       %res = landingpad { ptr, i32 }
12483                catch ptr @_ZTIi
12484       ;; A landing pad that is a cleanup.
12485       %res = landingpad { ptr, i32 }
12486                cleanup
12487       ;; A landing pad which can catch an integer and can only throw a double.
12488       %res = landingpad { ptr, i32 }
12489                catch ptr @_ZTIi
12490                filter [1 x ptr] [ptr @_ZTId]
12492 .. _i_catchpad:
12494 '``catchpad``' Instruction
12495 ^^^^^^^^^^^^^^^^^^^^^^^^^^
12497 Syntax:
12498 """""""
12502       <resultval> = catchpad within <catchswitch> [<args>*]
12504 Overview:
12505 """""""""
12507 The '``catchpad``' instruction is used by `LLVM's exception handling
12508 system <ExceptionHandling.html#overview>`_ to specify that a basic block
12509 begins a catch handler --- one where a personality routine attempts to transfer
12510 control to catch an exception.
12512 Arguments:
12513 """"""""""
12515 The ``catchswitch`` operand must always be a token produced by a
12516 :ref:`catchswitch <i_catchswitch>` instruction in a predecessor block. This
12517 ensures that each ``catchpad`` has exactly one predecessor block, and it always
12518 terminates in a ``catchswitch``.
12520 The ``args`` correspond to whatever information the personality routine
12521 requires to know if this is an appropriate handler for the exception. Control
12522 will transfer to the ``catchpad`` if this is the first appropriate handler for
12523 the exception.
12525 The ``resultval`` has the type :ref:`token <t_token>` and is used to match the
12526 ``catchpad`` to corresponding :ref:`catchrets <i_catchret>` and other nested EH
12527 pads.
12529 Semantics:
12530 """"""""""
12532 When the call stack is being unwound due to an exception being thrown, the
12533 exception is compared against the ``args``. If it doesn't match, control will
12534 not reach the ``catchpad`` instruction.  The representation of ``args`` is
12535 entirely target and personality function-specific.
12537 Like the :ref:`landingpad <i_landingpad>` instruction, the ``catchpad``
12538 instruction must be the first non-phi of its parent basic block.
12540 The meaning of the tokens produced and consumed by ``catchpad`` and other "pad"
12541 instructions is described in the
12542 `Windows exception handling documentation\ <ExceptionHandling.html#wineh>`_.
12544 When a ``catchpad`` has been "entered" but not yet "exited" (as
12545 described in the `EH documentation\ <ExceptionHandling.html#wineh-constraints>`_),
12546 it is undefined behavior to execute a :ref:`call <i_call>` or :ref:`invoke <i_invoke>`
12547 that does not carry an appropriate :ref:`"funclet" bundle <ob_funclet>`.
12549 Example:
12550 """"""""
12552 .. code-block:: text
12554     dispatch:
12555       %cs = catchswitch within none [label %handler0] unwind to caller
12556       ;; A catch block which can catch an integer.
12557     handler0:
12558       %tok = catchpad within %cs [ptr @_ZTIi]
12560 .. _i_cleanuppad:
12562 '``cleanuppad``' Instruction
12563 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12565 Syntax:
12566 """""""
12570       <resultval> = cleanuppad within <parent> [<args>*]
12572 Overview:
12573 """""""""
12575 The '``cleanuppad``' instruction is used by `LLVM's exception handling
12576 system <ExceptionHandling.html#overview>`_ to specify that a basic block
12577 is a cleanup block --- one where a personality routine attempts to
12578 transfer control to run cleanup actions.
12579 The ``args`` correspond to whatever additional
12580 information the :ref:`personality function <personalityfn>` requires to
12581 execute the cleanup.
12582 The ``resultval`` has the type :ref:`token <t_token>` and is used to
12583 match the ``cleanuppad`` to corresponding :ref:`cleanuprets <i_cleanupret>`.
12584 The ``parent`` argument is the token of the funclet that contains the
12585 ``cleanuppad`` instruction. If the ``cleanuppad`` is not inside a funclet,
12586 this operand may be the token ``none``.
12588 Arguments:
12589 """"""""""
12591 The instruction takes a list of arbitrary values which are interpreted
12592 by the :ref:`personality function <personalityfn>`.
12594 Semantics:
12595 """"""""""
12597 When the call stack is being unwound due to an exception being thrown,
12598 the :ref:`personality function <personalityfn>` transfers control to the
12599 ``cleanuppad`` with the aid of the personality-specific arguments.
12600 As with calling conventions, how the personality function results are
12601 represented in LLVM IR is target specific.
12603 The ``cleanuppad`` instruction has several restrictions:
12605 -  A cleanup block is a basic block which is the unwind destination of
12606    an exceptional instruction.
12607 -  A cleanup block must have a '``cleanuppad``' instruction as its
12608    first non-PHI instruction.
12609 -  There can be only one '``cleanuppad``' instruction within the
12610    cleanup block.
12611 -  A basic block that is not a cleanup block may not include a
12612    '``cleanuppad``' instruction.
12614 When a ``cleanuppad`` has been "entered" but not yet "exited" (as
12615 described in the `EH documentation\ <ExceptionHandling.html#wineh-constraints>`_),
12616 it is undefined behavior to execute a :ref:`call <i_call>` or :ref:`invoke <i_invoke>`
12617 that does not carry an appropriate :ref:`"funclet" bundle <ob_funclet>`.
12619 Example:
12620 """"""""
12622 .. code-block:: text
12624       %tok = cleanuppad within %cs []
12626 .. _intrinsics:
12628 Intrinsic Functions
12629 ===================
12631 LLVM supports the notion of an "intrinsic function". These functions
12632 have well known names and semantics and are required to follow certain
12633 restrictions. Overall, these intrinsics represent an extension mechanism
12634 for the LLVM language that does not require changing all of the
12635 transformations in LLVM when adding to the language (or the bitcode
12636 reader/writer, the parser, etc...).
12638 Intrinsic function names must all start with an "``llvm.``" prefix. This
12639 prefix is reserved in LLVM for intrinsic names; thus, function names may
12640 not begin with this prefix. Intrinsic functions must always be external
12641 functions: you cannot define the body of intrinsic functions. Intrinsic
12642 functions may only be used in call or invoke instructions: it is illegal
12643 to take the address of an intrinsic function. Additionally, because
12644 intrinsic functions are part of the LLVM language, it is required if any
12645 are added that they be documented here.
12647 Some intrinsic functions can be overloaded, i.e., the intrinsic
12648 represents a family of functions that perform the same operation but on
12649 different data types. Because LLVM can represent over 8 million
12650 different integer types, overloading is used commonly to allow an
12651 intrinsic function to operate on any integer type. One or more of the
12652 argument types or the result type can be overloaded to accept any
12653 integer type. Argument types may also be defined as exactly matching a
12654 previous argument's type or the result type. This allows an intrinsic
12655 function which accepts multiple arguments, but needs all of them to be
12656 of the same type, to only be overloaded with respect to a single
12657 argument or the result.
12659 Overloaded intrinsics will have the names of its overloaded argument
12660 types encoded into its function name, each preceded by a period. Only
12661 those types which are overloaded result in a name suffix. Arguments
12662 whose type is matched against another type do not. For example, the
12663 ``llvm.ctpop`` function can take an integer of any width and returns an
12664 integer of exactly the same integer width. This leads to a family of
12665 functions such as ``i8 @llvm.ctpop.i8(i8 %val)`` and
12666 ``i29 @llvm.ctpop.i29(i29 %val)``. Only one type, the return type, is
12667 overloaded, and only one type suffix is required. Because the argument's
12668 type is matched against the return type, it does not require its own
12669 name suffix.
12671 :ref:`Unnamed types <t_opaque>` are encoded as ``s_s``. Overloaded intrinsics
12672 that depend on an unnamed type in one of its overloaded argument types get an
12673 additional ``.<number>`` suffix. This allows differentiating intrinsics with
12674 different unnamed types as arguments. (For example:
12675 ``llvm.ssa.copy.p0s_s.2(%42*)``) The number is tracked in the LLVM module and
12676 it ensures unique names in the module. While linking together two modules, it is
12677 still possible to get a name clash. In that case one of the names will be
12678 changed by getting a new number.
12680 For target developers who are defining intrinsics for back-end code
12681 generation, any intrinsic overloads based solely the distinction between
12682 integer or floating point types should not be relied upon for correct
12683 code generation. In such cases, the recommended approach for target
12684 maintainers when defining intrinsics is to create separate integer and
12685 FP intrinsics rather than rely on overloading. For example, if different
12686 codegen is required for ``llvm.target.foo(<4 x i32>)`` and
12687 ``llvm.target.foo(<4 x float>)`` then these should be split into
12688 different intrinsics.
12690 To learn how to add an intrinsic function, please see the `Extending
12691 LLVM Guide <ExtendingLLVM.html>`_.
12693 .. _int_varargs:
12695 Variable Argument Handling Intrinsics
12696 -------------------------------------
12698 Variable argument support is defined in LLVM with the
12699 :ref:`va_arg <i_va_arg>` instruction and these three intrinsic
12700 functions. These functions are related to the similarly named macros
12701 defined in the ``<stdarg.h>`` header file.
12703 All of these functions operate on arguments that use a target-specific
12704 value type "``va_list``". The LLVM assembly language reference manual
12705 does not define what this type is, so all transformations should be
12706 prepared to handle these functions regardless of the type used.
12708 This example shows how the :ref:`va_arg <i_va_arg>` instruction and the
12709 variable argument handling intrinsic functions are used.
12711 .. code-block:: llvm
12713     ; This struct is different for every platform. For most platforms,
12714     ; it is merely a ptr.
12715     %struct.va_list = type { ptr }
12717     ; For Unix x86_64 platforms, va_list is the following struct:
12718     ; %struct.va_list = type { i32, i32, ptr, ptr }
12720     define i32 @test(i32 %X, ...) {
12721       ; Initialize variable argument processing
12722       %ap = alloca %struct.va_list
12723       call void @llvm.va_start(ptr %ap)
12725       ; Read a single integer argument
12726       %tmp = va_arg ptr %ap, i32
12728       ; Demonstrate usage of llvm.va_copy and llvm.va_end
12729       %aq = alloca ptr
12730       call void @llvm.va_copy(ptr %aq, ptr %ap)
12731       call void @llvm.va_end(ptr %aq)
12733       ; Stop processing of arguments.
12734       call void @llvm.va_end(ptr %ap)
12735       ret i32 %tmp
12736     }
12738     declare void @llvm.va_start(ptr)
12739     declare void @llvm.va_copy(ptr, ptr)
12740     declare void @llvm.va_end(ptr)
12742 .. _int_va_start:
12744 '``llvm.va_start``' Intrinsic
12745 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12747 Syntax:
12748 """""""
12752       declare void @llvm.va_start(ptr <arglist>)
12754 Overview:
12755 """""""""
12757 The '``llvm.va_start``' intrinsic initializes ``<arglist>`` for
12758 subsequent use by ``va_arg``.
12760 Arguments:
12761 """"""""""
12763 The argument is a pointer to a ``va_list`` element to initialize.
12765 Semantics:
12766 """"""""""
12768 The '``llvm.va_start``' intrinsic works just like the ``va_start`` macro
12769 available in C. In a target-dependent way, it initializes the
12770 ``va_list`` element to which the argument points, so that the next call
12771 to ``va_arg`` will produce the first variable argument passed to the
12772 function. Unlike the C ``va_start`` macro, this intrinsic does not need
12773 to know the last argument of the function as the compiler can figure
12774 that out.
12776 '``llvm.va_end``' Intrinsic
12777 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
12779 Syntax:
12780 """""""
12784       declare void @llvm.va_end(ptr <arglist>)
12786 Overview:
12787 """""""""
12789 The '``llvm.va_end``' intrinsic destroys ``<arglist>``, which has been
12790 initialized previously with ``llvm.va_start`` or ``llvm.va_copy``.
12792 Arguments:
12793 """"""""""
12795 The argument is a pointer to a ``va_list`` to destroy.
12797 Semantics:
12798 """"""""""
12800 The '``llvm.va_end``' intrinsic works just like the ``va_end`` macro
12801 available in C. In a target-dependent way, it destroys the ``va_list``
12802 element to which the argument points. Calls to
12803 :ref:`llvm.va_start <int_va_start>` and
12804 :ref:`llvm.va_copy <int_va_copy>` must be matched exactly with calls to
12805 ``llvm.va_end``.
12807 .. _int_va_copy:
12809 '``llvm.va_copy``' Intrinsic
12810 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12812 Syntax:
12813 """""""
12817       declare void @llvm.va_copy(ptr <destarglist>, ptr <srcarglist>)
12819 Overview:
12820 """""""""
12822 The '``llvm.va_copy``' intrinsic copies the current argument position
12823 from the source argument list to the destination argument list.
12825 Arguments:
12826 """"""""""
12828 The first argument is a pointer to a ``va_list`` element to initialize.
12829 The second argument is a pointer to a ``va_list`` element to copy from.
12831 Semantics:
12832 """"""""""
12834 The '``llvm.va_copy``' intrinsic works just like the ``va_copy`` macro
12835 available in C. In a target-dependent way, it copies the source
12836 ``va_list`` element into the destination ``va_list`` element. This
12837 intrinsic is necessary because the `` llvm.va_start`` intrinsic may be
12838 arbitrarily complex and require, for example, memory allocation.
12840 Accurate Garbage Collection Intrinsics
12841 --------------------------------------
12843 LLVM's support for `Accurate Garbage Collection <GarbageCollection.html>`_
12844 (GC) requires the frontend to generate code containing appropriate intrinsic
12845 calls and select an appropriate GC strategy which knows how to lower these
12846 intrinsics in a manner which is appropriate for the target collector.
12848 These intrinsics allow identification of :ref:`GC roots on the
12849 stack <int_gcroot>`, as well as garbage collector implementations that
12850 require :ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers.
12851 Frontends for type-safe garbage collected languages should generate
12852 these intrinsics to make use of the LLVM garbage collectors. For more
12853 details, see `Garbage Collection with LLVM <GarbageCollection.html>`_.
12855 LLVM provides an second experimental set of intrinsics for describing garbage
12856 collection safepoints in compiled code. These intrinsics are an alternative
12857 to the ``llvm.gcroot`` intrinsics, but are compatible with the ones for
12858 :ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers. The
12859 differences in approach are covered in the `Garbage Collection with LLVM
12860 <GarbageCollection.html>`_ documentation. The intrinsics themselves are
12861 described in :doc:`Statepoints`.
12863 .. _int_gcroot:
12865 '``llvm.gcroot``' Intrinsic
12866 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
12868 Syntax:
12869 """""""
12873       declare void @llvm.gcroot(ptr %ptrloc, ptr %metadata)
12875 Overview:
12876 """""""""
12878 The '``llvm.gcroot``' intrinsic declares the existence of a GC root to
12879 the code generator, and allows some metadata to be associated with it.
12881 Arguments:
12882 """"""""""
12884 The first argument specifies the address of a stack object that contains
12885 the root pointer. The second pointer (which must be either a constant or
12886 a global value address) contains the meta-data to be associated with the
12887 root.
12889 Semantics:
12890 """"""""""
12892 At runtime, a call to this intrinsic stores a null pointer into the
12893 "ptrloc" location. At compile-time, the code generator generates
12894 information to allow the runtime to find the pointer at GC safe points.
12895 The '``llvm.gcroot``' intrinsic may only be used in a function which
12896 :ref:`specifies a GC algorithm <gc>`.
12898 .. _int_gcread:
12900 '``llvm.gcread``' Intrinsic
12901 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
12903 Syntax:
12904 """""""
12908       declare ptr @llvm.gcread(ptr %ObjPtr, ptr %Ptr)
12910 Overview:
12911 """""""""
12913 The '``llvm.gcread``' intrinsic identifies reads of references from heap
12914 locations, allowing garbage collector implementations that require read
12915 barriers.
12917 Arguments:
12918 """"""""""
12920 The second argument is the address to read from, which should be an
12921 address allocated from the garbage collector. The first object is a
12922 pointer to the start of the referenced object, if needed by the language
12923 runtime (otherwise null).
12925 Semantics:
12926 """"""""""
12928 The '``llvm.gcread``' intrinsic has the same semantics as a load
12929 instruction, but may be replaced with substantially more complex code by
12930 the garbage collector runtime, as needed. The '``llvm.gcread``'
12931 intrinsic may only be used in a function which :ref:`specifies a GC
12932 algorithm <gc>`.
12934 .. _int_gcwrite:
12936 '``llvm.gcwrite``' Intrinsic
12937 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12939 Syntax:
12940 """""""
12944       declare void @llvm.gcwrite(ptr %P1, ptr %Obj, ptr %P2)
12946 Overview:
12947 """""""""
12949 The '``llvm.gcwrite``' intrinsic identifies writes of references to heap
12950 locations, allowing garbage collector implementations that require write
12951 barriers (such as generational or reference counting collectors).
12953 Arguments:
12954 """"""""""
12956 The first argument is the reference to store, the second is the start of
12957 the object to store it to, and the third is the address of the field of
12958 Obj to store to. If the runtime does not require a pointer to the
12959 object, Obj may be null.
12961 Semantics:
12962 """"""""""
12964 The '``llvm.gcwrite``' intrinsic has the same semantics as a store
12965 instruction, but may be replaced with substantially more complex code by
12966 the garbage collector runtime, as needed. The '``llvm.gcwrite``'
12967 intrinsic may only be used in a function which :ref:`specifies a GC
12968 algorithm <gc>`.
12971 .. _gc_statepoint:
12973 '``llvm.experimental.gc.statepoint``' Intrinsic
12974 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12976 Syntax:
12977 """""""
12981       declare token
12982         @llvm.experimental.gc.statepoint(i64 <id>, i32 <num patch bytes>,
12983                        ptr elementtype(func_type) <target>,
12984                        i64 <#call args>, i64 <flags>,
12985                        ... (call parameters),
12986                        i64 0, i64 0)
12988 Overview:
12989 """""""""
12991 The statepoint intrinsic represents a call which is parse-able by the
12992 runtime.
12994 Operands:
12995 """""""""
12997 The 'id' operand is a constant integer that is reported as the ID
12998 field in the generated stackmap.  LLVM does not interpret this
12999 parameter in any way and its meaning is up to the statepoint user to
13000 decide.  Note that LLVM is free to duplicate code containing
13001 statepoint calls, and this may transform IR that had a unique 'id' per
13002 lexical call to statepoint to IR that does not.
13004 If 'num patch bytes' is non-zero then the call instruction
13005 corresponding to the statepoint is not emitted and LLVM emits 'num
13006 patch bytes' bytes of nops in its place.  LLVM will emit code to
13007 prepare the function arguments and retrieve the function return value
13008 in accordance to the calling convention; the former before the nop
13009 sequence and the latter after the nop sequence.  It is expected that
13010 the user will patch over the 'num patch bytes' bytes of nops with a
13011 calling sequence specific to their runtime before executing the
13012 generated machine code.  There are no guarantees with respect to the
13013 alignment of the nop sequence.  Unlike :doc:`StackMaps` statepoints do
13014 not have a concept of shadow bytes.  Note that semantically the
13015 statepoint still represents a call or invoke to 'target', and the nop
13016 sequence after patching is expected to represent an operation
13017 equivalent to a call or invoke to 'target'.
13019 The 'target' operand is the function actually being called. The operand
13020 must have an :ref:`elementtype <attr_elementtype>` attribute specifying
13021 the function type of the target. The target can be specified as either
13022 a symbolic LLVM function, or as an arbitrary Value of pointer type. Note
13023 that the function type must match the signature of the callee and the
13024 types of the 'call parameters' arguments.
13026 The '#call args' operand is the number of arguments to the actual
13027 call.  It must exactly match the number of arguments passed in the
13028 'call parameters' variable length section.
13030 The 'flags' operand is used to specify extra information about the
13031 statepoint. This is currently only used to mark certain statepoints
13032 as GC transitions. This operand is a 64-bit integer with the following
13033 layout, where bit 0 is the least significant bit:
13035   +-------+---------------------------------------------------+
13036   | Bit # | Usage                                             |
13037   +=======+===================================================+
13038   |     0 | Set if the statepoint is a GC transition, cleared |
13039   |       | otherwise.                                        |
13040   +-------+---------------------------------------------------+
13041   |  1-63 | Reserved for future use; must be cleared.         |
13042   +-------+---------------------------------------------------+
13044 The 'call parameters' arguments are simply the arguments which need to
13045 be passed to the call target.  They will be lowered according to the
13046 specified calling convention and otherwise handled like a normal call
13047 instruction.  The number of arguments must exactly match what is
13048 specified in '# call args'.  The types must match the signature of
13049 'target'.
13051 The 'call parameter' attributes must be followed by two 'i64 0' constants.
13052 These were originally the length prefixes for 'gc transition parameter' and
13053 'deopt parameter' arguments, but the role of these parameter sets have been
13054 entirely replaced with the corresponding operand bundles.  In a future
13055 revision, these now redundant arguments will be removed.
13057 Semantics:
13058 """"""""""
13060 A statepoint is assumed to read and write all memory.  As a result,
13061 memory operations can not be reordered past a statepoint.  It is
13062 illegal to mark a statepoint as being either 'readonly' or 'readnone'.
13064 Note that legal IR can not perform any memory operation on a 'gc
13065 pointer' argument of the statepoint in a location statically reachable
13066 from the statepoint.  Instead, the explicitly relocated value (from a
13067 ``gc.relocate``) must be used.
13069 '``llvm.experimental.gc.result``' Intrinsic
13070 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13072 Syntax:
13073 """""""
13077       declare type
13078         @llvm.experimental.gc.result(token %statepoint_token)
13080 Overview:
13081 """""""""
13083 ``gc.result`` extracts the result of the original call instruction
13084 which was replaced by the ``gc.statepoint``.  The ``gc.result``
13085 intrinsic is actually a family of three intrinsics due to an
13086 implementation limitation.  Other than the type of the return value,
13087 the semantics are the same.
13089 Operands:
13090 """""""""
13092 The first and only argument is the ``gc.statepoint`` which starts
13093 the safepoint sequence of which this ``gc.result`` is a part.
13094 Despite the typing of this as a generic token, *only* the value defined
13095 by a ``gc.statepoint`` is legal here.
13097 Semantics:
13098 """"""""""
13100 The ``gc.result`` represents the return value of the call target of
13101 the ``statepoint``.  The type of the ``gc.result`` must exactly match
13102 the type of the target.  If the call target returns void, there will
13103 be no ``gc.result``.
13105 A ``gc.result`` is modeled as a 'readnone' pure function.  It has no
13106 side effects since it is just a projection of the return value of the
13107 previous call represented by the ``gc.statepoint``.
13109 '``llvm.experimental.gc.relocate``' Intrinsic
13110 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13112 Syntax:
13113 """""""
13117       declare <pointer type>
13118         @llvm.experimental.gc.relocate(token %statepoint_token,
13119                                        i32 %base_offset,
13120                                        i32 %pointer_offset)
13122 Overview:
13123 """""""""
13125 A ``gc.relocate`` returns the potentially relocated value of a pointer
13126 at the safepoint.
13128 Operands:
13129 """""""""
13131 The first argument is the ``gc.statepoint`` which starts the
13132 safepoint sequence of which this ``gc.relocation`` is a part.
13133 Despite the typing of this as a generic token, *only* the value defined
13134 by a ``gc.statepoint`` is legal here.
13136 The second and third arguments are both indices into operands of the
13137 corresponding statepoint's :ref:`gc-live <ob_gc_live>` operand bundle.
13139 The second argument is an index which specifies the allocation for the pointer
13140 being relocated. The associated value must be within the object with which the
13141 pointer being relocated is associated. The optimizer is free to change *which*
13142 interior derived pointer is reported, provided that it does not replace an
13143 actual base pointer with another interior derived pointer. Collectors are
13144 allowed to rely on the base pointer operand remaining an actual base pointer if
13145 so constructed.
13147 The third argument is an index which specify the (potentially) derived pointer
13148 being relocated.  It is legal for this index to be the same as the second
13149 argument if-and-only-if a base pointer is being relocated.
13151 Semantics:
13152 """"""""""
13154 The return value of ``gc.relocate`` is the potentially relocated value
13155 of the pointer specified by its arguments.  It is unspecified how the
13156 value of the returned pointer relates to the argument to the
13157 ``gc.statepoint`` other than that a) it points to the same source
13158 language object with the same offset, and b) the 'based-on'
13159 relationship of the newly relocated pointers is a projection of the
13160 unrelocated pointers.  In particular, the integer value of the pointer
13161 returned is unspecified.
13163 A ``gc.relocate`` is modeled as a ``readnone`` pure function.  It has no
13164 side effects since it is just a way to extract information about work
13165 done during the actual call modeled by the ``gc.statepoint``.
13167 .. _gc.get.pointer.base:
13169 '``llvm.experimental.gc.get.pointer.base``' Intrinsic
13170 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13172 Syntax:
13173 """""""
13177       declare <pointer type>
13178         @llvm.experimental.gc.get.pointer.base(
13179           <pointer type> readnone nocapture %derived_ptr)
13180           nounwind willreturn memory(none)
13182 Overview:
13183 """""""""
13185 ``gc.get.pointer.base`` for a derived pointer returns its base pointer.
13187 Operands:
13188 """""""""
13190 The only argument is a pointer which is based on some object with
13191 an unknown offset from the base of said object.
13193 Semantics:
13194 """"""""""
13196 This intrinsic is used in the abstract machine model for GC to represent
13197 the base pointer for an arbitrary derived pointer.
13199 This intrinsic is inlined by the :ref:`RewriteStatepointsForGC` pass by
13200 replacing all uses of this callsite with the offset of a derived pointer from
13201 its base pointer value. The replacement is done as part of the lowering to the
13202 explicit statepoint model.
13204 The return pointer type must be the same as the type of the parameter.
13207 '``llvm.experimental.gc.get.pointer.offset``' Intrinsic
13208 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13210 Syntax:
13211 """""""
13215       declare i64
13216         @llvm.experimental.gc.get.pointer.offset(
13217           <pointer type> readnone nocapture %derived_ptr)
13218           nounwind willreturn memory(none)
13220 Overview:
13221 """""""""
13223 ``gc.get.pointer.offset`` for a derived pointer returns the offset from its
13224 base pointer.
13226 Operands:
13227 """""""""
13229 The only argument is a pointer which is based on some object with
13230 an unknown offset from the base of said object.
13232 Semantics:
13233 """"""""""
13235 This intrinsic is used in the abstract machine model for GC to represent
13236 the offset of an arbitrary derived pointer from its base pointer.
13238 This intrinsic is inlined by the :ref:`RewriteStatepointsForGC` pass by
13239 replacing all uses of this callsite with the offset of a derived pointer from
13240 its base pointer value. The replacement is done as part of the lowering to the
13241 explicit statepoint model.
13243 Basically this call calculates difference between the derived pointer and its
13244 base pointer (see :ref:`gc.get.pointer.base`) both ptrtoint casted. But
13245 this cast done outside the :ref:`RewriteStatepointsForGC` pass could result
13246 in the pointers lost for further lowering from the abstract model to the
13247 explicit physical one.
13249 Code Generator Intrinsics
13250 -------------------------
13252 These intrinsics are provided by LLVM to expose special features that
13253 may only be implemented with code generator support.
13255 '``llvm.returnaddress``' Intrinsic
13256 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13258 Syntax:
13259 """""""
13263       declare ptr @llvm.returnaddress(i32 <level>)
13265 Overview:
13266 """""""""
13268 The '``llvm.returnaddress``' intrinsic attempts to compute a
13269 target-specific value indicating the return address of the current
13270 function or one of its callers.
13272 Arguments:
13273 """"""""""
13275 The argument to this intrinsic indicates which function to return the
13276 address for. Zero indicates the calling function, one indicates its
13277 caller, etc. The argument is **required** to be a constant integer
13278 value.
13280 Semantics:
13281 """"""""""
13283 The '``llvm.returnaddress``' intrinsic either returns a pointer
13284 indicating the return address of the specified call frame, or zero if it
13285 cannot be identified. The value returned by this intrinsic is likely to
13286 be incorrect or 0 for arguments other than zero, so it should only be
13287 used for debugging purposes.
13289 Note that calling this intrinsic does not prevent function inlining or
13290 other aggressive transformations, so the value returned may not be that
13291 of the obvious source-language caller.
13293 '``llvm.addressofreturnaddress``' Intrinsic
13294 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13296 Syntax:
13297 """""""
13301       declare ptr @llvm.addressofreturnaddress()
13303 Overview:
13304 """""""""
13306 The '``llvm.addressofreturnaddress``' intrinsic returns a target-specific
13307 pointer to the place in the stack frame where the return address of the
13308 current function is stored.
13310 Semantics:
13311 """"""""""
13313 Note that calling this intrinsic does not prevent function inlining or
13314 other aggressive transformations, so the value returned may not be that
13315 of the obvious source-language caller.
13317 This intrinsic is only implemented for x86 and aarch64.
13319 '``llvm.sponentry``' Intrinsic
13320 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13322 Syntax:
13323 """""""
13327       declare ptr @llvm.sponentry()
13329 Overview:
13330 """""""""
13332 The '``llvm.sponentry``' intrinsic returns the stack pointer value at
13333 the entry of the current function calling this intrinsic.
13335 Semantics:
13336 """"""""""
13338 Note this intrinsic is only verified on AArch64 and ARM.
13340 '``llvm.frameaddress``' Intrinsic
13341 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13343 Syntax:
13344 """""""
13348       declare ptr @llvm.frameaddress(i32 <level>)
13350 Overview:
13351 """""""""
13353 The '``llvm.frameaddress``' intrinsic attempts to return the
13354 target-specific frame pointer value for the specified stack frame.
13356 Arguments:
13357 """"""""""
13359 The argument to this intrinsic indicates which function to return the
13360 frame pointer for. Zero indicates the calling function, one indicates
13361 its caller, etc. The argument is **required** to be a constant integer
13362 value.
13364 Semantics:
13365 """"""""""
13367 The '``llvm.frameaddress``' intrinsic either returns a pointer
13368 indicating the frame address of the specified call frame, or zero if it
13369 cannot be identified. The value returned by this intrinsic is likely to
13370 be incorrect or 0 for arguments other than zero, so it should only be
13371 used for debugging purposes.
13373 Note that calling this intrinsic does not prevent function inlining or
13374 other aggressive transformations, so the value returned may not be that
13375 of the obvious source-language caller.
13377 '``llvm.swift.async.context.addr``' Intrinsic
13378 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13380 Syntax:
13381 """""""
13385       declare ptr @llvm.swift.async.context.addr()
13387 Overview:
13388 """""""""
13390 The '``llvm.swift.async.context.addr``' intrinsic returns a pointer to
13391 the part of the extended frame record containing the asynchronous
13392 context of a Swift execution.
13394 Semantics:
13395 """"""""""
13397 If the caller has a ``swiftasync`` parameter, that argument will initially
13398 be stored at the returned address. If not, it will be initialized to null.
13400 '``llvm.localescape``' and '``llvm.localrecover``' Intrinsics
13401 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13403 Syntax:
13404 """""""
13408       declare void @llvm.localescape(...)
13409       declare ptr @llvm.localrecover(ptr %func, ptr %fp, i32 %idx)
13411 Overview:
13412 """""""""
13414 The '``llvm.localescape``' intrinsic escapes offsets of a collection of static
13415 allocas, and the '``llvm.localrecover``' intrinsic applies those offsets to a
13416 live frame pointer to recover the address of the allocation. The offset is
13417 computed during frame layout of the caller of ``llvm.localescape``.
13419 Arguments:
13420 """"""""""
13422 All arguments to '``llvm.localescape``' must be pointers to static allocas or
13423 casts of static allocas. Each function can only call '``llvm.localescape``'
13424 once, and it can only do so from the entry block.
13426 The ``func`` argument to '``llvm.localrecover``' must be a constant
13427 bitcasted pointer to a function defined in the current module. The code
13428 generator cannot determine the frame allocation offset of functions defined in
13429 other modules.
13431 The ``fp`` argument to '``llvm.localrecover``' must be a frame pointer of a
13432 call frame that is currently live. The return value of '``llvm.localaddress``'
13433 is one way to produce such a value, but various runtimes also expose a suitable
13434 pointer in platform-specific ways.
13436 The ``idx`` argument to '``llvm.localrecover``' indicates which alloca passed to
13437 '``llvm.localescape``' to recover. It is zero-indexed.
13439 Semantics:
13440 """"""""""
13442 These intrinsics allow a group of functions to share access to a set of local
13443 stack allocations of a one parent function. The parent function may call the
13444 '``llvm.localescape``' intrinsic once from the function entry block, and the
13445 child functions can use '``llvm.localrecover``' to access the escaped allocas.
13446 The '``llvm.localescape``' intrinsic blocks inlining, as inlining changes where
13447 the escaped allocas are allocated, which would break attempts to use
13448 '``llvm.localrecover``'.
13450 '``llvm.seh.try.begin``' and '``llvm.seh.try.end``' Intrinsics
13451 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13453 Syntax:
13454 """""""
13458       declare void @llvm.seh.try.begin()
13459       declare void @llvm.seh.try.end()
13461 Overview:
13462 """""""""
13464 The '``llvm.seh.try.begin``' and '``llvm.seh.try.end``' intrinsics mark
13465 the boundary of a _try region for Windows SEH Asynchrous Exception Handling.
13467 Semantics:
13468 """"""""""
13470 When a C-function is compiled with Windows SEH Asynchrous Exception option,
13471 -feh_asynch (aka MSVC -EHa), these two intrinsics are injected to mark _try
13472 boundary and to prevent potential exceptions from being moved across boundary.
13473 Any set of operations can then be confined to the region by reading their leaf
13474 inputs via volatile loads and writing their root outputs via volatile stores.
13476 '``llvm.seh.scope.begin``' and '``llvm.seh.scope.end``' Intrinsics
13477 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13479 Syntax:
13480 """""""
13484       declare void @llvm.seh.scope.begin()
13485       declare void @llvm.seh.scope.end()
13487 Overview:
13488 """""""""
13490 The '``llvm.seh.scope.begin``' and '``llvm.seh.scope.end``' intrinsics mark
13491 the boundary of a CPP object lifetime for Windows SEH Asynchrous Exception
13492 Handling (MSVC option -EHa).
13494 Semantics:
13495 """"""""""
13497 LLVM's ordinary exception-handling representation associates EH cleanups and
13498 handlers only with ``invoke``s, which normally correspond only to call sites.  To
13499 support arbitrary faulting instructions, it must be possible to recover the current
13500 EH scope for any instruction.  Turning every operation in LLVM that could fault
13501 into an ``invoke`` of a new, potentially-throwing intrinsic would require adding a
13502 large number of intrinsics, impede optimization of those operations, and make
13503 compilation slower by introducing many extra basic blocks.  These intrinsics can
13504 be used instead to mark the region protected by a cleanup, such as for a local
13505 C++ object with a non-trivial destructor.  ``llvm.seh.scope.begin`` is used to mark
13506 the start of the region; it is always called with ``invoke``, with the unwind block
13507 being the desired unwind destination for any potentially-throwing instructions
13508 within the region.  `llvm.seh.scope.end` is used to mark when the scope ends
13509 and the EH cleanup is no longer required (e.g. because the destructor is being
13510 called).
13512 .. _int_read_register:
13513 .. _int_read_volatile_register:
13514 .. _int_write_register:
13516 '``llvm.read_register``', '``llvm.read_volatile_register``', and '``llvm.write_register``' Intrinsics
13517 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13519 Syntax:
13520 """""""
13524       declare i32 @llvm.read_register.i32(metadata)
13525       declare i64 @llvm.read_register.i64(metadata)
13526       declare i32 @llvm.read_volatile_register.i32(metadata)
13527       declare i64 @llvm.read_volatile_register.i64(metadata)
13528       declare void @llvm.write_register.i32(metadata, i32 @value)
13529       declare void @llvm.write_register.i64(metadata, i64 @value)
13530       !0 = !{!"sp\00"}
13532 Overview:
13533 """""""""
13535 The '``llvm.read_register``', '``llvm.read_volatile_register``', and
13536 '``llvm.write_register``' intrinsics provide access to the named register.
13537 The register must be valid on the architecture being compiled to. The type
13538 needs to be compatible with the register being read.
13540 Semantics:
13541 """"""""""
13543 The '``llvm.read_register``' and '``llvm.read_volatile_register``' intrinsics
13544 return the current value of the register, where possible. The
13545 '``llvm.write_register``' intrinsic sets the current value of the register,
13546 where possible.
13548 A call to '``llvm.read_volatile_register``' is assumed to have side-effects
13549 and possibly return a different value each time (e.g. for a timer register).
13551 This is useful to implement named register global variables that need
13552 to always be mapped to a specific register, as is common practice on
13553 bare-metal programs including OS kernels.
13555 The compiler doesn't check for register availability or use of the used
13556 register in surrounding code, including inline assembly. Because of that,
13557 allocatable registers are not supported.
13559 Warning: So far it only works with the stack pointer on selected
13560 architectures (ARM, AArch64, PowerPC and x86_64). Significant amount of
13561 work is needed to support other registers and even more so, allocatable
13562 registers.
13564 .. _int_stacksave:
13566 '``llvm.stacksave``' Intrinsic
13567 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13569 Syntax:
13570 """""""
13574       declare ptr @llvm.stacksave.p0()
13575       declare ptr addrspace(5) @llvm.stacksave.p5()
13577 Overview:
13578 """""""""
13580 The '``llvm.stacksave``' intrinsic is used to remember the current state
13581 of the function stack, for use with
13582 :ref:`llvm.stackrestore <int_stackrestore>`. This is useful for
13583 implementing language features like scoped automatic variable sized
13584 arrays in C99.
13586 Semantics:
13587 """"""""""
13589 This intrinsic returns an opaque pointer value that can be passed to
13590 :ref:`llvm.stackrestore <int_stackrestore>`. When an
13591 ``llvm.stackrestore`` intrinsic is executed with a value saved from
13592 ``llvm.stacksave``, it effectively restores the state of the stack to
13593 the state it was in when the ``llvm.stacksave`` intrinsic executed. In
13594 practice, this pops any :ref:`alloca <i_alloca>` blocks from the stack
13595 that were allocated after the ``llvm.stacksave`` was executed. The
13596 address space should typically be the
13597 :ref:`alloca address space <alloca_addrspace>`.
13599 .. _int_stackrestore:
13601 '``llvm.stackrestore``' Intrinsic
13602 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13604 Syntax:
13605 """""""
13609       declare void @llvm.stackrestore.p0(ptr %ptr)
13610       declare void @llvm.stackrestore.p5(ptr addrspace(5) %ptr)
13612 Overview:
13613 """""""""
13615 The '``llvm.stackrestore``' intrinsic is used to restore the state of
13616 the function stack to the state it was in when the corresponding
13617 :ref:`llvm.stacksave <int_stacksave>` intrinsic executed. This is
13618 useful for implementing language features like scoped automatic
13619 variable sized arrays in C99. The address space should typically be
13620 the :ref:`alloca address space <alloca_addrspace>`.
13622 Semantics:
13623 """"""""""
13625 See the description for :ref:`llvm.stacksave <int_stacksave>`.
13627 .. _int_get_dynamic_area_offset:
13629 '``llvm.get.dynamic.area.offset``' Intrinsic
13630 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13632 Syntax:
13633 """""""
13637       declare i32 @llvm.get.dynamic.area.offset.i32()
13638       declare i64 @llvm.get.dynamic.area.offset.i64()
13640 Overview:
13641 """""""""
13643       The '``llvm.get.dynamic.area.offset.*``' intrinsic family is used to
13644       get the offset from native stack pointer to the address of the most
13645       recent dynamic alloca on the caller's stack. These intrinsics are
13646       intended for use in combination with
13647       :ref:`llvm.stacksave <int_stacksave>` to get a
13648       pointer to the most recent dynamic alloca. This is useful, for example,
13649       for AddressSanitizer's stack unpoisoning routines.
13651 Semantics:
13652 """"""""""
13654       These intrinsics return a non-negative integer value that can be used to
13655       get the address of the most recent dynamic alloca, allocated by :ref:`alloca <i_alloca>`
13656       on the caller's stack. In particular, for targets where stack grows downwards,
13657       adding this offset to the native stack pointer would get the address of the most
13658       recent dynamic alloca. For targets where stack grows upwards, the situation is a bit more
13659       complicated, because subtracting this value from stack pointer would get the address
13660       one past the end of the most recent dynamic alloca.
13662       Although for most targets `llvm.get.dynamic.area.offset <int_get_dynamic_area_offset>`
13663       returns just a zero, for others, such as PowerPC and PowerPC64, it returns a
13664       compile-time-known constant value.
13666       The return value type of :ref:`llvm.get.dynamic.area.offset <int_get_dynamic_area_offset>`
13667       must match the target's default address space's (address space 0) pointer type.
13669 '``llvm.prefetch``' Intrinsic
13670 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13672 Syntax:
13673 """""""
13677       declare void @llvm.prefetch(ptr <address>, i32 <rw>, i32 <locality>, i32 <cache type>)
13679 Overview:
13680 """""""""
13682 The '``llvm.prefetch``' intrinsic is a hint to the code generator to
13683 insert a prefetch instruction if supported; otherwise, it is a noop.
13684 Prefetches have no effect on the behavior of the program but can change
13685 its performance characteristics.
13687 Arguments:
13688 """"""""""
13690 ``address`` is the address to be prefetched, ``rw`` is the specifier
13691 determining if the fetch should be for a read (0) or write (1), and
13692 ``locality`` is a temporal locality specifier ranging from (0) - no
13693 locality, to (3) - extremely local keep in cache. The ``cache type``
13694 specifies whether the prefetch is performed on the data (1) or
13695 instruction (0) cache. The ``rw``, ``locality`` and ``cache type``
13696 arguments must be constant integers.
13698 Semantics:
13699 """"""""""
13701 This intrinsic does not modify the behavior of the program. In
13702 particular, prefetches cannot trap and do not produce a value. On
13703 targets that support this intrinsic, the prefetch can provide hints to
13704 the processor cache for better performance.
13706 '``llvm.pcmarker``' Intrinsic
13707 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13709 Syntax:
13710 """""""
13714       declare void @llvm.pcmarker(i32 <id>)
13716 Overview:
13717 """""""""
13719 The '``llvm.pcmarker``' intrinsic is a method to export a Program
13720 Counter (PC) in a region of code to simulators and other tools. The
13721 method is target specific, but it is expected that the marker will use
13722 exported symbols to transmit the PC of the marker. The marker makes no
13723 guarantees that it will remain with any specific instruction after
13724 optimizations. It is possible that the presence of a marker will inhibit
13725 optimizations. The intended use is to be inserted after optimizations to
13726 allow correlations of simulation runs.
13728 Arguments:
13729 """"""""""
13731 ``id`` is a numerical id identifying the marker.
13733 Semantics:
13734 """"""""""
13736 This intrinsic does not modify the behavior of the program. Backends
13737 that do not support this intrinsic may ignore it.
13739 '``llvm.readcyclecounter``' Intrinsic
13740 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13742 Syntax:
13743 """""""
13747       declare i64 @llvm.readcyclecounter()
13749 Overview:
13750 """""""""
13752 The '``llvm.readcyclecounter``' intrinsic provides access to the cycle
13753 counter register (or similar low latency, high accuracy clocks) on those
13754 targets that support it. On X86, it should map to RDTSC. On Alpha, it
13755 should map to RPCC. As the backing counters overflow quickly (on the
13756 order of 9 seconds on alpha), this should only be used for small
13757 timings.
13759 Semantics:
13760 """"""""""
13762 When directly supported, reading the cycle counter should not modify any
13763 memory. Implementations are allowed to either return an application
13764 specific value or a system wide value. On backends without support, this
13765 is lowered to a constant 0.
13767 Note that runtime support may be conditional on the privilege-level code is
13768 running at and the host platform.
13770 '``llvm.clear_cache``' Intrinsic
13771 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13773 Syntax:
13774 """""""
13778       declare void @llvm.clear_cache(ptr, ptr)
13780 Overview:
13781 """""""""
13783 The '``llvm.clear_cache``' intrinsic ensures visibility of modifications
13784 in the specified range to the execution unit of the processor. On
13785 targets with non-unified instruction and data cache, the implementation
13786 flushes the instruction cache.
13788 Semantics:
13789 """"""""""
13791 On platforms with coherent instruction and data caches (e.g. x86), this
13792 intrinsic is a nop. On platforms with non-coherent instruction and data
13793 cache (e.g. ARM, MIPS), the intrinsic is lowered either to appropriate
13794 instructions or a system call, if cache flushing requires special
13795 privileges.
13797 The default behavior is to emit a call to ``__clear_cache`` from the run
13798 time library.
13800 This intrinsic does *not* empty the instruction pipeline. Modifications
13801 of the current function are outside the scope of the intrinsic.
13803 '``llvm.instrprof.increment``' Intrinsic
13804 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13806 Syntax:
13807 """""""
13811       declare void @llvm.instrprof.increment(ptr <name>, i64 <hash>,
13812                                              i32 <num-counters>, i32 <index>)
13814 Overview:
13815 """""""""
13817 The '``llvm.instrprof.increment``' intrinsic can be emitted by a
13818 frontend for use with instrumentation based profiling. These will be
13819 lowered by the ``-instrprof`` pass to generate execution counts of a
13820 program at runtime.
13822 Arguments:
13823 """"""""""
13825 The first argument is a pointer to a global variable containing the
13826 name of the entity being instrumented. This should generally be the
13827 (mangled) function name for a set of counters.
13829 The second argument is a hash value that can be used by the consumer
13830 of the profile data to detect changes to the instrumented source, and
13831 the third is the number of counters associated with ``name``. It is an
13832 error if ``hash`` or ``num-counters`` differ between two instances of
13833 ``instrprof.increment`` that refer to the same name.
13835 The last argument refers to which of the counters for ``name`` should
13836 be incremented. It should be a value between 0 and ``num-counters``.
13838 Semantics:
13839 """"""""""
13841 This intrinsic represents an increment of a profiling counter. It will
13842 cause the ``-instrprof`` pass to generate the appropriate data
13843 structures and the code to increment the appropriate value, in a
13844 format that can be written out by a compiler runtime and consumed via
13845 the ``llvm-profdata`` tool.
13847 '``llvm.instrprof.increment.step``' Intrinsic
13848 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13850 Syntax:
13851 """""""
13855       declare void @llvm.instrprof.increment.step(ptr <name>, i64 <hash>,
13856                                                   i32 <num-counters>,
13857                                                   i32 <index>, i64 <step>)
13859 Overview:
13860 """""""""
13862 The '``llvm.instrprof.increment.step``' intrinsic is an extension to
13863 the '``llvm.instrprof.increment``' intrinsic with an additional fifth
13864 argument to specify the step of the increment.
13866 Arguments:
13867 """"""""""
13868 The first four arguments are the same as '``llvm.instrprof.increment``'
13869 intrinsic.
13871 The last argument specifies the value of the increment of the counter variable.
13873 Semantics:
13874 """"""""""
13875 See description of '``llvm.instrprof.increment``' intrinsic.
13877 '``llvm.instrprof.timestamp``' Intrinsic
13878 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13880 Syntax:
13881 """""""
13885       declare void @llvm.instrprof.timestamp(i8* <name>, i64 <hash>,
13886                                              i32 <num-counters>, i32 <index>)
13888 Overview:
13889 """""""""
13891 The '``llvm.instrprof.timestamp``' intrinsic is used to implement temporal
13892 profiling.
13894 Arguments:
13895 """"""""""
13896 The arguments are the same as '``llvm.instrprof.increment``'. The ``index`` is
13897 expected to always be zero.
13899 Semantics:
13900 """"""""""
13901 Similar to the '``llvm.instrprof.increment``' intrinsic, but it stores a
13902 timestamp representing when this function was executed for the first time.
13904 '``llvm.instrprof.cover``' Intrinsic
13905 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13907 Syntax:
13908 """""""
13912       declare void @llvm.instrprof.cover(ptr <name>, i64 <hash>,
13913                                          i32 <num-counters>, i32 <index>)
13915 Overview:
13916 """""""""
13918 The '``llvm.instrprof.cover``' intrinsic is used to implement coverage
13919 instrumentation.
13921 Arguments:
13922 """"""""""
13923 The arguments are the same as the first four arguments of
13924 '``llvm.instrprof.increment``'.
13926 Semantics:
13927 """"""""""
13928 Similar to the '``llvm.instrprof.increment``' intrinsic, but it stores zero to
13929 the profiling variable to signify that the function has been covered. We store
13930 zero because this is more efficient on some targets.
13932 '``llvm.instrprof.value.profile``' Intrinsic
13933 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13935 Syntax:
13936 """""""
13940       declare void @llvm.instrprof.value.profile(ptr <name>, i64 <hash>,
13941                                                  i64 <value>, i32 <value_kind>,
13942                                                  i32 <index>)
13944 Overview:
13945 """""""""
13947 The '``llvm.instrprof.value.profile``' intrinsic can be emitted by a
13948 frontend for use with instrumentation based profiling. This will be
13949 lowered by the ``-instrprof`` pass to find out the target values,
13950 instrumented expressions take in a program at runtime.
13952 Arguments:
13953 """"""""""
13955 The first argument is a pointer to a global variable containing the
13956 name of the entity being instrumented. ``name`` should generally be the
13957 (mangled) function name for a set of counters.
13959 The second argument is a hash value that can be used by the consumer
13960 of the profile data to detect changes to the instrumented source. It
13961 is an error if ``hash`` differs between two instances of
13962 ``llvm.instrprof.*`` that refer to the same name.
13964 The third argument is the value of the expression being profiled. The profiled
13965 expression's value should be representable as an unsigned 64-bit value. The
13966 fourth argument represents the kind of value profiling that is being done. The
13967 supported value profiling kinds are enumerated through the
13968 ``InstrProfValueKind`` type declared in the
13969 ``<include/llvm/ProfileData/InstrProf.h>`` header file. The last argument is the
13970 index of the instrumented expression within ``name``. It should be >= 0.
13972 Semantics:
13973 """"""""""
13975 This intrinsic represents the point where a call to a runtime routine
13976 should be inserted for value profiling of target expressions. ``-instrprof``
13977 pass will generate the appropriate data structures and replace the
13978 ``llvm.instrprof.value.profile`` intrinsic with the call to the profile
13979 runtime library with proper arguments.
13981 '``llvm.instrprof.mcdc.parameters``' Intrinsic
13982 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13984 Syntax:
13985 """""""
13989       declare void @llvm.instrprof.mcdc.parameters(ptr <name>, i64 <hash>,
13990                                                    i32 <bitmap-bytes>)
13992 Overview:
13993 """""""""
13995 The '``llvm.instrprof.mcdc.parameters``' intrinsic is used to initiate MC/DC
13996 code coverage instrumentation for a function.
13998 Arguments:
13999 """"""""""
14001 The first argument is a pointer to a global variable containing the
14002 name of the entity being instrumented. This should generally be the
14003 (mangled) function name for a set of counters.
14005 The second argument is a hash value that can be used by the consumer
14006 of the profile data to detect changes to the instrumented source.
14008 The third argument is the number of bitmap bytes required by the function to
14009 record the number of test vectors executed for each boolean expression.
14011 Semantics:
14012 """"""""""
14014 This intrinsic represents basic MC/DC parameters initiating one or more MC/DC
14015 instrumentation sequences in a function. It will cause the ``-instrprof`` pass
14016 to generate the appropriate data structures and the code to instrument MC/DC
14017 test vectors in a format that can be written out by a compiler runtime and
14018 consumed via the ``llvm-profdata`` tool.
14020 '``llvm.instrprof.mcdc.condbitmap.update``' Intrinsic
14021 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14023 Syntax:
14024 """""""
14028       declare void @llvm.instrprof.mcdc.condbitmap.update(ptr <name>, i64 <hash>,
14029                                                           i32 <condition-id>,
14030                                                           ptr <mcdc-temp-addr>,
14031                                                           i1 <bool-value>)
14033 Overview:
14034 """""""""
14036 The '``llvm.instrprof.mcdc.condbitmap.update``' intrinsic is used to track
14037 MC/DC condition evaluation for each condition in a boolean expression.
14039 Arguments:
14040 """"""""""
14042 The first argument is a pointer to a global variable containing the
14043 name of the entity being instrumented. This should generally be the
14044 (mangled) function name for a set of counters.
14046 The second argument is a hash value that can be used by the consumer
14047 of the profile data to detect changes to the instrumented source.
14049 The third argument is an ID of a condition to track. This value is used as a
14050 bit index into the condition bitmap.
14052 The fourth argument is the address of the condition bitmap.
14054 The fifth argument is the boolean value representing the evaluation of the
14055 condition (true or false)
14057 Semantics:
14058 """"""""""
14060 This intrinsic represents the update of a condition bitmap that is local to a
14061 function and will cause the ``-instrprof`` pass to generate the code to
14062 instrument the control flow around each condition in a boolean expression. The
14063 ID of each condition corresponds to a bit index in the condition bitmap which
14064 is set based on the evaluation of the condition.
14066 '``llvm.instrprof.mcdc.tvbitmap.update``' Intrinsic
14067 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14069 Syntax:
14070 """""""
14074       declare void @llvm.instrprof.mcdc.tvbitmap.update(ptr <name>, i64 <hash>,
14075                                                         i32 <bitmap-bytes>)
14076                                                         i32 <bitmap-index>,
14077                                                         ptr <mcdc-temp-addr>)
14079 Overview:
14080 """""""""
14082 The '``llvm.instrprof.mcdc.tvbitmap.update``' intrinsic is used to track MC/DC
14083 test vector execution after each boolean expression has been fully executed.
14084 The overall value of the condition bitmap, after it has been successively
14085 updated using the '``llvm.instrprof.mcdc.condbitmap.update``' intrinsic with
14086 the true or false evaluation of each condition, uniquely identifies an executed
14087 MC/DC test vector and is used as a bit index into the global test vector
14088 bitmap.
14090 Arguments:
14091 """"""""""
14093 The first argument is a pointer to a global variable containing the
14094 name of the entity being instrumented. This should generally be the
14095 (mangled) function name for a set of counters.
14097 The second argument is a hash value that can be used by the consumer
14098 of the profile data to detect changes to the instrumented source.
14100 The third argument is the number of bitmap bytes required by the function to
14101 record the number of test vectors executed for each boolean expression.
14103 The fourth argument is the byte index into the global test vector bitmap
14104 corresponding to the function.
14106 The fifth argument is the address of the condition bitmap, which contains a
14107 value representing an executed MC/DC test vector. It is loaded and used as the
14108 bit index of the test vector bitmap.
14110 Semantics:
14111 """"""""""
14113 This intrinsic represents the final operation of an MC/DC instrumentation
14114 sequence and will cause the ``-instrprof`` pass to generate the code to
14115 instrument an update of a function's global test vector bitmap to indicate that
14116 a test vector has been executed. The global test vector bitmap can be consumed
14117 by the ``llvm-profdata`` and ``llvm-cov`` tools.
14119 '``llvm.thread.pointer``' Intrinsic
14120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14122 Syntax:
14123 """""""
14127       declare ptr @llvm.thread.pointer()
14129 Overview:
14130 """""""""
14132 The '``llvm.thread.pointer``' intrinsic returns the value of the thread
14133 pointer.
14135 Semantics:
14136 """"""""""
14138 The '``llvm.thread.pointer``' intrinsic returns a pointer to the TLS area
14139 for the current thread.  The exact semantics of this value are target
14140 specific: it may point to the start of TLS area, to the end, or somewhere
14141 in the middle.  Depending on the target, this intrinsic may read a register,
14142 call a helper function, read from an alternate memory space, or perform
14143 other operations necessary to locate the TLS area.  Not all targets support
14144 this intrinsic.
14146 '``llvm.call.preallocated.setup``' Intrinsic
14147 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14149 Syntax:
14150 """""""
14154       declare token @llvm.call.preallocated.setup(i32 %num_args)
14156 Overview:
14157 """""""""
14159 The '``llvm.call.preallocated.setup``' intrinsic returns a token which can
14160 be used with a call's ``"preallocated"`` operand bundle to indicate that
14161 certain arguments are allocated and initialized before the call.
14163 Semantics:
14164 """"""""""
14166 The '``llvm.call.preallocated.setup``' intrinsic returns a token which is
14167 associated with at most one call. The token can be passed to
14168 '``@llvm.call.preallocated.arg``' to get a pointer to get that
14169 corresponding argument. The token must be the parameter to a
14170 ``"preallocated"`` operand bundle for the corresponding call.
14172 Nested calls to '``llvm.call.preallocated.setup``' are allowed, but must
14173 be properly nested. e.g.
14175 :: code-block:: llvm
14177       %t1 = call token @llvm.call.preallocated.setup(i32 0)
14178       %t2 = call token @llvm.call.preallocated.setup(i32 0)
14179       call void foo() ["preallocated"(token %t2)]
14180       call void foo() ["preallocated"(token %t1)]
14182 is allowed, but not
14184 :: code-block:: llvm
14186       %t1 = call token @llvm.call.preallocated.setup(i32 0)
14187       %t2 = call token @llvm.call.preallocated.setup(i32 0)
14188       call void foo() ["preallocated"(token %t1)]
14189       call void foo() ["preallocated"(token %t2)]
14191 .. _int_call_preallocated_arg:
14193 '``llvm.call.preallocated.arg``' Intrinsic
14194 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14196 Syntax:
14197 """""""
14201       declare ptr @llvm.call.preallocated.arg(token %setup_token, i32 %arg_index)
14203 Overview:
14204 """""""""
14206 The '``llvm.call.preallocated.arg``' intrinsic returns a pointer to the
14207 corresponding preallocated argument for the preallocated call.
14209 Semantics:
14210 """"""""""
14212 The '``llvm.call.preallocated.arg``' intrinsic returns a pointer to the
14213 ``%arg_index``th argument with the ``preallocated`` attribute for
14214 the call associated with the ``%setup_token``, which must be from
14215 '``llvm.call.preallocated.setup``'.
14217 A call to '``llvm.call.preallocated.arg``' must have a call site
14218 ``preallocated`` attribute. The type of the ``preallocated`` attribute must
14219 match the type used by the ``preallocated`` attribute of the corresponding
14220 argument at the preallocated call. The type is used in the case that an
14221 ``llvm.call.preallocated.setup`` does not have a corresponding call (e.g. due
14222 to DCE), where otherwise we cannot know how large the arguments are.
14224 It is undefined behavior if this is called with a token from an
14225 '``llvm.call.preallocated.setup``' if another
14226 '``llvm.call.preallocated.setup``' has already been called or if the
14227 preallocated call corresponding to the '``llvm.call.preallocated.setup``'
14228 has already been called.
14230 .. _int_call_preallocated_teardown:
14232 '``llvm.call.preallocated.teardown``' Intrinsic
14233 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14235 Syntax:
14236 """""""
14240       declare ptr @llvm.call.preallocated.teardown(token %setup_token)
14242 Overview:
14243 """""""""
14245 The '``llvm.call.preallocated.teardown``' intrinsic cleans up the stack
14246 created by a '``llvm.call.preallocated.setup``'.
14248 Semantics:
14249 """"""""""
14251 The token argument must be a '``llvm.call.preallocated.setup``'.
14253 The '``llvm.call.preallocated.teardown``' intrinsic cleans up the stack
14254 allocated by the corresponding '``llvm.call.preallocated.setup``'. Exactly
14255 one of this or the preallocated call must be called to prevent stack leaks.
14256 It is undefined behavior to call both a '``llvm.call.preallocated.teardown``'
14257 and the preallocated call for a given '``llvm.call.preallocated.setup``'.
14259 For example, if the stack is allocated for a preallocated call by a
14260 '``llvm.call.preallocated.setup``', then an initializer function called on an
14261 allocated argument throws an exception, there should be a
14262 '``llvm.call.preallocated.teardown``' in the exception handler to prevent
14263 stack leaks.
14265 Following the nesting rules in '``llvm.call.preallocated.setup``', nested
14266 calls to '``llvm.call.preallocated.setup``' and
14267 '``llvm.call.preallocated.teardown``' are allowed but must be properly
14268 nested.
14270 Example:
14271 """"""""
14273 .. code-block:: llvm
14275         %cs = call token @llvm.call.preallocated.setup(i32 1)
14276         %x = call ptr @llvm.call.preallocated.arg(token %cs, i32 0) preallocated(i32)
14277         invoke void @constructor(ptr %x) to label %conta unwind label %contb
14278     conta:
14279         call void @foo1(ptr preallocated(i32) %x) ["preallocated"(token %cs)]
14280         ret void
14281     contb:
14282         %s = catchswitch within none [label %catch] unwind to caller
14283     catch:
14284         %p = catchpad within %s []
14285         call void @llvm.call.preallocated.teardown(token %cs)
14286         ret void
14288 Standard C/C++ Library Intrinsics
14289 ---------------------------------
14291 LLVM provides intrinsics for a few important standard C/C++ library
14292 functions. These intrinsics allow source-language front-ends to pass
14293 information about the alignment of the pointer arguments to the code
14294 generator, providing opportunity for more efficient code generation.
14296 .. _int_abs:
14298 '``llvm.abs.*``' Intrinsic
14299 ^^^^^^^^^^^^^^^^^^^^^^^^^^
14301 Syntax:
14302 """""""
14304 This is an overloaded intrinsic. You can use ``llvm.abs`` on any
14305 integer bit width or any vector of integer elements.
14309       declare i32 @llvm.abs.i32(i32 <src>, i1 <is_int_min_poison>)
14310       declare <4 x i32> @llvm.abs.v4i32(<4 x i32> <src>, i1 <is_int_min_poison>)
14312 Overview:
14313 """""""""
14315 The '``llvm.abs``' family of intrinsic functions returns the absolute value
14316 of an argument.
14318 Arguments:
14319 """"""""""
14321 The first argument is the value for which the absolute value is to be returned.
14322 This argument may be of any integer type or a vector with integer element type.
14323 The return type must match the first argument type.
14325 The second argument must be a constant and is a flag to indicate whether the
14326 result value of the '``llvm.abs``' intrinsic is a
14327 :ref:`poison value <poisonvalues>` if the argument is statically or dynamically
14328 an ``INT_MIN`` value.
14330 Semantics:
14331 """"""""""
14333 The '``llvm.abs``' intrinsic returns the magnitude (always positive) of the
14334 argument or each element of a vector argument.". If the argument is ``INT_MIN``,
14335 then the result is also ``INT_MIN`` if ``is_int_min_poison == 0`` and
14336 ``poison`` otherwise.
14339 .. _int_smax:
14341 '``llvm.smax.*``' Intrinsic
14342 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14344 Syntax:
14345 """""""
14347 This is an overloaded intrinsic. You can use ``@llvm.smax`` on any
14348 integer bit width or any vector of integer elements.
14352       declare i32 @llvm.smax.i32(i32 %a, i32 %b)
14353       declare <4 x i32> @llvm.smax.v4i32(<4 x i32> %a, <4 x i32> %b)
14355 Overview:
14356 """""""""
14358 Return the larger of ``%a`` and ``%b`` comparing the values as signed integers.
14359 Vector intrinsics operate on a per-element basis. The larger element of ``%a``
14360 and ``%b`` at a given index is returned for that index.
14362 Arguments:
14363 """"""""""
14365 The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
14366 integer element type. The argument types must match each other, and the return
14367 type must match the argument type.
14370 .. _int_smin:
14372 '``llvm.smin.*``' Intrinsic
14373 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14375 Syntax:
14376 """""""
14378 This is an overloaded intrinsic. You can use ``@llvm.smin`` on any
14379 integer bit width or any vector of integer elements.
14383       declare i32 @llvm.smin.i32(i32 %a, i32 %b)
14384       declare <4 x i32> @llvm.smin.v4i32(<4 x i32> %a, <4 x i32> %b)
14386 Overview:
14387 """""""""
14389 Return the smaller of ``%a`` and ``%b`` comparing the values as signed integers.
14390 Vector intrinsics operate on a per-element basis. The smaller element of ``%a``
14391 and ``%b`` at a given index is returned for that index.
14393 Arguments:
14394 """"""""""
14396 The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
14397 integer element type. The argument types must match each other, and the return
14398 type must match the argument type.
14401 .. _int_umax:
14403 '``llvm.umax.*``' Intrinsic
14404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14406 Syntax:
14407 """""""
14409 This is an overloaded intrinsic. You can use ``@llvm.umax`` on any
14410 integer bit width or any vector of integer elements.
14414       declare i32 @llvm.umax.i32(i32 %a, i32 %b)
14415       declare <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> %b)
14417 Overview:
14418 """""""""
14420 Return the larger of ``%a`` and ``%b`` comparing the values as unsigned
14421 integers. Vector intrinsics operate on a per-element basis. The larger element
14422 of ``%a`` and ``%b`` at a given index is returned for that index.
14424 Arguments:
14425 """"""""""
14427 The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
14428 integer element type. The argument types must match each other, and the return
14429 type must match the argument type.
14432 .. _int_umin:
14434 '``llvm.umin.*``' Intrinsic
14435 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14437 Syntax:
14438 """""""
14440 This is an overloaded intrinsic. You can use ``@llvm.umin`` on any
14441 integer bit width or any vector of integer elements.
14445       declare i32 @llvm.umin.i32(i32 %a, i32 %b)
14446       declare <4 x i32> @llvm.umin.v4i32(<4 x i32> %a, <4 x i32> %b)
14448 Overview:
14449 """""""""
14451 Return the smaller of ``%a`` and ``%b`` comparing the values as unsigned
14452 integers. Vector intrinsics operate on a per-element basis. The smaller element
14453 of ``%a`` and ``%b`` at a given index is returned for that index.
14455 Arguments:
14456 """"""""""
14458 The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
14459 integer element type. The argument types must match each other, and the return
14460 type must match the argument type.
14463 .. _int_memcpy:
14465 '``llvm.memcpy``' Intrinsic
14466 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14468 Syntax:
14469 """""""
14471 This is an overloaded intrinsic. You can use ``llvm.memcpy`` on any
14472 integer bit width and for different address spaces. Not all targets
14473 support all bit widths however.
14477       declare void @llvm.memcpy.p0.p0.i32(ptr <dest>, ptr <src>,
14478                                           i32 <len>, i1 <isvolatile>)
14479       declare void @llvm.memcpy.p0.p0.i64(ptr <dest>, ptr <src>,
14480                                           i64 <len>, i1 <isvolatile>)
14482 Overview:
14483 """""""""
14485 The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
14486 source location to the destination location.
14488 Note that, unlike the standard libc function, the ``llvm.memcpy.*``
14489 intrinsics do not return a value, takes extra isvolatile
14490 arguments and the pointers can be in specified address spaces.
14492 Arguments:
14493 """"""""""
14495 The first argument is a pointer to the destination, the second is a
14496 pointer to the source. The third argument is an integer argument
14497 specifying the number of bytes to copy, and the fourth is a
14498 boolean indicating a volatile access.
14500 The :ref:`align <attr_align>` parameter attribute can be provided
14501 for the first and second arguments.
14503 If the ``isvolatile`` parameter is ``true``, the ``llvm.memcpy`` call is
14504 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
14505 very cleanly specified and it is unwise to depend on it.
14507 Semantics:
14508 """"""""""
14510 The '``llvm.memcpy.*``' intrinsics copy a block of memory from the source
14511 location to the destination location, which must either be equal or
14512 non-overlapping. It copies "len" bytes of memory over. If the argument is known
14513 to be aligned to some boundary, this can be specified as an attribute on the
14514 argument.
14516 If ``<len>`` is 0, it is no-op modulo the behavior of attributes attached to
14517 the arguments.
14518 If ``<len>`` is not a well-defined value, the behavior is undefined.
14519 If ``<len>`` is not zero, both ``<dest>`` and ``<src>`` should be well-defined,
14520 otherwise the behavior is undefined.
14522 .. _int_memcpy_inline:
14524 '``llvm.memcpy.inline``' Intrinsic
14525 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14527 Syntax:
14528 """""""
14530 This is an overloaded intrinsic. You can use ``llvm.memcpy.inline`` on any
14531 integer bit width and for different address spaces. Not all targets
14532 support all bit widths however.
14536       declare void @llvm.memcpy.inline.p0.p0.i32(ptr <dest>, ptr <src>,
14537                                                  i32 <len>, i1 <isvolatile>)
14538       declare void @llvm.memcpy.inline.p0.p0.i64(ptr <dest>, ptr <src>,
14539                                                  i64 <len>, i1 <isvolatile>)
14541 Overview:
14542 """""""""
14544 The '``llvm.memcpy.inline.*``' intrinsics copy a block of memory from the
14545 source location to the destination location and guarantees that no external
14546 functions are called.
14548 Note that, unlike the standard libc function, the ``llvm.memcpy.inline.*``
14549 intrinsics do not return a value, takes extra isvolatile
14550 arguments and the pointers can be in specified address spaces.
14552 Arguments:
14553 """"""""""
14555 The first argument is a pointer to the destination, the second is a
14556 pointer to the source. The third argument is a constant integer argument
14557 specifying the number of bytes to copy, and the fourth is a
14558 boolean indicating a volatile access.
14560 The :ref:`align <attr_align>` parameter attribute can be provided
14561 for the first and second arguments.
14563 If the ``isvolatile`` parameter is ``true``, the ``llvm.memcpy.inline`` call is
14564 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
14565 very cleanly specified and it is unwise to depend on it.
14567 Semantics:
14568 """"""""""
14570 The '``llvm.memcpy.inline.*``' intrinsics copy a block of memory from the
14571 source location to the destination location, which are not allowed to
14572 overlap. It copies "len" bytes of memory over. If the argument is known
14573 to be aligned to some boundary, this can be specified as an attribute on
14574 the argument.
14575 The behavior of '``llvm.memcpy.inline.*``' is equivalent to the behavior of
14576 '``llvm.memcpy.*``', but the generated code is guaranteed not to call any
14577 external functions.
14579 .. _int_memmove:
14581 '``llvm.memmove``' Intrinsic
14582 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14584 Syntax:
14585 """""""
14587 This is an overloaded intrinsic. You can use llvm.memmove on any integer
14588 bit width and for different address space. Not all targets support all
14589 bit widths however.
14593       declare void @llvm.memmove.p0.p0.i32(ptr <dest>, ptr <src>,
14594                                            i32 <len>, i1 <isvolatile>)
14595       declare void @llvm.memmove.p0.p0.i64(ptr <dest>, ptr <src>,
14596                                            i64 <len>, i1 <isvolatile>)
14598 Overview:
14599 """""""""
14601 The '``llvm.memmove.*``' intrinsics move a block of memory from the
14602 source location to the destination location. It is similar to the
14603 '``llvm.memcpy``' intrinsic but allows the two memory locations to
14604 overlap.
14606 Note that, unlike the standard libc function, the ``llvm.memmove.*``
14607 intrinsics do not return a value, takes an extra isvolatile
14608 argument and the pointers can be in specified address spaces.
14610 Arguments:
14611 """"""""""
14613 The first argument is a pointer to the destination, the second is a
14614 pointer to the source. The third argument is an integer argument
14615 specifying the number of bytes to copy, and the fourth is a
14616 boolean indicating a volatile access.
14618 The :ref:`align <attr_align>` parameter attribute can be provided
14619 for the first and second arguments.
14621 If the ``isvolatile`` parameter is ``true``, the ``llvm.memmove`` call
14622 is a :ref:`volatile operation <volatile>`. The detailed access behavior is
14623 not very cleanly specified and it is unwise to depend on it.
14625 Semantics:
14626 """"""""""
14628 The '``llvm.memmove.*``' intrinsics copy a block of memory from the
14629 source location to the destination location, which may overlap. It
14630 copies "len" bytes of memory over. If the argument is known to be
14631 aligned to some boundary, this can be specified as an attribute on
14632 the argument.
14634 If ``<len>`` is 0, it is no-op modulo the behavior of attributes attached to
14635 the arguments.
14636 If ``<len>`` is not a well-defined value, the behavior is undefined.
14637 If ``<len>`` is not zero, both ``<dest>`` and ``<src>`` should be well-defined,
14638 otherwise the behavior is undefined.
14640 .. _int_memset:
14642 '``llvm.memset.*``' Intrinsics
14643 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14645 Syntax:
14646 """""""
14648 This is an overloaded intrinsic. You can use llvm.memset on any integer
14649 bit width and for different address spaces. However, not all targets
14650 support all bit widths.
14654       declare void @llvm.memset.p0.i32(ptr <dest>, i8 <val>,
14655                                        i32 <len>, i1 <isvolatile>)
14656       declare void @llvm.memset.p0.i64(ptr <dest>, i8 <val>,
14657                                        i64 <len>, i1 <isvolatile>)
14659 Overview:
14660 """""""""
14662 The '``llvm.memset.*``' intrinsics fill a block of memory with a
14663 particular byte value.
14665 Note that, unlike the standard libc function, the ``llvm.memset``
14666 intrinsic does not return a value and takes an extra volatile
14667 argument. Also, the destination can be in an arbitrary address space.
14669 Arguments:
14670 """"""""""
14672 The first argument is a pointer to the destination to fill, the second
14673 is the byte value with which to fill it, the third argument is an
14674 integer argument specifying the number of bytes to fill, and the fourth
14675 is a boolean indicating a volatile access.
14677 The :ref:`align <attr_align>` parameter attribute can be provided
14678 for the first arguments.
14680 If the ``isvolatile`` parameter is ``true``, the ``llvm.memset`` call is
14681 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
14682 very cleanly specified and it is unwise to depend on it.
14684 Semantics:
14685 """"""""""
14687 The '``llvm.memset.*``' intrinsics fill "len" bytes of memory starting
14688 at the destination location. If the argument is known to be
14689 aligned to some boundary, this can be specified as an attribute on
14690 the argument.
14692 If ``<len>`` is 0, it is no-op modulo the behavior of attributes attached to
14693 the arguments.
14694 If ``<len>`` is not a well-defined value, the behavior is undefined.
14695 If ``<len>`` is not zero, ``<dest>`` should be well-defined, otherwise the
14696 behavior is undefined.
14698 .. _int_memset_inline:
14700 '``llvm.memset.inline``' Intrinsic
14701 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14703 Syntax:
14704 """""""
14706 This is an overloaded intrinsic. You can use ``llvm.memset.inline`` on any
14707 integer bit width and for different address spaces. Not all targets
14708 support all bit widths however.
14712       declare void @llvm.memset.inline.p0.p0i8.i32(ptr <dest>, i8 <val>,
14713                                                    i32 <len>, i1 <isvolatile>)
14714       declare void @llvm.memset.inline.p0.p0.i64(ptr <dest>, i8 <val>,
14715                                                  i64 <len>, i1 <isvolatile>)
14717 Overview:
14718 """""""""
14720 The '``llvm.memset.inline.*``' intrinsics fill a block of memory with a
14721 particular byte value and guarantees that no external functions are called.
14723 Note that, unlike the standard libc function, the ``llvm.memset.inline.*``
14724 intrinsics do not return a value, take an extra isvolatile argument and the
14725 pointer can be in specified address spaces.
14727 Arguments:
14728 """"""""""
14730 The first argument is a pointer to the destination to fill, the second
14731 is the byte value with which to fill it, the third argument is a constant
14732 integer argument specifying the number of bytes to fill, and the fourth
14733 is a boolean indicating a volatile access.
14735 The :ref:`align <attr_align>` parameter attribute can be provided
14736 for the first argument.
14738 If the ``isvolatile`` parameter is ``true``, the ``llvm.memset.inline`` call is
14739 a :ref:`volatile operation <volatile>`. The detailed access behavior is not
14740 very cleanly specified and it is unwise to depend on it.
14742 Semantics:
14743 """"""""""
14745 The '``llvm.memset.inline.*``' intrinsics fill "len" bytes of memory starting
14746 at the destination location. If the argument is known to be
14747 aligned to some boundary, this can be specified as an attribute on
14748 the argument.
14750 ``len`` must be a constant expression.
14751 If ``<len>`` is 0, it is no-op modulo the behavior of attributes attached to
14752 the arguments.
14753 If ``<len>`` is not a well-defined value, the behavior is undefined.
14754 If ``<len>`` is not zero, ``<dest>`` should be well-defined, otherwise the
14755 behavior is undefined.
14757 The behavior of '``llvm.memset.inline.*``' is equivalent to the behavior of
14758 '``llvm.memset.*``', but the generated code is guaranteed not to call any
14759 external functions.
14761 .. _int_sqrt:
14763 '``llvm.sqrt.*``' Intrinsic
14764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14766 Syntax:
14767 """""""
14769 This is an overloaded intrinsic. You can use ``llvm.sqrt`` on any
14770 floating-point or vector of floating-point type. Not all targets support
14771 all types however.
14775       declare float     @llvm.sqrt.f32(float %Val)
14776       declare double    @llvm.sqrt.f64(double %Val)
14777       declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
14778       declare fp128     @llvm.sqrt.f128(fp128 %Val)
14779       declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
14781 Overview:
14782 """""""""
14784 The '``llvm.sqrt``' intrinsics return the square root of the specified value.
14786 Arguments:
14787 """"""""""
14789 The argument and return value are floating-point numbers of the same type.
14791 Semantics:
14792 """"""""""
14794 Return the same value as a corresponding libm '``sqrt``' function but without
14795 trapping or setting ``errno``. For types specified by IEEE-754, the result
14796 matches a conforming libm implementation.
14798 When specified with the fast-math-flag 'afn', the result may be approximated
14799 using a less accurate calculation.
14801 '``llvm.powi.*``' Intrinsic
14802 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14804 Syntax:
14805 """""""
14807 This is an overloaded intrinsic. You can use ``llvm.powi`` on any
14808 floating-point or vector of floating-point type. Not all targets support
14809 all types however.
14811 Generally, the only supported type for the exponent is the one matching
14812 with the C type ``int``.
14816       declare float     @llvm.powi.f32.i32(float  %Val, i32 %power)
14817       declare double    @llvm.powi.f64.i16(double %Val, i16 %power)
14818       declare x86_fp80  @llvm.powi.f80.i32(x86_fp80  %Val, i32 %power)
14819       declare fp128     @llvm.powi.f128.i32(fp128 %Val, i32 %power)
14820       declare ppc_fp128 @llvm.powi.ppcf128.i32(ppc_fp128  %Val, i32 %power)
14822 Overview:
14823 """""""""
14825 The '``llvm.powi.*``' intrinsics return the first operand raised to the
14826 specified (positive or negative) power. The order of evaluation of
14827 multiplications is not defined. When a vector of floating-point type is
14828 used, the second argument remains a scalar integer value.
14830 Arguments:
14831 """"""""""
14833 The second argument is an integer power, and the first is a value to
14834 raise to that power.
14836 Semantics:
14837 """"""""""
14839 This function returns the first value raised to the second power with an
14840 unspecified sequence of rounding operations.
14842 '``llvm.sin.*``' Intrinsic
14843 ^^^^^^^^^^^^^^^^^^^^^^^^^^
14845 Syntax:
14846 """""""
14848 This is an overloaded intrinsic. You can use ``llvm.sin`` on any
14849 floating-point or vector of floating-point type. Not all targets support
14850 all types however.
14854       declare float     @llvm.sin.f32(float  %Val)
14855       declare double    @llvm.sin.f64(double %Val)
14856       declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
14857       declare fp128     @llvm.sin.f128(fp128 %Val)
14858       declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
14860 Overview:
14861 """""""""
14863 The '``llvm.sin.*``' intrinsics return the sine of the operand.
14865 Arguments:
14866 """"""""""
14868 The argument and return value are floating-point numbers of the same type.
14870 Semantics:
14871 """"""""""
14873 Return the same value as a corresponding libm '``sin``' function but without
14874 trapping or setting ``errno``.
14876 When specified with the fast-math-flag 'afn', the result may be approximated
14877 using a less accurate calculation.
14879 '``llvm.cos.*``' Intrinsic
14880 ^^^^^^^^^^^^^^^^^^^^^^^^^^
14882 Syntax:
14883 """""""
14885 This is an overloaded intrinsic. You can use ``llvm.cos`` on any
14886 floating-point or vector of floating-point type. Not all targets support
14887 all types however.
14891       declare float     @llvm.cos.f32(float  %Val)
14892       declare double    @llvm.cos.f64(double %Val)
14893       declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
14894       declare fp128     @llvm.cos.f128(fp128 %Val)
14895       declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
14897 Overview:
14898 """""""""
14900 The '``llvm.cos.*``' intrinsics return the cosine of the operand.
14902 Arguments:
14903 """"""""""
14905 The argument and return value are floating-point numbers of the same type.
14907 Semantics:
14908 """"""""""
14910 Return the same value as a corresponding libm '``cos``' function but without
14911 trapping or setting ``errno``.
14913 When specified with the fast-math-flag 'afn', the result may be approximated
14914 using a less accurate calculation.
14916 '``llvm.pow.*``' Intrinsic
14917 ^^^^^^^^^^^^^^^^^^^^^^^^^^
14919 Syntax:
14920 """""""
14922 This is an overloaded intrinsic. You can use ``llvm.pow`` on any
14923 floating-point or vector of floating-point type. Not all targets support
14924 all types however.
14928       declare float     @llvm.pow.f32(float  %Val, float %Power)
14929       declare double    @llvm.pow.f64(double %Val, double %Power)
14930       declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
14931       declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
14932       declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
14934 Overview:
14935 """""""""
14937 The '``llvm.pow.*``' intrinsics return the first operand raised to the
14938 specified (positive or negative) power.
14940 Arguments:
14941 """"""""""
14943 The arguments and return value are floating-point numbers of the same type.
14945 Semantics:
14946 """"""""""
14948 Return the same value as a corresponding libm '``pow``' function but without
14949 trapping or setting ``errno``.
14951 When specified with the fast-math-flag 'afn', the result may be approximated
14952 using a less accurate calculation.
14954 .. _int_exp:
14956 '``llvm.exp.*``' Intrinsic
14957 ^^^^^^^^^^^^^^^^^^^^^^^^^^
14959 Syntax:
14960 """""""
14962 This is an overloaded intrinsic. You can use ``llvm.exp`` on any
14963 floating-point or vector of floating-point type. Not all targets support
14964 all types however.
14968       declare float     @llvm.exp.f32(float  %Val)
14969       declare double    @llvm.exp.f64(double %Val)
14970       declare x86_fp80  @llvm.exp.f80(x86_fp80  %Val)
14971       declare fp128     @llvm.exp.f128(fp128 %Val)
14972       declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128  %Val)
14974 Overview:
14975 """""""""
14977 The '``llvm.exp.*``' intrinsics compute the base-e exponential of the specified
14978 value.
14980 Arguments:
14981 """"""""""
14983 The argument and return value are floating-point numbers of the same type.
14985 Semantics:
14986 """"""""""
14988 Return the same value as a corresponding libm '``exp``' function but without
14989 trapping or setting ``errno``.
14991 When specified with the fast-math-flag 'afn', the result may be approximated
14992 using a less accurate calculation.
14994 .. _int_exp2:
14996 '``llvm.exp2.*``' Intrinsic
14997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
14999 Syntax:
15000 """""""
15002 This is an overloaded intrinsic. You can use ``llvm.exp2`` on any
15003 floating-point or vector of floating-point type. Not all targets support
15004 all types however.
15008       declare float     @llvm.exp2.f32(float  %Val)
15009       declare double    @llvm.exp2.f64(double %Val)
15010       declare x86_fp80  @llvm.exp2.f80(x86_fp80  %Val)
15011       declare fp128     @llvm.exp2.f128(fp128 %Val)
15012       declare ppc_fp128 @llvm.exp2.ppcf128(ppc_fp128  %Val)
15014 Overview:
15015 """""""""
15017 The '``llvm.exp2.*``' intrinsics compute the base-2 exponential of the
15018 specified value.
15020 Arguments:
15021 """"""""""
15023 The argument and return value are floating-point numbers of the same type.
15025 Semantics:
15026 """"""""""
15028 Return the same value as a corresponding libm '``exp2``' function but without
15029 trapping or setting ``errno``.
15031 When specified with the fast-math-flag 'afn', the result may be approximated
15032 using a less accurate calculation.
15034 .. _int_exp10:
15036 '``llvm.exp10.*``' Intrinsic
15037 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15039 Syntax:
15040 """""""
15042 This is an overloaded intrinsic. You can use ``llvm.exp10`` on any
15043 floating-point or vector of floating-point type. Not all targets support
15044 all types however.
15048       declare float     @llvm.exp10.f32(float  %Val)
15049       declare double    @llvm.exp10.f64(double %Val)
15050       declare x86_fp80  @llvm.exp10.f80(x86_fp80  %Val)
15051       declare fp128     @llvm.exp10.f128(fp128 %Val)
15052       declare ppc_fp128 @llvm.exp10.ppcf128(ppc_fp128  %Val)
15054 Overview:
15055 """""""""
15057 The '``llvm.exp10.*``' intrinsics compute the base-10 exponential of the
15058 specified value.
15060 Arguments:
15061 """"""""""
15063 The argument and return value are floating-point numbers of the same type.
15065 Semantics:
15066 """"""""""
15068 Return the same value as a corresponding libm '``exp10``' function but without
15069 trapping or setting ``errno``.
15071 When specified with the fast-math-flag 'afn', the result may be approximated
15072 using a less accurate calculation.
15075 '``llvm.ldexp.*``' Intrinsic
15076 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15078 Syntax:
15079 """""""
15081 This is an overloaded intrinsic. You can use ``llvm.ldexp`` on any
15082 floating point or vector of floating point type. Not all targets support
15083 all types however.
15087       declare float     @llvm.ldexp.f32.i32(float %Val, i32 %Exp)
15088       declare double    @llvm.ldexp.f64.i32(double %Val, i32 %Exp)
15089       declare x86_fp80  @llvm.ldexp.f80.i32(x86_fp80 %Val, i32 %Exp)
15090       declare fp128     @llvm.ldexp.f128.i32(fp128 %Val, i32 %Exp)
15091       declare ppc_fp128 @llvm.ldexp.ppcf128.i32(ppc_fp128 %Val, i32 %Exp)
15092       declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %Val, <2 x i32> %Exp)
15094 Overview:
15095 """""""""
15097 The '``llvm.ldexp.*``' intrinsics perform the ldexp function.
15099 Arguments:
15100 """"""""""
15102 The first argument and the return value are :ref:`floating-point
15103 <t_floating>` or :ref:`vector <t_vector>` of floating-point values of
15104 the same type. The second argument is an integer with the same number
15105 of elements.
15107 Semantics:
15108 """"""""""
15110 This function multiplies the first argument by 2 raised to the second
15111 argument's power. If the first argument is NaN or infinite, the same
15112 value is returned. If the result underflows a zero with the same sign
15113 is returned. If the result overflows, the result is an infinity with
15114 the same sign.
15116 .. _int_frexp:
15118 '``llvm.frexp.*``' Intrinsic
15119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15121 Syntax:
15122 """""""
15124 This is an overloaded intrinsic. You can use ``llvm.frexp`` on any
15125 floating point or vector of floating point type. Not all targets support
15126 all types however.
15130       declare { float, i32 }     @llvm.frexp.f32.i32(float %Val)
15131       declare { double, i32 }    @llvm.frexp.f64.i32(double %Val)
15132       declare { x86_fp80, i32 }  @llvm.frexp.f80.i32(x86_fp80 %Val)
15133       declare { fp128, i32 }     @llvm.frexp.f128.i32(fp128 %Val)
15134       declare { ppc_fp128, i32 } @llvm.frexp.ppcf128.i32(ppc_fp128 %Val)
15135       declare { <2 x float>, <2 x i32> }  @llvm.frexp.v2f32.v2i32(<2 x float> %Val)
15137 Overview:
15138 """""""""
15140 The '``llvm.frexp.*``' intrinsics perform the frexp function.
15142 Arguments:
15143 """"""""""
15145 The argument is a :ref:`floating-point <t_floating>` or
15146 :ref:`vector <t_vector>` of floating-point values. Returns two values
15147 in a struct. The first struct field matches the argument type, and the
15148 second field is an integer or a vector of integer values with the same
15149 number of elements as the argument.
15151 Semantics:
15152 """"""""""
15154 This intrinsic splits a floating point value into a normalized
15155 fractional component and integral exponent.
15157 For a non-zero argument, returns the argument multiplied by some power
15158 of two such that the absolute value of the returned value is in the
15159 range [0.5, 1.0), with the same sign as the argument. The second
15160 result is an integer such that the first result raised to the power of
15161 the second result is the input argument.
15163 If the argument is a zero, returns a zero with the same sign and a 0
15164 exponent.
15166 If the argument is a NaN, a NaN is returned and the returned exponent
15167 is unspecified.
15169 If the argument is an infinity, returns an infinity with the same sign
15170 and an unspecified exponent.
15172 .. _int_log:
15174 '``llvm.log.*``' Intrinsic
15175 ^^^^^^^^^^^^^^^^^^^^^^^^^^
15177 Syntax:
15178 """""""
15180 This is an overloaded intrinsic. You can use ``llvm.log`` on any
15181 floating-point or vector of floating-point type. Not all targets support
15182 all types however.
15186       declare float     @llvm.log.f32(float  %Val)
15187       declare double    @llvm.log.f64(double %Val)
15188       declare x86_fp80  @llvm.log.f80(x86_fp80  %Val)
15189       declare fp128     @llvm.log.f128(fp128 %Val)
15190       declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128  %Val)
15192 Overview:
15193 """""""""
15195 The '``llvm.log.*``' intrinsics compute the base-e logarithm of the specified
15196 value.
15198 Arguments:
15199 """"""""""
15201 The argument and return value are floating-point numbers of the same type.
15203 Semantics:
15204 """"""""""
15206 Return the same value as a corresponding libm '``log``' function but without
15207 trapping or setting ``errno``.
15209 When specified with the fast-math-flag 'afn', the result may be approximated
15210 using a less accurate calculation.
15212 .. _int_log10:
15214 '``llvm.log10.*``' Intrinsic
15215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15217 Syntax:
15218 """""""
15220 This is an overloaded intrinsic. You can use ``llvm.log10`` on any
15221 floating-point or vector of floating-point type. Not all targets support
15222 all types however.
15226       declare float     @llvm.log10.f32(float  %Val)
15227       declare double    @llvm.log10.f64(double %Val)
15228       declare x86_fp80  @llvm.log10.f80(x86_fp80  %Val)
15229       declare fp128     @llvm.log10.f128(fp128 %Val)
15230       declare ppc_fp128 @llvm.log10.ppcf128(ppc_fp128  %Val)
15232 Overview:
15233 """""""""
15235 The '``llvm.log10.*``' intrinsics compute the base-10 logarithm of the
15236 specified value.
15238 Arguments:
15239 """"""""""
15241 The argument and return value are floating-point numbers of the same type.
15243 Semantics:
15244 """"""""""
15246 Return the same value as a corresponding libm '``log10``' function but without
15247 trapping or setting ``errno``.
15249 When specified with the fast-math-flag 'afn', the result may be approximated
15250 using a less accurate calculation.
15253 .. _int_log2:
15255 '``llvm.log2.*``' Intrinsic
15256 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
15258 Syntax:
15259 """""""
15261 This is an overloaded intrinsic. You can use ``llvm.log2`` on any
15262 floating-point or vector of floating-point type. Not all targets support
15263 all types however.
15267       declare float     @llvm.log2.f32(float  %Val)
15268       declare double    @llvm.log2.f64(double %Val)
15269       declare x86_fp80  @llvm.log2.f80(x86_fp80  %Val)
15270       declare fp128     @llvm.log2.f128(fp128 %Val)
15271       declare ppc_fp128 @llvm.log2.ppcf128(ppc_fp128  %Val)
15273 Overview:
15274 """""""""
15276 The '``llvm.log2.*``' intrinsics compute the base-2 logarithm of the specified
15277 value.
15279 Arguments:
15280 """"""""""
15282 The argument and return value are floating-point numbers of the same type.
15284 Semantics:
15285 """"""""""
15287 Return the same value as a corresponding libm '``log2``' function but without
15288 trapping or setting ``errno``.
15290 When specified with the fast-math-flag 'afn', the result may be approximated
15291 using a less accurate calculation.
15293 .. _int_fma:
15295 '``llvm.fma.*``' Intrinsic
15296 ^^^^^^^^^^^^^^^^^^^^^^^^^^
15298 Syntax:
15299 """""""
15301 This is an overloaded intrinsic. You can use ``llvm.fma`` on any
15302 floating-point or vector of floating-point type. Not all targets support
15303 all types however.
15307       declare float     @llvm.fma.f32(float  %a, float  %b, float  %c)
15308       declare double    @llvm.fma.f64(double %a, double %b, double %c)
15309       declare x86_fp80  @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
15310       declare fp128     @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
15311       declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
15313 Overview:
15314 """""""""
15316 The '``llvm.fma.*``' intrinsics perform the fused multiply-add operation.
15318 Arguments:
15319 """"""""""
15321 The arguments and return value are floating-point numbers of the same type.
15323 Semantics:
15324 """"""""""
15326 Return the same value as a corresponding libm '``fma``' function but without
15327 trapping or setting ``errno``.
15329 When specified with the fast-math-flag 'afn', the result may be approximated
15330 using a less accurate calculation.
15332 .. _int_fabs:
15334 '``llvm.fabs.*``' Intrinsic
15335 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
15337 Syntax:
15338 """""""
15340 This is an overloaded intrinsic. You can use ``llvm.fabs`` on any
15341 floating-point or vector of floating-point type. Not all targets support
15342 all types however.
15346       declare float     @llvm.fabs.f32(float  %Val)
15347       declare double    @llvm.fabs.f64(double %Val)
15348       declare x86_fp80  @llvm.fabs.f80(x86_fp80 %Val)
15349       declare fp128     @llvm.fabs.f128(fp128 %Val)
15350       declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128 %Val)
15352 Overview:
15353 """""""""
15355 The '``llvm.fabs.*``' intrinsics return the absolute value of the
15356 operand.
15358 Arguments:
15359 """"""""""
15361 The argument and return value are floating-point numbers of the same
15362 type.
15364 Semantics:
15365 """"""""""
15367 This function returns the same values as the libm ``fabs`` functions
15368 would, and handles error conditions in the same way.
15369 The returned value is completely identical to the input except for the sign bit;
15370 in particular, if the input is a NaN, then the quiet/signaling bit and payload
15371 are perfectly preserved.
15373 .. _i_minnum:
15375 '``llvm.minnum.*``' Intrinsic
15376 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15378 Syntax:
15379 """""""
15381 This is an overloaded intrinsic. You can use ``llvm.minnum`` on any
15382 floating-point or vector of floating-point type. Not all targets support
15383 all types however.
15387       declare float     @llvm.minnum.f32(float %Val0, float %Val1)
15388       declare double    @llvm.minnum.f64(double %Val0, double %Val1)
15389       declare x86_fp80  @llvm.minnum.f80(x86_fp80 %Val0, x86_fp80 %Val1)
15390       declare fp128     @llvm.minnum.f128(fp128 %Val0, fp128 %Val1)
15391       declare ppc_fp128 @llvm.minnum.ppcf128(ppc_fp128 %Val0, ppc_fp128 %Val1)
15393 Overview:
15394 """""""""
15396 The '``llvm.minnum.*``' intrinsics return the minimum of the two
15397 arguments.
15400 Arguments:
15401 """"""""""
15403 The arguments and return value are floating-point numbers of the same
15404 type.
15406 Semantics:
15407 """"""""""
15409 Follows the IEEE-754 semantics for minNum, except for handling of
15410 signaling NaNs. This match's the behavior of libm's fmin.
15412 If either operand is a NaN, returns the other non-NaN operand. Returns
15413 NaN only if both operands are NaN. If the operands compare equal,
15414 returns either one of the operands. For example, this means that
15415 fmin(+0.0, -0.0) returns either operand.
15417 Unlike the IEEE-754 2008 behavior, this does not distinguish between
15418 signaling and quiet NaN inputs. If a target's implementation follows
15419 the standard and returns a quiet NaN if either input is a signaling
15420 NaN, the intrinsic lowering is responsible for quieting the inputs to
15421 correctly return the non-NaN input (e.g. by using the equivalent of
15422 ``llvm.canonicalize``).
15424 .. _i_maxnum:
15426 '``llvm.maxnum.*``' Intrinsic
15427 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15429 Syntax:
15430 """""""
15432 This is an overloaded intrinsic. You can use ``llvm.maxnum`` on any
15433 floating-point or vector of floating-point type. Not all targets support
15434 all types however.
15438       declare float     @llvm.maxnum.f32(float  %Val0, float  %Val1)
15439       declare double    @llvm.maxnum.f64(double %Val0, double %Val1)
15440       declare x86_fp80  @llvm.maxnum.f80(x86_fp80  %Val0, x86_fp80  %Val1)
15441       declare fp128     @llvm.maxnum.f128(fp128 %Val0, fp128 %Val1)
15442       declare ppc_fp128 @llvm.maxnum.ppcf128(ppc_fp128  %Val0, ppc_fp128  %Val1)
15444 Overview:
15445 """""""""
15447 The '``llvm.maxnum.*``' intrinsics return the maximum of the two
15448 arguments.
15451 Arguments:
15452 """"""""""
15454 The arguments and return value are floating-point numbers of the same
15455 type.
15457 Semantics:
15458 """"""""""
15459 Follows the IEEE-754 semantics for maxNum except for the handling of
15460 signaling NaNs. This matches the behavior of libm's fmax.
15462 If either operand is a NaN, returns the other non-NaN operand. Returns
15463 NaN only if both operands are NaN. If the operands compare equal,
15464 returns either one of the operands. For example, this means that
15465 fmax(+0.0, -0.0) returns either -0.0 or 0.0.
15467 Unlike the IEEE-754 2008 behavior, this does not distinguish between
15468 signaling and quiet NaN inputs. If a target's implementation follows
15469 the standard and returns a quiet NaN if either input is a signaling
15470 NaN, the intrinsic lowering is responsible for quieting the inputs to
15471 correctly return the non-NaN input (e.g. by using the equivalent of
15472 ``llvm.canonicalize``).
15474 '``llvm.minimum.*``' Intrinsic
15475 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15477 Syntax:
15478 """""""
15480 This is an overloaded intrinsic. You can use ``llvm.minimum`` on any
15481 floating-point or vector of floating-point type. Not all targets support
15482 all types however.
15486       declare float     @llvm.minimum.f32(float %Val0, float %Val1)
15487       declare double    @llvm.minimum.f64(double %Val0, double %Val1)
15488       declare x86_fp80  @llvm.minimum.f80(x86_fp80 %Val0, x86_fp80 %Val1)
15489       declare fp128     @llvm.minimum.f128(fp128 %Val0, fp128 %Val1)
15490       declare ppc_fp128 @llvm.minimum.ppcf128(ppc_fp128 %Val0, ppc_fp128 %Val1)
15492 Overview:
15493 """""""""
15495 The '``llvm.minimum.*``' intrinsics return the minimum of the two
15496 arguments, propagating NaNs and treating -0.0 as less than +0.0.
15499 Arguments:
15500 """"""""""
15502 The arguments and return value are floating-point numbers of the same
15503 type.
15505 Semantics:
15506 """"""""""
15507 If either operand is a NaN, returns NaN. Otherwise returns the lesser
15508 of the two arguments. -0.0 is considered to be less than +0.0 for this
15509 intrinsic. Note that these are the semantics specified in the draft of
15510 IEEE 754-2018.
15512 '``llvm.maximum.*``' Intrinsic
15513 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15515 Syntax:
15516 """""""
15518 This is an overloaded intrinsic. You can use ``llvm.maximum`` on any
15519 floating-point or vector of floating-point type. Not all targets support
15520 all types however.
15524       declare float     @llvm.maximum.f32(float %Val0, float %Val1)
15525       declare double    @llvm.maximum.f64(double %Val0, double %Val1)
15526       declare x86_fp80  @llvm.maximum.f80(x86_fp80 %Val0, x86_fp80 %Val1)
15527       declare fp128     @llvm.maximum.f128(fp128 %Val0, fp128 %Val1)
15528       declare ppc_fp128 @llvm.maximum.ppcf128(ppc_fp128 %Val0, ppc_fp128 %Val1)
15530 Overview:
15531 """""""""
15533 The '``llvm.maximum.*``' intrinsics return the maximum of the two
15534 arguments, propagating NaNs and treating -0.0 as less than +0.0.
15537 Arguments:
15538 """"""""""
15540 The arguments and return value are floating-point numbers of the same
15541 type.
15543 Semantics:
15544 """"""""""
15545 If either operand is a NaN, returns NaN. Otherwise returns the greater
15546 of the two arguments. -0.0 is considered to be less than +0.0 for this
15547 intrinsic. Note that these are the semantics specified in the draft of
15548 IEEE 754-2018.
15550 .. _int_copysign:
15552 '``llvm.copysign.*``' Intrinsic
15553 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15555 Syntax:
15556 """""""
15558 This is an overloaded intrinsic. You can use ``llvm.copysign`` on any
15559 floating-point or vector of floating-point type. Not all targets support
15560 all types however.
15564       declare float     @llvm.copysign.f32(float  %Mag, float  %Sgn)
15565       declare double    @llvm.copysign.f64(double %Mag, double %Sgn)
15566       declare x86_fp80  @llvm.copysign.f80(x86_fp80  %Mag, x86_fp80  %Sgn)
15567       declare fp128     @llvm.copysign.f128(fp128 %Mag, fp128 %Sgn)
15568       declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128  %Mag, ppc_fp128  %Sgn)
15570 Overview:
15571 """""""""
15573 The '``llvm.copysign.*``' intrinsics return a value with the magnitude of the
15574 first operand and the sign of the second operand.
15576 Arguments:
15577 """"""""""
15579 The arguments and return value are floating-point numbers of the same
15580 type.
15582 Semantics:
15583 """"""""""
15585 This function returns the same values as the libm ``copysign``
15586 functions would, and handles error conditions in the same way.
15587 The returned value is completely identical to the first operand except for the
15588 sign bit; in particular, if the input is a NaN, then the quiet/signaling bit and
15589 payload are perfectly preserved.
15591 .. _int_floor:
15593 '``llvm.floor.*``' Intrinsic
15594 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15596 Syntax:
15597 """""""
15599 This is an overloaded intrinsic. You can use ``llvm.floor`` on any
15600 floating-point or vector of floating-point type. Not all targets support
15601 all types however.
15605       declare float     @llvm.floor.f32(float  %Val)
15606       declare double    @llvm.floor.f64(double %Val)
15607       declare x86_fp80  @llvm.floor.f80(x86_fp80  %Val)
15608       declare fp128     @llvm.floor.f128(fp128 %Val)
15609       declare ppc_fp128 @llvm.floor.ppcf128(ppc_fp128  %Val)
15611 Overview:
15612 """""""""
15614 The '``llvm.floor.*``' intrinsics return the floor of the operand.
15616 Arguments:
15617 """"""""""
15619 The argument and return value are floating-point numbers of the same
15620 type.
15622 Semantics:
15623 """"""""""
15625 This function returns the same values as the libm ``floor`` functions
15626 would, and handles error conditions in the same way.
15628 .. _int_ceil:
15630 '``llvm.ceil.*``' Intrinsic
15631 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
15633 Syntax:
15634 """""""
15636 This is an overloaded intrinsic. You can use ``llvm.ceil`` on any
15637 floating-point or vector of floating-point type. Not all targets support
15638 all types however.
15642       declare float     @llvm.ceil.f32(float  %Val)
15643       declare double    @llvm.ceil.f64(double %Val)
15644       declare x86_fp80  @llvm.ceil.f80(x86_fp80  %Val)
15645       declare fp128     @llvm.ceil.f128(fp128 %Val)
15646       declare ppc_fp128 @llvm.ceil.ppcf128(ppc_fp128  %Val)
15648 Overview:
15649 """""""""
15651 The '``llvm.ceil.*``' intrinsics return the ceiling of the operand.
15653 Arguments:
15654 """"""""""
15656 The argument and return value are floating-point numbers of the same
15657 type.
15659 Semantics:
15660 """"""""""
15662 This function returns the same values as the libm ``ceil`` functions
15663 would, and handles error conditions in the same way.
15666 .. _int_llvm_trunc:
15668 '``llvm.trunc.*``' Intrinsic
15669 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15671 Syntax:
15672 """""""
15674 This is an overloaded intrinsic. You can use ``llvm.trunc`` on any
15675 floating-point or vector of floating-point type. Not all targets support
15676 all types however.
15680       declare float     @llvm.trunc.f32(float  %Val)
15681       declare double    @llvm.trunc.f64(double %Val)
15682       declare x86_fp80  @llvm.trunc.f80(x86_fp80  %Val)
15683       declare fp128     @llvm.trunc.f128(fp128 %Val)
15684       declare ppc_fp128 @llvm.trunc.ppcf128(ppc_fp128  %Val)
15686 Overview:
15687 """""""""
15689 The '``llvm.trunc.*``' intrinsics returns the operand rounded to the
15690 nearest integer not larger in magnitude than the operand.
15692 Arguments:
15693 """"""""""
15695 The argument and return value are floating-point numbers of the same
15696 type.
15698 Semantics:
15699 """"""""""
15701 This function returns the same values as the libm ``trunc`` functions
15702 would, and handles error conditions in the same way.
15704 .. _int_rint:
15706 '``llvm.rint.*``' Intrinsic
15707 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
15709 Syntax:
15710 """""""
15712 This is an overloaded intrinsic. You can use ``llvm.rint`` on any
15713 floating-point or vector of floating-point type. Not all targets support
15714 all types however.
15718       declare float     @llvm.rint.f32(float  %Val)
15719       declare double    @llvm.rint.f64(double %Val)
15720       declare x86_fp80  @llvm.rint.f80(x86_fp80  %Val)
15721       declare fp128     @llvm.rint.f128(fp128 %Val)
15722       declare ppc_fp128 @llvm.rint.ppcf128(ppc_fp128  %Val)
15724 Overview:
15725 """""""""
15727 The '``llvm.rint.*``' intrinsics returns the operand rounded to the
15728 nearest integer. It may raise an inexact floating-point exception if the
15729 operand isn't an integer.
15731 Arguments:
15732 """"""""""
15734 The argument and return value are floating-point numbers of the same
15735 type.
15737 Semantics:
15738 """"""""""
15740 This function returns the same values as the libm ``rint`` functions
15741 would, and handles error conditions in the same way.
15743 .. _int_nearbyint:
15745 '``llvm.nearbyint.*``' Intrinsic
15746 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15748 Syntax:
15749 """""""
15751 This is an overloaded intrinsic. You can use ``llvm.nearbyint`` on any
15752 floating-point or vector of floating-point type. Not all targets support
15753 all types however.
15757       declare float     @llvm.nearbyint.f32(float  %Val)
15758       declare double    @llvm.nearbyint.f64(double %Val)
15759       declare x86_fp80  @llvm.nearbyint.f80(x86_fp80  %Val)
15760       declare fp128     @llvm.nearbyint.f128(fp128 %Val)
15761       declare ppc_fp128 @llvm.nearbyint.ppcf128(ppc_fp128  %Val)
15763 Overview:
15764 """""""""
15766 The '``llvm.nearbyint.*``' intrinsics returns the operand rounded to the
15767 nearest integer.
15769 Arguments:
15770 """"""""""
15772 The argument and return value are floating-point numbers of the same
15773 type.
15775 Semantics:
15776 """"""""""
15778 This function returns the same values as the libm ``nearbyint``
15779 functions would, and handles error conditions in the same way.
15781 .. _int_round:
15783 '``llvm.round.*``' Intrinsic
15784 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15786 Syntax:
15787 """""""
15789 This is an overloaded intrinsic. You can use ``llvm.round`` on any
15790 floating-point or vector of floating-point type. Not all targets support
15791 all types however.
15795       declare float     @llvm.round.f32(float  %Val)
15796       declare double    @llvm.round.f64(double %Val)
15797       declare x86_fp80  @llvm.round.f80(x86_fp80  %Val)
15798       declare fp128     @llvm.round.f128(fp128 %Val)
15799       declare ppc_fp128 @llvm.round.ppcf128(ppc_fp128  %Val)
15801 Overview:
15802 """""""""
15804 The '``llvm.round.*``' intrinsics returns the operand rounded to the
15805 nearest integer.
15807 Arguments:
15808 """"""""""
15810 The argument and return value are floating-point numbers of the same
15811 type.
15813 Semantics:
15814 """"""""""
15816 This function returns the same values as the libm ``round``
15817 functions would, and handles error conditions in the same way.
15819 .. _int_roundeven:
15821 '``llvm.roundeven.*``' Intrinsic
15822 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15824 Syntax:
15825 """""""
15827 This is an overloaded intrinsic. You can use ``llvm.roundeven`` on any
15828 floating-point or vector of floating-point type. Not all targets support
15829 all types however.
15833       declare float     @llvm.roundeven.f32(float  %Val)
15834       declare double    @llvm.roundeven.f64(double %Val)
15835       declare x86_fp80  @llvm.roundeven.f80(x86_fp80  %Val)
15836       declare fp128     @llvm.roundeven.f128(fp128 %Val)
15837       declare ppc_fp128 @llvm.roundeven.ppcf128(ppc_fp128  %Val)
15839 Overview:
15840 """""""""
15842 The '``llvm.roundeven.*``' intrinsics returns the operand rounded to the nearest
15843 integer in floating-point format rounding halfway cases to even (that is, to the
15844 nearest value that is an even integer).
15846 Arguments:
15847 """"""""""
15849 The argument and return value are floating-point numbers of the same type.
15851 Semantics:
15852 """"""""""
15854 This function implements IEEE-754 operation ``roundToIntegralTiesToEven``. It
15855 also behaves in the same way as C standard function ``roundeven``, except that
15856 it does not raise floating point exceptions.
15859 '``llvm.lround.*``' Intrinsic
15860 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15862 Syntax:
15863 """""""
15865 This is an overloaded intrinsic. You can use ``llvm.lround`` on any
15866 floating-point type. Not all targets support all types however.
15870       declare i32 @llvm.lround.i32.f32(float %Val)
15871       declare i32 @llvm.lround.i32.f64(double %Val)
15872       declare i32 @llvm.lround.i32.f80(float %Val)
15873       declare i32 @llvm.lround.i32.f128(double %Val)
15874       declare i32 @llvm.lround.i32.ppcf128(double %Val)
15876       declare i64 @llvm.lround.i64.f32(float %Val)
15877       declare i64 @llvm.lround.i64.f64(double %Val)
15878       declare i64 @llvm.lround.i64.f80(float %Val)
15879       declare i64 @llvm.lround.i64.f128(double %Val)
15880       declare i64 @llvm.lround.i64.ppcf128(double %Val)
15882 Overview:
15883 """""""""
15885 The '``llvm.lround.*``' intrinsics return the operand rounded to the nearest
15886 integer with ties away from zero.
15889 Arguments:
15890 """"""""""
15892 The argument is a floating-point number and the return value is an integer
15893 type.
15895 Semantics:
15896 """"""""""
15898 This function returns the same values as the libm ``lround`` functions
15899 would, but without setting errno. If the rounded value is too large to
15900 be stored in the result type, the return value is a non-deterministic
15901 value (equivalent to `freeze poison`).
15903 '``llvm.llround.*``' Intrinsic
15904 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15906 Syntax:
15907 """""""
15909 This is an overloaded intrinsic. You can use ``llvm.llround`` on any
15910 floating-point type. Not all targets support all types however.
15914       declare i64 @llvm.lround.i64.f32(float %Val)
15915       declare i64 @llvm.lround.i64.f64(double %Val)
15916       declare i64 @llvm.lround.i64.f80(float %Val)
15917       declare i64 @llvm.lround.i64.f128(double %Val)
15918       declare i64 @llvm.lround.i64.ppcf128(double %Val)
15920 Overview:
15921 """""""""
15923 The '``llvm.llround.*``' intrinsics return the operand rounded to the nearest
15924 integer with ties away from zero.
15926 Arguments:
15927 """"""""""
15929 The argument is a floating-point number and the return value is an integer
15930 type.
15932 Semantics:
15933 """"""""""
15935 This function returns the same values as the libm ``llround``
15936 functions would, but without setting errno. If the rounded value is
15937 too large to be stored in the result type, the return value is a
15938 non-deterministic value (equivalent to `freeze poison`).
15940 '``llvm.lrint.*``' Intrinsic
15941 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15943 Syntax:
15944 """""""
15946 This is an overloaded intrinsic. You can use ``llvm.lrint`` on any
15947 floating-point type or vector of floating-point type. Not all targets
15948 support all types however.
15952       declare i32 @llvm.lrint.i32.f32(float %Val)
15953       declare i32 @llvm.lrint.i32.f64(double %Val)
15954       declare i32 @llvm.lrint.i32.f80(float %Val)
15955       declare i32 @llvm.lrint.i32.f128(double %Val)
15956       declare i32 @llvm.lrint.i32.ppcf128(double %Val)
15958       declare i64 @llvm.lrint.i64.f32(float %Val)
15959       declare i64 @llvm.lrint.i64.f64(double %Val)
15960       declare i64 @llvm.lrint.i64.f80(float %Val)
15961       declare i64 @llvm.lrint.i64.f128(double %Val)
15962       declare i64 @llvm.lrint.i64.ppcf128(double %Val)
15964 Overview:
15965 """""""""
15967 The '``llvm.lrint.*``' intrinsics return the operand rounded to the nearest
15968 integer.
15971 Arguments:
15972 """"""""""
15974 The argument is a floating-point number and the return value is an integer
15975 type.
15977 Semantics:
15978 """"""""""
15980 This function returns the same values as the libm ``lrint`` functions
15981 would, but without setting errno. If the rounded value is too large to
15982 be stored in the result type, the return value is a non-deterministic
15983 value (equivalent to `freeze poison`).
15985 '``llvm.llrint.*``' Intrinsic
15986 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15988 Syntax:
15989 """""""
15991 This is an overloaded intrinsic. You can use ``llvm.llrint`` on any
15992 floating-point type or vector of floating-point type. Not all targets
15993 support all types however.
15997       declare i64 @llvm.llrint.i64.f32(float %Val)
15998       declare i64 @llvm.llrint.i64.f64(double %Val)
15999       declare i64 @llvm.llrint.i64.f80(float %Val)
16000       declare i64 @llvm.llrint.i64.f128(double %Val)
16001       declare i64 @llvm.llrint.i64.ppcf128(double %Val)
16003 Overview:
16004 """""""""
16006 The '``llvm.llrint.*``' intrinsics return the operand rounded to the nearest
16007 integer.
16009 Arguments:
16010 """"""""""
16012 The argument is a floating-point number and the return value is an integer
16013 type.
16015 Semantics:
16016 """"""""""
16018 This function returns the same values as the libm ``llrint`` functions
16019 would, but without setting errno. If the rounded value is too large to
16020 be stored in the result type, the return value is a non-deterministic
16021 value (equivalent to `freeze poison`).
16023 Bit Manipulation Intrinsics
16024 ---------------------------
16026 LLVM provides intrinsics for a few important bit manipulation
16027 operations. These allow efficient code generation for some algorithms.
16029 .. _int_bitreverse:
16031 '``llvm.bitreverse.*``' Intrinsics
16032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16034 Syntax:
16035 """""""
16037 This is an overloaded intrinsic function. You can use bitreverse on any
16038 integer type.
16042       declare i16 @llvm.bitreverse.i16(i16 <id>)
16043       declare i32 @llvm.bitreverse.i32(i32 <id>)
16044       declare i64 @llvm.bitreverse.i64(i64 <id>)
16045       declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> <id>)
16047 Overview:
16048 """""""""
16050 The '``llvm.bitreverse``' family of intrinsics is used to reverse the
16051 bitpattern of an integer value or vector of integer values; for example
16052 ``0b10110110`` becomes ``0b01101101``.
16054 Semantics:
16055 """"""""""
16057 The ``llvm.bitreverse.iN`` intrinsic returns an iN value that has bit
16058 ``M`` in the input moved to bit ``N-M-1`` in the output. The vector
16059 intrinsics, such as ``llvm.bitreverse.v4i32``, operate on a per-element
16060 basis and the element order is not affected.
16062 .. _int_bswap:
16064 '``llvm.bswap.*``' Intrinsics
16065 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16067 Syntax:
16068 """""""
16070 This is an overloaded intrinsic function. You can use bswap on any
16071 integer type that is an even number of bytes (i.e. BitWidth % 16 == 0).
16075       declare i16 @llvm.bswap.i16(i16 <id>)
16076       declare i32 @llvm.bswap.i32(i32 <id>)
16077       declare i64 @llvm.bswap.i64(i64 <id>)
16078       declare <4 x i32> @llvm.bswap.v4i32(<4 x i32> <id>)
16080 Overview:
16081 """""""""
16083 The '``llvm.bswap``' family of intrinsics is used to byte swap an integer
16084 value or vector of integer values with an even number of bytes (positive
16085 multiple of 16 bits).
16087 Semantics:
16088 """"""""""
16090 The ``llvm.bswap.i16`` intrinsic returns an i16 value that has the high
16091 and low byte of the input i16 swapped. Similarly, the ``llvm.bswap.i32``
16092 intrinsic returns an i32 value that has the four bytes of the input i32
16093 swapped, so that if the input bytes are numbered 0, 1, 2, 3 then the
16094 returned i32 will have its bytes in 3, 2, 1, 0 order. The
16095 ``llvm.bswap.i48``, ``llvm.bswap.i64`` and other intrinsics extend this
16096 concept to additional even-byte lengths (6 bytes, 8 bytes and more,
16097 respectively). The vector intrinsics, such as ``llvm.bswap.v4i32``,
16098 operate on a per-element basis and the element order is not affected.
16100 .. _int_ctpop:
16102 '``llvm.ctpop.*``' Intrinsic
16103 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16105 Syntax:
16106 """""""
16108 This is an overloaded intrinsic. You can use llvm.ctpop on any integer
16109 bit width, or on any vector with integer elements. Not all targets
16110 support all bit widths or vector types, however.
16114       declare i8 @llvm.ctpop.i8(i8  <src>)
16115       declare i16 @llvm.ctpop.i16(i16 <src>)
16116       declare i32 @llvm.ctpop.i32(i32 <src>)
16117       declare i64 @llvm.ctpop.i64(i64 <src>)
16118       declare i256 @llvm.ctpop.i256(i256 <src>)
16119       declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32> <src>)
16121 Overview:
16122 """""""""
16124 The '``llvm.ctpop``' family of intrinsics counts the number of bits set
16125 in a value.
16127 Arguments:
16128 """"""""""
16130 The only argument is the value to be counted. The argument may be of any
16131 integer type, or a vector with integer elements. The return type must
16132 match the argument type.
16134 Semantics:
16135 """"""""""
16137 The '``llvm.ctpop``' intrinsic counts the 1's in a variable, or within
16138 each element of a vector.
16140 .. _int_ctlz:
16142 '``llvm.ctlz.*``' Intrinsic
16143 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
16145 Syntax:
16146 """""""
16148 This is an overloaded intrinsic. You can use ``llvm.ctlz`` on any
16149 integer bit width, or any vector whose elements are integers. Not all
16150 targets support all bit widths or vector types, however.
16154       declare i8   @llvm.ctlz.i8  (i8   <src>, i1 <is_zero_poison>)
16155       declare <2 x i37> @llvm.ctlz.v2i37(<2 x i37> <src>, i1 <is_zero_poison>)
16157 Overview:
16158 """""""""
16160 The '``llvm.ctlz``' family of intrinsic functions counts the number of
16161 leading zeros in a variable.
16163 Arguments:
16164 """"""""""
16166 The first argument is the value to be counted. This argument may be of
16167 any integer type, or a vector with integer element type. The return
16168 type must match the first argument type.
16170 The second argument is a constant flag that indicates whether the intrinsic
16171 returns a valid result if the first argument is zero. If the first
16172 argument is zero and the second argument is true, the result is poison.
16173 Historically some architectures did not provide a defined result for zero
16174 values as efficiently, and many algorithms are now predicated on avoiding
16175 zero-value inputs.
16177 Semantics:
16178 """"""""""
16180 The '``llvm.ctlz``' intrinsic counts the leading (most significant)
16181 zeros in a variable, or within each element of the vector. If
16182 ``src == 0`` then the result is the size in bits of the type of ``src``
16183 if ``is_zero_poison == 0`` and ``poison`` otherwise. For example,
16184 ``llvm.ctlz(i32 2) = 30``.
16186 .. _int_cttz:
16188 '``llvm.cttz.*``' Intrinsic
16189 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
16191 Syntax:
16192 """""""
16194 This is an overloaded intrinsic. You can use ``llvm.cttz`` on any
16195 integer bit width, or any vector of integer elements. Not all targets
16196 support all bit widths or vector types, however.
16200       declare i42   @llvm.cttz.i42  (i42   <src>, i1 <is_zero_poison>)
16201       declare <2 x i32> @llvm.cttz.v2i32(<2 x i32> <src>, i1 <is_zero_poison>)
16203 Overview:
16204 """""""""
16206 The '``llvm.cttz``' family of intrinsic functions counts the number of
16207 trailing zeros.
16209 Arguments:
16210 """"""""""
16212 The first argument is the value to be counted. This argument may be of
16213 any integer type, or a vector with integer element type. The return
16214 type must match the first argument type.
16216 The second argument is a constant flag that indicates whether the intrinsic
16217 returns a valid result if the first argument is zero. If the first
16218 argument is zero and the second argument is true, the result is poison.
16219 Historically some architectures did not provide a defined result for zero
16220 values as efficiently, and many algorithms are now predicated on avoiding
16221 zero-value inputs.
16223 Semantics:
16224 """"""""""
16226 The '``llvm.cttz``' intrinsic counts the trailing (least significant)
16227 zeros in a variable, or within each element of a vector. If ``src == 0``
16228 then the result is the size in bits of the type of ``src`` if
16229 ``is_zero_poison == 0`` and ``poison`` otherwise. For example,
16230 ``llvm.cttz(2) = 1``.
16232 .. _int_overflow:
16234 .. _int_fshl:
16236 '``llvm.fshl.*``' Intrinsic
16237 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
16239 Syntax:
16240 """""""
16242 This is an overloaded intrinsic. You can use ``llvm.fshl`` on any
16243 integer bit width or any vector of integer elements. Not all targets
16244 support all bit widths or vector types, however.
16248       declare i8  @llvm.fshl.i8 (i8 %a, i8 %b, i8 %c)
16249       declare i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 %c)
16250       declare <2 x i32> @llvm.fshl.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c)
16252 Overview:
16253 """""""""
16255 The '``llvm.fshl``' family of intrinsic functions performs a funnel shift left:
16256 the first two values are concatenated as { %a : %b } (%a is the most significant
16257 bits of the wide value), the combined value is shifted left, and the most
16258 significant bits are extracted to produce a result that is the same size as the
16259 original arguments. If the first 2 arguments are identical, this is equivalent
16260 to a rotate left operation. For vector types, the operation occurs for each
16261 element of the vector. The shift argument is treated as an unsigned amount
16262 modulo the element size of the arguments.
16264 Arguments:
16265 """"""""""
16267 The first two arguments are the values to be concatenated. The third
16268 argument is the shift amount. The arguments may be any integer type or a
16269 vector with integer element type. All arguments and the return value must
16270 have the same type.
16272 Example:
16273 """"""""
16275 .. code-block:: text
16277       %r = call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 %z)  ; %r = i8: msb_extract((concat(x, y) << (z % 8)), 8)
16278       %r = call i8 @llvm.fshl.i8(i8 255, i8 0, i8 15)  ; %r = i8: 128 (0b10000000)
16279       %r = call i8 @llvm.fshl.i8(i8 15, i8 15, i8 11)  ; %r = i8: 120 (0b01111000)
16280       %r = call i8 @llvm.fshl.i8(i8 0, i8 255, i8 8)   ; %r = i8: 0   (0b00000000)
16282 .. _int_fshr:
16284 '``llvm.fshr.*``' Intrinsic
16285 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
16287 Syntax:
16288 """""""
16290 This is an overloaded intrinsic. You can use ``llvm.fshr`` on any
16291 integer bit width or any vector of integer elements. Not all targets
16292 support all bit widths or vector types, however.
16296       declare i8  @llvm.fshr.i8 (i8 %a, i8 %b, i8 %c)
16297       declare i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %c)
16298       declare <2 x i32> @llvm.fshr.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c)
16300 Overview:
16301 """""""""
16303 The '``llvm.fshr``' family of intrinsic functions performs a funnel shift right:
16304 the first two values are concatenated as { %a : %b } (%a is the most significant
16305 bits of the wide value), the combined value is shifted right, and the least
16306 significant bits are extracted to produce a result that is the same size as the
16307 original arguments. If the first 2 arguments are identical, this is equivalent
16308 to a rotate right operation. For vector types, the operation occurs for each
16309 element of the vector. The shift argument is treated as an unsigned amount
16310 modulo the element size of the arguments.
16312 Arguments:
16313 """"""""""
16315 The first two arguments are the values to be concatenated. The third
16316 argument is the shift amount. The arguments may be any integer type or a
16317 vector with integer element type. All arguments and the return value must
16318 have the same type.
16320 Example:
16321 """"""""
16323 .. code-block:: text
16325       %r = call i8 @llvm.fshr.i8(i8 %x, i8 %y, i8 %z)  ; %r = i8: lsb_extract((concat(x, y) >> (z % 8)), 8)
16326       %r = call i8 @llvm.fshr.i8(i8 255, i8 0, i8 15)  ; %r = i8: 254 (0b11111110)
16327       %r = call i8 @llvm.fshr.i8(i8 15, i8 15, i8 11)  ; %r = i8: 225 (0b11100001)
16328       %r = call i8 @llvm.fshr.i8(i8 0, i8 255, i8 8)   ; %r = i8: 255 (0b11111111)
16330 Arithmetic with Overflow Intrinsics
16331 -----------------------------------
16333 LLVM provides intrinsics for fast arithmetic overflow checking.
16335 Each of these intrinsics returns a two-element struct. The first
16336 element of this struct contains the result of the corresponding
16337 arithmetic operation modulo 2\ :sup:`n`\ , where n is the bit width of
16338 the result. Therefore, for example, the first element of the struct
16339 returned by ``llvm.sadd.with.overflow.i32`` is always the same as the
16340 result of a 32-bit ``add`` instruction with the same operands, where
16341 the ``add`` is *not* modified by an ``nsw`` or ``nuw`` flag.
16343 The second element of the result is an ``i1`` that is 1 if the
16344 arithmetic operation overflowed and 0 otherwise. An operation
16345 overflows if, for any values of its operands ``A`` and ``B`` and for
16346 any ``N`` larger than the operands' width, ``ext(A op B) to iN`` is
16347 not equal to ``(ext(A) to iN) op (ext(B) to iN)`` where ``ext`` is
16348 ``sext`` for signed overflow and ``zext`` for unsigned overflow, and
16349 ``op`` is the underlying arithmetic operation.
16351 The behavior of these intrinsics is well-defined for all argument
16352 values.
16354 '``llvm.sadd.with.overflow.*``' Intrinsics
16355 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16357 Syntax:
16358 """""""
16360 This is an overloaded intrinsic. You can use ``llvm.sadd.with.overflow``
16361 on any integer bit width or vectors of integers.
16365       declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
16366       declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
16367       declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
16368       declare {<4 x i32>, <4 x i1>} @llvm.sadd.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16370 Overview:
16371 """""""""
16373 The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
16374 a signed addition of the two arguments, and indicate whether an overflow
16375 occurred during the signed summation.
16377 Arguments:
16378 """"""""""
16380 The arguments (%a and %b) and the first element of the result structure
16381 may be of integer types of any bit width, but they must have the same
16382 bit width. The second element of the result structure must be of type
16383 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
16384 addition.
16386 Semantics:
16387 """"""""""
16389 The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
16390 a signed addition of the two variables. They return a structure --- the
16391 first element of which is the signed summation, and the second element
16392 of which is a bit specifying if the signed summation resulted in an
16393 overflow.
16395 Examples:
16396 """""""""
16398 .. code-block:: llvm
16400       %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
16401       %sum = extractvalue {i32, i1} %res, 0
16402       %obit = extractvalue {i32, i1} %res, 1
16403       br i1 %obit, label %overflow, label %normal
16405 '``llvm.uadd.with.overflow.*``' Intrinsics
16406 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16408 Syntax:
16409 """""""
16411 This is an overloaded intrinsic. You can use ``llvm.uadd.with.overflow``
16412 on any integer bit width or vectors of integers.
16416       declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
16417       declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
16418       declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
16419       declare {<4 x i32>, <4 x i1>} @llvm.uadd.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16421 Overview:
16422 """""""""
16424 The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
16425 an unsigned addition of the two arguments, and indicate whether a carry
16426 occurred during the unsigned summation.
16428 Arguments:
16429 """"""""""
16431 The arguments (%a and %b) and the first element of the result structure
16432 may be of integer types of any bit width, but they must have the same
16433 bit width. The second element of the result structure must be of type
16434 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
16435 addition.
16437 Semantics:
16438 """"""""""
16440 The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
16441 an unsigned addition of the two arguments. They return a structure --- the
16442 first element of which is the sum, and the second element of which is a
16443 bit specifying if the unsigned summation resulted in a carry.
16445 Examples:
16446 """""""""
16448 .. code-block:: llvm
16450       %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
16451       %sum = extractvalue {i32, i1} %res, 0
16452       %obit = extractvalue {i32, i1} %res, 1
16453       br i1 %obit, label %carry, label %normal
16455 '``llvm.ssub.with.overflow.*``' Intrinsics
16456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16458 Syntax:
16459 """""""
16461 This is an overloaded intrinsic. You can use ``llvm.ssub.with.overflow``
16462 on any integer bit width or vectors of integers.
16466       declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
16467       declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
16468       declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
16469       declare {<4 x i32>, <4 x i1>} @llvm.ssub.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16471 Overview:
16472 """""""""
16474 The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
16475 a signed subtraction of the two arguments, and indicate whether an
16476 overflow occurred during the signed subtraction.
16478 Arguments:
16479 """"""""""
16481 The arguments (%a and %b) and the first element of the result structure
16482 may be of integer types of any bit width, but they must have the same
16483 bit width. The second element of the result structure must be of type
16484 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
16485 subtraction.
16487 Semantics:
16488 """"""""""
16490 The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
16491 a signed subtraction of the two arguments. They return a structure --- the
16492 first element of which is the subtraction, and the second element of
16493 which is a bit specifying if the signed subtraction resulted in an
16494 overflow.
16496 Examples:
16497 """""""""
16499 .. code-block:: llvm
16501       %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
16502       %sum = extractvalue {i32, i1} %res, 0
16503       %obit = extractvalue {i32, i1} %res, 1
16504       br i1 %obit, label %overflow, label %normal
16506 '``llvm.usub.with.overflow.*``' Intrinsics
16507 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16509 Syntax:
16510 """""""
16512 This is an overloaded intrinsic. You can use ``llvm.usub.with.overflow``
16513 on any integer bit width or vectors of integers.
16517       declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
16518       declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
16519       declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
16520       declare {<4 x i32>, <4 x i1>} @llvm.usub.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16522 Overview:
16523 """""""""
16525 The '``llvm.usub.with.overflow``' family of intrinsic functions perform
16526 an unsigned subtraction of the two arguments, and indicate whether an
16527 overflow occurred during the unsigned subtraction.
16529 Arguments:
16530 """"""""""
16532 The arguments (%a and %b) and the first element of the result structure
16533 may be of integer types of any bit width, but they must have the same
16534 bit width. The second element of the result structure must be of type
16535 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
16536 subtraction.
16538 Semantics:
16539 """"""""""
16541 The '``llvm.usub.with.overflow``' family of intrinsic functions perform
16542 an unsigned subtraction of the two arguments. They return a structure ---
16543 the first element of which is the subtraction, and the second element of
16544 which is a bit specifying if the unsigned subtraction resulted in an
16545 overflow.
16547 Examples:
16548 """""""""
16550 .. code-block:: llvm
16552       %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
16553       %sum = extractvalue {i32, i1} %res, 0
16554       %obit = extractvalue {i32, i1} %res, 1
16555       br i1 %obit, label %overflow, label %normal
16557 '``llvm.smul.with.overflow.*``' Intrinsics
16558 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16560 Syntax:
16561 """""""
16563 This is an overloaded intrinsic. You can use ``llvm.smul.with.overflow``
16564 on any integer bit width or vectors of integers.
16568       declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
16569       declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
16570       declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
16571       declare {<4 x i32>, <4 x i1>} @llvm.smul.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16573 Overview:
16574 """""""""
16576 The '``llvm.smul.with.overflow``' family of intrinsic functions perform
16577 a signed multiplication of the two arguments, and indicate whether an
16578 overflow occurred during the signed multiplication.
16580 Arguments:
16581 """"""""""
16583 The arguments (%a and %b) and the first element of the result structure
16584 may be of integer types of any bit width, but they must have the same
16585 bit width. The second element of the result structure must be of type
16586 ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
16587 multiplication.
16589 Semantics:
16590 """"""""""
16592 The '``llvm.smul.with.overflow``' family of intrinsic functions perform
16593 a signed multiplication of the two arguments. They return a structure ---
16594 the first element of which is the multiplication, and the second element
16595 of which is a bit specifying if the signed multiplication resulted in an
16596 overflow.
16598 Examples:
16599 """""""""
16601 .. code-block:: llvm
16603       %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
16604       %sum = extractvalue {i32, i1} %res, 0
16605       %obit = extractvalue {i32, i1} %res, 1
16606       br i1 %obit, label %overflow, label %normal
16608 '``llvm.umul.with.overflow.*``' Intrinsics
16609 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16611 Syntax:
16612 """""""
16614 This is an overloaded intrinsic. You can use ``llvm.umul.with.overflow``
16615 on any integer bit width or vectors of integers.
16619       declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
16620       declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
16621       declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
16622       declare {<4 x i32>, <4 x i1>} @llvm.umul.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
16624 Overview:
16625 """""""""
16627 The '``llvm.umul.with.overflow``' family of intrinsic functions perform
16628 a unsigned multiplication of the two arguments, and indicate whether an
16629 overflow occurred during the unsigned multiplication.
16631 Arguments:
16632 """"""""""
16634 The arguments (%a and %b) and the first element of the result structure
16635 may be of integer types of any bit width, but they must have the same
16636 bit width. The second element of the result structure must be of type
16637 ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
16638 multiplication.
16640 Semantics:
16641 """"""""""
16643 The '``llvm.umul.with.overflow``' family of intrinsic functions perform
16644 an unsigned multiplication of the two arguments. They return a structure ---
16645 the first element of which is the multiplication, and the second
16646 element of which is a bit specifying if the unsigned multiplication
16647 resulted in an overflow.
16649 Examples:
16650 """""""""
16652 .. code-block:: llvm
16654       %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
16655       %sum = extractvalue {i32, i1} %res, 0
16656       %obit = extractvalue {i32, i1} %res, 1
16657       br i1 %obit, label %overflow, label %normal
16659 Saturation Arithmetic Intrinsics
16660 ---------------------------------
16662 Saturation arithmetic is a version of arithmetic in which operations are
16663 limited to a fixed range between a minimum and maximum value. If the result of
16664 an operation is greater than the maximum value, the result is set (or
16665 "clamped") to this maximum. If it is below the minimum, it is clamped to this
16666 minimum.
16669 '``llvm.sadd.sat.*``' Intrinsics
16670 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16672 Syntax
16673 """""""
16675 This is an overloaded intrinsic. You can use ``llvm.sadd.sat``
16676 on any integer bit width or vectors of integers.
16680       declare i16 @llvm.sadd.sat.i16(i16 %a, i16 %b)
16681       declare i32 @llvm.sadd.sat.i32(i32 %a, i32 %b)
16682       declare i64 @llvm.sadd.sat.i64(i64 %a, i64 %b)
16683       declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16685 Overview
16686 """""""""
16688 The '``llvm.sadd.sat``' family of intrinsic functions perform signed
16689 saturating addition on the 2 arguments.
16691 Arguments
16692 """"""""""
16694 The arguments (%a and %b) and the result may be of integer types of any bit
16695 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
16696 values that will undergo signed addition.
16698 Semantics:
16699 """"""""""
16701 The maximum value this operation can clamp to is the largest signed value
16702 representable by the bit width of the arguments. The minimum value is the
16703 smallest signed value representable by this bit width.
16706 Examples
16707 """""""""
16709 .. code-block:: llvm
16711       %res = call i4 @llvm.sadd.sat.i4(i4 1, i4 2)  ; %res = 3
16712       %res = call i4 @llvm.sadd.sat.i4(i4 5, i4 6)  ; %res = 7
16713       %res = call i4 @llvm.sadd.sat.i4(i4 -4, i4 2)  ; %res = -2
16714       %res = call i4 @llvm.sadd.sat.i4(i4 -4, i4 -5)  ; %res = -8
16717 '``llvm.uadd.sat.*``' Intrinsics
16718 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16720 Syntax
16721 """""""
16723 This is an overloaded intrinsic. You can use ``llvm.uadd.sat``
16724 on any integer bit width or vectors of integers.
16728       declare i16 @llvm.uadd.sat.i16(i16 %a, i16 %b)
16729       declare i32 @llvm.uadd.sat.i32(i32 %a, i32 %b)
16730       declare i64 @llvm.uadd.sat.i64(i64 %a, i64 %b)
16731       declare <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16733 Overview
16734 """""""""
16736 The '``llvm.uadd.sat``' family of intrinsic functions perform unsigned
16737 saturating addition on the 2 arguments.
16739 Arguments
16740 """"""""""
16742 The arguments (%a and %b) and the result may be of integer types of any bit
16743 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
16744 values that will undergo unsigned addition.
16746 Semantics:
16747 """"""""""
16749 The maximum value this operation can clamp to is the largest unsigned value
16750 representable by the bit width of the arguments. Because this is an unsigned
16751 operation, the result will never saturate towards zero.
16754 Examples
16755 """""""""
16757 .. code-block:: llvm
16759       %res = call i4 @llvm.uadd.sat.i4(i4 1, i4 2)  ; %res = 3
16760       %res = call i4 @llvm.uadd.sat.i4(i4 5, i4 6)  ; %res = 11
16761       %res = call i4 @llvm.uadd.sat.i4(i4 8, i4 8)  ; %res = 15
16764 '``llvm.ssub.sat.*``' Intrinsics
16765 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16767 Syntax
16768 """""""
16770 This is an overloaded intrinsic. You can use ``llvm.ssub.sat``
16771 on any integer bit width or vectors of integers.
16775       declare i16 @llvm.ssub.sat.i16(i16 %a, i16 %b)
16776       declare i32 @llvm.ssub.sat.i32(i32 %a, i32 %b)
16777       declare i64 @llvm.ssub.sat.i64(i64 %a, i64 %b)
16778       declare <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16780 Overview
16781 """""""""
16783 The '``llvm.ssub.sat``' family of intrinsic functions perform signed
16784 saturating subtraction on the 2 arguments.
16786 Arguments
16787 """"""""""
16789 The arguments (%a and %b) and the result may be of integer types of any bit
16790 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
16791 values that will undergo signed subtraction.
16793 Semantics:
16794 """"""""""
16796 The maximum value this operation can clamp to is the largest signed value
16797 representable by the bit width of the arguments. The minimum value is the
16798 smallest signed value representable by this bit width.
16801 Examples
16802 """""""""
16804 .. code-block:: llvm
16806       %res = call i4 @llvm.ssub.sat.i4(i4 2, i4 1)  ; %res = 1
16807       %res = call i4 @llvm.ssub.sat.i4(i4 2, i4 6)  ; %res = -4
16808       %res = call i4 @llvm.ssub.sat.i4(i4 -4, i4 5)  ; %res = -8
16809       %res = call i4 @llvm.ssub.sat.i4(i4 4, i4 -5)  ; %res = 7
16812 '``llvm.usub.sat.*``' Intrinsics
16813 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16815 Syntax
16816 """""""
16818 This is an overloaded intrinsic. You can use ``llvm.usub.sat``
16819 on any integer bit width or vectors of integers.
16823       declare i16 @llvm.usub.sat.i16(i16 %a, i16 %b)
16824       declare i32 @llvm.usub.sat.i32(i32 %a, i32 %b)
16825       declare i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
16826       declare <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16828 Overview
16829 """""""""
16831 The '``llvm.usub.sat``' family of intrinsic functions perform unsigned
16832 saturating subtraction on the 2 arguments.
16834 Arguments
16835 """"""""""
16837 The arguments (%a and %b) and the result may be of integer types of any bit
16838 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
16839 values that will undergo unsigned subtraction.
16841 Semantics:
16842 """"""""""
16844 The minimum value this operation can clamp to is 0, which is the smallest
16845 unsigned value representable by the bit width of the unsigned arguments.
16846 Because this is an unsigned operation, the result will never saturate towards
16847 the largest possible value representable by this bit width.
16850 Examples
16851 """""""""
16853 .. code-block:: llvm
16855       %res = call i4 @llvm.usub.sat.i4(i4 2, i4 1)  ; %res = 1
16856       %res = call i4 @llvm.usub.sat.i4(i4 2, i4 6)  ; %res = 0
16859 '``llvm.sshl.sat.*``' Intrinsics
16860 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16862 Syntax
16863 """""""
16865 This is an overloaded intrinsic. You can use ``llvm.sshl.sat``
16866 on integers or vectors of integers of any bit width.
16870       declare i16 @llvm.sshl.sat.i16(i16 %a, i16 %b)
16871       declare i32 @llvm.sshl.sat.i32(i32 %a, i32 %b)
16872       declare i64 @llvm.sshl.sat.i64(i64 %a, i64 %b)
16873       declare <4 x i32> @llvm.sshl.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16875 Overview
16876 """""""""
16878 The '``llvm.sshl.sat``' family of intrinsic functions perform signed
16879 saturating left shift on the first argument.
16881 Arguments
16882 """"""""""
16884 The arguments (``%a`` and ``%b``) and the result may be of integer types of any
16885 bit width, but they must have the same bit width. ``%a`` is the value to be
16886 shifted, and ``%b`` is the amount to shift by. If ``b`` is (statically or
16887 dynamically) equal to or larger than the integer bit width of the arguments,
16888 the result is a :ref:`poison value <poisonvalues>`. If the arguments are
16889 vectors, each vector element of ``a`` is shifted by the corresponding shift
16890 amount in ``b``.
16893 Semantics:
16894 """"""""""
16896 The maximum value this operation can clamp to is the largest signed value
16897 representable by the bit width of the arguments. The minimum value is the
16898 smallest signed value representable by this bit width.
16901 Examples
16902 """""""""
16904 .. code-block:: llvm
16906       %res = call i4 @llvm.sshl.sat.i4(i4 2, i4 1)  ; %res = 4
16907       %res = call i4 @llvm.sshl.sat.i4(i4 2, i4 2)  ; %res = 7
16908       %res = call i4 @llvm.sshl.sat.i4(i4 -5, i4 1)  ; %res = -8
16909       %res = call i4 @llvm.sshl.sat.i4(i4 -1, i4 1)  ; %res = -2
16912 '``llvm.ushl.sat.*``' Intrinsics
16913 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16915 Syntax
16916 """""""
16918 This is an overloaded intrinsic. You can use ``llvm.ushl.sat``
16919 on integers or vectors of integers of any bit width.
16923       declare i16 @llvm.ushl.sat.i16(i16 %a, i16 %b)
16924       declare i32 @llvm.ushl.sat.i32(i32 %a, i32 %b)
16925       declare i64 @llvm.ushl.sat.i64(i64 %a, i64 %b)
16926       declare <4 x i32> @llvm.ushl.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
16928 Overview
16929 """""""""
16931 The '``llvm.ushl.sat``' family of intrinsic functions perform unsigned
16932 saturating left shift on the first argument.
16934 Arguments
16935 """"""""""
16937 The arguments (``%a`` and ``%b``) and the result may be of integer types of any
16938 bit width, but they must have the same bit width. ``%a`` is the value to be
16939 shifted, and ``%b`` is the amount to shift by. If ``b`` is (statically or
16940 dynamically) equal to or larger than the integer bit width of the arguments,
16941 the result is a :ref:`poison value <poisonvalues>`. If the arguments are
16942 vectors, each vector element of ``a`` is shifted by the corresponding shift
16943 amount in ``b``.
16945 Semantics:
16946 """"""""""
16948 The maximum value this operation can clamp to is the largest unsigned value
16949 representable by the bit width of the arguments.
16952 Examples
16953 """""""""
16955 .. code-block:: llvm
16957       %res = call i4 @llvm.ushl.sat.i4(i4 2, i4 1)  ; %res = 4
16958       %res = call i4 @llvm.ushl.sat.i4(i4 3, i4 3)  ; %res = 15
16961 Fixed Point Arithmetic Intrinsics
16962 ---------------------------------
16964 A fixed point number represents a real data type for a number that has a fixed
16965 number of digits after a radix point (equivalent to the decimal point '.').
16966 The number of digits after the radix point is referred as the `scale`. These
16967 are useful for representing fractional values to a specific precision. The
16968 following intrinsics perform fixed point arithmetic operations on 2 operands
16969 of the same scale, specified as the third argument.
16971 The ``llvm.*mul.fix`` family of intrinsic functions represents a multiplication
16972 of fixed point numbers through scaled integers. Therefore, fixed point
16973 multiplication can be represented as
16975 .. code-block:: llvm
16977         %result = call i4 @llvm.smul.fix.i4(i4 %a, i4 %b, i32 %scale)
16979         ; Expands to
16980         %a2 = sext i4 %a to i8
16981         %b2 = sext i4 %b to i8
16982         %mul = mul nsw nuw i8 %a2, %b2
16983         %scale2 = trunc i32 %scale to i8
16984         %r = ashr i8 %mul, i8 %scale2  ; this is for a target rounding down towards negative infinity
16985         %result = trunc i8 %r to i4
16987 The ``llvm.*div.fix`` family of intrinsic functions represents a division of
16988 fixed point numbers through scaled integers. Fixed point division can be
16989 represented as:
16991 .. code-block:: llvm
16993         %result call i4 @llvm.sdiv.fix.i4(i4 %a, i4 %b, i32 %scale)
16995         ; Expands to
16996         %a2 = sext i4 %a to i8
16997         %b2 = sext i4 %b to i8
16998         %scale2 = trunc i32 %scale to i8
16999         %a3 = shl i8 %a2, %scale2
17000         %r = sdiv i8 %a3, %b2 ; this is for a target rounding towards zero
17001         %result = trunc i8 %r to i4
17003 For each of these functions, if the result cannot be represented exactly with
17004 the provided scale, the result is rounded. Rounding is unspecified since
17005 preferred rounding may vary for different targets. Rounding is specified
17006 through a target hook. Different pipelines should legalize or optimize this
17007 using the rounding specified by this hook if it is provided. Operations like
17008 constant folding, instruction combining, KnownBits, and ValueTracking should
17009 also use this hook, if provided, and not assume the direction of rounding. A
17010 rounded result must always be within one unit of precision from the true
17011 result. That is, the error between the returned result and the true result must
17012 be less than 1/2^(scale).
17015 '``llvm.smul.fix.*``' Intrinsics
17016 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17018 Syntax
17019 """""""
17021 This is an overloaded intrinsic. You can use ``llvm.smul.fix``
17022 on any integer bit width or vectors of integers.
17026       declare i16 @llvm.smul.fix.i16(i16 %a, i16 %b, i32 %scale)
17027       declare i32 @llvm.smul.fix.i32(i32 %a, i32 %b, i32 %scale)
17028       declare i64 @llvm.smul.fix.i64(i64 %a, i64 %b, i32 %scale)
17029       declare <4 x i32> @llvm.smul.fix.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17031 Overview
17032 """""""""
17034 The '``llvm.smul.fix``' family of intrinsic functions perform signed
17035 fixed point multiplication on 2 arguments of the same scale.
17037 Arguments
17038 """"""""""
17040 The arguments (%a and %b) and the result may be of integer types of any bit
17041 width, but they must have the same bit width. The arguments may also work with
17042 int vectors of the same length and int size. ``%a`` and ``%b`` are the two
17043 values that will undergo signed fixed point multiplication. The argument
17044 ``%scale`` represents the scale of both operands, and must be a constant
17045 integer.
17047 Semantics:
17048 """"""""""
17050 This operation performs fixed point multiplication on the 2 arguments of a
17051 specified scale. The result will also be returned in the same scale specified
17052 in the third argument.
17054 If the result value cannot be precisely represented in the given scale, the
17055 value is rounded up or down to the closest representable value. The rounding
17056 direction is unspecified.
17058 It is undefined behavior if the result value does not fit within the range of
17059 the fixed point type.
17062 Examples
17063 """""""""
17065 .. code-block:: llvm
17067       %res = call i4 @llvm.smul.fix.i4(i4 3, i4 2, i32 0)  ; %res = 6 (2 x 3 = 6)
17068       %res = call i4 @llvm.smul.fix.i4(i4 3, i4 2, i32 1)  ; %res = 3 (1.5 x 1 = 1.5)
17069       %res = call i4 @llvm.smul.fix.i4(i4 3, i4 -2, i32 1)  ; %res = -3 (1.5 x -1 = -1.5)
17071       ; The result in the following could be rounded up to -2 or down to -2.5
17072       %res = call i4 @llvm.smul.fix.i4(i4 3, i4 -3, i32 1)  ; %res = -5 (or -4) (1.5 x -1.5 = -2.25)
17075 '``llvm.umul.fix.*``' Intrinsics
17076 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17078 Syntax
17079 """""""
17081 This is an overloaded intrinsic. You can use ``llvm.umul.fix``
17082 on any integer bit width or vectors of integers.
17086       declare i16 @llvm.umul.fix.i16(i16 %a, i16 %b, i32 %scale)
17087       declare i32 @llvm.umul.fix.i32(i32 %a, i32 %b, i32 %scale)
17088       declare i64 @llvm.umul.fix.i64(i64 %a, i64 %b, i32 %scale)
17089       declare <4 x i32> @llvm.umul.fix.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17091 Overview
17092 """""""""
17094 The '``llvm.umul.fix``' family of intrinsic functions perform unsigned
17095 fixed point multiplication on 2 arguments of the same scale.
17097 Arguments
17098 """"""""""
17100 The arguments (%a and %b) and the result may be of integer types of any bit
17101 width, but they must have the same bit width. The arguments may also work with
17102 int vectors of the same length and int size. ``%a`` and ``%b`` are the two
17103 values that will undergo unsigned fixed point multiplication. The argument
17104 ``%scale`` represents the scale of both operands, and must be a constant
17105 integer.
17107 Semantics:
17108 """"""""""
17110 This operation performs unsigned fixed point multiplication on the 2 arguments of a
17111 specified scale. The result will also be returned in the same scale specified
17112 in the third argument.
17114 If the result value cannot be precisely represented in the given scale, the
17115 value is rounded up or down to the closest representable value. The rounding
17116 direction is unspecified.
17118 It is undefined behavior if the result value does not fit within the range of
17119 the fixed point type.
17122 Examples
17123 """""""""
17125 .. code-block:: llvm
17127       %res = call i4 @llvm.umul.fix.i4(i4 3, i4 2, i32 0)  ; %res = 6 (2 x 3 = 6)
17128       %res = call i4 @llvm.umul.fix.i4(i4 3, i4 2, i32 1)  ; %res = 3 (1.5 x 1 = 1.5)
17130       ; The result in the following could be rounded down to 3.5 or up to 4
17131       %res = call i4 @llvm.umul.fix.i4(i4 15, i4 1, i32 1)  ; %res = 7 (or 8) (7.5 x 0.5 = 3.75)
17134 '``llvm.smul.fix.sat.*``' Intrinsics
17135 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17137 Syntax
17138 """""""
17140 This is an overloaded intrinsic. You can use ``llvm.smul.fix.sat``
17141 on any integer bit width or vectors of integers.
17145       declare i16 @llvm.smul.fix.sat.i16(i16 %a, i16 %b, i32 %scale)
17146       declare i32 @llvm.smul.fix.sat.i32(i32 %a, i32 %b, i32 %scale)
17147       declare i64 @llvm.smul.fix.sat.i64(i64 %a, i64 %b, i32 %scale)
17148       declare <4 x i32> @llvm.smul.fix.sat.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17150 Overview
17151 """""""""
17153 The '``llvm.smul.fix.sat``' family of intrinsic functions perform signed
17154 fixed point saturating multiplication on 2 arguments of the same scale.
17156 Arguments
17157 """"""""""
17159 The arguments (%a and %b) and the result may be of integer types of any bit
17160 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
17161 values that will undergo signed fixed point multiplication. The argument
17162 ``%scale`` represents the scale of both operands, and must be a constant
17163 integer.
17165 Semantics:
17166 """"""""""
17168 This operation performs fixed point multiplication on the 2 arguments of a
17169 specified scale. The result will also be returned in the same scale specified
17170 in the third argument.
17172 If the result value cannot be precisely represented in the given scale, the
17173 value is rounded up or down to the closest representable value. The rounding
17174 direction is unspecified.
17176 The maximum value this operation can clamp to is the largest signed value
17177 representable by the bit width of the first 2 arguments. The minimum value is the
17178 smallest signed value representable by this bit width.
17181 Examples
17182 """""""""
17184 .. code-block:: llvm
17186       %res = call i4 @llvm.smul.fix.sat.i4(i4 3, i4 2, i32 0)  ; %res = 6 (2 x 3 = 6)
17187       %res = call i4 @llvm.smul.fix.sat.i4(i4 3, i4 2, i32 1)  ; %res = 3 (1.5 x 1 = 1.5)
17188       %res = call i4 @llvm.smul.fix.sat.i4(i4 3, i4 -2, i32 1)  ; %res = -3 (1.5 x -1 = -1.5)
17190       ; The result in the following could be rounded up to -2 or down to -2.5
17191       %res = call i4 @llvm.smul.fix.sat.i4(i4 3, i4 -3, i32 1)  ; %res = -5 (or -4) (1.5 x -1.5 = -2.25)
17193       ; Saturation
17194       %res = call i4 @llvm.smul.fix.sat.i4(i4 7, i4 2, i32 0)  ; %res = 7
17195       %res = call i4 @llvm.smul.fix.sat.i4(i4 7, i4 4, i32 2)  ; %res = 7
17196       %res = call i4 @llvm.smul.fix.sat.i4(i4 -8, i4 5, i32 2)  ; %res = -8
17197       %res = call i4 @llvm.smul.fix.sat.i4(i4 -8, i4 -2, i32 1)  ; %res = 7
17199       ; Scale can affect the saturation result
17200       %res = call i4 @llvm.smul.fix.sat.i4(i4 2, i4 4, i32 0)  ; %res = 7 (2 x 4 -> clamped to 7)
17201       %res = call i4 @llvm.smul.fix.sat.i4(i4 2, i4 4, i32 1)  ; %res = 4 (1 x 2 = 2)
17204 '``llvm.umul.fix.sat.*``' Intrinsics
17205 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17207 Syntax
17208 """""""
17210 This is an overloaded intrinsic. You can use ``llvm.umul.fix.sat``
17211 on any integer bit width or vectors of integers.
17215       declare i16 @llvm.umul.fix.sat.i16(i16 %a, i16 %b, i32 %scale)
17216       declare i32 @llvm.umul.fix.sat.i32(i32 %a, i32 %b, i32 %scale)
17217       declare i64 @llvm.umul.fix.sat.i64(i64 %a, i64 %b, i32 %scale)
17218       declare <4 x i32> @llvm.umul.fix.sat.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17220 Overview
17221 """""""""
17223 The '``llvm.umul.fix.sat``' family of intrinsic functions perform unsigned
17224 fixed point saturating multiplication on 2 arguments of the same scale.
17226 Arguments
17227 """"""""""
17229 The arguments (%a and %b) and the result may be of integer types of any bit
17230 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
17231 values that will undergo unsigned fixed point multiplication. The argument
17232 ``%scale`` represents the scale of both operands, and must be a constant
17233 integer.
17235 Semantics:
17236 """"""""""
17238 This operation performs fixed point multiplication on the 2 arguments of a
17239 specified scale. The result will also be returned in the same scale specified
17240 in the third argument.
17242 If the result value cannot be precisely represented in the given scale, the
17243 value is rounded up or down to the closest representable value. The rounding
17244 direction is unspecified.
17246 The maximum value this operation can clamp to is the largest unsigned value
17247 representable by the bit width of the first 2 arguments. The minimum value is the
17248 smallest unsigned value representable by this bit width (zero).
17251 Examples
17252 """""""""
17254 .. code-block:: llvm
17256       %res = call i4 @llvm.umul.fix.sat.i4(i4 3, i4 2, i32 0)  ; %res = 6 (2 x 3 = 6)
17257       %res = call i4 @llvm.umul.fix.sat.i4(i4 3, i4 2, i32 1)  ; %res = 3 (1.5 x 1 = 1.5)
17259       ; The result in the following could be rounded down to 2 or up to 2.5
17260       %res = call i4 @llvm.umul.fix.sat.i4(i4 3, i4 3, i32 1)  ; %res = 4 (or 5) (1.5 x 1.5 = 2.25)
17262       ; Saturation
17263       %res = call i4 @llvm.umul.fix.sat.i4(i4 8, i4 2, i32 0)  ; %res = 15 (8 x 2 -> clamped to 15)
17264       %res = call i4 @llvm.umul.fix.sat.i4(i4 8, i4 8, i32 2)  ; %res = 15 (2 x 2 -> clamped to 3.75)
17266       ; Scale can affect the saturation result
17267       %res = call i4 @llvm.umul.fix.sat.i4(i4 2, i4 4, i32 0)  ; %res = 7 (2 x 4 -> clamped to 7)
17268       %res = call i4 @llvm.umul.fix.sat.i4(i4 2, i4 4, i32 1)  ; %res = 4 (1 x 2 = 2)
17271 '``llvm.sdiv.fix.*``' Intrinsics
17272 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17274 Syntax
17275 """""""
17277 This is an overloaded intrinsic. You can use ``llvm.sdiv.fix``
17278 on any integer bit width or vectors of integers.
17282       declare i16 @llvm.sdiv.fix.i16(i16 %a, i16 %b, i32 %scale)
17283       declare i32 @llvm.sdiv.fix.i32(i32 %a, i32 %b, i32 %scale)
17284       declare i64 @llvm.sdiv.fix.i64(i64 %a, i64 %b, i32 %scale)
17285       declare <4 x i32> @llvm.sdiv.fix.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17287 Overview
17288 """""""""
17290 The '``llvm.sdiv.fix``' family of intrinsic functions perform signed
17291 fixed point division on 2 arguments of the same scale.
17293 Arguments
17294 """"""""""
17296 The arguments (%a and %b) and the result may be of integer types of any bit
17297 width, but they must have the same bit width. The arguments may also work with
17298 int vectors of the same length and int size. ``%a`` and ``%b`` are the two
17299 values that will undergo signed fixed point division. The argument
17300 ``%scale`` represents the scale of both operands, and must be a constant
17301 integer.
17303 Semantics:
17304 """"""""""
17306 This operation performs fixed point division on the 2 arguments of a
17307 specified scale. The result will also be returned in the same scale specified
17308 in the third argument.
17310 If the result value cannot be precisely represented in the given scale, the
17311 value is rounded up or down to the closest representable value. The rounding
17312 direction is unspecified.
17314 It is undefined behavior if the result value does not fit within the range of
17315 the fixed point type, or if the second argument is zero.
17318 Examples
17319 """""""""
17321 .. code-block:: llvm
17323       %res = call i4 @llvm.sdiv.fix.i4(i4 6, i4 2, i32 0)  ; %res = 3 (6 / 2 = 3)
17324       %res = call i4 @llvm.sdiv.fix.i4(i4 6, i4 4, i32 1)  ; %res = 3 (3 / 2 = 1.5)
17325       %res = call i4 @llvm.sdiv.fix.i4(i4 3, i4 -2, i32 1) ; %res = -3 (1.5 / -1 = -1.5)
17327       ; The result in the following could be rounded up to 1 or down to 0.5
17328       %res = call i4 @llvm.sdiv.fix.i4(i4 3, i4 4, i32 1)  ; %res = 2 (or 1) (1.5 / 2 = 0.75)
17331 '``llvm.udiv.fix.*``' Intrinsics
17332 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17334 Syntax
17335 """""""
17337 This is an overloaded intrinsic. You can use ``llvm.udiv.fix``
17338 on any integer bit width or vectors of integers.
17342       declare i16 @llvm.udiv.fix.i16(i16 %a, i16 %b, i32 %scale)
17343       declare i32 @llvm.udiv.fix.i32(i32 %a, i32 %b, i32 %scale)
17344       declare i64 @llvm.udiv.fix.i64(i64 %a, i64 %b, i32 %scale)
17345       declare <4 x i32> @llvm.udiv.fix.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17347 Overview
17348 """""""""
17350 The '``llvm.udiv.fix``' family of intrinsic functions perform unsigned
17351 fixed point division on 2 arguments of the same scale.
17353 Arguments
17354 """"""""""
17356 The arguments (%a and %b) and the result may be of integer types of any bit
17357 width, but they must have the same bit width. The arguments may also work with
17358 int vectors of the same length and int size. ``%a`` and ``%b`` are the two
17359 values that will undergo unsigned fixed point division. The argument
17360 ``%scale`` represents the scale of both operands, and must be a constant
17361 integer.
17363 Semantics:
17364 """"""""""
17366 This operation performs fixed point division on the 2 arguments of a
17367 specified scale. The result will also be returned in the same scale specified
17368 in the third argument.
17370 If the result value cannot be precisely represented in the given scale, the
17371 value is rounded up or down to the closest representable value. The rounding
17372 direction is unspecified.
17374 It is undefined behavior if the result value does not fit within the range of
17375 the fixed point type, or if the second argument is zero.
17378 Examples
17379 """""""""
17381 .. code-block:: llvm
17383       %res = call i4 @llvm.udiv.fix.i4(i4 6, i4 2, i32 0)  ; %res = 3 (6 / 2 = 3)
17384       %res = call i4 @llvm.udiv.fix.i4(i4 6, i4 4, i32 1)  ; %res = 3 (3 / 2 = 1.5)
17385       %res = call i4 @llvm.udiv.fix.i4(i4 1, i4 -8, i32 4) ; %res = 2 (0.0625 / 0.5 = 0.125)
17387       ; The result in the following could be rounded up to 1 or down to 0.5
17388       %res = call i4 @llvm.udiv.fix.i4(i4 3, i4 4, i32 1)  ; %res = 2 (or 1) (1.5 / 2 = 0.75)
17391 '``llvm.sdiv.fix.sat.*``' Intrinsics
17392 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17394 Syntax
17395 """""""
17397 This is an overloaded intrinsic. You can use ``llvm.sdiv.fix.sat``
17398 on any integer bit width or vectors of integers.
17402       declare i16 @llvm.sdiv.fix.sat.i16(i16 %a, i16 %b, i32 %scale)
17403       declare i32 @llvm.sdiv.fix.sat.i32(i32 %a, i32 %b, i32 %scale)
17404       declare i64 @llvm.sdiv.fix.sat.i64(i64 %a, i64 %b, i32 %scale)
17405       declare <4 x i32> @llvm.sdiv.fix.sat.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17407 Overview
17408 """""""""
17410 The '``llvm.sdiv.fix.sat``' family of intrinsic functions perform signed
17411 fixed point saturating division on 2 arguments of the same scale.
17413 Arguments
17414 """"""""""
17416 The arguments (%a and %b) and the result may be of integer types of any bit
17417 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
17418 values that will undergo signed fixed point division. The argument
17419 ``%scale`` represents the scale of both operands, and must be a constant
17420 integer.
17422 Semantics:
17423 """"""""""
17425 This operation performs fixed point division on the 2 arguments of a
17426 specified scale. The result will also be returned in the same scale specified
17427 in the third argument.
17429 If the result value cannot be precisely represented in the given scale, the
17430 value is rounded up or down to the closest representable value. The rounding
17431 direction is unspecified.
17433 The maximum value this operation can clamp to is the largest signed value
17434 representable by the bit width of the first 2 arguments. The minimum value is the
17435 smallest signed value representable by this bit width.
17437 It is undefined behavior if the second argument is zero.
17440 Examples
17441 """""""""
17443 .. code-block:: llvm
17445       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 6, i4 2, i32 0)  ; %res = 3 (6 / 2 = 3)
17446       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 6, i4 4, i32 1)  ; %res = 3 (3 / 2 = 1.5)
17447       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 3, i4 -2, i32 1) ; %res = -3 (1.5 / -1 = -1.5)
17449       ; The result in the following could be rounded up to 1 or down to 0.5
17450       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 3, i4 4, i32 1)  ; %res = 2 (or 1) (1.5 / 2 = 0.75)
17452       ; Saturation
17453       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 -8, i4 -1, i32 0)  ; %res = 7 (-8 / -1 = 8 => 7)
17454       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 4, i4 2, i32 2)  ; %res = 7 (1 / 0.5 = 2 => 1.75)
17455       %res = call i4 @llvm.sdiv.fix.sat.i4(i4 -4, i4 1, i32 2)  ; %res = -8 (-1 / 0.25 = -4 => -2)
17458 '``llvm.udiv.fix.sat.*``' Intrinsics
17459 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17461 Syntax
17462 """""""
17464 This is an overloaded intrinsic. You can use ``llvm.udiv.fix.sat``
17465 on any integer bit width or vectors of integers.
17469       declare i16 @llvm.udiv.fix.sat.i16(i16 %a, i16 %b, i32 %scale)
17470       declare i32 @llvm.udiv.fix.sat.i32(i32 %a, i32 %b, i32 %scale)
17471       declare i64 @llvm.udiv.fix.sat.i64(i64 %a, i64 %b, i32 %scale)
17472       declare <4 x i32> @llvm.udiv.fix.sat.v4i32(<4 x i32> %a, <4 x i32> %b, i32 %scale)
17474 Overview
17475 """""""""
17477 The '``llvm.udiv.fix.sat``' family of intrinsic functions perform unsigned
17478 fixed point saturating division on 2 arguments of the same scale.
17480 Arguments
17481 """"""""""
17483 The arguments (%a and %b) and the result may be of integer types of any bit
17484 width, but they must have the same bit width. ``%a`` and ``%b`` are the two
17485 values that will undergo unsigned fixed point division. The argument
17486 ``%scale`` represents the scale of both operands, and must be a constant
17487 integer.
17489 Semantics:
17490 """"""""""
17492 This operation performs fixed point division on the 2 arguments of a
17493 specified scale. The result will also be returned in the same scale specified
17494 in the third argument.
17496 If the result value cannot be precisely represented in the given scale, the
17497 value is rounded up or down to the closest representable value. The rounding
17498 direction is unspecified.
17500 The maximum value this operation can clamp to is the largest unsigned value
17501 representable by the bit width of the first 2 arguments. The minimum value is the
17502 smallest unsigned value representable by this bit width (zero).
17504 It is undefined behavior if the second argument is zero.
17506 Examples
17507 """""""""
17509 .. code-block:: llvm
17511       %res = call i4 @llvm.udiv.fix.sat.i4(i4 6, i4 2, i32 0)  ; %res = 3 (6 / 2 = 3)
17512       %res = call i4 @llvm.udiv.fix.sat.i4(i4 6, i4 4, i32 1)  ; %res = 3 (3 / 2 = 1.5)
17514       ; The result in the following could be rounded down to 0.5 or up to 1
17515       %res = call i4 @llvm.udiv.fix.sat.i4(i4 3, i4 4, i32 1)  ; %res = 1 (or 2) (1.5 / 2 = 0.75)
17517       ; Saturation
17518       %res = call i4 @llvm.udiv.fix.sat.i4(i4 8, i4 2, i32 2)  ; %res = 15 (2 / 0.5 = 4 => 3.75)
17521 Specialised Arithmetic Intrinsics
17522 ---------------------------------
17524 .. _i_intr_llvm_canonicalize:
17526 '``llvm.canonicalize.*``' Intrinsic
17527 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17529 Syntax:
17530 """""""
17534       declare float @llvm.canonicalize.f32(float %a)
17535       declare double @llvm.canonicalize.f64(double %b)
17537 Overview:
17538 """""""""
17540 The '``llvm.canonicalize.*``' intrinsic returns the platform specific canonical
17541 encoding of a floating-point number. This canonicalization is useful for
17542 implementing certain numeric primitives such as frexp. The canonical encoding is
17543 defined by IEEE-754-2008 to be:
17547       2.1.8 canonical encoding: The preferred encoding of a floating-point
17548       representation in a format. Applied to declets, significands of finite
17549       numbers, infinities, and NaNs, especially in decimal formats.
17551 This operation can also be considered equivalent to the IEEE-754-2008
17552 conversion of a floating-point value to the same format. NaNs are handled
17553 according to section 6.2.
17555 Examples of non-canonical encodings:
17557 - x87 pseudo denormals, pseudo NaNs, pseudo Infinity, Unnormals. These are
17558   converted to a canonical representation per hardware-specific protocol.
17559 - Many normal decimal floating-point numbers have non-canonical alternative
17560   encodings.
17561 - Some machines, like GPUs or ARMv7 NEON, do not support subnormal values.
17562   These are treated as non-canonical encodings of zero and will be flushed to
17563   a zero of the same sign by this operation.
17565 Note that per IEEE-754-2008 6.2, systems that support signaling NaNs with
17566 default exception handling must signal an invalid exception, and produce a
17567 quiet NaN result.
17569 This function should always be implementable as multiplication by 1.0, provided
17570 that the compiler does not constant fold the operation. Likewise, division by
17571 1.0 and ``llvm.minnum(x, x)`` are possible implementations. Addition with
17572 -0.0 is also sufficient provided that the rounding mode is not -Infinity.
17574 ``@llvm.canonicalize`` must preserve the equality relation. That is:
17576 - ``(@llvm.canonicalize(x) == x)`` is equivalent to ``(x == x)``
17577 - ``(@llvm.canonicalize(x) == @llvm.canonicalize(y))`` is equivalent
17578   to ``(x == y)``
17580 Additionally, the sign of zero must be conserved:
17581 ``@llvm.canonicalize(-0.0) = -0.0`` and ``@llvm.canonicalize(+0.0) = +0.0``
17583 The payload bits of a NaN must be conserved, with two exceptions.
17584 First, environments which use only a single canonical representation of NaN
17585 must perform said canonicalization. Second, SNaNs must be quieted per the
17586 usual methods.
17588 The canonicalization operation may be optimized away if:
17590 - The input is known to be canonical. For example, it was produced by a
17591   floating-point operation that is required by the standard to be canonical.
17592 - The result is consumed only by (or fused with) other floating-point
17593   operations. That is, the bits of the floating-point value are not examined.
17595 .. _int_fmuladd:
17597 '``llvm.fmuladd.*``' Intrinsic
17598 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17600 Syntax:
17601 """""""
17605       declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
17606       declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
17608 Overview:
17609 """""""""
17611 The '``llvm.fmuladd.*``' intrinsic functions represent multiply-add
17612 expressions that can be fused if the code generator determines that (a) the
17613 target instruction set has support for a fused operation, and (b) that the
17614 fused operation is more efficient than the equivalent, separate pair of mul
17615 and add instructions.
17617 Arguments:
17618 """"""""""
17620 The '``llvm.fmuladd.*``' intrinsics each take three arguments: two
17621 multiplicands, a and b, and an addend c.
17623 Semantics:
17624 """"""""""
17626 The expression:
17630       %0 = call float @llvm.fmuladd.f32(%a, %b, %c)
17632 is equivalent to the expression a \* b + c, except that it is unspecified
17633 whether rounding will be performed between the multiplication and addition
17634 steps. Fusion is not guaranteed, even if the target platform supports it.
17635 If a fused multiply-add is required, the corresponding
17636 :ref:`llvm.fma <int_fma>` intrinsic function should be used instead.
17637 This never sets errno, just as '``llvm.fma.*``'.
17639 Examples:
17640 """""""""
17642 .. code-block:: llvm
17644       %r2 = call float @llvm.fmuladd.f32(float %a, float %b, float %c) ; yields float:r2 = (a * b) + c
17647 Hardware-Loop Intrinsics
17648 ------------------------
17650 LLVM support several intrinsics to mark a loop as a hardware-loop. They are
17651 hints to the backend which are required to lower these intrinsics further to target
17652 specific instructions, or revert the hardware-loop to a normal loop if target
17653 specific restriction are not met and a hardware-loop can't be generated.
17655 These intrinsics may be modified in the future and are not intended to be used
17656 outside the backend. Thus, front-end and mid-level optimizations should not be
17657 generating these intrinsics.
17660 '``llvm.set.loop.iterations.*``' Intrinsic
17661 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17663 Syntax:
17664 """""""
17666 This is an overloaded intrinsic.
17670       declare void @llvm.set.loop.iterations.i32(i32)
17671       declare void @llvm.set.loop.iterations.i64(i64)
17673 Overview:
17674 """""""""
17676 The '``llvm.set.loop.iterations.*``' intrinsics are used to specify the
17677 hardware-loop trip count. They are placed in the loop preheader basic block and
17678 are marked as ``IntrNoDuplicate`` to avoid optimizers duplicating these
17679 instructions.
17681 Arguments:
17682 """"""""""
17684 The integer operand is the loop trip count of the hardware-loop, and thus
17685 not e.g. the loop back-edge taken count.
17687 Semantics:
17688 """"""""""
17690 The '``llvm.set.loop.iterations.*``' intrinsics do not perform any arithmetic
17691 on their operand. It's a hint to the backend that can use this to set up the
17692 hardware-loop count with a target specific instruction, usually a move of this
17693 value to a special register or a hardware-loop instruction.
17696 '``llvm.start.loop.iterations.*``' Intrinsic
17697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17699 Syntax:
17700 """""""
17702 This is an overloaded intrinsic.
17706       declare i32 @llvm.start.loop.iterations.i32(i32)
17707       declare i64 @llvm.start.loop.iterations.i64(i64)
17709 Overview:
17710 """""""""
17712 The '``llvm.start.loop.iterations.*``' intrinsics are similar to the
17713 '``llvm.set.loop.iterations.*``' intrinsics, used to specify the
17714 hardware-loop trip count but also produce a value identical to the input
17715 that can be used as the input to the loop. They are placed in the loop
17716 preheader basic block and the output is expected to be the input to the
17717 phi for the induction variable of the loop, decremented by the
17718 '``llvm.loop.decrement.reg.*``'.
17720 Arguments:
17721 """"""""""
17723 The integer operand is the loop trip count of the hardware-loop, and thus
17724 not e.g. the loop back-edge taken count.
17726 Semantics:
17727 """"""""""
17729 The '``llvm.start.loop.iterations.*``' intrinsics do not perform any arithmetic
17730 on their operand. It's a hint to the backend that can use this to set up the
17731 hardware-loop count with a target specific instruction, usually a move of this
17732 value to a special register or a hardware-loop instruction.
17734 '``llvm.test.set.loop.iterations.*``' Intrinsic
17735 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17737 Syntax:
17738 """""""
17740 This is an overloaded intrinsic.
17744       declare i1 @llvm.test.set.loop.iterations.i32(i32)
17745       declare i1 @llvm.test.set.loop.iterations.i64(i64)
17747 Overview:
17748 """""""""
17750 The '``llvm.test.set.loop.iterations.*``' intrinsics are used to specify the
17751 the loop trip count, and also test that the given count is not zero, allowing
17752 it to control entry to a while-loop.  They are placed in the loop preheader's
17753 predecessor basic block, and are marked as ``IntrNoDuplicate`` to avoid
17754 optimizers duplicating these instructions.
17756 Arguments:
17757 """"""""""
17759 The integer operand is the loop trip count of the hardware-loop, and thus
17760 not e.g. the loop back-edge taken count.
17762 Semantics:
17763 """"""""""
17765 The '``llvm.test.set.loop.iterations.*``' intrinsics do not perform any
17766 arithmetic on their operand. It's a hint to the backend that can use this to
17767 set up the hardware-loop count with a target specific instruction, usually a
17768 move of this value to a special register or a hardware-loop instruction.
17769 The result is the conditional value of whether the given count is not zero.
17772 '``llvm.test.start.loop.iterations.*``' Intrinsic
17773 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17775 Syntax:
17776 """""""
17778 This is an overloaded intrinsic.
17782       declare {i32, i1} @llvm.test.start.loop.iterations.i32(i32)
17783       declare {i64, i1} @llvm.test.start.loop.iterations.i64(i64)
17785 Overview:
17786 """""""""
17788 The '``llvm.test.start.loop.iterations.*``' intrinsics are similar to the
17789 '``llvm.test.set.loop.iterations.*``' and '``llvm.start.loop.iterations.*``'
17790 intrinsics, used to specify the hardware-loop trip count, but also produce a
17791 value identical to the input that can be used as the input to the loop. The
17792 second i1 output controls entry to a while-loop.
17794 Arguments:
17795 """"""""""
17797 The integer operand is the loop trip count of the hardware-loop, and thus
17798 not e.g. the loop back-edge taken count.
17800 Semantics:
17801 """"""""""
17803 The '``llvm.test.start.loop.iterations.*``' intrinsics do not perform any
17804 arithmetic on their operand. It's a hint to the backend that can use this to
17805 set up the hardware-loop count with a target specific instruction, usually a
17806 move of this value to a special register or a hardware-loop instruction.
17807 The result is a pair of the input and a conditional value of whether the
17808 given count is not zero.
17811 '``llvm.loop.decrement.reg.*``' Intrinsic
17812 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17814 Syntax:
17815 """""""
17817 This is an overloaded intrinsic.
17821       declare i32 @llvm.loop.decrement.reg.i32(i32, i32)
17822       declare i64 @llvm.loop.decrement.reg.i64(i64, i64)
17824 Overview:
17825 """""""""
17827 The '``llvm.loop.decrement.reg.*``' intrinsics are used to lower the loop
17828 iteration counter and return an updated value that will be used in the next
17829 loop test check.
17831 Arguments:
17832 """"""""""
17834 Both arguments must have identical integer types. The first operand is the
17835 loop iteration counter. The second operand is the maximum number of elements
17836 processed in an iteration.
17838 Semantics:
17839 """"""""""
17841 The '``llvm.loop.decrement.reg.*``' intrinsics do an integer ``SUB`` of its
17842 two operands, which is not allowed to wrap. They return the remaining number of
17843 iterations still to be executed, and can be used together with a ``PHI``,
17844 ``ICMP`` and ``BR`` to control the number of loop iterations executed. Any
17845 optimisations are allowed to treat it is a ``SUB``, and it is supported by
17846 SCEV, so it's the backends responsibility to handle cases where it may be
17847 optimised. These intrinsics are marked as ``IntrNoDuplicate`` to avoid
17848 optimizers duplicating these instructions.
17851 '``llvm.loop.decrement.*``' Intrinsic
17852 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17854 Syntax:
17855 """""""
17857 This is an overloaded intrinsic.
17861       declare i1 @llvm.loop.decrement.i32(i32)
17862       declare i1 @llvm.loop.decrement.i64(i64)
17864 Overview:
17865 """""""""
17867 The HardwareLoops pass allows the loop decrement value to be specified with an
17868 option. It defaults to a loop decrement value of 1, but it can be an unsigned
17869 integer value provided by this option.  The '``llvm.loop.decrement.*``'
17870 intrinsics decrement the loop iteration counter with this value, and return a
17871 false predicate if the loop should exit, and true otherwise.
17872 This is emitted if the loop counter is not updated via a ``PHI`` node, which
17873 can also be controlled with an option.
17875 Arguments:
17876 """"""""""
17878 The integer argument is the loop decrement value used to decrement the loop
17879 iteration counter.
17881 Semantics:
17882 """"""""""
17884 The '``llvm.loop.decrement.*``' intrinsics do a ``SUB`` of the loop iteration
17885 counter with the given loop decrement value, and return false if the loop
17886 should exit, this ``SUB`` is not allowed to wrap. The result is a condition
17887 that is used by the conditional branch controlling the loop.
17890 Vector Reduction Intrinsics
17891 ---------------------------
17893 Horizontal reductions of vectors can be expressed using the following
17894 intrinsics. Each one takes a vector operand as an input and applies its
17895 respective operation across all elements of the vector, returning a single
17896 scalar result of the same element type.
17898 .. _int_vector_reduce_add:
17900 '``llvm.vector.reduce.add.*``' Intrinsic
17901 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17903 Syntax:
17904 """""""
17908       declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %a)
17909       declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %a)
17911 Overview:
17912 """""""""
17914 The '``llvm.vector.reduce.add.*``' intrinsics do an integer ``ADD``
17915 reduction of a vector, returning the result as a scalar. The return type matches
17916 the element-type of the vector input.
17918 Arguments:
17919 """"""""""
17920 The argument to this intrinsic must be a vector of integer values.
17922 .. _int_vector_reduce_fadd:
17924 '``llvm.vector.reduce.fadd.*``' Intrinsic
17925 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17927 Syntax:
17928 """""""
17932       declare float @llvm.vector.reduce.fadd.v4f32(float %start_value, <4 x float> %a)
17933       declare double @llvm.vector.reduce.fadd.v2f64(double %start_value, <2 x double> %a)
17935 Overview:
17936 """""""""
17938 The '``llvm.vector.reduce.fadd.*``' intrinsics do a floating-point
17939 ``ADD`` reduction of a vector, returning the result as a scalar. The return type
17940 matches the element-type of the vector input.
17942 If the intrinsic call has the 'reassoc' flag set, then the reduction will not
17943 preserve the associativity of an equivalent scalarized counterpart. Otherwise
17944 the reduction will be *sequential*, thus implying that the operation respects
17945 the associativity of a scalarized reduction. That is, the reduction begins with
17946 the start value and performs an fadd operation with consecutively increasing
17947 vector element indices. See the following pseudocode:
17951     float sequential_fadd(start_value, input_vector)
17952       result = start_value
17953       for i = 0 to length(input_vector)
17954         result = result + input_vector[i]
17955       return result
17958 Arguments:
17959 """"""""""
17960 The first argument to this intrinsic is a scalar start value for the reduction.
17961 The type of the start value matches the element-type of the vector input.
17962 The second argument must be a vector of floating-point values.
17964 To ignore the start value, negative zero (``-0.0``) can be used, as it is
17965 the neutral value of floating point addition.
17967 Examples:
17968 """""""""
17972       %unord = call reassoc float @llvm.vector.reduce.fadd.v4f32(float -0.0, <4 x float> %input) ; relaxed reduction
17973       %ord = call float @llvm.vector.reduce.fadd.v4f32(float %start_value, <4 x float> %input) ; sequential reduction
17976 .. _int_vector_reduce_mul:
17978 '``llvm.vector.reduce.mul.*``' Intrinsic
17979 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17981 Syntax:
17982 """""""
17986       declare i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %a)
17987       declare i64 @llvm.vector.reduce.mul.v2i64(<2 x i64> %a)
17989 Overview:
17990 """""""""
17992 The '``llvm.vector.reduce.mul.*``' intrinsics do an integer ``MUL``
17993 reduction of a vector, returning the result as a scalar. The return type matches
17994 the element-type of the vector input.
17996 Arguments:
17997 """"""""""
17998 The argument to this intrinsic must be a vector of integer values.
18000 .. _int_vector_reduce_fmul:
18002 '``llvm.vector.reduce.fmul.*``' Intrinsic
18003 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18005 Syntax:
18006 """""""
18010       declare float @llvm.vector.reduce.fmul.v4f32(float %start_value, <4 x float> %a)
18011       declare double @llvm.vector.reduce.fmul.v2f64(double %start_value, <2 x double> %a)
18013 Overview:
18014 """""""""
18016 The '``llvm.vector.reduce.fmul.*``' intrinsics do a floating-point
18017 ``MUL`` reduction of a vector, returning the result as a scalar. The return type
18018 matches the element-type of the vector input.
18020 If the intrinsic call has the 'reassoc' flag set, then the reduction will not
18021 preserve the associativity of an equivalent scalarized counterpart. Otherwise
18022 the reduction will be *sequential*, thus implying that the operation respects
18023 the associativity of a scalarized reduction. That is, the reduction begins with
18024 the start value and performs an fmul operation with consecutively increasing
18025 vector element indices. See the following pseudocode:
18029     float sequential_fmul(start_value, input_vector)
18030       result = start_value
18031       for i = 0 to length(input_vector)
18032         result = result * input_vector[i]
18033       return result
18036 Arguments:
18037 """"""""""
18038 The first argument to this intrinsic is a scalar start value for the reduction.
18039 The type of the start value matches the element-type of the vector input.
18040 The second argument must be a vector of floating-point values.
18042 To ignore the start value, one (``1.0``) can be used, as it is the neutral
18043 value of floating point multiplication.
18045 Examples:
18046 """""""""
18050       %unord = call reassoc float @llvm.vector.reduce.fmul.v4f32(float 1.0, <4 x float> %input) ; relaxed reduction
18051       %ord = call float @llvm.vector.reduce.fmul.v4f32(float %start_value, <4 x float> %input) ; sequential reduction
18053 .. _int_vector_reduce_and:
18055 '``llvm.vector.reduce.and.*``' Intrinsic
18056 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18058 Syntax:
18059 """""""
18063       declare i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %a)
18065 Overview:
18066 """""""""
18068 The '``llvm.vector.reduce.and.*``' intrinsics do a bitwise ``AND``
18069 reduction of a vector, returning the result as a scalar. The return type matches
18070 the element-type of the vector input.
18072 Arguments:
18073 """"""""""
18074 The argument to this intrinsic must be a vector of integer values.
18076 .. _int_vector_reduce_or:
18078 '``llvm.vector.reduce.or.*``' Intrinsic
18079 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18081 Syntax:
18082 """""""
18086       declare i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %a)
18088 Overview:
18089 """""""""
18091 The '``llvm.vector.reduce.or.*``' intrinsics do a bitwise ``OR`` reduction
18092 of a vector, returning the result as a scalar. The return type matches the
18093 element-type of the vector input.
18095 Arguments:
18096 """"""""""
18097 The argument to this intrinsic must be a vector of integer values.
18099 .. _int_vector_reduce_xor:
18101 '``llvm.vector.reduce.xor.*``' Intrinsic
18102 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18104 Syntax:
18105 """""""
18109       declare i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %a)
18111 Overview:
18112 """""""""
18114 The '``llvm.vector.reduce.xor.*``' intrinsics do a bitwise ``XOR``
18115 reduction of a vector, returning the result as a scalar. The return type matches
18116 the element-type of the vector input.
18118 Arguments:
18119 """"""""""
18120 The argument to this intrinsic must be a vector of integer values.
18122 .. _int_vector_reduce_smax:
18124 '``llvm.vector.reduce.smax.*``' Intrinsic
18125 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18127 Syntax:
18128 """""""
18132       declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %a)
18134 Overview:
18135 """""""""
18137 The '``llvm.vector.reduce.smax.*``' intrinsics do a signed integer
18138 ``MAX`` reduction of a vector, returning the result as a scalar. The return type
18139 matches the element-type of the vector input.
18141 Arguments:
18142 """"""""""
18143 The argument to this intrinsic must be a vector of integer values.
18145 .. _int_vector_reduce_smin:
18147 '``llvm.vector.reduce.smin.*``' Intrinsic
18148 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18150 Syntax:
18151 """""""
18155       declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %a)
18157 Overview:
18158 """""""""
18160 The '``llvm.vector.reduce.smin.*``' intrinsics do a signed integer
18161 ``MIN`` reduction of a vector, returning the result as a scalar. The return type
18162 matches the element-type of the vector input.
18164 Arguments:
18165 """"""""""
18166 The argument to this intrinsic must be a vector of integer values.
18168 .. _int_vector_reduce_umax:
18170 '``llvm.vector.reduce.umax.*``' Intrinsic
18171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18173 Syntax:
18174 """""""
18178       declare i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %a)
18180 Overview:
18181 """""""""
18183 The '``llvm.vector.reduce.umax.*``' intrinsics do an unsigned
18184 integer ``MAX`` reduction of a vector, returning the result as a scalar. The
18185 return type matches the element-type of the vector input.
18187 Arguments:
18188 """"""""""
18189 The argument to this intrinsic must be a vector of integer values.
18191 .. _int_vector_reduce_umin:
18193 '``llvm.vector.reduce.umin.*``' Intrinsic
18194 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18196 Syntax:
18197 """""""
18201       declare i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %a)
18203 Overview:
18204 """""""""
18206 The '``llvm.vector.reduce.umin.*``' intrinsics do an unsigned
18207 integer ``MIN`` reduction of a vector, returning the result as a scalar. The
18208 return type matches the element-type of the vector input.
18210 Arguments:
18211 """"""""""
18212 The argument to this intrinsic must be a vector of integer values.
18214 .. _int_vector_reduce_fmax:
18216 '``llvm.vector.reduce.fmax.*``' Intrinsic
18217 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18219 Syntax:
18220 """""""
18224       declare float @llvm.vector.reduce.fmax.v4f32(<4 x float> %a)
18225       declare double @llvm.vector.reduce.fmax.v2f64(<2 x double> %a)
18227 Overview:
18228 """""""""
18230 The '``llvm.vector.reduce.fmax.*``' intrinsics do a floating-point
18231 ``MAX`` reduction of a vector, returning the result as a scalar. The return type
18232 matches the element-type of the vector input.
18234 This instruction has the same comparison semantics as the '``llvm.maxnum.*``'
18235 intrinsic. That is, the result will always be a number unless all elements of
18236 the vector are NaN. For a vector with maximum element magnitude 0.0 and
18237 containing both +0.0 and -0.0 elements, the sign of the result is unspecified.
18239 If the intrinsic call has the ``nnan`` fast-math flag, then the operation can
18240 assume that NaNs are not present in the input vector.
18242 Arguments:
18243 """"""""""
18244 The argument to this intrinsic must be a vector of floating-point values.
18246 .. _int_vector_reduce_fmin:
18248 '``llvm.vector.reduce.fmin.*``' Intrinsic
18249 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18251 Syntax:
18252 """""""
18253 This is an overloaded intrinsic.
18257       declare float @llvm.vector.reduce.fmin.v4f32(<4 x float> %a)
18258       declare double @llvm.vector.reduce.fmin.v2f64(<2 x double> %a)
18260 Overview:
18261 """""""""
18263 The '``llvm.vector.reduce.fmin.*``' intrinsics do a floating-point
18264 ``MIN`` reduction of a vector, returning the result as a scalar. The return type
18265 matches the element-type of the vector input.
18267 This instruction has the same comparison semantics as the '``llvm.minnum.*``'
18268 intrinsic. That is, the result will always be a number unless all elements of
18269 the vector are NaN. For a vector with minimum element magnitude 0.0 and
18270 containing both +0.0 and -0.0 elements, the sign of the result is unspecified.
18272 If the intrinsic call has the ``nnan`` fast-math flag, then the operation can
18273 assume that NaNs are not present in the input vector.
18275 Arguments:
18276 """"""""""
18277 The argument to this intrinsic must be a vector of floating-point values.
18279 .. _int_vector_reduce_fmaximum:
18281 '``llvm.vector.reduce.fmaximum.*``' Intrinsic
18282 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18284 Syntax:
18285 """""""
18286 This is an overloaded intrinsic.
18290       declare float @llvm.vector.reduce.fmaximum.v4f32(<4 x float> %a)
18291       declare double @llvm.vector.reduce.fmaximum.v2f64(<2 x double> %a)
18293 Overview:
18294 """""""""
18296 The '``llvm.vector.reduce.fmaximum.*``' intrinsics do a floating-point
18297 ``MAX`` reduction of a vector, returning the result as a scalar. The return type
18298 matches the element-type of the vector input.
18300 This instruction has the same comparison semantics as the '``llvm.maximum.*``'
18301 intrinsic. That is, this intrinsic propagates NaNs and +0.0 is considered
18302 greater than -0.0. If any element of the vector is a NaN, the result is NaN.
18304 Arguments:
18305 """"""""""
18306 The argument to this intrinsic must be a vector of floating-point values.
18308 .. _int_vector_reduce_fminimum:
18310 '``llvm.vector.reduce.fminimum.*``' Intrinsic
18311 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18313 Syntax:
18314 """""""
18315 This is an overloaded intrinsic.
18319       declare float @llvm.vector.reduce.fminimum.v4f32(<4 x float> %a)
18320       declare double @llvm.vector.reduce.fminimum.v2f64(<2 x double> %a)
18322 Overview:
18323 """""""""
18325 The '``llvm.vector.reduce.fminimum.*``' intrinsics do a floating-point
18326 ``MIN`` reduction of a vector, returning the result as a scalar. The return type
18327 matches the element-type of the vector input.
18329 This instruction has the same comparison semantics as the '``llvm.minimum.*``'
18330 intrinsic. That is, this intrinsic propagates NaNs and -0.0 is considered less
18331 than +0.0. If any element of the vector is a NaN, the result is NaN.
18333 Arguments:
18334 """"""""""
18335 The argument to this intrinsic must be a vector of floating-point values.
18337 '``llvm.vector.insert``' Intrinsic
18338 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18340 Syntax:
18341 """""""
18342 This is an overloaded intrinsic.
18346       ; Insert fixed type into scalable type
18347       declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> %vec, <4 x float> %subvec, i64 <idx>)
18348       declare <vscale x 2 x double> @llvm.vector.insert.nxv2f64.v2f64(<vscale x 2 x double> %vec, <2 x double> %subvec, i64 <idx>)
18350       ; Insert scalable type into scalable type
18351       declare <vscale x 4 x float> @llvm.vector.insert.nxv4f64.nxv2f64(<vscale x 4 x float> %vec, <vscale x 2 x float> %subvec, i64 <idx>)
18353       ; Insert fixed type into fixed type
18354       declare <4 x double> @llvm.vector.insert.v4f64.v2f64(<4 x double> %vec, <2 x double> %subvec, i64 <idx>)
18356 Overview:
18357 """""""""
18359 The '``llvm.vector.insert.*``' intrinsics insert a vector into another vector
18360 starting from a given index. The return type matches the type of the vector we
18361 insert into. Conceptually, this can be used to build a scalable vector out of
18362 non-scalable vectors, however this intrinsic can also be used on purely fixed
18363 types.
18365 Scalable vectors can only be inserted into other scalable vectors.
18367 Arguments:
18368 """"""""""
18370 The ``vec`` is the vector which ``subvec`` will be inserted into.
18371 The ``subvec`` is the vector that will be inserted.
18373 ``idx`` represents the starting element number at which ``subvec`` will be
18374 inserted. ``idx`` must be a constant multiple of ``subvec``'s known minimum
18375 vector length. If ``subvec`` is a scalable vector, ``idx`` is first scaled by
18376 the runtime scaling factor of ``subvec``. The elements of ``vec`` starting at
18377 ``idx`` are overwritten with ``subvec``. Elements ``idx`` through (``idx`` +
18378 num_elements(``subvec``) - 1) must be valid ``vec`` indices. If this condition
18379 cannot be determined statically but is false at runtime, then the result vector
18380 is a :ref:`poison value <poisonvalues>`.
18383 '``llvm.vector.extract``' Intrinsic
18384 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18386 Syntax:
18387 """""""
18388 This is an overloaded intrinsic.
18392       ; Extract fixed type from scalable type
18393       declare <4 x float> @llvm.vector.extract.v4f32.nxv4f32(<vscale x 4 x float> %vec, i64 <idx>)
18394       declare <2 x double> @llvm.vector.extract.v2f64.nxv2f64(<vscale x 2 x double> %vec, i64 <idx>)
18396       ; Extract scalable type from scalable type
18397       declare <vscale x 2 x float> @llvm.vector.extract.nxv2f32.nxv4f32(<vscale x 4 x float> %vec, i64 <idx>)
18399       ; Extract fixed type from fixed type
18400       declare <2 x double> @llvm.vector.extract.v2f64.v4f64(<4 x double> %vec, i64 <idx>)
18402 Overview:
18403 """""""""
18405 The '``llvm.vector.extract.*``' intrinsics extract a vector from within another
18406 vector starting from a given index. The return type must be explicitly
18407 specified. Conceptually, this can be used to decompose a scalable vector into
18408 non-scalable parts, however this intrinsic can also be used on purely fixed
18409 types.
18411 Scalable vectors can only be extracted from other scalable vectors.
18413 Arguments:
18414 """"""""""
18416 The ``vec`` is the vector from which we will extract a subvector.
18418 The ``idx`` specifies the starting element number within ``vec`` from which a
18419 subvector is extracted. ``idx`` must be a constant multiple of the known-minimum
18420 vector length of the result type. If the result type is a scalable vector,
18421 ``idx`` is first scaled by the result type's runtime scaling factor. Elements
18422 ``idx`` through (``idx`` + num_elements(result_type) - 1) must be valid vector
18423 indices. If this condition cannot be determined statically but is false at
18424 runtime, then the result vector is a :ref:`poison value <poisonvalues>`. The
18425 ``idx`` parameter must be a vector index constant type (for most targets this
18426 will be an integer pointer type).
18428 '``llvm.experimental.vector.reverse``' Intrinsic
18429 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18431 Syntax:
18432 """""""
18433 This is an overloaded intrinsic.
18437       declare <2 x i8> @llvm.experimental.vector.reverse.v2i8(<2 x i8> %a)
18438       declare <vscale x 4 x i32> @llvm.experimental.vector.reverse.nxv4i32(<vscale x 4 x i32> %a)
18440 Overview:
18441 """""""""
18443 The '``llvm.experimental.vector.reverse.*``' intrinsics reverse a vector.
18444 The intrinsic takes a single vector and returns a vector of matching type but
18445 with the original lane order reversed. These intrinsics work for both fixed
18446 and scalable vectors. While this intrinsic is marked as experimental the
18447 recommended way to express reverse operations for fixed-width vectors is still
18448 to use a shufflevector, as that may allow for more optimization opportunities.
18450 Arguments:
18451 """"""""""
18453 The argument to this intrinsic must be a vector.
18455 '``llvm.experimental.vector.deinterleave2``' Intrinsic
18456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18458 Syntax:
18459 """""""
18460 This is an overloaded intrinsic.
18464       declare {<2 x double>, <2 x double>} @llvm.experimental.vector.deinterleave2.v4f64(<4 x double> %vec1)
18465       declare {<vscale x 4 x i32>, <vscale x 4 x i32>}  @llvm.experimental.vector.deinterleave2.nxv8i32(<vscale x 8 x i32> %vec1)
18467 Overview:
18468 """""""""
18470 The '``llvm.experimental.vector.deinterleave2``' intrinsic constructs two
18471 vectors by deinterleaving the even and odd lanes of the input vector.
18473 This intrinsic works for both fixed and scalable vectors. While this intrinsic
18474 supports all vector types the recommended way to express this operation for
18475 fixed-width vectors is still to use a shufflevector, as that may allow for more
18476 optimization opportunities.
18478 For example:
18480 .. code-block:: text
18482   {<2 x i64>, <2 x i64>} llvm.experimental.vector.deinterleave2.v4i64(<4 x i64> <i64 0, i64 1, i64 2, i64 3>); ==> {<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>}
18484 Arguments:
18485 """"""""""
18487 The argument is a vector whose type corresponds to the logical concatenation of
18488 the two result types.
18490 '``llvm.experimental.vector.interleave2``' Intrinsic
18491 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18493 Syntax:
18494 """""""
18495 This is an overloaded intrinsic.
18499       declare <4 x double> @llvm.experimental.vector.interleave2.v4f64(<2 x double> %vec1, <2 x double> %vec2)
18500       declare <vscale x 8 x i32> @llvm.experimental.vector.interleave2.nxv8i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2)
18502 Overview:
18503 """""""""
18505 The '``llvm.experimental.vector.interleave2``' intrinsic constructs a vector
18506 by interleaving two input vectors.
18508 This intrinsic works for both fixed and scalable vectors. While this intrinsic
18509 supports all vector types the recommended way to express this operation for
18510 fixed-width vectors is still to use a shufflevector, as that may allow for more
18511 optimization opportunities.
18513 For example:
18515 .. code-block:: text
18517    <4 x i64> llvm.experimental.vector.interleave2.v4i64(<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>); ==> <4 x i64> <i64 0, i64 1, i64 2, i64 3>
18519 Arguments:
18520 """"""""""
18521 Both arguments must be vectors of the same type whereby their logical
18522 concatenation matches the result type.
18524 '``llvm.experimental.cttz.elts``' Intrinsic
18525 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18527 Syntax:
18528 """""""
18530 This is an overloaded intrinsic. You can use ```llvm.experimental.cttz.elts```
18531 on any vector of integer elements, both fixed width and scalable.
18535       declare i8 @llvm.experimental.cttz.elts.i8.v8i1(<8 x i1> <src>, i1 <is_zero_poison>)
18537 Overview:
18538 """""""""
18540 The '``llvm.experimental.cttz.elts``' intrinsic counts the number of trailing
18541 zero elements of a vector.
18543 Arguments:
18544 """"""""""
18546 The first argument is the vector to be counted. This argument must be a vector
18547 with integer element type. The return type must also be an integer type which is
18548 wide enough to hold the maximum number of elements of the source vector. The
18549 behaviour of this intrinsic is undefined if the return type is not wide enough
18550 for the number of elements in the input vector.
18552 The second argument is a constant flag that indicates whether the intrinsic
18553 returns a valid result if the first argument is all zero. If the first argument
18554 is all zero and the second argument is true, the result is poison.
18556 Semantics:
18557 """"""""""
18559 The '``llvm.experimental.cttz.elts``' intrinsic counts the trailing (least
18560 significant) zero elements in a vector. If ``src == 0`` the result is the
18561 number of elements in the input vector.
18563 '``llvm.experimental.vector.splice``' Intrinsic
18564 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18566 Syntax:
18567 """""""
18568 This is an overloaded intrinsic.
18572       declare <2 x double> @llvm.experimental.vector.splice.v2f64(<2 x double> %vec1, <2 x double> %vec2, i32 %imm)
18573       declare <vscale x 4 x i32> @llvm.experimental.vector.splice.nxv4i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2, i32 %imm)
18575 Overview:
18576 """""""""
18578 The '``llvm.experimental.vector.splice.*``' intrinsics construct a vector by
18579 concatenating elements from the first input vector with elements of the second
18580 input vector, returning a vector of the same type as the input vectors. The
18581 signed immediate, modulo the number of elements in the vector, is the index
18582 into the first vector from which to extract the result value. This means
18583 conceptually that for a positive immediate, a vector is extracted from
18584 ``concat(%vec1, %vec2)`` starting at index ``imm``, whereas for a negative
18585 immediate, it extracts ``-imm`` trailing elements from the first vector, and
18586 the remaining elements from ``%vec2``.
18588 These intrinsics work for both fixed and scalable vectors. While this intrinsic
18589 is marked as experimental, the recommended way to express this operation for
18590 fixed-width vectors is still to use a shufflevector, as that may allow for more
18591 optimization opportunities.
18593 For example:
18595 .. code-block:: text
18597  llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, 1);  ==> <B, C, D, E> index
18598  llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, -3); ==> <B, C, D, E> trailing elements
18601 Arguments:
18602 """"""""""
18604 The first two operands are vectors with the same type. The start index is imm
18605 modulo the runtime number of elements in the source vector. For a fixed-width
18606 vector <N x eltty>, imm is a signed integer constant in the range
18607 -N <= imm < N. For a scalable vector <vscale x N x eltty>, imm is a signed
18608 integer constant in the range -X <= imm < X where X=vscale_range_min * N.
18610 '``llvm.experimental.stepvector``' Intrinsic
18611 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18613 This is an overloaded intrinsic. You can use ``llvm.experimental.stepvector``
18614 to generate a vector whose lane values comprise the linear sequence
18615 <0, 1, 2, ...>. It is primarily intended for scalable vectors.
18619       declare <vscale x 4 x i32> @llvm.experimental.stepvector.nxv4i32()
18620       declare <vscale x 8 x i16> @llvm.experimental.stepvector.nxv8i16()
18622 The '``llvm.experimental.stepvector``' intrinsics are used to create vectors
18623 of integers whose elements contain a linear sequence of values starting from 0
18624 with a step of 1.  This experimental intrinsic can only be used for vectors
18625 with integer elements that are at least 8 bits in size. If the sequence value
18626 exceeds the allowed limit for the element type then the result for that lane is
18627 undefined.
18629 These intrinsics work for both fixed and scalable vectors. While this intrinsic
18630 is marked as experimental, the recommended way to express this operation for
18631 fixed-width vectors is still to generate a constant vector instead.
18634 Arguments:
18635 """"""""""
18637 None.
18640 '``llvm.experimental.get.vector.length``' Intrinsic
18641 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18643 Syntax:
18644 """""""
18645 This is an overloaded intrinsic.
18649       declare i32 @llvm.experimental.get.vector.length.i32(i32 %cnt, i32 immarg %vf, i1 immarg %scalable)
18650       declare i32 @llvm.experimental.get.vector.length.i64(i64 %cnt, i32 immarg %vf, i1 immarg %scalable)
18652 Overview:
18653 """""""""
18655 The '``llvm.experimental.get.vector.length.*``' intrinsics take a number of
18656 elements to process and returns how many of the elements can be processed
18657 with the requested vectorization factor.
18659 Arguments:
18660 """"""""""
18662 The first argument is an unsigned value of any scalar integer type and specifies
18663 the total number of elements to be processed. The second argument is an i32
18664 immediate for the vectorization factor. The third argument indicates if the
18665 vectorization factor should be multiplied by vscale.
18667 Semantics:
18668 """"""""""
18670 Returns a positive i32 value (explicit vector length) that is unknown at compile
18671 time and depends on the hardware specification.
18672 If the result value does not fit in the result type, then the result is
18673 a :ref:`poison value <poisonvalues>`.
18675 This intrinsic is intended to be used by loop vectorization with VP intrinsics
18676 in order to get the number of elements to process on each loop iteration. The
18677 result should be used to decrease the count for the next iteration until the
18678 count reaches zero.
18680 If the count is larger than the number of lanes in the type described by the
18681 last 2 arguments, this intrinsic may return a value less than the number of
18682 lanes implied by the type. The result will be at least as large as the result
18683 will be on any later loop iteration.
18685 This intrinsic will only return 0 if the input count is also 0. A non-zero input
18686 count will produce a non-zero result.
18688 Matrix Intrinsics
18689 -----------------
18691 Operations on matrixes requiring shape information (like number of rows/columns
18692 or the memory layout) can be expressed using the matrix intrinsics. These
18693 intrinsics require matrix dimensions to be passed as immediate arguments, and
18694 matrixes are passed and returned as vectors. This means that for a ``R`` x
18695 ``C`` matrix, element ``i`` of column ``j`` is at index ``j * R + i`` in the
18696 corresponding vector, with indices starting at 0. Currently column-major layout
18697 is assumed.  The intrinsics support both integer and floating point matrixes.
18700 '``llvm.matrix.transpose.*``' Intrinsic
18701 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18703 Syntax:
18704 """""""
18705 This is an overloaded intrinsic.
18709       declare vectorty @llvm.matrix.transpose.*(vectorty %In, i32 <Rows>, i32 <Cols>)
18711 Overview:
18712 """""""""
18714 The '``llvm.matrix.transpose.*``' intrinsics treat ``%In`` as a ``<Rows> x
18715 <Cols>`` matrix and return the transposed matrix in the result vector.
18717 Arguments:
18718 """"""""""
18720 The first argument ``%In`` is a vector that corresponds to a ``<Rows> x
18721 <Cols>`` matrix. Thus, arguments ``<Rows>`` and ``<Cols>`` correspond to the
18722 number of rows and columns, respectively, and must be positive, constant
18723 integers. The returned vector must have ``<Rows> * <Cols>`` elements, and have
18724 the same float or integer element type as ``%In``.
18726 '``llvm.matrix.multiply.*``' Intrinsic
18727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18729 Syntax:
18730 """""""
18731 This is an overloaded intrinsic.
18735       declare vectorty @llvm.matrix.multiply.*(vectorty %A, vectorty %B, i32 <OuterRows>, i32 <Inner>, i32 <OuterColumns>)
18737 Overview:
18738 """""""""
18740 The '``llvm.matrix.multiply.*``' intrinsics treat ``%A`` as a ``<OuterRows> x
18741 <Inner>`` matrix, ``%B`` as a ``<Inner> x <OuterColumns>`` matrix, and
18742 multiplies them. The result matrix is returned in the result vector.
18744 Arguments:
18745 """"""""""
18747 The first vector argument ``%A`` corresponds to a matrix with ``<OuterRows> *
18748 <Inner>`` elements, and the second argument ``%B`` to a matrix with
18749 ``<Inner> * <OuterColumns>`` elements. Arguments ``<OuterRows>``,
18750 ``<Inner>`` and ``<OuterColumns>`` must be positive, constant integers. The
18751 returned vector must have ``<OuterRows> * <OuterColumns>`` elements.
18752 Vectors ``%A``, ``%B``, and the returned vector all have the same float or
18753 integer element type.
18756 '``llvm.matrix.column.major.load.*``' Intrinsic
18757 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18759 Syntax:
18760 """""""
18761 This is an overloaded intrinsic.
18765       declare vectorty @llvm.matrix.column.major.load.*(
18766           ptrty %Ptr, i64 %Stride, i1 <IsVolatile>, i32 <Rows>, i32 <Cols>)
18768 Overview:
18769 """""""""
18771 The '``llvm.matrix.column.major.load.*``' intrinsics load a ``<Rows> x <Cols>``
18772 matrix using a stride of ``%Stride`` to compute the start address of the
18773 different columns.  The offset is computed using ``%Stride``'s bitwidth. This
18774 allows for convenient loading of sub matrixes. If ``<IsVolatile>`` is true, the
18775 intrinsic is considered a :ref:`volatile memory access <volatile>`. The result
18776 matrix is returned in the result vector. If the ``%Ptr`` argument is known to
18777 be aligned to some boundary, this can be specified as an attribute on the
18778 argument.
18780 Arguments:
18781 """"""""""
18783 The first argument ``%Ptr`` is a pointer type to the returned vector type, and
18784 corresponds to the start address to load from. The second argument ``%Stride``
18785 is a positive, constant integer with ``%Stride >= <Rows>``. ``%Stride`` is used
18786 to compute the column memory addresses. I.e., for a column ``C``, its start
18787 memory addresses is calculated with ``%Ptr + C * %Stride``. The third Argument
18788 ``<IsVolatile>`` is a boolean value.  The fourth and fifth arguments,
18789 ``<Rows>`` and ``<Cols>``, correspond to the number of rows and columns,
18790 respectively, and must be positive, constant integers. The returned vector must
18791 have ``<Rows> * <Cols>`` elements.
18793 The :ref:`align <attr_align>` parameter attribute can be provided for the
18794 ``%Ptr`` arguments.
18797 '``llvm.matrix.column.major.store.*``' Intrinsic
18798 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18800 Syntax:
18801 """""""
18805       declare void @llvm.matrix.column.major.store.*(
18806           vectorty %In, ptrty %Ptr, i64 %Stride, i1 <IsVolatile>, i32 <Rows>, i32 <Cols>)
18808 Overview:
18809 """""""""
18811 The '``llvm.matrix.column.major.store.*``' intrinsics store the ``<Rows> x
18812 <Cols>`` matrix in ``%In`` to memory using a stride of ``%Stride`` between
18813 columns. The offset is computed using ``%Stride``'s bitwidth. If
18814 ``<IsVolatile>`` is true, the intrinsic is considered a
18815 :ref:`volatile memory access <volatile>`.
18817 If the ``%Ptr`` argument is known to be aligned to some boundary, this can be
18818 specified as an attribute on the argument.
18820 Arguments:
18821 """"""""""
18823 The first argument ``%In`` is a vector that corresponds to a ``<Rows> x
18824 <Cols>`` matrix to be stored to memory. The second argument ``%Ptr`` is a
18825 pointer to the vector type of ``%In``, and is the start address of the matrix
18826 in memory. The third argument ``%Stride`` is a positive, constant integer with
18827 ``%Stride >= <Rows>``.  ``%Stride`` is used to compute the column memory
18828 addresses. I.e., for a column ``C``, its start memory addresses is calculated
18829 with ``%Ptr + C * %Stride``.  The fourth argument ``<IsVolatile>`` is a boolean
18830 value. The arguments ``<Rows>`` and ``<Cols>`` correspond to the number of rows
18831 and columns, respectively, and must be positive, constant integers.
18833 The :ref:`align <attr_align>` parameter attribute can be provided
18834 for the ``%Ptr`` arguments.
18837 Half Precision Floating-Point Intrinsics
18838 ----------------------------------------
18840 For most target platforms, half precision floating-point is a
18841 storage-only format. This means that it is a dense encoding (in memory)
18842 but does not support computation in the format.
18844 This means that code must first load the half-precision floating-point
18845 value as an i16, then convert it to float with
18846 :ref:`llvm.convert.from.fp16 <int_convert_from_fp16>`. Computation can
18847 then be performed on the float value (including extending to double
18848 etc). To store the value back to memory, it is first converted to float
18849 if needed, then converted to i16 with
18850 :ref:`llvm.convert.to.fp16 <int_convert_to_fp16>`, then storing as an
18851 i16 value.
18853 .. _int_convert_to_fp16:
18855 '``llvm.convert.to.fp16``' Intrinsic
18856 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18858 Syntax:
18859 """""""
18863       declare i16 @llvm.convert.to.fp16.f32(float %a)
18864       declare i16 @llvm.convert.to.fp16.f64(double %a)
18866 Overview:
18867 """""""""
18869 The '``llvm.convert.to.fp16``' intrinsic function performs a conversion from a
18870 conventional floating-point type to half precision floating-point format.
18872 Arguments:
18873 """"""""""
18875 The intrinsic function contains single argument - the value to be
18876 converted.
18878 Semantics:
18879 """"""""""
18881 The '``llvm.convert.to.fp16``' intrinsic function performs a conversion from a
18882 conventional floating-point format to half precision floating-point format. The
18883 return value is an ``i16`` which contains the converted number.
18885 Examples:
18886 """""""""
18888 .. code-block:: llvm
18890       %res = call i16 @llvm.convert.to.fp16.f32(float %a)
18891       store i16 %res, i16* @x, align 2
18893 .. _int_convert_from_fp16:
18895 '``llvm.convert.from.fp16``' Intrinsic
18896 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18898 Syntax:
18899 """""""
18903       declare float @llvm.convert.from.fp16.f32(i16 %a)
18904       declare double @llvm.convert.from.fp16.f64(i16 %a)
18906 Overview:
18907 """""""""
18909 The '``llvm.convert.from.fp16``' intrinsic function performs a
18910 conversion from half precision floating-point format to single precision
18911 floating-point format.
18913 Arguments:
18914 """"""""""
18916 The intrinsic function contains single argument - the value to be
18917 converted.
18919 Semantics:
18920 """"""""""
18922 The '``llvm.convert.from.fp16``' intrinsic function performs a
18923 conversion from half single precision floating-point format to single
18924 precision floating-point format. The input half-float value is
18925 represented by an ``i16`` value.
18927 Examples:
18928 """""""""
18930 .. code-block:: llvm
18932       %a = load i16, ptr @x, align 2
18933       %res = call float @llvm.convert.from.fp16(i16 %a)
18935 Saturating floating-point to integer conversions
18936 ------------------------------------------------
18938 The ``fptoui`` and ``fptosi`` instructions return a
18939 :ref:`poison value <poisonvalues>` if the rounded-towards-zero value is not
18940 representable by the result type. These intrinsics provide an alternative
18941 conversion, which will saturate towards the smallest and largest representable
18942 integer values instead.
18944 '``llvm.fptoui.sat.*``' Intrinsic
18945 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18947 Syntax:
18948 """""""
18950 This is an overloaded intrinsic. You can use ``llvm.fptoui.sat`` on any
18951 floating-point argument type and any integer result type, or vectors thereof.
18952 Not all targets may support all types, however.
18956       declare i32 @llvm.fptoui.sat.i32.f32(float %f)
18957       declare i19 @llvm.fptoui.sat.i19.f64(double %f)
18958       declare <4 x i100> @llvm.fptoui.sat.v4i100.v4f128(<4 x fp128> %f)
18960 Overview:
18961 """""""""
18963 This intrinsic converts the argument into an unsigned integer using saturating
18964 semantics.
18966 Arguments:
18967 """"""""""
18969 The argument may be any floating-point or vector of floating-point type. The
18970 return value may be any integer or vector of integer type. The number of vector
18971 elements in argument and return must be the same.
18973 Semantics:
18974 """"""""""
18976 The conversion to integer is performed subject to the following rules:
18978 - If the argument is any NaN, zero is returned.
18979 - If the argument is smaller than zero (this includes negative infinity),
18980   zero is returned.
18981 - If the argument is larger than the largest representable unsigned integer of
18982   the result type (this includes positive infinity), the largest representable
18983   unsigned integer is returned.
18984 - Otherwise, the result of rounding the argument towards zero is returned.
18986 Example:
18987 """"""""
18989 .. code-block:: text
18991       %a = call i8 @llvm.fptoui.sat.i8.f32(float 123.9)              ; yields i8: 123
18992       %b = call i8 @llvm.fptoui.sat.i8.f32(float -5.7)               ; yields i8:   0
18993       %c = call i8 @llvm.fptoui.sat.i8.f32(float 377.0)              ; yields i8: 255
18994       %d = call i8 @llvm.fptoui.sat.i8.f32(float 0xFFF8000000000000) ; yields i8:   0
18996 '``llvm.fptosi.sat.*``' Intrinsic
18997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18999 Syntax:
19000 """""""
19002 This is an overloaded intrinsic. You can use ``llvm.fptosi.sat`` on any
19003 floating-point argument type and any integer result type, or vectors thereof.
19004 Not all targets may support all types, however.
19008       declare i32 @llvm.fptosi.sat.i32.f32(float %f)
19009       declare i19 @llvm.fptosi.sat.i19.f64(double %f)
19010       declare <4 x i100> @llvm.fptosi.sat.v4i100.v4f128(<4 x fp128> %f)
19012 Overview:
19013 """""""""
19015 This intrinsic converts the argument into a signed integer using saturating
19016 semantics.
19018 Arguments:
19019 """"""""""
19021 The argument may be any floating-point or vector of floating-point type. The
19022 return value may be any integer or vector of integer type. The number of vector
19023 elements in argument and return must be the same.
19025 Semantics:
19026 """"""""""
19028 The conversion to integer is performed subject to the following rules:
19030 - If the argument is any NaN, zero is returned.
19031 - If the argument is smaller than the smallest representable signed integer of
19032   the result type (this includes negative infinity), the smallest
19033   representable signed integer is returned.
19034 - If the argument is larger than the largest representable signed integer of
19035   the result type (this includes positive infinity), the largest representable
19036   signed integer is returned.
19037 - Otherwise, the result of rounding the argument towards zero is returned.
19039 Example:
19040 """"""""
19042 .. code-block:: text
19044       %a = call i8 @llvm.fptosi.sat.i8.f32(float 23.9)               ; yields i8:   23
19045       %b = call i8 @llvm.fptosi.sat.i8.f32(float -130.8)             ; yields i8: -128
19046       %c = call i8 @llvm.fptosi.sat.i8.f32(float 999.0)              ; yields i8:  127
19047       %d = call i8 @llvm.fptosi.sat.i8.f32(float 0xFFF8000000000000) ; yields i8:    0
19049 Convergence Intrinsics
19050 ----------------------
19052 The LLVM convergence intrinsics for controlling the semantics of ``convergent``
19053 operations, which all start with the ``llvm.experimental.convergence.``
19054 prefix, are described in the :doc:`ConvergentOperations` document.
19056 .. _dbg_intrinsics:
19058 Debugger Intrinsics
19059 -------------------
19061 The LLVM debugger intrinsics (which all start with ``llvm.dbg.``
19062 prefix), are described in the `LLVM Source Level
19063 Debugging <SourceLevelDebugging.html#format-common-intrinsics>`_
19064 document.
19066 Exception Handling Intrinsics
19067 -----------------------------
19069 The LLVM exception handling intrinsics (which all start with
19070 ``llvm.eh.`` prefix), are described in the `LLVM Exception
19071 Handling <ExceptionHandling.html#format-common-intrinsics>`_ document.
19073 Pointer Authentication Intrinsics
19074 ---------------------------------
19076 The LLVM pointer authentication intrinsics (which all start with
19077 ``llvm.ptrauth.`` prefix), are described in the `Pointer Authentication
19078 <PointerAuth.html#intrinsics>`_ document.
19080 .. _int_trampoline:
19082 Trampoline Intrinsics
19083 ---------------------
19085 These intrinsics make it possible to excise one parameter, marked with
19086 the :ref:`nest <nest>` attribute, from a function. The result is a
19087 callable function pointer lacking the nest parameter - the caller does
19088 not need to provide a value for it. Instead, the value to use is stored
19089 in advance in a "trampoline", a block of memory usually allocated on the
19090 stack, which also contains code to splice the nest value into the
19091 argument list. This is used to implement the GCC nested function address
19092 extension.
19094 For example, if the function is ``i32 f(ptr nest %c, i32 %x, i32 %y)``
19095 then the resulting function pointer has signature ``i32 (i32, i32)``.
19096 It can be created as follows:
19098 .. code-block:: llvm
19100       %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
19101       call ptr @llvm.init.trampoline(ptr %tramp, ptr @f, ptr %nval)
19102       %fp = call ptr @llvm.adjust.trampoline(ptr %tramp)
19104 The call ``%val = call i32 %fp(i32 %x, i32 %y)`` is then equivalent to
19105 ``%val = call i32 %f(ptr %nval, i32 %x, i32 %y)``.
19107 .. _int_it:
19109 '``llvm.init.trampoline``' Intrinsic
19110 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19112 Syntax:
19113 """""""
19117       declare void @llvm.init.trampoline(ptr <tramp>, ptr <func>, ptr <nval>)
19119 Overview:
19120 """""""""
19122 This fills the memory pointed to by ``tramp`` with executable code,
19123 turning it into a trampoline.
19125 Arguments:
19126 """"""""""
19128 The ``llvm.init.trampoline`` intrinsic takes three arguments, all
19129 pointers. The ``tramp`` argument must point to a sufficiently large and
19130 sufficiently aligned block of memory; this memory is written to by the
19131 intrinsic. Note that the size and the alignment are target-specific -
19132 LLVM currently provides no portable way of determining them, so a
19133 front-end that generates this intrinsic needs to have some
19134 target-specific knowledge. The ``func`` argument must hold a function.
19136 Semantics:
19137 """"""""""
19139 The block of memory pointed to by ``tramp`` is filled with target
19140 dependent code, turning it into a function. Then ``tramp`` needs to be
19141 passed to :ref:`llvm.adjust.trampoline <int_at>` to get a pointer which can
19142 be :ref:`bitcast (to a new function) and called <int_trampoline>`. The new
19143 function's signature is the same as that of ``func`` with any arguments
19144 marked with the ``nest`` attribute removed. At most one such ``nest``
19145 argument is allowed, and it must be of pointer type. Calling the new
19146 function is equivalent to calling ``func`` with the same argument list,
19147 but with ``nval`` used for the missing ``nest`` argument. If, after
19148 calling ``llvm.init.trampoline``, the memory pointed to by ``tramp`` is
19149 modified, then the effect of any later call to the returned function
19150 pointer is undefined.
19152 .. _int_at:
19154 '``llvm.adjust.trampoline``' Intrinsic
19155 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19157 Syntax:
19158 """""""
19162       declare ptr @llvm.adjust.trampoline(ptr <tramp>)
19164 Overview:
19165 """""""""
19167 This performs any required machine-specific adjustment to the address of
19168 a trampoline (passed as ``tramp``).
19170 Arguments:
19171 """"""""""
19173 ``tramp`` must point to a block of memory which already has trampoline
19174 code filled in by a previous call to
19175 :ref:`llvm.init.trampoline <int_it>`.
19177 Semantics:
19178 """"""""""
19180 On some architectures the address of the code to be executed needs to be
19181 different than the address where the trampoline is actually stored. This
19182 intrinsic returns the executable address corresponding to ``tramp``
19183 after performing the required machine specific adjustments. The pointer
19184 returned can then be :ref:`bitcast and executed <int_trampoline>`.
19187 .. _int_vp:
19189 Vector Predication Intrinsics
19190 -----------------------------
19191 VP intrinsics are intended for predicated SIMD/vector code.  A typical VP
19192 operation takes a vector mask and an explicit vector length parameter as in:
19196       <W x T> llvm.vp.<opcode>.*(<W x T> %x, <W x T> %y, <W x i1> %mask, i32 %evl)
19198 The vector mask parameter (%mask) always has a vector of `i1` type, for example
19199 `<32 x i1>`.  The explicit vector length parameter always has the type `i32` and
19200 is an unsigned integer value.  The explicit vector length parameter (%evl) is in
19201 the range:
19205       0 <= %evl <= W,  where W is the number of vector elements
19207 Note that for :ref:`scalable vector types <t_vector>` ``W`` is the runtime
19208 length of the vector.
19210 The VP intrinsic has undefined behavior if ``%evl > W``.  The explicit vector
19211 length (%evl) creates a mask, %EVLmask, with all elements ``0 <= i < %evl`` set
19212 to True, and all other lanes ``%evl <= i < W`` to False.  A new mask %M is
19213 calculated with an element-wise AND from %mask and %EVLmask:
19217       M = %mask AND %EVLmask
19219 A vector operation ``<opcode>`` on vectors ``A`` and ``B`` calculates:
19223        A <opcode> B =  {  A[i] <opcode> B[i]   M[i] = True, and
19224                        {  undef otherwise
19226 Optimization Hint
19227 ^^^^^^^^^^^^^^^^^
19229 Some targets, such as AVX512, do not support the %evl parameter in hardware.
19230 The use of an effective %evl is discouraged for those targets.  The function
19231 ``TargetTransformInfo::hasActiveVectorLength()`` returns true when the target
19232 has native support for %evl.
19234 .. _int_vp_select:
19236 '``llvm.vp.select.*``' Intrinsics
19237 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19239 Syntax:
19240 """""""
19241 This is an overloaded intrinsic.
19245       declare <16 x i32>  @llvm.vp.select.v16i32 (<16 x i1> <condition>, <16 x i32> <on_true>, <16 x i32> <on_false>, i32 <evl>)
19246       declare <vscale x 4 x i64>  @llvm.vp.select.nxv4i64 (<vscale x 4 x i1> <condition>, <vscale x 4 x i64> <on_true>, <vscale x 4 x i64> <on_false>, i32 <evl>)
19248 Overview:
19249 """""""""
19251 The '``llvm.vp.select``' intrinsic is used to choose one value based on a
19252 condition vector, without IR-level branching.
19254 Arguments:
19255 """"""""""
19257 The first operand is a vector of ``i1`` and indicates the condition.  The
19258 second operand is the value that is selected where the condition vector is
19259 true.  The third operand is the value that is selected where the condition
19260 vector is false.  The vectors must be of the same size.  The fourth operand is
19261 the explicit vector length.
19263 #. The optional ``fast-math flags`` marker indicates that the select has one or
19264    more :ref:`fast-math flags <fastmath>`. These are optimization hints to
19265    enable otherwise unsafe floating-point optimizations. Fast-math flags are
19266    only valid for selects that return a floating-point scalar or vector type,
19267    or an array (nested to any depth) of floating-point scalar or vector types.
19269 Semantics:
19270 """"""""""
19272 The intrinsic selects lanes from the second and third operand depending on a
19273 condition vector.
19275 All result lanes at positions greater or equal than ``%evl`` are undefined.
19276 For all lanes below ``%evl`` where the condition vector is true the lane is
19277 taken from the second operand.  Otherwise, the lane is taken from the third
19278 operand.
19280 Example:
19281 """"""""
19283 .. code-block:: llvm
19285       %r = call <4 x i32> @llvm.vp.select.v4i32(<4 x i1> %cond, <4 x i32> %on_true, <4 x i32> %on_false, i32 %evl)
19287       ;;; Expansion.
19288       ;; Any result is legal on lanes at and above %evl.
19289       %also.r = select <4 x i1> %cond, <4 x i32> %on_true, <4 x i32> %on_false
19292 .. _int_vp_merge:
19294 '``llvm.vp.merge.*``' Intrinsics
19295 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19297 Syntax:
19298 """""""
19299 This is an overloaded intrinsic.
19303       declare <16 x i32>  @llvm.vp.merge.v16i32 (<16 x i1> <condition>, <16 x i32> <on_true>, <16 x i32> <on_false>, i32 <pivot>)
19304       declare <vscale x 4 x i64>  @llvm.vp.merge.nxv4i64 (<vscale x 4 x i1> <condition>, <vscale x 4 x i64> <on_true>, <vscale x 4 x i64> <on_false>, i32 <pivot>)
19306 Overview:
19307 """""""""
19309 The '``llvm.vp.merge``' intrinsic is used to choose one value based on a
19310 condition vector and an index operand, without IR-level branching.
19312 Arguments:
19313 """"""""""
19315 The first operand is a vector of ``i1`` and indicates the condition.  The
19316 second operand is the value that is merged where the condition vector is true.
19317 The third operand is the value that is selected where the condition vector is
19318 false or the lane position is greater equal than the pivot. The fourth operand
19319 is the pivot.
19321 #. The optional ``fast-math flags`` marker indicates that the merge has one or
19322    more :ref:`fast-math flags <fastmath>`. These are optimization hints to
19323    enable otherwise unsafe floating-point optimizations. Fast-math flags are
19324    only valid for merges that return a floating-point scalar or vector type,
19325    or an array (nested to any depth) of floating-point scalar or vector types.
19327 Semantics:
19328 """"""""""
19330 The intrinsic selects lanes from the second and third operand depending on a
19331 condition vector and pivot value.
19333 For all lanes where the condition vector is true and the lane position is less
19334 than ``%pivot`` the lane is taken from the second operand.  Otherwise, the lane
19335 is taken from the third operand.
19337 Example:
19338 """"""""
19340 .. code-block:: llvm
19342       %r = call <4 x i32> @llvm.vp.merge.v4i32(<4 x i1> %cond, <4 x i32> %on_true, <4 x i32> %on_false, i32 %pivot)
19344       ;;; Expansion.
19345       ;; Lanes at and above %pivot are taken from %on_false
19346       %atfirst = insertelement <4 x i32> undef, i32 %pivot, i32 0
19347       %splat = shufflevector <4 x i32> %atfirst, <4 x i32> poison, <4 x i32> zeroinitializer
19348       %pivotmask = icmp ult <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> %splat
19349       %mergemask = and <4 x i1> %cond, <4 x i1> %pivotmask
19350       %also.r = select <4 x i1> %mergemask, <4 x i32> %on_true, <4 x i32> %on_false
19354 .. _int_vp_add:
19356 '``llvm.vp.add.*``' Intrinsics
19357 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19359 Syntax:
19360 """""""
19361 This is an overloaded intrinsic.
19365       declare <16 x i32>  @llvm.vp.add.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19366       declare <vscale x 4 x i32>  @llvm.vp.add.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19367       declare <256 x i64>  @llvm.vp.add.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19369 Overview:
19370 """""""""
19372 Predicated integer addition of two vectors of integers.
19375 Arguments:
19376 """"""""""
19378 The first two operands and the result have the same vector of integer type. The
19379 third operand is the vector mask and has the same number of elements as the
19380 result vector type. The fourth operand is the explicit vector length of the
19381 operation.
19383 Semantics:
19384 """"""""""
19386 The '``llvm.vp.add``' intrinsic performs integer addition (:ref:`add <i_add>`)
19387 of the first and second vector operand on each enabled lane.  The result on
19388 disabled lanes is a :ref:`poison value <poisonvalues>`.
19390 Examples:
19391 """""""""
19393 .. code-block:: llvm
19395       %r = call <4 x i32> @llvm.vp.add.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19396       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19398       %t = add <4 x i32> %a, %b
19399       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19401 .. _int_vp_sub:
19403 '``llvm.vp.sub.*``' Intrinsics
19404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19406 Syntax:
19407 """""""
19408 This is an overloaded intrinsic.
19412       declare <16 x i32>  @llvm.vp.sub.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19413       declare <vscale x 4 x i32>  @llvm.vp.sub.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19414       declare <256 x i64>  @llvm.vp.sub.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19416 Overview:
19417 """""""""
19419 Predicated integer subtraction of two vectors of integers.
19422 Arguments:
19423 """"""""""
19425 The first two operands and the result have the same vector of integer type. The
19426 third operand is the vector mask and has the same number of elements as the
19427 result vector type. The fourth operand is the explicit vector length of the
19428 operation.
19430 Semantics:
19431 """"""""""
19433 The '``llvm.vp.sub``' intrinsic performs integer subtraction
19434 (:ref:`sub <i_sub>`)  of the first and second vector operand on each enabled
19435 lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19437 Examples:
19438 """""""""
19440 .. code-block:: llvm
19442       %r = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19443       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19445       %t = sub <4 x i32> %a, %b
19446       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19450 .. _int_vp_mul:
19452 '``llvm.vp.mul.*``' Intrinsics
19453 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19455 Syntax:
19456 """""""
19457 This is an overloaded intrinsic.
19461       declare <16 x i32>  @llvm.vp.mul.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19462       declare <vscale x 4 x i32>  @llvm.vp.mul.nxv46i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19463       declare <256 x i64>  @llvm.vp.mul.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19465 Overview:
19466 """""""""
19468 Predicated integer multiplication of two vectors of integers.
19471 Arguments:
19472 """"""""""
19474 The first two operands and the result have the same vector of integer type. The
19475 third operand is the vector mask and has the same number of elements as the
19476 result vector type. The fourth operand is the explicit vector length of the
19477 operation.
19479 Semantics:
19480 """"""""""
19481 The '``llvm.vp.mul``' intrinsic performs integer multiplication
19482 (:ref:`mul <i_mul>`) of the first and second vector operand on each enabled
19483 lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19485 Examples:
19486 """""""""
19488 .. code-block:: llvm
19490       %r = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19491       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19493       %t = mul <4 x i32> %a, %b
19494       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19497 .. _int_vp_sdiv:
19499 '``llvm.vp.sdiv.*``' Intrinsics
19500 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19502 Syntax:
19503 """""""
19504 This is an overloaded intrinsic.
19508       declare <16 x i32>  @llvm.vp.sdiv.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19509       declare <vscale x 4 x i32>  @llvm.vp.sdiv.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19510       declare <256 x i64>  @llvm.vp.sdiv.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19512 Overview:
19513 """""""""
19515 Predicated, signed division of two vectors of integers.
19518 Arguments:
19519 """"""""""
19521 The first two operands and the result have the same vector of integer type. The
19522 third operand is the vector mask and has the same number of elements as the
19523 result vector type. The fourth operand is the explicit vector length of the
19524 operation.
19526 Semantics:
19527 """"""""""
19529 The '``llvm.vp.sdiv``' intrinsic performs signed division (:ref:`sdiv <i_sdiv>`)
19530 of the first and second vector operand on each enabled lane.  The result on
19531 disabled lanes is a :ref:`poison value <poisonvalues>`.
19533 Examples:
19534 """""""""
19536 .. code-block:: llvm
19538       %r = call <4 x i32> @llvm.vp.sdiv.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19539       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19541       %t = sdiv <4 x i32> %a, %b
19542       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19545 .. _int_vp_udiv:
19547 '``llvm.vp.udiv.*``' Intrinsics
19548 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19550 Syntax:
19551 """""""
19552 This is an overloaded intrinsic.
19556       declare <16 x i32>  @llvm.vp.udiv.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19557       declare <vscale x 4 x i32>  @llvm.vp.udiv.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19558       declare <256 x i64>  @llvm.vp.udiv.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19560 Overview:
19561 """""""""
19563 Predicated, unsigned division of two vectors of integers.
19566 Arguments:
19567 """"""""""
19569 The first two operands and the result have the same vector of integer type. The third operand is the vector mask and has the same number of elements as the result vector type. The fourth operand is the explicit vector length of the operation.
19571 Semantics:
19572 """"""""""
19574 The '``llvm.vp.udiv``' intrinsic performs unsigned division
19575 (:ref:`udiv <i_udiv>`) of the first and second vector operand on each enabled
19576 lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19578 Examples:
19579 """""""""
19581 .. code-block:: llvm
19583       %r = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19584       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19586       %t = udiv <4 x i32> %a, %b
19587       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19591 .. _int_vp_srem:
19593 '``llvm.vp.srem.*``' Intrinsics
19594 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19596 Syntax:
19597 """""""
19598 This is an overloaded intrinsic.
19602       declare <16 x i32>  @llvm.vp.srem.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19603       declare <vscale x 4 x i32>  @llvm.vp.srem.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19604       declare <256 x i64>  @llvm.vp.srem.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19606 Overview:
19607 """""""""
19609 Predicated computations of the signed remainder of two integer vectors.
19612 Arguments:
19613 """"""""""
19615 The first two operands and the result have the same vector of integer type. The
19616 third operand is the vector mask and has the same number of elements as the
19617 result vector type. The fourth operand is the explicit vector length of the
19618 operation.
19620 Semantics:
19621 """"""""""
19623 The '``llvm.vp.srem``' intrinsic computes the remainder of the signed division
19624 (:ref:`srem <i_srem>`) of the first and second vector operand on each enabled
19625 lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19627 Examples:
19628 """""""""
19630 .. code-block:: llvm
19632       %r = call <4 x i32> @llvm.vp.srem.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19633       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19635       %t = srem <4 x i32> %a, %b
19636       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19640 .. _int_vp_urem:
19642 '``llvm.vp.urem.*``' Intrinsics
19643 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19645 Syntax:
19646 """""""
19647 This is an overloaded intrinsic.
19651       declare <16 x i32>  @llvm.vp.urem.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19652       declare <vscale x 4 x i32>  @llvm.vp.urem.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19653       declare <256 x i64>  @llvm.vp.urem.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19655 Overview:
19656 """""""""
19658 Predicated computation of the unsigned remainder of two integer vectors.
19661 Arguments:
19662 """"""""""
19664 The first two operands and the result have the same vector of integer type. The
19665 third operand is the vector mask and has the same number of elements as the
19666 result vector type. The fourth operand is the explicit vector length of the
19667 operation.
19669 Semantics:
19670 """"""""""
19672 The '``llvm.vp.urem``' intrinsic computes the remainder of the unsigned division
19673 (:ref:`urem <i_urem>`) of the first and second vector operand on each enabled
19674 lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19676 Examples:
19677 """""""""
19679 .. code-block:: llvm
19681       %r = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19682       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19684       %t = urem <4 x i32> %a, %b
19685       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19688 .. _int_vp_ashr:
19690 '``llvm.vp.ashr.*``' Intrinsics
19691 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19693 Syntax:
19694 """""""
19695 This is an overloaded intrinsic.
19699       declare <16 x i32>  @llvm.vp.ashr.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19700       declare <vscale x 4 x i32>  @llvm.vp.ashr.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19701       declare <256 x i64>  @llvm.vp.ashr.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19703 Overview:
19704 """""""""
19706 Vector-predicated arithmetic right-shift.
19709 Arguments:
19710 """"""""""
19712 The first two operands and the result have the same vector of integer type. The
19713 third operand is the vector mask and has the same number of elements as the
19714 result vector type. The fourth operand is the explicit vector length of the
19715 operation.
19717 Semantics:
19718 """"""""""
19720 The '``llvm.vp.ashr``' intrinsic computes the arithmetic right shift
19721 (:ref:`ashr <i_ashr>`) of the first operand by the second operand on each
19722 enabled lane. The result on disabled lanes is a
19723 :ref:`poison value <poisonvalues>`.
19725 Examples:
19726 """""""""
19728 .. code-block:: llvm
19730       %r = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19731       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19733       %t = ashr <4 x i32> %a, %b
19734       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19737 .. _int_vp_lshr:
19740 '``llvm.vp.lshr.*``' Intrinsics
19741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19743 Syntax:
19744 """""""
19745 This is an overloaded intrinsic.
19749       declare <16 x i32>  @llvm.vp.lshr.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19750       declare <vscale x 4 x i32>  @llvm.vp.lshr.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19751       declare <256 x i64>  @llvm.vp.lshr.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19753 Overview:
19754 """""""""
19756 Vector-predicated logical right-shift.
19759 Arguments:
19760 """"""""""
19762 The first two operands and the result have the same vector of integer type. The
19763 third operand is the vector mask and has the same number of elements as the
19764 result vector type. The fourth operand is the explicit vector length of the
19765 operation.
19767 Semantics:
19768 """"""""""
19770 The '``llvm.vp.lshr``' intrinsic computes the logical right shift
19771 (:ref:`lshr <i_lshr>`) of the first operand by the second operand on each
19772 enabled lane. The result on disabled lanes is a
19773 :ref:`poison value <poisonvalues>`.
19775 Examples:
19776 """""""""
19778 .. code-block:: llvm
19780       %r = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19781       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19783       %t = lshr <4 x i32> %a, %b
19784       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19787 .. _int_vp_shl:
19789 '``llvm.vp.shl.*``' Intrinsics
19790 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19792 Syntax:
19793 """""""
19794 This is an overloaded intrinsic.
19798       declare <16 x i32>  @llvm.vp.shl.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19799       declare <vscale x 4 x i32>  @llvm.vp.shl.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19800       declare <256 x i64>  @llvm.vp.shl.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19802 Overview:
19803 """""""""
19805 Vector-predicated left shift.
19808 Arguments:
19809 """"""""""
19811 The first two operands and the result have the same vector of integer type. The
19812 third operand is the vector mask and has the same number of elements as the
19813 result vector type. The fourth operand is the explicit vector length of the
19814 operation.
19816 Semantics:
19817 """"""""""
19819 The '``llvm.vp.shl``' intrinsic computes the left shift (:ref:`shl <i_shl>`) of
19820 the first operand by the second operand on each enabled lane.  The result on
19821 disabled lanes is a :ref:`poison value <poisonvalues>`.
19823 Examples:
19824 """""""""
19826 .. code-block:: llvm
19828       %r = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19829       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19831       %t = shl <4 x i32> %a, %b
19832       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19835 .. _int_vp_or:
19837 '``llvm.vp.or.*``' Intrinsics
19838 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19840 Syntax:
19841 """""""
19842 This is an overloaded intrinsic.
19846       declare <16 x i32>  @llvm.vp.or.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19847       declare <vscale x 4 x i32>  @llvm.vp.or.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19848       declare <256 x i64>  @llvm.vp.or.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19850 Overview:
19851 """""""""
19853 Vector-predicated or.
19856 Arguments:
19857 """"""""""
19859 The first two operands and the result have the same vector of integer type. The
19860 third operand is the vector mask and has the same number of elements as the
19861 result vector type. The fourth operand is the explicit vector length of the
19862 operation.
19864 Semantics:
19865 """"""""""
19867 The '``llvm.vp.or``' intrinsic performs a bitwise or (:ref:`or <i_or>`) of the
19868 first two operands on each enabled lane.  The result on disabled lanes is
19869 a :ref:`poison value <poisonvalues>`.
19871 Examples:
19872 """""""""
19874 .. code-block:: llvm
19876       %r = call <4 x i32> @llvm.vp.or.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19877       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19879       %t = or <4 x i32> %a, %b
19880       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19883 .. _int_vp_and:
19885 '``llvm.vp.and.*``' Intrinsics
19886 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19888 Syntax:
19889 """""""
19890 This is an overloaded intrinsic.
19894       declare <16 x i32>  @llvm.vp.and.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19895       declare <vscale x 4 x i32>  @llvm.vp.and.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19896       declare <256 x i64>  @llvm.vp.and.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19898 Overview:
19899 """""""""
19901 Vector-predicated and.
19904 Arguments:
19905 """"""""""
19907 The first two operands and the result have the same vector of integer type. The
19908 third operand is the vector mask and has the same number of elements as the
19909 result vector type. The fourth operand is the explicit vector length of the
19910 operation.
19912 Semantics:
19913 """"""""""
19915 The '``llvm.vp.and``' intrinsic performs a bitwise and (:ref:`and <i_or>`) of
19916 the first two operands on each enabled lane.  The result on disabled lanes is
19917 a :ref:`poison value <poisonvalues>`.
19919 Examples:
19920 """""""""
19922 .. code-block:: llvm
19924       %r = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19925       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19927       %t = and <4 x i32> %a, %b
19928       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19931 .. _int_vp_xor:
19933 '``llvm.vp.xor.*``' Intrinsics
19934 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19936 Syntax:
19937 """""""
19938 This is an overloaded intrinsic.
19942       declare <16 x i32>  @llvm.vp.xor.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
19943       declare <vscale x 4 x i32>  @llvm.vp.xor.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
19944       declare <256 x i64>  @llvm.vp.xor.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
19946 Overview:
19947 """""""""
19949 Vector-predicated, bitwise xor.
19952 Arguments:
19953 """"""""""
19955 The first two operands and the result have the same vector of integer type. The
19956 third operand is the vector mask and has the same number of elements as the
19957 result vector type. The fourth operand is the explicit vector length of the
19958 operation.
19960 Semantics:
19961 """"""""""
19963 The '``llvm.vp.xor``' intrinsic performs a bitwise xor (:ref:`xor <i_xor>`) of
19964 the first two operands on each enabled lane.
19965 The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
19967 Examples:
19968 """""""""
19970 .. code-block:: llvm
19972       %r = call <4 x i32> @llvm.vp.xor.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
19973       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19975       %t = xor <4 x i32> %a, %b
19976       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
19978 .. _int_vp_abs:
19980 '``llvm.vp.abs.*``' Intrinsics
19981 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19983 Syntax:
19984 """""""
19985 This is an overloaded intrinsic.
19989       declare <16 x i32>  @llvm.vp.abs.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>, i1 <is_int_min_poison>)
19990       declare <vscale x 4 x i32>  @llvm.vp.abs.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>, i1 <is_int_min_poison>)
19991       declare <256 x i64>  @llvm.vp.abs.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>, i1 <is_int_min_poison>)
19993 Overview:
19994 """""""""
19996 Predicated abs of a vector of integers.
19999 Arguments:
20000 """"""""""
20002 The first operand and the result have the same vector of integer type. The
20003 second operand is the vector mask and has the same number of elements as the
20004 result vector type. The third operand is the explicit vector length of the
20005 operation. The fourth argument must be a constant and is a flag to indicate
20006 whether the result value of the '``llvm.vp.abs``' intrinsic is a
20007 :ref:`poison value <poisonvalues>` if the argument is statically or dynamically
20008 an ``INT_MIN`` value.
20010 Semantics:
20011 """"""""""
20013 The '``llvm.vp.abs``' intrinsic performs abs (:ref:`abs <int_abs>`) of the first operand on each
20014 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
20016 Examples:
20017 """""""""
20019 .. code-block:: llvm
20021       %r = call <4 x i32> @llvm.vp.abs.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl, i1 false)
20022       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20024       %t = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %a, i1 false)
20025       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
20029 .. _int_vp_smax:
20031 '``llvm.vp.smax.*``' Intrinsics
20032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20034 Syntax:
20035 """""""
20036 This is an overloaded intrinsic.
20040       declare <16 x i32>  @llvm.vp.smax.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20041       declare <vscale x 4 x i32>  @llvm.vp.smax.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20042       declare <256 x i64>  @llvm.vp.smax.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20044 Overview:
20045 """""""""
20047 Predicated integer signed maximum of two vectors of integers.
20050 Arguments:
20051 """"""""""
20053 The first two operands and the result have the same vector of integer type. The
20054 third operand is the vector mask and has the same number of elements as the
20055 result vector type. The fourth operand is the explicit vector length of the
20056 operation.
20058 Semantics:
20059 """"""""""
20061 The '``llvm.vp.smax``' intrinsic performs integer signed maximum (:ref:`smax <int_smax>`)
20062 of the first and second vector operand on each enabled lane.  The result on
20063 disabled lanes is a :ref:`poison value <poisonvalues>`.
20065 Examples:
20066 """""""""
20068 .. code-block:: llvm
20070       %r = call <4 x i32> @llvm.vp.smax.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
20071       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20073       %t = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %a, <4 x i32> %b)
20074       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
20077 .. _int_vp_smin:
20079 '``llvm.vp.smin.*``' Intrinsics
20080 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20082 Syntax:
20083 """""""
20084 This is an overloaded intrinsic.
20088       declare <16 x i32>  @llvm.vp.smin.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20089       declare <vscale x 4 x i32>  @llvm.vp.smin.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20090       declare <256 x i64>  @llvm.vp.smin.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20092 Overview:
20093 """""""""
20095 Predicated integer signed minimum of two vectors of integers.
20098 Arguments:
20099 """"""""""
20101 The first two operands and the result have the same vector of integer type. The
20102 third operand is the vector mask and has the same number of elements as the
20103 result vector type. The fourth operand is the explicit vector length of the
20104 operation.
20106 Semantics:
20107 """"""""""
20109 The '``llvm.vp.smin``' intrinsic performs integer signed minimum (:ref:`smin <int_smin>`)
20110 of the first and second vector operand on each enabled lane.  The result on
20111 disabled lanes is a :ref:`poison value <poisonvalues>`.
20113 Examples:
20114 """""""""
20116 .. code-block:: llvm
20118       %r = call <4 x i32> @llvm.vp.smin.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
20119       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20121       %t = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %a, <4 x i32> %b)
20122       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
20125 .. _int_vp_umax:
20127 '``llvm.vp.umax.*``' Intrinsics
20128 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20130 Syntax:
20131 """""""
20132 This is an overloaded intrinsic.
20136       declare <16 x i32>  @llvm.vp.umax.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20137       declare <vscale x 4 x i32>  @llvm.vp.umax.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20138       declare <256 x i64>  @llvm.vp.umax.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20140 Overview:
20141 """""""""
20143 Predicated integer unsigned maximum of two vectors of integers.
20146 Arguments:
20147 """"""""""
20149 The first two operands and the result have the same vector of integer type. The
20150 third operand is the vector mask and has the same number of elements as the
20151 result vector type. The fourth operand is the explicit vector length of the
20152 operation.
20154 Semantics:
20155 """"""""""
20157 The '``llvm.vp.umax``' intrinsic performs integer unsigned maximum (:ref:`umax <int_umax>`)
20158 of the first and second vector operand on each enabled lane.  The result on
20159 disabled lanes is a :ref:`poison value <poisonvalues>`.
20161 Examples:
20162 """""""""
20164 .. code-block:: llvm
20166       %r = call <4 x i32> @llvm.vp.umax.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
20167       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20169       %t = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> %b)
20170       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
20173 .. _int_vp_umin:
20175 '``llvm.vp.umin.*``' Intrinsics
20176 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20178 Syntax:
20179 """""""
20180 This is an overloaded intrinsic.
20184       declare <16 x i32>  @llvm.vp.umin.v16i32 (<16 x i32> <left_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20185       declare <vscale x 4 x i32>  @llvm.vp.umin.nxv4i32 (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20186       declare <256 x i64>  @llvm.vp.umin.v256i64 (<256 x i64> <left_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20188 Overview:
20189 """""""""
20191 Predicated integer unsigned minimum of two vectors of integers.
20194 Arguments:
20195 """"""""""
20197 The first two operands and the result have the same vector of integer type. The
20198 third operand is the vector mask and has the same number of elements as the
20199 result vector type. The fourth operand is the explicit vector length of the
20200 operation.
20202 Semantics:
20203 """"""""""
20205 The '``llvm.vp.umin``' intrinsic performs integer unsigned minimum (:ref:`umin <int_umin>`)
20206 of the first and second vector operand on each enabled lane.  The result on
20207 disabled lanes is a :ref:`poison value <poisonvalues>`.
20209 Examples:
20210 """""""""
20212 .. code-block:: llvm
20214       %r = call <4 x i32> @llvm.vp.umin.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> %mask, i32 %evl)
20215       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20217       %t = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %a, <4 x i32> %b)
20218       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
20221 .. _int_vp_copysign:
20223 '``llvm.vp.copysign.*``' Intrinsics
20224 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20226 Syntax:
20227 """""""
20228 This is an overloaded intrinsic.
20232       declare <16 x float>  @llvm.vp.copysign.v16f32 (<16 x float> <mag_op>, <16 x float> <sign_op>, <16 x i1> <mask>, i32 <vector_length>)
20233       declare <vscale x 4 x float>  @llvm.vp.copysign.nxv4f32 (<vscale x 4 x float> <mag_op>, <vscale x 4 x float> <sign_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20234       declare <256 x double>  @llvm.vp.copysign.v256f64 (<256 x double> <mag_op>, <256 x double> <sign_op>, <256 x i1> <mask>, i32 <vector_length>)
20236 Overview:
20237 """""""""
20239 Predicated floating-point copysign of two vectors of floating-point values.
20242 Arguments:
20243 """"""""""
20245 The first two operands and the result have the same vector of floating-point type. The
20246 third operand is the vector mask and has the same number of elements as the
20247 result vector type. The fourth operand is the explicit vector length of the
20248 operation.
20250 Semantics:
20251 """"""""""
20253 The '``llvm.vp.copysign``' intrinsic performs floating-point copysign (:ref:`copysign <int_copysign>`)
20254 of the first and second vector operand on each enabled lane.  The result on
20255 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20256 performed in the default floating-point environment.
20258 Examples:
20259 """""""""
20261 .. code-block:: llvm
20263       %r = call <4 x float> @llvm.vp.copysign.v4f32(<4 x float> %mag, <4 x float> %sign, <4 x i1> %mask, i32 %evl)
20264       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20266       %t = call <4 x float> @llvm.copysign.v4f32(<4 x float> %mag, <4 x float> %sign)
20267       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20270 .. _int_vp_minnum:
20272 '``llvm.vp.minnum.*``' Intrinsics
20273 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20275 Syntax:
20276 """""""
20277 This is an overloaded intrinsic.
20281       declare <16 x float>  @llvm.vp.minnum.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20282       declare <vscale x 4 x float>  @llvm.vp.minnum.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20283       declare <256 x double>  @llvm.vp.minnum.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20285 Overview:
20286 """""""""
20288 Predicated floating-point IEEE-754 minNum of two vectors of floating-point values.
20291 Arguments:
20292 """"""""""
20294 The first two operands and the result have the same vector of floating-point type. The
20295 third operand is the vector mask and has the same number of elements as the
20296 result vector type. The fourth operand is the explicit vector length of the
20297 operation.
20299 Semantics:
20300 """"""""""
20302 The '``llvm.vp.minnum``' intrinsic performs floating-point minimum (:ref:`minnum <i_minnum>`)
20303 of the first and second vector operand on each enabled lane.  The result on
20304 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20305 performed in the default floating-point environment.
20307 Examples:
20308 """""""""
20310 .. code-block:: llvm
20312       %r = call <4 x float> @llvm.vp.minnum.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20313       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20315       %t = call <4 x float> @llvm.minnum.v4f32(<4 x float> %a, <4 x float> %b)
20316       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20319 .. _int_vp_maxnum:
20321 '``llvm.vp.maxnum.*``' Intrinsics
20322 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20324 Syntax:
20325 """""""
20326 This is an overloaded intrinsic.
20330       declare <16 x float>  @llvm.vp.maxnum.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20331       declare <vscale x 4 x float>  @llvm.vp.maxnum.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20332       declare <256 x double>  @llvm.vp.maxnum.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20334 Overview:
20335 """""""""
20337 Predicated floating-point IEEE-754 maxNum of two vectors of floating-point values.
20340 Arguments:
20341 """"""""""
20343 The first two operands and the result have the same vector of floating-point type. The
20344 third operand is the vector mask and has the same number of elements as the
20345 result vector type. The fourth operand is the explicit vector length of the
20346 operation.
20348 Semantics:
20349 """"""""""
20351 The '``llvm.vp.maxnum``' intrinsic performs floating-point maximum (:ref:`maxnum <i_maxnum>`)
20352 of the first and second vector operand on each enabled lane.  The result on
20353 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20354 performed in the default floating-point environment.
20356 Examples:
20357 """""""""
20359 .. code-block:: llvm
20361       %r = call <4 x float> @llvm.vp.maxnum.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20362       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20364       %t = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20365       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20368 .. _int_vp_fadd:
20370 '``llvm.vp.fadd.*``' Intrinsics
20371 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20373 Syntax:
20374 """""""
20375 This is an overloaded intrinsic.
20379       declare <16 x float>  @llvm.vp.fadd.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20380       declare <vscale x 4 x float>  @llvm.vp.fadd.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20381       declare <256 x double>  @llvm.vp.fadd.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20383 Overview:
20384 """""""""
20386 Predicated floating-point addition of two vectors of floating-point values.
20389 Arguments:
20390 """"""""""
20392 The first two operands and the result have the same vector of floating-point type. The
20393 third operand is the vector mask and has the same number of elements as the
20394 result vector type. The fourth operand is the explicit vector length of the
20395 operation.
20397 Semantics:
20398 """"""""""
20400 The '``llvm.vp.fadd``' intrinsic performs floating-point addition (:ref:`fadd <i_fadd>`)
20401 of the first and second vector operand on each enabled lane.  The result on
20402 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20403 performed in the default floating-point environment.
20405 Examples:
20406 """""""""
20408 .. code-block:: llvm
20410       %r = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20411       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20413       %t = fadd <4 x float> %a, %b
20414       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20417 .. _int_vp_fsub:
20419 '``llvm.vp.fsub.*``' Intrinsics
20420 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20422 Syntax:
20423 """""""
20424 This is an overloaded intrinsic.
20428       declare <16 x float>  @llvm.vp.fsub.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20429       declare <vscale x 4 x float>  @llvm.vp.fsub.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20430       declare <256 x double>  @llvm.vp.fsub.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20432 Overview:
20433 """""""""
20435 Predicated floating-point subtraction of two vectors of floating-point values.
20438 Arguments:
20439 """"""""""
20441 The first two operands and the result have the same vector of floating-point type. The
20442 third operand is the vector mask and has the same number of elements as the
20443 result vector type. The fourth operand is the explicit vector length of the
20444 operation.
20446 Semantics:
20447 """"""""""
20449 The '``llvm.vp.fsub``' intrinsic performs floating-point subtraction (:ref:`fsub <i_fsub>`)
20450 of the first and second vector operand on each enabled lane.  The result on
20451 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20452 performed in the default floating-point environment.
20454 Examples:
20455 """""""""
20457 .. code-block:: llvm
20459       %r = call <4 x float> @llvm.vp.fsub.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20460       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20462       %t = fsub <4 x float> %a, %b
20463       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20466 .. _int_vp_fmul:
20468 '``llvm.vp.fmul.*``' Intrinsics
20469 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20471 Syntax:
20472 """""""
20473 This is an overloaded intrinsic.
20477       declare <16 x float>  @llvm.vp.fmul.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20478       declare <vscale x 4 x float>  @llvm.vp.fmul.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20479       declare <256 x double>  @llvm.vp.fmul.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20481 Overview:
20482 """""""""
20484 Predicated floating-point multiplication of two vectors of floating-point values.
20487 Arguments:
20488 """"""""""
20490 The first two operands and the result have the same vector of floating-point type. The
20491 third operand is the vector mask and has the same number of elements as the
20492 result vector type. The fourth operand is the explicit vector length of the
20493 operation.
20495 Semantics:
20496 """"""""""
20498 The '``llvm.vp.fmul``' intrinsic performs floating-point multiplication (:ref:`fmul <i_fmul>`)
20499 of the first and second vector operand on each enabled lane.  The result on
20500 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20501 performed in the default floating-point environment.
20503 Examples:
20504 """""""""
20506 .. code-block:: llvm
20508       %r = call <4 x float> @llvm.vp.fmul.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20509       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20511       %t = fmul <4 x float> %a, %b
20512       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20515 .. _int_vp_fdiv:
20517 '``llvm.vp.fdiv.*``' Intrinsics
20518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20520 Syntax:
20521 """""""
20522 This is an overloaded intrinsic.
20526       declare <16 x float>  @llvm.vp.fdiv.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20527       declare <vscale x 4 x float>  @llvm.vp.fdiv.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20528       declare <256 x double>  @llvm.vp.fdiv.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20530 Overview:
20531 """""""""
20533 Predicated floating-point division of two vectors of floating-point values.
20536 Arguments:
20537 """"""""""
20539 The first two operands and the result have the same vector of floating-point type. The
20540 third operand is the vector mask and has the same number of elements as the
20541 result vector type. The fourth operand is the explicit vector length of the
20542 operation.
20544 Semantics:
20545 """"""""""
20547 The '``llvm.vp.fdiv``' intrinsic performs floating-point division (:ref:`fdiv <i_fdiv>`)
20548 of the first and second vector operand on each enabled lane.  The result on
20549 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20550 performed in the default floating-point environment.
20552 Examples:
20553 """""""""
20555 .. code-block:: llvm
20557       %r = call <4 x float> @llvm.vp.fdiv.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20558       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20560       %t = fdiv <4 x float> %a, %b
20561       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20564 .. _int_vp_frem:
20566 '``llvm.vp.frem.*``' Intrinsics
20567 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20569 Syntax:
20570 """""""
20571 This is an overloaded intrinsic.
20575       declare <16 x float>  @llvm.vp.frem.v16f32 (<16 x float> <left_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20576       declare <vscale x 4 x float>  @llvm.vp.frem.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20577       declare <256 x double>  @llvm.vp.frem.v256f64 (<256 x double> <left_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20579 Overview:
20580 """""""""
20582 Predicated floating-point remainder of two vectors of floating-point values.
20585 Arguments:
20586 """"""""""
20588 The first two operands and the result have the same vector of floating-point type. The
20589 third operand is the vector mask and has the same number of elements as the
20590 result vector type. The fourth operand is the explicit vector length of the
20591 operation.
20593 Semantics:
20594 """"""""""
20596 The '``llvm.vp.frem``' intrinsic performs floating-point remainder (:ref:`frem <i_frem>`)
20597 of the first and second vector operand on each enabled lane.  The result on
20598 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20599 performed in the default floating-point environment.
20601 Examples:
20602 """""""""
20604 .. code-block:: llvm
20606       %r = call <4 x float> @llvm.vp.frem.v4f32(<4 x float> %a, <4 x float> %b, <4 x i1> %mask, i32 %evl)
20607       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20609       %t = frem <4 x float> %a, %b
20610       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20613 .. _int_vp_fneg:
20615 '``llvm.vp.fneg.*``' Intrinsics
20616 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20618 Syntax:
20619 """""""
20620 This is an overloaded intrinsic.
20624       declare <16 x float>  @llvm.vp.fneg.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
20625       declare <vscale x 4 x float>  @llvm.vp.fneg.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20626       declare <256 x double>  @llvm.vp.fneg.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
20628 Overview:
20629 """""""""
20631 Predicated floating-point negation of a vector of floating-point values.
20634 Arguments:
20635 """"""""""
20637 The first operand and the result have the same vector of floating-point type.
20638 The second operand is the vector mask and has the same number of elements as the
20639 result vector type. The third operand is the explicit vector length of the
20640 operation.
20642 Semantics:
20643 """"""""""
20645 The '``llvm.vp.fneg``' intrinsic performs floating-point negation (:ref:`fneg <i_fneg>`)
20646 of the first vector operand on each enabled lane.  The result on disabled lanes
20647 is a :ref:`poison value <poisonvalues>`.
20649 Examples:
20650 """""""""
20652 .. code-block:: llvm
20654       %r = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
20655       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20657       %t = fneg <4 x float> %a
20658       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20661 .. _int_vp_fabs:
20663 '``llvm.vp.fabs.*``' Intrinsics
20664 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20666 Syntax:
20667 """""""
20668 This is an overloaded intrinsic.
20672       declare <16 x float>  @llvm.vp.fabs.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
20673       declare <vscale x 4 x float>  @llvm.vp.fabs.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20674       declare <256 x double>  @llvm.vp.fabs.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
20676 Overview:
20677 """""""""
20679 Predicated floating-point absolute value of a vector of floating-point values.
20682 Arguments:
20683 """"""""""
20685 The first operand and the result have the same vector of floating-point type.
20686 The second operand is the vector mask and has the same number of elements as the
20687 result vector type. The third operand is the explicit vector length of the
20688 operation.
20690 Semantics:
20691 """"""""""
20693 The '``llvm.vp.fabs``' intrinsic performs floating-point absolute value
20694 (:ref:`fabs <int_fabs>`) of the first vector operand on each enabled lane.  The
20695 result on disabled lanes is a :ref:`poison value <poisonvalues>`.
20697 Examples:
20698 """""""""
20700 .. code-block:: llvm
20702       %r = call <4 x float> @llvm.vp.fabs.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
20703       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20705       %t = call <4 x float> @llvm.fabs.v4f32(<4 x float> %a)
20706       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20709 .. _int_vp_sqrt:
20711 '``llvm.vp.sqrt.*``' Intrinsics
20712 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20714 Syntax:
20715 """""""
20716 This is an overloaded intrinsic.
20720       declare <16 x float>  @llvm.vp.sqrt.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
20721       declare <vscale x 4 x float>  @llvm.vp.sqrt.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20722       declare <256 x double>  @llvm.vp.sqrt.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
20724 Overview:
20725 """""""""
20727 Predicated floating-point square root of a vector of floating-point values.
20730 Arguments:
20731 """"""""""
20733 The first operand and the result have the same vector of floating-point type.
20734 The second operand is the vector mask and has the same number of elements as the
20735 result vector type. The third operand is the explicit vector length of the
20736 operation.
20738 Semantics:
20739 """"""""""
20741 The '``llvm.vp.sqrt``' intrinsic performs floating-point square root (:ref:`sqrt <int_sqrt>`) of
20742 the first vector operand on each enabled lane.  The result on disabled lanes is
20743 a :ref:`poison value <poisonvalues>`. The operation is performed in the default
20744 floating-point environment.
20746 Examples:
20747 """""""""
20749 .. code-block:: llvm
20751       %r = call <4 x float> @llvm.vp.sqrt.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
20752       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20754       %t = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)
20755       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20758 .. _int_vp_fma:
20760 '``llvm.vp.fma.*``' Intrinsics
20761 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20763 Syntax:
20764 """""""
20765 This is an overloaded intrinsic.
20769       declare <16 x float>  @llvm.vp.fma.v16f32 (<16 x float> <left_op>, <16 x float> <middle_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20770       declare <vscale x 4 x float>  @llvm.vp.fma.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <middle_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20771       declare <256 x double>  @llvm.vp.fma.v256f64 (<256 x double> <left_op>, <256 x double> <middle_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20773 Overview:
20774 """""""""
20776 Predicated floating-point fused multiply-add of two vectors of floating-point values.
20779 Arguments:
20780 """"""""""
20782 The first three operands and the result have the same vector of floating-point type. The
20783 fourth operand is the vector mask and has the same number of elements as the
20784 result vector type. The fifth operand is the explicit vector length of the
20785 operation.
20787 Semantics:
20788 """"""""""
20790 The '``llvm.vp.fma``' intrinsic performs floating-point fused multiply-add (:ref:`llvm.fma <int_fma>`)
20791 of the first, second, and third vector operand on each enabled lane.  The result on
20792 disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20793 performed in the default floating-point environment.
20795 Examples:
20796 """""""""
20798 .. code-block:: llvm
20800       %r = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %mask, i32 %evl)
20801       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20803       %t = call <4 x float> @llvm.fma(<4 x float> %a, <4 x float> %b, <4 x float> %c)
20804       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20807 .. _int_vp_fmuladd:
20809 '``llvm.vp.fmuladd.*``' Intrinsics
20810 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20812 Syntax:
20813 """""""
20814 This is an overloaded intrinsic.
20818       declare <16 x float>  @llvm.vp.fmuladd.v16f32 (<16 x float> <left_op>, <16 x float> <middle_op>, <16 x float> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
20819       declare <vscale x 4 x float>  @llvm.vp.fmuladd.nxv4f32 (<vscale x 4 x float> <left_op>, <vscale x 4 x float> <middle_op>, <vscale x 4 x float> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
20820       declare <256 x double>  @llvm.vp.fmuladd.v256f64 (<256 x double> <left_op>, <256 x double> <middle_op>, <256 x double> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
20822 Overview:
20823 """""""""
20825 Predicated floating-point multiply-add of two vectors of floating-point values
20826 that can be fused if code generator determines that (a) the target instruction
20827 set has support for a fused operation, and (b) that the fused operation is more
20828 efficient than the equivalent, separate pair of mul and add instructions.
20830 Arguments:
20831 """"""""""
20833 The first three operands and the result have the same vector of floating-point
20834 type. The fourth operand is the vector mask and has the same number of elements
20835 as the result vector type. The fifth operand is the explicit vector length of
20836 the operation.
20838 Semantics:
20839 """"""""""
20841 The '``llvm.vp.fmuladd``' intrinsic performs floating-point multiply-add (:ref:`llvm.fuladd <int_fmuladd>`)
20842 of the first, second, and third vector operand on each enabled lane.  The result
20843 on disabled lanes is a :ref:`poison value <poisonvalues>`.  The operation is
20844 performed in the default floating-point environment.
20846 Examples:
20847 """""""""
20849 .. code-block:: llvm
20851       %r = call <4 x float> @llvm.vp.fmuladd.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %mask, i32 %evl)
20852       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
20854       %t = call <4 x float> @llvm.fmuladd(<4 x float> %a, <4 x float> %b, <4 x float> %c)
20855       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
20858 .. _int_vp_reduce_add:
20860 '``llvm.vp.reduce.add.*``' Intrinsics
20861 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20863 Syntax:
20864 """""""
20865 This is an overloaded intrinsic.
20869       declare i32 @llvm.vp.reduce.add.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
20870       declare i16 @llvm.vp.reduce.add.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
20872 Overview:
20873 """""""""
20875 Predicated integer ``ADD`` reduction of a vector and a scalar starting value,
20876 returning the result as a scalar.
20878 Arguments:
20879 """"""""""
20881 The first operand is the start value of the reduction, which must be a scalar
20882 integer type equal to the result type. The second operand is the vector on
20883 which the reduction is performed and must be a vector of integer values whose
20884 element type is the result/start type. The third operand is the vector mask and
20885 is a vector of boolean values with the same number of elements as the vector
20886 operand. The fourth operand is the explicit vector length of the operation.
20888 Semantics:
20889 """"""""""
20891 The '``llvm.vp.reduce.add``' intrinsic performs the integer ``ADD`` reduction
20892 (:ref:`llvm.vector.reduce.add <int_vector_reduce_add>`) of the vector operand
20893 ``val`` on each enabled lane, adding it to the scalar ``start_value``. Disabled
20894 lanes are treated as containing the neutral value ``0`` (i.e. having no effect
20895 on the reduction operation). If the vector length is zero, the result is equal
20896 to ``start_value``.
20898 To ignore the start value, the neutral value can be used.
20900 Examples:
20901 """""""""
20903 .. code-block:: llvm
20905       %r = call i32 @llvm.vp.reduce.add.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
20906       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
20907       ; are treated as though %mask were false for those lanes.
20909       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> zeroinitializer
20910       %reduction = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %masked.a)
20911       %also.r = add i32 %reduction, %start
20914 .. _int_vp_reduce_fadd:
20916 '``llvm.vp.reduce.fadd.*``' Intrinsics
20917 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20919 Syntax:
20920 """""""
20921 This is an overloaded intrinsic.
20925       declare float @llvm.vp.reduce.fadd.v4f32(float <start_value>, <4 x float> <val>, <4 x i1> <mask>, i32 <vector_length>)
20926       declare double @llvm.vp.reduce.fadd.nxv8f64(double <start_value>, <vscale x 8 x double> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
20928 Overview:
20929 """""""""
20931 Predicated floating-point ``ADD`` reduction of a vector and a scalar starting
20932 value, returning the result as a scalar.
20934 Arguments:
20935 """"""""""
20937 The first operand is the start value of the reduction, which must be a scalar
20938 floating-point type equal to the result type. The second operand is the vector
20939 on which the reduction is performed and must be a vector of floating-point
20940 values whose element type is the result/start type. The third operand is the
20941 vector mask and is a vector of boolean values with the same number of elements
20942 as the vector operand. The fourth operand is the explicit vector length of the
20943 operation.
20945 Semantics:
20946 """"""""""
20948 The '``llvm.vp.reduce.fadd``' intrinsic performs the floating-point ``ADD``
20949 reduction (:ref:`llvm.vector.reduce.fadd <int_vector_reduce_fadd>`) of the
20950 vector operand ``val`` on each enabled lane, adding it to the scalar
20951 ``start_value``. Disabled lanes are treated as containing the neutral value
20952 ``-0.0`` (i.e. having no effect on the reduction operation). If no lanes are
20953 enabled, the resulting value will be equal to ``start_value``.
20955 To ignore the start value, the neutral value can be used.
20957 See the unpredicated version (:ref:`llvm.vector.reduce.fadd
20958 <int_vector_reduce_fadd>`) for more detail on the semantics of the reduction.
20960 Examples:
20961 """""""""
20963 .. code-block:: llvm
20965       %r = call float @llvm.vp.reduce.fadd.v4f32(float %start, <4 x float> %a, <4 x i1> %mask, i32 %evl)
20966       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
20967       ; are treated as though %mask were false for those lanes.
20969       %masked.a = select <4 x i1> %mask, <4 x float> %a, <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>
20970       %also.r = call float @llvm.vector.reduce.fadd.v4f32(float %start, <4 x float> %masked.a)
20973 .. _int_vp_reduce_mul:
20975 '``llvm.vp.reduce.mul.*``' Intrinsics
20976 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
20978 Syntax:
20979 """""""
20980 This is an overloaded intrinsic.
20984       declare i32 @llvm.vp.reduce.mul.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
20985       declare i16 @llvm.vp.reduce.mul.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
20987 Overview:
20988 """""""""
20990 Predicated integer ``MUL`` reduction of a vector and a scalar starting value,
20991 returning the result as a scalar.
20994 Arguments:
20995 """"""""""
20997 The first operand is the start value of the reduction, which must be a scalar
20998 integer type equal to the result type. The second operand is the vector on
20999 which the reduction is performed and must be a vector of integer values whose
21000 element type is the result/start type. The third operand is the vector mask and
21001 is a vector of boolean values with the same number of elements as the vector
21002 operand. The fourth operand is the explicit vector length of the operation.
21004 Semantics:
21005 """"""""""
21007 The '``llvm.vp.reduce.mul``' intrinsic performs the integer ``MUL`` reduction
21008 (:ref:`llvm.vector.reduce.mul <int_vector_reduce_mul>`) of the vector operand ``val``
21009 on each enabled lane, multiplying it by the scalar ``start_value``. Disabled
21010 lanes are treated as containing the neutral value ``1`` (i.e. having no effect
21011 on the reduction operation). If the vector length is zero, the result is the
21012 start value.
21014 To ignore the start value, the neutral value can be used.
21016 Examples:
21017 """""""""
21019 .. code-block:: llvm
21021       %r = call i32 @llvm.vp.reduce.mul.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21022       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21023       ; are treated as though %mask were false for those lanes.
21025       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
21026       %reduction = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %masked.a)
21027       %also.r = mul i32 %reduction, %start
21029 .. _int_vp_reduce_fmul:
21031 '``llvm.vp.reduce.fmul.*``' Intrinsics
21032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21034 Syntax:
21035 """""""
21036 This is an overloaded intrinsic.
21040       declare float @llvm.vp.reduce.fmul.v4f32(float <start_value>, <4 x float> <val>, <4 x i1> <mask>, i32 <vector_length>)
21041       declare double @llvm.vp.reduce.fmul.nxv8f64(double <start_value>, <vscale x 8 x double> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21043 Overview:
21044 """""""""
21046 Predicated floating-point ``MUL`` reduction of a vector and a scalar starting
21047 value, returning the result as a scalar.
21050 Arguments:
21051 """"""""""
21053 The first operand is the start value of the reduction, which must be a scalar
21054 floating-point type equal to the result type. The second operand is the vector
21055 on which the reduction is performed and must be a vector of floating-point
21056 values whose element type is the result/start type. The third operand is the
21057 vector mask and is a vector of boolean values with the same number of elements
21058 as the vector operand. The fourth operand is the explicit vector length of the
21059 operation.
21061 Semantics:
21062 """"""""""
21064 The '``llvm.vp.reduce.fmul``' intrinsic performs the floating-point ``MUL``
21065 reduction (:ref:`llvm.vector.reduce.fmul <int_vector_reduce_fmul>`) of the
21066 vector operand ``val`` on each enabled lane, multiplying it by the scalar
21067 `start_value``. Disabled lanes are treated as containing the neutral value
21068 ``1.0`` (i.e. having no effect on the reduction operation). If no lanes are
21069 enabled, the resulting value will be equal to the starting value.
21071 To ignore the start value, the neutral value can be used.
21073 See the unpredicated version (:ref:`llvm.vector.reduce.fmul
21074 <int_vector_reduce_fmul>`) for more detail on the semantics.
21076 Examples:
21077 """""""""
21079 .. code-block:: llvm
21081       %r = call float @llvm.vp.reduce.fmul.v4f32(float %start, <4 x float> %a, <4 x i1> %mask, i32 %evl)
21082       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21083       ; are treated as though %mask were false for those lanes.
21085       %masked.a = select <4 x i1> %mask, <4 x float> %a, <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>
21086       %also.r = call float @llvm.vector.reduce.fmul.v4f32(float %start, <4 x float> %masked.a)
21089 .. _int_vp_reduce_and:
21091 '``llvm.vp.reduce.and.*``' Intrinsics
21092 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21094 Syntax:
21095 """""""
21096 This is an overloaded intrinsic.
21100       declare i32 @llvm.vp.reduce.and.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21101       declare i16 @llvm.vp.reduce.and.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21103 Overview:
21104 """""""""
21106 Predicated integer ``AND`` reduction of a vector and a scalar starting value,
21107 returning the result as a scalar.
21110 Arguments:
21111 """"""""""
21113 The first operand is the start value of the reduction, which must be a scalar
21114 integer type equal to the result type. The second operand is the vector on
21115 which the reduction is performed and must be a vector of integer values whose
21116 element type is the result/start type. The third operand is the vector mask and
21117 is a vector of boolean values with the same number of elements as the vector
21118 operand. The fourth operand is the explicit vector length of the operation.
21120 Semantics:
21121 """"""""""
21123 The '``llvm.vp.reduce.and``' intrinsic performs the integer ``AND`` reduction
21124 (:ref:`llvm.vector.reduce.and <int_vector_reduce_and>`) of the vector operand
21125 ``val`` on each enabled lane, performing an '``and``' of that with with the
21126 scalar ``start_value``. Disabled lanes are treated as containing the neutral
21127 value ``UINT_MAX``, or ``-1`` (i.e. having no effect on the reduction
21128 operation). If the vector length is zero, the result is the start value.
21130 To ignore the start value, the neutral value can be used.
21132 Examples:
21133 """""""""
21135 .. code-block:: llvm
21137       %r = call i32 @llvm.vp.reduce.and.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21138       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21139       ; are treated as though %mask were false for those lanes.
21141       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
21142       %reduction = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %masked.a)
21143       %also.r = and i32 %reduction, %start
21146 .. _int_vp_reduce_or:
21148 '``llvm.vp.reduce.or.*``' Intrinsics
21149 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21151 Syntax:
21152 """""""
21153 This is an overloaded intrinsic.
21157       declare i32 @llvm.vp.reduce.or.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21158       declare i16 @llvm.vp.reduce.or.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21160 Overview:
21161 """""""""
21163 Predicated integer ``OR`` reduction of a vector and a scalar starting value,
21164 returning the result as a scalar.
21167 Arguments:
21168 """"""""""
21170 The first operand is the start value of the reduction, which must be a scalar
21171 integer type equal to the result type. The second operand is the vector on
21172 which the reduction is performed and must be a vector of integer values whose
21173 element type is the result/start type. The third operand is the vector mask and
21174 is a vector of boolean values with the same number of elements as the vector
21175 operand. The fourth operand is the explicit vector length of the operation.
21177 Semantics:
21178 """"""""""
21180 The '``llvm.vp.reduce.or``' intrinsic performs the integer ``OR`` reduction
21181 (:ref:`llvm.vector.reduce.or <int_vector_reduce_or>`) of the vector operand
21182 ``val`` on each enabled lane, performing an '``or``' of that with the scalar
21183 ``start_value``. Disabled lanes are treated as containing the neutral value
21184 ``0`` (i.e. having no effect on the reduction operation). If the vector length
21185 is zero, the result is the start value.
21187 To ignore the start value, the neutral value can be used.
21189 Examples:
21190 """""""""
21192 .. code-block:: llvm
21194       %r = call i32 @llvm.vp.reduce.or.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21195       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21196       ; are treated as though %mask were false for those lanes.
21198       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
21199       %reduction = call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %masked.a)
21200       %also.r = or i32 %reduction, %start
21202 .. _int_vp_reduce_xor:
21204 '``llvm.vp.reduce.xor.*``' Intrinsics
21205 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21207 Syntax:
21208 """""""
21209 This is an overloaded intrinsic.
21213       declare i32 @llvm.vp.reduce.xor.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21214       declare i16 @llvm.vp.reduce.xor.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21216 Overview:
21217 """""""""
21219 Predicated integer ``XOR`` reduction of a vector and a scalar starting value,
21220 returning the result as a scalar.
21223 Arguments:
21224 """"""""""
21226 The first operand is the start value of the reduction, which must be a scalar
21227 integer type equal to the result type. The second operand is the vector on
21228 which the reduction is performed and must be a vector of integer values whose
21229 element type is the result/start type. The third operand is the vector mask and
21230 is a vector of boolean values with the same number of elements as the vector
21231 operand. The fourth operand is the explicit vector length of the operation.
21233 Semantics:
21234 """"""""""
21236 The '``llvm.vp.reduce.xor``' intrinsic performs the integer ``XOR`` reduction
21237 (:ref:`llvm.vector.reduce.xor <int_vector_reduce_xor>`) of the vector operand
21238 ``val`` on each enabled lane, performing an '``xor``' of that with the scalar
21239 ``start_value``. Disabled lanes are treated as containing the neutral value
21240 ``0`` (i.e. having no effect on the reduction operation). If the vector length
21241 is zero, the result is the start value.
21243 To ignore the start value, the neutral value can be used.
21245 Examples:
21246 """""""""
21248 .. code-block:: llvm
21250       %r = call i32 @llvm.vp.reduce.xor.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21251       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21252       ; are treated as though %mask were false for those lanes.
21254       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
21255       %reduction = call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %masked.a)
21256       %also.r = xor i32 %reduction, %start
21259 .. _int_vp_reduce_smax:
21261 '``llvm.vp.reduce.smax.*``' Intrinsics
21262 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21264 Syntax:
21265 """""""
21266 This is an overloaded intrinsic.
21270       declare i32 @llvm.vp.reduce.smax.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21271       declare i16 @llvm.vp.reduce.smax.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21273 Overview:
21274 """""""""
21276 Predicated signed-integer ``MAX`` reduction of a vector and a scalar starting
21277 value, returning the result as a scalar.
21280 Arguments:
21281 """"""""""
21283 The first operand is the start value of the reduction, which must be a scalar
21284 integer type equal to the result type. The second operand is the vector on
21285 which the reduction is performed and must be a vector of integer values whose
21286 element type is the result/start type. The third operand is the vector mask and
21287 is a vector of boolean values with the same number of elements as the vector
21288 operand. The fourth operand is the explicit vector length of the operation.
21290 Semantics:
21291 """"""""""
21293 The '``llvm.vp.reduce.smax``' intrinsic performs the signed-integer ``MAX``
21294 reduction (:ref:`llvm.vector.reduce.smax <int_vector_reduce_smax>`) of the
21295 vector operand ``val`` on each enabled lane, and taking the maximum of that and
21296 the scalar ``start_value``. Disabled lanes are treated as containing the
21297 neutral value ``INT_MIN`` (i.e. having no effect on the reduction operation).
21298 If the vector length is zero, the result is the start value.
21300 To ignore the start value, the neutral value can be used.
21302 Examples:
21303 """""""""
21305 .. code-block:: llvm
21307       %r = call i8 @llvm.vp.reduce.smax.v4i8(i8 %start, <4 x i8> %a, <4 x i1> %mask, i32 %evl)
21308       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21309       ; are treated as though %mask were false for those lanes.
21311       %masked.a = select <4 x i1> %mask, <4 x i8> %a, <4 x i8> <i8 -128, i8 -128, i8 -128, i8 -128>
21312       %reduction = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> %masked.a)
21313       %also.r = call i8 @llvm.smax.i8(i8 %reduction, i8 %start)
21316 .. _int_vp_reduce_smin:
21318 '``llvm.vp.reduce.smin.*``' Intrinsics
21319 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21321 Syntax:
21322 """""""
21323 This is an overloaded intrinsic.
21327       declare i32 @llvm.vp.reduce.smin.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21328       declare i16 @llvm.vp.reduce.smin.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21330 Overview:
21331 """""""""
21333 Predicated signed-integer ``MIN`` reduction of a vector and a scalar starting
21334 value, returning the result as a scalar.
21337 Arguments:
21338 """"""""""
21340 The first operand is the start value of the reduction, which must be a scalar
21341 integer type equal to the result type. The second operand is the vector on
21342 which the reduction is performed and must be a vector of integer values whose
21343 element type is the result/start type. The third operand is the vector mask and
21344 is a vector of boolean values with the same number of elements as the vector
21345 operand. The fourth operand is the explicit vector length of the operation.
21347 Semantics:
21348 """"""""""
21350 The '``llvm.vp.reduce.smin``' intrinsic performs the signed-integer ``MIN``
21351 reduction (:ref:`llvm.vector.reduce.smin <int_vector_reduce_smin>`) of the
21352 vector operand ``val`` on each enabled lane, and taking the minimum of that and
21353 the scalar ``start_value``. Disabled lanes are treated as containing the
21354 neutral value ``INT_MAX`` (i.e. having no effect on the reduction operation).
21355 If the vector length is zero, the result is the start value.
21357 To ignore the start value, the neutral value can be used.
21359 Examples:
21360 """""""""
21362 .. code-block:: llvm
21364       %r = call i8 @llvm.vp.reduce.smin.v4i8(i8 %start, <4 x i8> %a, <4 x i1> %mask, i32 %evl)
21365       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21366       ; are treated as though %mask were false for those lanes.
21368       %masked.a = select <4 x i1> %mask, <4 x i8> %a, <4 x i8> <i8 127, i8 127, i8 127, i8 127>
21369       %reduction = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> %masked.a)
21370       %also.r = call i8 @llvm.smin.i8(i8 %reduction, i8 %start)
21373 .. _int_vp_reduce_umax:
21375 '``llvm.vp.reduce.umax.*``' Intrinsics
21376 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21378 Syntax:
21379 """""""
21380 This is an overloaded intrinsic.
21384       declare i32 @llvm.vp.reduce.umax.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21385       declare i16 @llvm.vp.reduce.umax.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21387 Overview:
21388 """""""""
21390 Predicated unsigned-integer ``MAX`` reduction of a vector and a scalar starting
21391 value, returning the result as a scalar.
21394 Arguments:
21395 """"""""""
21397 The first operand is the start value of the reduction, which must be a scalar
21398 integer type equal to the result type. The second operand is the vector on
21399 which the reduction is performed and must be a vector of integer values whose
21400 element type is the result/start type. The third operand is the vector mask and
21401 is a vector of boolean values with the same number of elements as the vector
21402 operand. The fourth operand is the explicit vector length of the operation.
21404 Semantics:
21405 """"""""""
21407 The '``llvm.vp.reduce.umax``' intrinsic performs the unsigned-integer ``MAX``
21408 reduction (:ref:`llvm.vector.reduce.umax <int_vector_reduce_umax>`) of the
21409 vector operand ``val`` on each enabled lane, and taking the maximum of that and
21410 the scalar ``start_value``. Disabled lanes are treated as containing the
21411 neutral value ``0`` (i.e. having no effect on the reduction operation). If the
21412 vector length is zero, the result is the start value.
21414 To ignore the start value, the neutral value can be used.
21416 Examples:
21417 """""""""
21419 .. code-block:: llvm
21421       %r = call i32 @llvm.vp.reduce.umax.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21422       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21423       ; are treated as though %mask were false for those lanes.
21425       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
21426       %reduction = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %masked.a)
21427       %also.r = call i32 @llvm.umax.i32(i32 %reduction, i32 %start)
21430 .. _int_vp_reduce_umin:
21432 '``llvm.vp.reduce.umin.*``' Intrinsics
21433 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21435 Syntax:
21436 """""""
21437 This is an overloaded intrinsic.
21441       declare i32 @llvm.vp.reduce.umin.v4i32(i32 <start_value>, <4 x i32> <val>, <4 x i1> <mask>, i32 <vector_length>)
21442       declare i16 @llvm.vp.reduce.umin.nxv8i16(i16 <start_value>, <vscale x 8 x i16> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21444 Overview:
21445 """""""""
21447 Predicated unsigned-integer ``MIN`` reduction of a vector and a scalar starting
21448 value, returning the result as a scalar.
21451 Arguments:
21452 """"""""""
21454 The first operand is the start value of the reduction, which must be a scalar
21455 integer type equal to the result type. The second operand is the vector on
21456 which the reduction is performed and must be a vector of integer values whose
21457 element type is the result/start type. The third operand is the vector mask and
21458 is a vector of boolean values with the same number of elements as the vector
21459 operand. The fourth operand is the explicit vector length of the operation.
21461 Semantics:
21462 """"""""""
21464 The '``llvm.vp.reduce.umin``' intrinsic performs the unsigned-integer ``MIN``
21465 reduction (:ref:`llvm.vector.reduce.umin <int_vector_reduce_umin>`) of the
21466 vector operand ``val`` on each enabled lane, taking the minimum of that and the
21467 scalar ``start_value``. Disabled lanes are treated as containing the neutral
21468 value ``UINT_MAX``, or ``-1`` (i.e. having no effect on the reduction
21469 operation). If the vector length is zero, the result is the start value.
21471 To ignore the start value, the neutral value can be used.
21473 Examples:
21474 """""""""
21476 .. code-block:: llvm
21478       %r = call i32 @llvm.vp.reduce.umin.v4i32(i32 %start, <4 x i32> %a, <4 x i1> %mask, i32 %evl)
21479       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21480       ; are treated as though %mask were false for those lanes.
21482       %masked.a = select <4 x i1> %mask, <4 x i32> %a, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
21483       %reduction = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %masked.a)
21484       %also.r = call i32 @llvm.umin.i32(i32 %reduction, i32 %start)
21487 .. _int_vp_reduce_fmax:
21489 '``llvm.vp.reduce.fmax.*``' Intrinsics
21490 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21492 Syntax:
21493 """""""
21494 This is an overloaded intrinsic.
21498       declare float @llvm.vp.reduce.fmax.v4f32(float <start_value>, <4 x float> <val>, <4 x i1> <mask>, float <vector_length>)
21499       declare double @llvm.vp.reduce.fmax.nxv8f64(double <start_value>, <vscale x 8 x double> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21501 Overview:
21502 """""""""
21504 Predicated floating-point ``MAX`` reduction of a vector and a scalar starting
21505 value, returning the result as a scalar.
21508 Arguments:
21509 """"""""""
21511 The first operand is the start value of the reduction, which must be a scalar
21512 floating-point type equal to the result type. The second operand is the vector
21513 on which the reduction is performed and must be a vector of floating-point
21514 values whose element type is the result/start type. The third operand is the
21515 vector mask and is a vector of boolean values with the same number of elements
21516 as the vector operand. The fourth operand is the explicit vector length of the
21517 operation.
21519 Semantics:
21520 """"""""""
21522 The '``llvm.vp.reduce.fmax``' intrinsic performs the floating-point ``MAX``
21523 reduction (:ref:`llvm.vector.reduce.fmax <int_vector_reduce_fmax>`) of the
21524 vector operand ``val`` on each enabled lane, taking the maximum of that and the
21525 scalar ``start_value``. Disabled lanes are treated as containing the neutral
21526 value (i.e. having no effect on the reduction operation). If the vector length
21527 is zero, the result is the start value.
21529 The neutral value is dependent on the :ref:`fast-math flags <fastmath>`. If no
21530 flags are set, the neutral value is ``-QNAN``. If ``nnan``  and ``ninf`` are
21531 both set, then the neutral value is the smallest floating-point value for the
21532 result type. If only ``nnan`` is set then the neutral value is ``-Infinity``.
21534 This instruction has the same comparison semantics as the
21535 :ref:`llvm.vector.reduce.fmax <int_vector_reduce_fmax>` intrinsic (and thus the
21536 '``llvm.maxnum.*``' intrinsic). That is, the result will always be a number
21537 unless all elements of the vector and the starting value are ``NaN``. For a
21538 vector with maximum element magnitude ``0.0`` and containing both ``+0.0`` and
21539 ``-0.0`` elements, the sign of the result is unspecified.
21541 To ignore the start value, the neutral value can be used.
21543 Examples:
21544 """""""""
21546 .. code-block:: llvm
21548       %r = call float @llvm.vp.reduce.fmax.v4f32(float %float, <4 x float> %a, <4 x i1> %mask, i32 %evl)
21549       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21550       ; are treated as though %mask were false for those lanes.
21552       %masked.a = select <4 x i1> %mask, <4 x float> %a, <4 x float> <float QNAN, float QNAN, float QNAN, float QNAN>
21553       %reduction = call float @llvm.vector.reduce.fmax.v4f32(<4 x float> %masked.a)
21554       %also.r = call float @llvm.maxnum.f32(float %reduction, float %start)
21557 .. _int_vp_reduce_fmin:
21559 '``llvm.vp.reduce.fmin.*``' Intrinsics
21560 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21562 Syntax:
21563 """""""
21564 This is an overloaded intrinsic.
21568       declare float @llvm.vp.reduce.fmin.v4f32(float <start_value>, <4 x float> <val>, <4 x i1> <mask>, float <vector_length>)
21569       declare double @llvm.vp.reduce.fmin.nxv8f64(double <start_value>, <vscale x 8 x double> <val>, <vscale x 8 x i1> <mask>, i32 <vector_length>)
21571 Overview:
21572 """""""""
21574 Predicated floating-point ``MIN`` reduction of a vector and a scalar starting
21575 value, returning the result as a scalar.
21578 Arguments:
21579 """"""""""
21581 The first operand is the start value of the reduction, which must be a scalar
21582 floating-point type equal to the result type. The second operand is the vector
21583 on which the reduction is performed and must be a vector of floating-point
21584 values whose element type is the result/start type. The third operand is the
21585 vector mask and is a vector of boolean values with the same number of elements
21586 as the vector operand. The fourth operand is the explicit vector length of the
21587 operation.
21589 Semantics:
21590 """"""""""
21592 The '``llvm.vp.reduce.fmin``' intrinsic performs the floating-point ``MIN``
21593 reduction (:ref:`llvm.vector.reduce.fmin <int_vector_reduce_fmin>`) of the
21594 vector operand ``val`` on each enabled lane, taking the minimum of that and the
21595 scalar ``start_value``. Disabled lanes are treated as containing the neutral
21596 value (i.e. having no effect on the reduction operation). If the vector length
21597 is zero, the result is the start value.
21599 The neutral value is dependent on the :ref:`fast-math flags <fastmath>`. If no
21600 flags are set, the neutral value is ``+QNAN``. If ``nnan``  and ``ninf`` are
21601 both set, then the neutral value is the largest floating-point value for the
21602 result type. If only ``nnan`` is set then the neutral value is ``+Infinity``.
21604 This instruction has the same comparison semantics as the
21605 :ref:`llvm.vector.reduce.fmin <int_vector_reduce_fmin>` intrinsic (and thus the
21606 '``llvm.minnum.*``' intrinsic). That is, the result will always be a number
21607 unless all elements of the vector and the starting value are ``NaN``. For a
21608 vector with maximum element magnitude ``0.0`` and containing both ``+0.0`` and
21609 ``-0.0`` elements, the sign of the result is unspecified.
21611 To ignore the start value, the neutral value can be used.
21613 Examples:
21614 """""""""
21616 .. code-block:: llvm
21618       %r = call float @llvm.vp.reduce.fmin.v4f32(float %start, <4 x float> %a, <4 x i1> %mask, i32 %evl)
21619       ; %r is equivalent to %also.r, where lanes greater than or equal to %evl
21620       ; are treated as though %mask were false for those lanes.
21622       %masked.a = select <4 x i1> %mask, <4 x float> %a, <4 x float> <float QNAN, float QNAN, float QNAN, float QNAN>
21623       %reduction = call float @llvm.vector.reduce.fmin.v4f32(<4 x float> %masked.a)
21624       %also.r = call float @llvm.minnum.f32(float %reduction, float %start)
21627 .. _int_get_active_lane_mask:
21629 '``llvm.get.active.lane.mask.*``' Intrinsics
21630 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21632 Syntax:
21633 """""""
21634 This is an overloaded intrinsic.
21638       declare <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %base, i32 %n)
21639       declare <8 x i1> @llvm.get.active.lane.mask.v8i1.i64(i64 %base, i64 %n)
21640       declare <16 x i1> @llvm.get.active.lane.mask.v16i1.i64(i64 %base, i64 %n)
21641       declare <vscale x 16 x i1> @llvm.get.active.lane.mask.nxv16i1.i64(i64 %base, i64 %n)
21644 Overview:
21645 """""""""
21647 Create a mask representing active and inactive vector lanes.
21650 Arguments:
21651 """"""""""
21653 Both operands have the same scalar integer type. The result is a vector with
21654 the i1 element type.
21656 Semantics:
21657 """"""""""
21659 The '``llvm.get.active.lane.mask.*``' intrinsics are semantically equivalent
21664       %m[i] = icmp ult (%base + i), %n
21666 where ``%m`` is a vector (mask) of active/inactive lanes with its elements
21667 indexed by ``i``,  and ``%base``, ``%n`` are the two arguments to
21668 ``llvm.get.active.lane.mask.*``, ``%icmp`` is an integer compare and ``ult``
21669 the unsigned less-than comparison operator.  Overflow cannot occur in
21670 ``(%base + i)`` and its comparison against ``%n`` as it is performed in integer
21671 numbers and not in machine numbers.  If ``%n`` is ``0``, then the result is a
21672 poison value. The above is equivalent to:
21676       %m = @llvm.get.active.lane.mask(%base, %n)
21678 This can, for example, be emitted by the loop vectorizer in which case
21679 ``%base`` is the first element of the vector induction variable (VIV) and
21680 ``%n`` is the loop tripcount. Thus, these intrinsics perform an element-wise
21681 less than comparison of VIV with the loop tripcount, producing a mask of
21682 true/false values representing active/inactive vector lanes, except if the VIV
21683 overflows in which case they return false in the lanes where the VIV overflows.
21684 The arguments are scalar types to accommodate scalable vector types, for which
21685 it is unknown what the type of the step vector needs to be that enumerate its
21686 lanes without overflow.
21688 This mask ``%m`` can e.g. be used in masked load/store instructions. These
21689 intrinsics provide a hint to the backend. I.e., for a vector loop, the
21690 back-edge taken count of the original scalar loop is explicit as the second
21691 argument.
21694 Examples:
21695 """""""""
21697 .. code-block:: llvm
21699       %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i64(i64 %elem0, i64 429)
21700       %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %3, i32 4, <4 x i1> %active.lane.mask, <4 x i32> poison)
21703 .. _int_experimental_vp_splice:
21705 '``llvm.experimental.vp.splice``' Intrinsic
21706 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21708 Syntax:
21709 """""""
21710 This is an overloaded intrinsic.
21714       declare <2 x double> @llvm.experimental.vp.splice.v2f64(<2 x double> %vec1, <2 x double> %vec2, i32 %imm, <2 x i1> %mask, i32 %evl1, i32 %evl2)
21715       declare <vscale x 4 x i32> @llvm.experimental.vp.splice.nxv4i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2, i32 %imm, <vscale x 4 x i1> %mask, i32 %evl1, i32 %evl2)
21717 Overview:
21718 """""""""
21720 The '``llvm.experimental.vp.splice.*``' intrinsic is the vector length
21721 predicated version of the '``llvm.experimental.vector.splice.*``' intrinsic.
21723 Arguments:
21724 """"""""""
21726 The result and the first two arguments ``vec1`` and ``vec2`` are vectors with
21727 the same type.  The third argument ``imm`` is an immediate signed integer that
21728 indicates the offset index.  The fourth argument ``mask`` is a vector mask and
21729 has the same number of elements as the result.  The last two arguments ``evl1``
21730 and ``evl2`` are unsigned integers indicating the explicit vector lengths of
21731 ``vec1`` and ``vec2`` respectively.  ``imm``, ``evl1`` and ``evl2`` should
21732 respect the following constraints: ``-evl1 <= imm < evl1``, ``0 <= evl1 <= VL``
21733 and ``0 <= evl2 <= VL``, where ``VL`` is the runtime vector factor. If these
21734 constraints are not satisfied the intrinsic has undefined behaviour.
21736 Semantics:
21737 """"""""""
21739 Effectively, this intrinsic concatenates ``vec1[0..evl1-1]`` and
21740 ``vec2[0..evl2-1]`` and creates the result vector by selecting the elements in a
21741 window of size ``evl2``, starting at index ``imm`` (for a positive immediate) of
21742 the concatenated vector. Elements in the result vector beyond ``evl2`` are
21743 ``undef``.  If ``imm`` is negative the starting index is ``evl1 + imm``.  The result
21744 vector of active vector length ``evl2`` contains ``evl1 - imm`` (``-imm`` for
21745 negative ``imm``) elements from indices ``[imm..evl1 - 1]``
21746 (``[evl1 + imm..evl1 -1]`` for negative ``imm``) of ``vec1`` followed by the
21747 first ``evl2 - (evl1 - imm)`` (``evl2 + imm`` for negative ``imm``) elements of
21748 ``vec2``. If ``evl1 - imm`` (``-imm``) >= ``evl2``, only the first ``evl2``
21749 elements are considered and the remaining are ``undef``.  The lanes in the result
21750 vector disabled by ``mask`` are ``poison``.
21752 Examples:
21753 """""""""
21755 .. code-block:: text
21757  llvm.experimental.vp.splice(<A,B,C,D>, <E,F,G,H>, 1, 2, 3);  ==> <B, E, F, poison> index
21758  llvm.experimental.vp.splice(<A,B,C,D>, <E,F,G,H>, -2, 3, 2); ==> <B, C, poison, poison> trailing elements
21761 .. _int_vp_load:
21763 '``llvm.vp.load``' Intrinsic
21764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21766 Syntax:
21767 """""""
21768 This is an overloaded intrinsic.
21772     declare <4 x float> @llvm.vp.load.v4f32.p0(ptr %ptr, <4 x i1> %mask, i32 %evl)
21773     declare <vscale x 2 x i16> @llvm.vp.load.nxv2i16.p0(ptr %ptr, <vscale x 2 x i1> %mask, i32 %evl)
21774     declare <8 x float> @llvm.vp.load.v8f32.p1(ptr addrspace(1) %ptr, <8 x i1> %mask, i32 %evl)
21775     declare <vscale x 1 x i64> @llvm.vp.load.nxv1i64.p6(ptr addrspace(6) %ptr, <vscale x 1 x i1> %mask, i32 %evl)
21777 Overview:
21778 """""""""
21780 The '``llvm.vp.load.*``' intrinsic is the vector length predicated version of
21781 the :ref:`llvm.masked.load <int_mload>` intrinsic.
21783 Arguments:
21784 """"""""""
21786 The first operand is the base pointer for the load. The second operand is a
21787 vector of boolean values with the same number of elements as the return type.
21788 The third is the explicit vector length of the operation. The return type and
21789 underlying type of the base pointer are the same vector types.
21791 The :ref:`align <attr_align>` parameter attribute can be provided for the first
21792 operand.
21794 Semantics:
21795 """"""""""
21797 The '``llvm.vp.load``' intrinsic reads a vector from memory in the same way as
21798 the '``llvm.masked.load``' intrinsic, where the mask is taken from the
21799 combination of the '``mask``' and '``evl``' operands in the usual VP way.
21800 Certain '``llvm.masked.load``' operands do not have corresponding operands in
21801 '``llvm.vp.load``': the '``passthru``' operand is implicitly ``poison``; the
21802 '``alignment``' operand is taken as the ``align`` parameter attribute, if
21803 provided. The default alignment is taken as the ABI alignment of the return
21804 type as specified by the :ref:`datalayout string<langref_datalayout>`.
21806 Examples:
21807 """""""""
21809 .. code-block:: text
21811      %r = call <8 x i8> @llvm.vp.load.v8i8.p0(ptr align 2 %ptr, <8 x i1> %mask, i32 %evl)
21812      ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
21814      %also.r = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %ptr, i32 2, <8 x i1> %mask, <8 x i8> poison)
21817 .. _int_vp_store:
21819 '``llvm.vp.store``' Intrinsic
21820 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21822 Syntax:
21823 """""""
21824 This is an overloaded intrinsic.
21828     declare void @llvm.vp.store.v4f32.p0(<4 x float> %val, ptr %ptr, <4 x i1> %mask, i32 %evl)
21829     declare void @llvm.vp.store.nxv2i16.p0(<vscale x 2 x i16> %val, ptr %ptr, <vscale x 2 x i1> %mask, i32 %evl)
21830     declare void @llvm.vp.store.v8f32.p1(<8 x float> %val, ptr addrspace(1) %ptr, <8 x i1> %mask, i32 %evl)
21831     declare void @llvm.vp.store.nxv1i64.p6(<vscale x 1 x i64> %val, ptr addrspace(6) %ptr, <vscale x 1 x i1> %mask, i32 %evl)
21833 Overview:
21834 """""""""
21836 The '``llvm.vp.store.*``' intrinsic is the vector length predicated version of
21837 the :ref:`llvm.masked.store <int_mstore>` intrinsic.
21839 Arguments:
21840 """"""""""
21842 The first operand is the vector value to be written to memory. The second
21843 operand is the base pointer for the store. It has the same underlying type as
21844 the value operand. The third operand is a vector of boolean values with the
21845 same number of elements as the return type. The fourth is the explicit vector
21846 length of the operation.
21848 The :ref:`align <attr_align>` parameter attribute can be provided for the
21849 second operand.
21851 Semantics:
21852 """"""""""
21854 The '``llvm.vp.store``' intrinsic reads a vector from memory in the same way as
21855 the '``llvm.masked.store``' intrinsic, where the mask is taken from the
21856 combination of the '``mask``' and '``evl``' operands in the usual VP way. The
21857 alignment of the operation (corresponding to the '``alignment``' operand of
21858 '``llvm.masked.store``') is specified by the ``align`` parameter attribute (see
21859 above). If it is not provided then the ABI alignment of the type of the
21860 '``value``' operand as specified by the :ref:`datalayout
21861 string<langref_datalayout>` is used instead.
21863 Examples:
21864 """""""""
21866 .. code-block:: text
21868      call void @llvm.vp.store.v8i8.p0(<8 x i8> %val, ptr align 4 %ptr, <8 x i1> %mask, i32 %evl)
21869      ;; For all lanes below %evl, the call above is lane-wise equivalent to the call below.
21871      call void @llvm.masked.store.v8i8.p0(<8 x i8> %val, ptr %ptr, i32 4, <8 x i1> %mask)
21874 .. _int_experimental_vp_strided_load:
21876 '``llvm.experimental.vp.strided.load``' Intrinsic
21877 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21879 Syntax:
21880 """""""
21881 This is an overloaded intrinsic.
21885     declare <4 x float> @llvm.experimental.vp.strided.load.v4f32.i64(ptr %ptr, i64 %stride, <4 x i1> %mask, i32 %evl)
21886     declare <vscale x 2 x i16> @llvm.experimental.vp.strided.load.nxv2i16.i64(ptr %ptr, i64 %stride, <vscale x 2 x i1> %mask, i32 %evl)
21888 Overview:
21889 """""""""
21891 The '``llvm.experimental.vp.strided.load``' intrinsic loads, into a vector, scalar values from
21892 memory locations evenly spaced apart by '``stride``' number of bytes, starting from '``ptr``'.
21894 Arguments:
21895 """"""""""
21897 The first operand is the base pointer for the load. The second operand is the stride
21898 value expressed in bytes. The third operand is a vector of boolean values
21899 with the same number of elements as the return type. The fourth is the explicit
21900 vector length of the operation. The base pointer underlying type matches the type of the scalar
21901 elements of the return operand.
21903 The :ref:`align <attr_align>` parameter attribute can be provided for the first
21904 operand.
21906 Semantics:
21907 """"""""""
21909 The '``llvm.experimental.vp.strided.load``' intrinsic loads, into a vector, multiple scalar
21910 values from memory in the same way as the :ref:`llvm.vp.gather <int_vp_gather>` intrinsic,
21911 where the vector of pointers is in the form:
21913    ``%ptrs = <%ptr, %ptr + %stride, %ptr + 2 * %stride, ... >``,
21915 with '``ptr``' previously casted to a pointer '``i8``', '``stride``' always interpreted as a signed
21916 integer and all arithmetic occurring in the pointer type.
21918 Examples:
21919 """""""""
21921 .. code-block:: text
21923          %r = call <8 x i64> @llvm.experimental.vp.strided.load.v8i64.i64(i64* %ptr, i64 %stride, <8 x i64> %mask, i32 %evl)
21924          ;; The operation can also be expressed like this:
21926          %addr = bitcast i64* %ptr to i8*
21927          ;; Create a vector of pointers %addrs in the form:
21928          ;; %addrs = <%addr, %addr + %stride, %addr + 2 * %stride, ...>
21929          %ptrs = bitcast <8 x i8* > %addrs to <8 x i64* >
21930          %also.r = call <8 x i64> @llvm.vp.gather.v8i64.v8p0i64(<8 x i64* > %ptrs, <8 x i64> %mask, i32 %evl)
21933 .. _int_experimental_vp_strided_store:
21935 '``llvm.experimental.vp.strided.store``' Intrinsic
21936 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21938 Syntax:
21939 """""""
21940 This is an overloaded intrinsic.
21944     declare void @llvm.experimental.vp.strided.store.v4f32.i64(<4 x float> %val, ptr %ptr, i64 %stride, <4 x i1> %mask, i32 %evl)
21945     declare void @llvm.experimental.vp.strided.store.nxv2i16.i64(<vscale x 2 x i16> %val, ptr %ptr, i64 %stride, <vscale x 2 x i1> %mask, i32 %evl)
21947 Overview:
21948 """""""""
21950 The '``@llvm.experimental.vp.strided.store``' intrinsic stores the elements of
21951 '``val``' into memory locations evenly spaced apart by '``stride``' number of
21952 bytes, starting from '``ptr``'.
21954 Arguments:
21955 """"""""""
21957 The first operand is the vector value to be written to memory. The second
21958 operand is the base pointer for the store. Its underlying type matches the
21959 scalar element type of the value operand. The third operand is the stride value
21960 expressed in bytes. The fourth operand is a vector of boolean values with the
21961 same number of elements as the return type. The fifth is the explicit vector
21962 length of the operation.
21964 The :ref:`align <attr_align>` parameter attribute can be provided for the
21965 second operand.
21967 Semantics:
21968 """"""""""
21970 The '``llvm.experimental.vp.strided.store``' intrinsic stores the elements of
21971 '``val``' in the same way as the :ref:`llvm.vp.scatter <int_vp_scatter>` intrinsic,
21972 where the vector of pointers is in the form:
21974         ``%ptrs = <%ptr, %ptr + %stride, %ptr + 2 * %stride, ... >``,
21976 with '``ptr``' previously casted to a pointer '``i8``', '``stride``' always interpreted as a signed
21977 integer and all arithmetic occurring in the pointer type.
21979 Examples:
21980 """""""""
21982 .. code-block:: text
21984          call void @llvm.experimental.vp.strided.store.v8i64.i64(<8 x i64> %val, i64* %ptr, i64 %stride, <8 x i1> %mask, i32 %evl)
21985          ;; The operation can also be expressed like this:
21987          %addr = bitcast i64* %ptr to i8*
21988          ;; Create a vector of pointers %addrs in the form:
21989          ;; %addrs = <%addr, %addr + %stride, %addr + 2 * %stride, ...>
21990          %ptrs = bitcast <8 x i8* > %addrs to <8 x i64* >
21991          call void @llvm.vp.scatter.v8i64.v8p0i64(<8 x i64> %val, <8 x i64*> %ptrs, <8 x i1> %mask, i32 %evl)
21994 .. _int_vp_gather:
21996 '``llvm.vp.gather``' Intrinsic
21997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21999 Syntax:
22000 """""""
22001 This is an overloaded intrinsic.
22005     declare <4 x double> @llvm.vp.gather.v4f64.v4p0(<4 x ptr> %ptrs, <4 x i1> %mask, i32 %evl)
22006     declare <vscale x 2 x i8> @llvm.vp.gather.nxv2i8.nxv2p0(<vscale x 2 x ptr> %ptrs, <vscale x 2 x i1> %mask, i32 %evl)
22007     declare <2 x float> @llvm.vp.gather.v2f32.v2p2(<2 x ptr addrspace(2)> %ptrs, <2 x i1> %mask, i32 %evl)
22008     declare <vscale x 4 x i32> @llvm.vp.gather.nxv4i32.nxv4p4(<vscale x 4 x ptr addrspace(4)> %ptrs, <vscale x 4 x i1> %mask, i32 %evl)
22010 Overview:
22011 """""""""
22013 The '``llvm.vp.gather.*``' intrinsic is the vector length predicated version of
22014 the :ref:`llvm.masked.gather <int_mgather>` intrinsic.
22016 Arguments:
22017 """"""""""
22019 The first operand is a vector of pointers which holds all memory addresses to
22020 read. The second operand is a vector of boolean values with the same number of
22021 elements as the return type. The third is the explicit vector length of the
22022 operation. The return type and underlying type of the vector of pointers are
22023 the same vector types.
22025 The :ref:`align <attr_align>` parameter attribute can be provided for the first
22026 operand.
22028 Semantics:
22029 """"""""""
22031 The '``llvm.vp.gather``' intrinsic reads multiple scalar values from memory in
22032 the same way as the '``llvm.masked.gather``' intrinsic, where the mask is taken
22033 from the combination of the '``mask``' and '``evl``' operands in the usual VP
22034 way. Certain '``llvm.masked.gather``' operands do not have corresponding
22035 operands in '``llvm.vp.gather``': the '``passthru``' operand is implicitly
22036 ``poison``; the '``alignment``' operand is taken as the ``align`` parameter, if
22037 provided. The default alignment is taken as the ABI alignment of the source
22038 addresses as specified by the :ref:`datalayout string<langref_datalayout>`.
22040 Examples:
22041 """""""""
22043 .. code-block:: text
22045      %r = call <8 x i8> @llvm.vp.gather.v8i8.v8p0(<8 x ptr>  align 8 %ptrs, <8 x i1> %mask, i32 %evl)
22046      ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22048      %also.r = call <8 x i8> @llvm.masked.gather.v8i8.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %mask, <8 x i8> poison)
22051 .. _int_vp_scatter:
22053 '``llvm.vp.scatter``' Intrinsic
22054 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22056 Syntax:
22057 """""""
22058 This is an overloaded intrinsic.
22062     declare void @llvm.vp.scatter.v4f64.v4p0(<4 x double> %val, <4 x ptr> %ptrs, <4 x i1> %mask, i32 %evl)
22063     declare void @llvm.vp.scatter.nxv2i8.nxv2p0(<vscale x 2 x i8> %val, <vscale x 2 x ptr> %ptrs, <vscale x 2 x i1> %mask, i32 %evl)
22064     declare void @llvm.vp.scatter.v2f32.v2p2(<2 x float> %val, <2 x ptr addrspace(2)> %ptrs, <2 x i1> %mask, i32 %evl)
22065     declare void @llvm.vp.scatter.nxv4i32.nxv4p4(<vscale x 4 x i32> %val, <vscale x 4 x ptr addrspace(4)> %ptrs, <vscale x 4 x i1> %mask, i32 %evl)
22067 Overview:
22068 """""""""
22070 The '``llvm.vp.scatter.*``' intrinsic is the vector length predicated version of
22071 the :ref:`llvm.masked.scatter <int_mscatter>` intrinsic.
22073 Arguments:
22074 """"""""""
22076 The first operand is a vector value to be written to memory. The second operand
22077 is a vector of pointers, pointing to where the value elements should be stored.
22078 The third operand is a vector of boolean values with the same number of
22079 elements as the return type. The fourth is the explicit vector length of the
22080 operation.
22082 The :ref:`align <attr_align>` parameter attribute can be provided for the
22083 second operand.
22085 Semantics:
22086 """"""""""
22088 The '``llvm.vp.scatter``' intrinsic writes multiple scalar values to memory in
22089 the same way as the '``llvm.masked.scatter``' intrinsic, where the mask is
22090 taken from the combination of the '``mask``' and '``evl``' operands in the
22091 usual VP way. The '``alignment``' operand of the '``llvm.masked.scatter``' does
22092 not have a corresponding operand in '``llvm.vp.scatter``': it is instead
22093 provided via the optional ``align`` parameter attribute on the
22094 vector-of-pointers operand. Otherwise it is taken as the ABI alignment of the
22095 destination addresses as specified by the :ref:`datalayout
22096 string<langref_datalayout>`.
22098 Examples:
22099 """""""""
22101 .. code-block:: text
22103      call void @llvm.vp.scatter.v8i8.v8p0(<8 x i8> %val, <8 x ptr> align 1 %ptrs, <8 x i1> %mask, i32 %evl)
22104      ;; For all lanes below %evl, the call above is lane-wise equivalent to the call below.
22106      call void @llvm.masked.scatter.v8i8.v8p0(<8 x i8> %val, <8 x ptr> %ptrs, i32 1, <8 x i1> %mask)
22109 .. _int_vp_trunc:
22111 '``llvm.vp.trunc.*``' Intrinsics
22112 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22114 Syntax:
22115 """""""
22116 This is an overloaded intrinsic.
22120       declare <16 x i16>  @llvm.vp.trunc.v16i16.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
22121       declare <vscale x 4 x i16>  @llvm.vp.trunc.nxv4i16.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22123 Overview:
22124 """""""""
22126 The '``llvm.vp.trunc``' intrinsic truncates its first operand to the return
22127 type. The operation has a mask and an explicit vector length parameter.
22130 Arguments:
22131 """"""""""
22133 The '``llvm.vp.trunc``' intrinsic takes a value to cast as its first operand.
22134 The return type is the type to cast the value to. Both types must be vector of
22135 :ref:`integer <t_integer>` type. The bit size of the value must be larger than
22136 the bit size of the return type. The second operand is the vector mask. The
22137 return type, the value to cast, and the vector mask have the same number of
22138 elements.  The third operand is the explicit vector length of the operation.
22140 Semantics:
22141 """"""""""
22143 The '``llvm.vp.trunc``' intrinsic truncates the high order bits in value and
22144 converts the remaining bits to return type. Since the source size must be larger
22145 than the destination size, '``llvm.vp.trunc``' cannot be a *no-op cast*. It will
22146 always truncate bits. The conversion is performed on lane positions below the
22147 explicit vector length and where the vector mask is true.  Masked-off lanes are
22148 ``poison``.
22150 Examples:
22151 """""""""
22153 .. code-block:: llvm
22155       %r = call <4 x i16> @llvm.vp.trunc.v4i16.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
22156       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22158       %t = trunc <4 x i32> %a to <4 x i16>
22159       %also.r = select <4 x i1> %mask, <4 x i16> %t, <4 x i16> poison
22162 .. _int_vp_zext:
22164 '``llvm.vp.zext.*``' Intrinsics
22165 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22167 Syntax:
22168 """""""
22169 This is an overloaded intrinsic.
22173       declare <16 x i32>  @llvm.vp.zext.v16i32.v16i16 (<16 x i16> <op>, <16 x i1> <mask>, i32 <vector_length>)
22174       declare <vscale x 4 x i32>  @llvm.vp.zext.nxv4i32.nxv4i16 (<vscale x 4 x i16> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22176 Overview:
22177 """""""""
22179 The '``llvm.vp.zext``' intrinsic zero extends its first operand to the return
22180 type. The operation has a mask and an explicit vector length parameter.
22183 Arguments:
22184 """"""""""
22186 The '``llvm.vp.zext``' intrinsic takes a value to cast as its first operand.
22187 The return type is the type to cast the value to. Both types must be vectors of
22188 :ref:`integer <t_integer>` type. The bit size of the value must be smaller than
22189 the bit size of the return type. The second operand is the vector mask. The
22190 return type, the value to cast, and the vector mask have the same number of
22191 elements.  The third operand is the explicit vector length of the operation.
22193 Semantics:
22194 """"""""""
22196 The '``llvm.vp.zext``' intrinsic fill the high order bits of the value with zero
22197 bits until it reaches the size of the return type. When zero extending from i1,
22198 the result will always be either 0 or 1. The conversion is performed on lane
22199 positions below the explicit vector length and where the vector mask is true.
22200 Masked-off lanes are ``poison``.
22202 Examples:
22203 """""""""
22205 .. code-block:: llvm
22207       %r = call <4 x i32> @llvm.vp.zext.v4i32.v4i16(<4 x i16> %a, <4 x i1> %mask, i32 %evl)
22208       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22210       %t = zext <4 x i16> %a to <4 x i32>
22211       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
22214 .. _int_vp_sext:
22216 '``llvm.vp.sext.*``' Intrinsics
22217 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22219 Syntax:
22220 """""""
22221 This is an overloaded intrinsic.
22225       declare <16 x i32>  @llvm.vp.sext.v16i32.v16i16 (<16 x i16> <op>, <16 x i1> <mask>, i32 <vector_length>)
22226       declare <vscale x 4 x i32>  @llvm.vp.sext.nxv4i32.nxv4i16 (<vscale x 4 x i16> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22228 Overview:
22229 """""""""
22231 The '``llvm.vp.sext``' intrinsic sign extends its first operand to the return
22232 type. The operation has a mask and an explicit vector length parameter.
22235 Arguments:
22236 """"""""""
22238 The '``llvm.vp.sext``' intrinsic takes a value to cast as its first operand.
22239 The return type is the type to cast the value to. Both types must be vectors of
22240 :ref:`integer <t_integer>` type. The bit size of the value must be smaller than
22241 the bit size of the return type. The second operand is the vector mask. The
22242 return type, the value to cast, and the vector mask have the same number of
22243 elements.  The third operand is the explicit vector length of the operation.
22245 Semantics:
22246 """"""""""
22248 The '``llvm.vp.sext``' intrinsic performs a sign extension by copying the sign
22249 bit (highest order bit) of the value until it reaches the size of the return
22250 type. When sign extending from i1, the result will always be either -1 or 0.
22251 The conversion is performed on lane positions below the explicit vector length
22252 and where the vector mask is true. Masked-off lanes are ``poison``.
22254 Examples:
22255 """""""""
22257 .. code-block:: llvm
22259       %r = call <4 x i32> @llvm.vp.sext.v4i32.v4i16(<4 x i16> %a, <4 x i1> %mask, i32 %evl)
22260       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22262       %t = sext <4 x i16> %a to <4 x i32>
22263       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
22266 .. _int_vp_fptrunc:
22268 '``llvm.vp.fptrunc.*``' Intrinsics
22269 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22271 Syntax:
22272 """""""
22273 This is an overloaded intrinsic.
22277       declare <16 x float>  @llvm.vp.fptrunc.v16f32.v16f64 (<16 x double> <op>, <16 x i1> <mask>, i32 <vector_length>)
22278       declare <vscale x 4 x float>  @llvm.vp.trunc.nxv4f32.nxv4f64 (<vscale x 4 x double> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22280 Overview:
22281 """""""""
22283 The '``llvm.vp.fptrunc``' intrinsic truncates its first operand to the return
22284 type. The operation has a mask and an explicit vector length parameter.
22287 Arguments:
22288 """"""""""
22290 The '``llvm.vp.fptrunc``' intrinsic takes a value to cast as its first operand.
22291 The return type is the type to cast the value to. Both types must be vector of
22292 :ref:`floating-point <t_floating>` type. The bit size of the value must be
22293 larger than the bit size of the return type. This implies that
22294 '``llvm.vp.fptrunc``' cannot be used to make a *no-op cast*. The second operand
22295 is the vector mask. The return type, the value to cast, and the vector mask have
22296 the same number of elements.  The third operand is the explicit vector length of
22297 the operation.
22299 Semantics:
22300 """"""""""
22302 The '``llvm.vp.fptrunc``' intrinsic casts a ``value`` from a larger
22303 :ref:`floating-point <t_floating>` type to a smaller :ref:`floating-point
22304 <t_floating>` type.
22305 This instruction is assumed to execute in the default :ref:`floating-point
22306 environment <floatenv>`. The conversion is performed on lane positions below the
22307 explicit vector length and where the vector mask is true.  Masked-off lanes are
22308 ``poison``.
22310 Examples:
22311 """""""""
22313 .. code-block:: llvm
22315       %r = call <4 x float> @llvm.vp.fptrunc.v4f32.v4f64(<4 x double> %a, <4 x i1> %mask, i32 %evl)
22316       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22318       %t = fptrunc <4 x double> %a to <4 x float>
22319       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22322 .. _int_vp_fpext:
22324 '``llvm.vp.fpext.*``' Intrinsics
22325 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22327 Syntax:
22328 """""""
22329 This is an overloaded intrinsic.
22333       declare <16 x double>  @llvm.vp.fpext.v16f64.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22334       declare <vscale x 4 x double>  @llvm.vp.fpext.nxv4f64.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22336 Overview:
22337 """""""""
22339 The '``llvm.vp.fpext``' intrinsic extends its first operand to the return
22340 type. The operation has a mask and an explicit vector length parameter.
22343 Arguments:
22344 """"""""""
22346 The '``llvm.vp.fpext``' intrinsic takes a value to cast as its first operand.
22347 The return type is the type to cast the value to. Both types must be vector of
22348 :ref:`floating-point <t_floating>` type. The bit size of the value must be
22349 smaller than the bit size of the return type. This implies that
22350 '``llvm.vp.fpext``' cannot be used to make a *no-op cast*. The second operand
22351 is the vector mask. The return type, the value to cast, and the vector mask have
22352 the same number of elements.  The third operand is the explicit vector length of
22353 the operation.
22355 Semantics:
22356 """"""""""
22358 The '``llvm.vp.fpext``' intrinsic extends the ``value`` from a smaller
22359 :ref:`floating-point <t_floating>` type to a larger :ref:`floating-point
22360 <t_floating>` type. The '``llvm.vp.fpext``' cannot be used to make a
22361 *no-op cast* because it always changes bits. Use ``bitcast`` to make a
22362 *no-op cast* for a floating-point cast.
22363 The conversion is performed on lane positions below the explicit vector length
22364 and where the vector mask is true.  Masked-off lanes are ``poison``.
22366 Examples:
22367 """""""""
22369 .. code-block:: llvm
22371       %r = call <4 x double> @llvm.vp.fpext.v4f64.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22372       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22374       %t = fpext <4 x float> %a to <4 x double>
22375       %also.r = select <4 x i1> %mask, <4 x double> %t, <4 x double> poison
22378 .. _int_vp_fptoui:
22380 '``llvm.vp.fptoui.*``' Intrinsics
22381 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22383 Syntax:
22384 """""""
22385 This is an overloaded intrinsic.
22389       declare <16 x i32>  @llvm.vp.fptoui.v16i32.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22390       declare <vscale x 4 x i32>  @llvm.vp.fptoui.nxv4i32.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22391       declare <256 x i64>  @llvm.vp.fptoui.v256i64.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22393 Overview:
22394 """""""""
22396 The '``llvm.vp.fptoui``' intrinsic converts the :ref:`floating-point
22397 <t_floating>` operand to the unsigned integer return type.
22398 The operation has a mask and an explicit vector length parameter.
22401 Arguments:
22402 """"""""""
22404 The '``llvm.vp.fptoui``' intrinsic takes a value to cast as its first operand.
22405 The value to cast must be a vector of :ref:`floating-point <t_floating>` type.
22406 The return type is the type to cast the value to. The return type must be
22407 vector of :ref:`integer <t_integer>` type.  The second operand is the vector
22408 mask. The return type, the value to cast, and the vector mask have the same
22409 number of elements.  The third operand is the explicit vector length of the
22410 operation.
22412 Semantics:
22413 """"""""""
22415 The '``llvm.vp.fptoui``' intrinsic converts its :ref:`floating-point
22416 <t_floating>` operand into the nearest (rounding towards zero) unsigned integer
22417 value where the lane position is below the explicit vector length and the
22418 vector mask is true.  Masked-off lanes are ``poison``. On enabled lanes where
22419 conversion takes place and the value cannot fit in the return type, the result
22420 on that lane is a :ref:`poison value <poisonvalues>`.
22422 Examples:
22423 """""""""
22425 .. code-block:: llvm
22427       %r = call <4 x i32> @llvm.vp.fptoui.v4i32.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22428       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22430       %t = fptoui <4 x float> %a to <4 x i32>
22431       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
22434 .. _int_vp_fptosi:
22436 '``llvm.vp.fptosi.*``' Intrinsics
22437 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22439 Syntax:
22440 """""""
22441 This is an overloaded intrinsic.
22445       declare <16 x i32>  @llvm.vp.fptosi.v16i32.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22446       declare <vscale x 4 x i32>  @llvm.vp.fptosi.nxv4i32.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22447       declare <256 x i64>  @llvm.vp.fptosi.v256i64.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22449 Overview:
22450 """""""""
22452 The '``llvm.vp.fptosi``' intrinsic converts the :ref:`floating-point
22453 <t_floating>` operand to the signed integer return type.
22454 The operation has a mask and an explicit vector length parameter.
22457 Arguments:
22458 """"""""""
22460 The '``llvm.vp.fptosi``' intrinsic takes a value to cast as its first operand.
22461 The value to cast must be a vector of :ref:`floating-point <t_floating>` type.
22462 The return type is the type to cast the value to. The return type must be
22463 vector of :ref:`integer <t_integer>` type.  The second operand is the vector
22464 mask. The return type, the value to cast, and the vector mask have the same
22465 number of elements.  The third operand is the explicit vector length of the
22466 operation.
22468 Semantics:
22469 """"""""""
22471 The '``llvm.vp.fptosi``' intrinsic converts its :ref:`floating-point
22472 <t_floating>` operand into the nearest (rounding towards zero) signed integer
22473 value where the lane position is below the explicit vector length and the
22474 vector mask is true.  Masked-off lanes are ``poison``. On enabled lanes where
22475 conversion takes place and the value cannot fit in the return type, the result
22476 on that lane is a :ref:`poison value <poisonvalues>`.
22478 Examples:
22479 """""""""
22481 .. code-block:: llvm
22483       %r = call <4 x i32> @llvm.vp.fptosi.v4i32.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22484       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22486       %t = fptosi <4 x float> %a to <4 x i32>
22487       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
22490 .. _int_vp_uitofp:
22492 '``llvm.vp.uitofp.*``' Intrinsics
22493 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22495 Syntax:
22496 """""""
22497 This is an overloaded intrinsic.
22501       declare <16 x float>  @llvm.vp.uitofp.v16f32.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
22502       declare <vscale x 4 x float>  @llvm.vp.uitofp.nxv4f32.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22503       declare <256 x double>  @llvm.vp.uitofp.v256f64.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>)
22505 Overview:
22506 """""""""
22508 The '``llvm.vp.uitofp``' intrinsic converts its unsigned integer operand to the
22509 :ref:`floating-point <t_floating>` return type.  The operation has a mask and
22510 an explicit vector length parameter.
22513 Arguments:
22514 """"""""""
22516 The '``llvm.vp.uitofp``' intrinsic takes a value to cast as its first operand.
22517 The value to cast must be vector of :ref:`integer <t_integer>` type.  The
22518 return type is the type to cast the value to.  The return type must be a vector
22519 of :ref:`floating-point <t_floating>` type.  The second operand is the vector
22520 mask. The return type, the value to cast, and the vector mask have the same
22521 number of elements.  The third operand is the explicit vector length of the
22522 operation.
22524 Semantics:
22525 """"""""""
22527 The '``llvm.vp.uitofp``' intrinsic interprets its first operand as an unsigned
22528 integer quantity and converts it to the corresponding floating-point value. If
22529 the value cannot be exactly represented, it is rounded using the default
22530 rounding mode.  The conversion is performed on lane positions below the
22531 explicit vector length and where the vector mask is true.  Masked-off lanes are
22532 ``poison``.
22534 Examples:
22535 """""""""
22537 .. code-block:: llvm
22539       %r = call <4 x float> @llvm.vp.uitofp.v4f32.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
22540       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22542       %t = uitofp <4 x i32> %a to <4 x float>
22543       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22546 .. _int_vp_sitofp:
22548 '``llvm.vp.sitofp.*``' Intrinsics
22549 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22551 Syntax:
22552 """""""
22553 This is an overloaded intrinsic.
22557       declare <16 x float>  @llvm.vp.sitofp.v16f32.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
22558       declare <vscale x 4 x float>  @llvm.vp.sitofp.nxv4f32.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22559       declare <256 x double>  @llvm.vp.sitofp.v256f64.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>)
22561 Overview:
22562 """""""""
22564 The '``llvm.vp.sitofp``' intrinsic converts its signed integer operand to the
22565 :ref:`floating-point <t_floating>` return type.  The operation has a mask and
22566 an explicit vector length parameter.
22569 Arguments:
22570 """"""""""
22572 The '``llvm.vp.sitofp``' intrinsic takes a value to cast as its first operand.
22573 The value to cast must be vector of :ref:`integer <t_integer>` type.  The
22574 return type is the type to cast the value to.  The return type must be a vector
22575 of :ref:`floating-point <t_floating>` type.  The second operand is the vector
22576 mask. The return type, the value to cast, and the vector mask have the same
22577 number of elements.  The third operand is the explicit vector length of the
22578 operation.
22580 Semantics:
22581 """"""""""
22583 The '``llvm.vp.sitofp``' intrinsic interprets its first operand as a signed
22584 integer quantity and converts it to the corresponding floating-point value. If
22585 the value cannot be exactly represented, it is rounded using the default
22586 rounding mode.  The conversion is performed on lane positions below the
22587 explicit vector length and where the vector mask is true.  Masked-off lanes are
22588 ``poison``.
22590 Examples:
22591 """""""""
22593 .. code-block:: llvm
22595       %r = call <4 x float> @llvm.vp.sitofp.v4f32.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
22596       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22598       %t = sitofp <4 x i32> %a to <4 x float>
22599       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22602 .. _int_vp_ptrtoint:
22604 '``llvm.vp.ptrtoint.*``' Intrinsics
22605 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22607 Syntax:
22608 """""""
22609 This is an overloaded intrinsic.
22613       declare <16 x i8>  @llvm.vp.ptrtoint.v16i8.v16p0(<16 x ptr> <op>, <16 x i1> <mask>, i32 <vector_length>)
22614       declare <vscale x 4 x i8>  @llvm.vp.ptrtoint.nxv4i8.nxv4p0(<vscale x 4 x ptr> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22615       declare <256 x i64>  @llvm.vp.ptrtoint.v16i64.v16p0(<256 x ptr> <op>, <256 x i1> <mask>, i32 <vector_length>)
22617 Overview:
22618 """""""""
22620 The '``llvm.vp.ptrtoint``' intrinsic converts its pointer to the integer return
22621 type.  The operation has a mask and an explicit vector length parameter.
22624 Arguments:
22625 """"""""""
22627 The '``llvm.vp.ptrtoint``' intrinsic takes a value to cast as its first operand
22628 , which must be a vector of pointers, and a type to cast it to return type,
22629 which must be a vector of :ref:`integer <t_integer>` type.
22630 The second operand is the vector mask. The return type, the value to cast, and
22631 the vector mask have the same number of elements.
22632 The third operand is the explicit vector length of the operation.
22634 Semantics:
22635 """"""""""
22637 The '``llvm.vp.ptrtoint``' intrinsic converts value to return type by
22638 interpreting the pointer value as an integer and either truncating or zero
22639 extending that value to the size of the integer type.
22640 If ``value`` is smaller than return type, then a zero extension is done. If
22641 ``value`` is larger than return type, then a truncation is done. If they are
22642 the same size, then nothing is done (*no-op cast*) other than a type
22643 change.
22644 The conversion is performed on lane positions below the explicit vector length
22645 and where the vector mask is true.  Masked-off lanes are ``poison``.
22647 Examples:
22648 """""""""
22650 .. code-block:: llvm
22652       %r = call <4 x i8> @llvm.vp.ptrtoint.v4i8.v4p0i32(<4 x ptr> %a, <4 x i1> %mask, i32 %evl)
22653       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22655       %t = ptrtoint <4 x ptr> %a to <4 x i8>
22656       %also.r = select <4 x i1> %mask, <4 x i8> %t, <4 x i8> poison
22659 .. _int_vp_inttoptr:
22661 '``llvm.vp.inttoptr.*``' Intrinsics
22662 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22664 Syntax:
22665 """""""
22666 This is an overloaded intrinsic.
22670       declare <16 x ptr>  @llvm.vp.inttoptr.v16p0.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
22671       declare <vscale x 4 x ptr>  @llvm.vp.inttoptr.nxv4p0.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22672       declare <256 x ptr>  @llvm.vp.inttoptr.v256p0.v256i32 (<256 x i32> <op>, <256 x i1> <mask>, i32 <vector_length>)
22674 Overview:
22675 """""""""
22677 The '``llvm.vp.inttoptr``' intrinsic converts its integer value to the point
22678 return type. The operation has a mask and an explicit vector length parameter.
22681 Arguments:
22682 """"""""""
22684 The '``llvm.vp.inttoptr``' intrinsic takes a value to cast as its first operand
22685 , which must be a vector of :ref:`integer <t_integer>` type, and a type to cast
22686 it to return type, which must be a vector of pointers type.
22687 The second operand is the vector mask. The return type, the value to cast, and
22688 the vector mask have the same number of elements.
22689 The third operand is the explicit vector length of the operation.
22691 Semantics:
22692 """"""""""
22694 The '``llvm.vp.inttoptr``' intrinsic converts ``value`` to return type by
22695 applying either a zero extension or a truncation depending on the size of the
22696 integer ``value``. If ``value`` is larger than the size of a pointer, then a
22697 truncation is done. If ``value`` is smaller than the size of a pointer, then a
22698 zero extension is done. If they are the same size, nothing is done (*no-op cast*).
22699 The conversion is performed on lane positions below the explicit vector length
22700 and where the vector mask is true.  Masked-off lanes are ``poison``.
22702 Examples:
22703 """""""""
22705 .. code-block:: llvm
22707       %r = call <4 x ptr> @llvm.vp.inttoptr.v4p0i32.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
22708       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22710       %t = inttoptr <4 x i32> %a to <4 x ptr>
22711       %also.r = select <4 x i1> %mask, <4 x ptr> %t, <4 x ptr> poison
22714 .. _int_vp_fcmp:
22716 '``llvm.vp.fcmp.*``' Intrinsics
22717 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22719 Syntax:
22720 """""""
22721 This is an overloaded intrinsic.
22725       declare <16 x i1> @llvm.vp.fcmp.v16f32(<16 x float> <left_op>, <16 x float> <right_op>, metadata <condition code>, <16 x i1> <mask>, i32 <vector_length>)
22726       declare <vscale x 4 x i1> @llvm.vp.fcmp.nxv4f32(<vscale x 4 x float> <left_op>, <vscale x 4 x float> <right_op>, metadata <condition code>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22727       declare <256 x i1> @llvm.vp.fcmp.v256f64(<256 x double> <left_op>, <256 x double> <right_op>, metadata <condition code>, <256 x i1> <mask>, i32 <vector_length>)
22729 Overview:
22730 """""""""
22732 The '``llvm.vp.fcmp``' intrinsic returns a vector of boolean values based on
22733 the comparison of its operands. The operation has a mask and an explicit vector
22734 length parameter.
22737 Arguments:
22738 """"""""""
22740 The '``llvm.vp.fcmp``' intrinsic takes the two values to compare as its first
22741 and second operands. These two values must be vectors of :ref:`floating-point
22742 <t_floating>` types.
22743 The return type is the result of the comparison. The return type must be a
22744 vector of :ref:`i1 <t_integer>` type. The fourth operand is the vector mask.
22745 The return type, the values to compare, and the vector mask have the same
22746 number of elements. The third operand is the condition code indicating the kind
22747 of comparison to perform. It must be a metadata string with :ref:`one of the
22748 supported floating-point condition code values <fcmp_md_cc>`. The fifth operand
22749 is the explicit vector length of the operation.
22751 Semantics:
22752 """"""""""
22754 The '``llvm.vp.fcmp``' compares its first two operands according to the
22755 condition code given as the third operand. The operands are compared element by
22756 element on each enabled lane, where the the semantics of the comparison are
22757 defined :ref:`according to the condition code <fcmp_md_cc_sem>`. Masked-off
22758 lanes are ``poison``.
22760 Examples:
22761 """""""""
22763 .. code-block:: llvm
22765       %r = call <4 x i1> @llvm.vp.fcmp.v4f32(<4 x float> %a, <4 x float> %b, metadata !"oeq", <4 x i1> %mask, i32 %evl)
22766       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22768       %t = fcmp oeq <4 x float> %a, %b
22769       %also.r = select <4 x i1> %mask, <4 x i1> %t, <4 x i1> poison
22772 .. _int_vp_icmp:
22774 '``llvm.vp.icmp.*``' Intrinsics
22775 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22777 Syntax:
22778 """""""
22779 This is an overloaded intrinsic.
22783       declare <32 x i1> @llvm.vp.icmp.v32i32(<32 x i32> <left_op>, <32 x i32> <right_op>, metadata <condition code>, <32 x i1> <mask>, i32 <vector_length>)
22784       declare <vscale x 2 x i1> @llvm.vp.icmp.nxv2i32(<vscale x 2 x i32> <left_op>, <vscale x 2 x i32> <right_op>, metadata <condition code>, <vscale x 2 x i1> <mask>, i32 <vector_length>)
22785       declare <128 x i1> @llvm.vp.icmp.v128i8(<128 x i8> <left_op>, <128 x i8> <right_op>, metadata <condition code>, <128 x i1> <mask>, i32 <vector_length>)
22787 Overview:
22788 """""""""
22790 The '``llvm.vp.icmp``' intrinsic returns a vector of boolean values based on
22791 the comparison of its operands. The operation has a mask and an explicit vector
22792 length parameter.
22795 Arguments:
22796 """"""""""
22798 The '``llvm.vp.icmp``' intrinsic takes the two values to compare as its first
22799 and second operands. These two values must be vectors of :ref:`integer
22800 <t_integer>` types.
22801 The return type is the result of the comparison. The return type must be a
22802 vector of :ref:`i1 <t_integer>` type. The fourth operand is the vector mask.
22803 The return type, the values to compare, and the vector mask have the same
22804 number of elements. The third operand is the condition code indicating the kind
22805 of comparison to perform. It must be a metadata string with :ref:`one of the
22806 supported integer condition code values <icmp_md_cc>`. The fifth operand is the
22807 explicit vector length of the operation.
22809 Semantics:
22810 """"""""""
22812 The '``llvm.vp.icmp``' compares its first two operands according to the
22813 condition code given as the third operand. The operands are compared element by
22814 element on each enabled lane, where the the semantics of the comparison are
22815 defined :ref:`according to the condition code <icmp_md_cc_sem>`. Masked-off
22816 lanes are ``poison``.
22818 Examples:
22819 """""""""
22821 .. code-block:: llvm
22823       %r = call <4 x i1> @llvm.vp.icmp.v4i32(<4 x i32> %a, <4 x i32> %b, metadata !"ne", <4 x i1> %mask, i32 %evl)
22824       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22826       %t = icmp ne <4 x i32> %a, %b
22827       %also.r = select <4 x i1> %mask, <4 x i1> %t, <4 x i1> poison
22829 .. _int_vp_ceil:
22831 '``llvm.vp.ceil.*``' Intrinsics
22832 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22834 Syntax:
22835 """""""
22836 This is an overloaded intrinsic.
22840       declare <16 x float>  @llvm.vp.ceil.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22841       declare <vscale x 4 x float>  @llvm.vp.ceil.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22842       declare <256 x double>  @llvm.vp.ceil.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22844 Overview:
22845 """""""""
22847 Predicated floating-point ceiling of a vector of floating-point values.
22850 Arguments:
22851 """"""""""
22853 The first operand and the result have the same vector of floating-point type.
22854 The second operand is the vector mask and has the same number of elements as the
22855 result vector type. The third operand is the explicit vector length of the
22856 operation.
22858 Semantics:
22859 """"""""""
22861 The '``llvm.vp.ceil``' intrinsic performs floating-point ceiling
22862 (:ref:`ceil <int_ceil>`) of the first vector operand on each enabled lane. The
22863 result on disabled lanes is a :ref:`poison value <poisonvalues>`.
22865 Examples:
22866 """""""""
22868 .. code-block:: llvm
22870       %r = call <4 x float> @llvm.vp.ceil.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22871       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22873       %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %a)
22874       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22876 .. _int_vp_floor:
22878 '``llvm.vp.floor.*``' Intrinsics
22879 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22881 Syntax:
22882 """""""
22883 This is an overloaded intrinsic.
22887       declare <16 x float>  @llvm.vp.floor.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22888       declare <vscale x 4 x float>  @llvm.vp.floor.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22889       declare <256 x double>  @llvm.vp.floor.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22891 Overview:
22892 """""""""
22894 Predicated floating-point floor of a vector of floating-point values.
22897 Arguments:
22898 """"""""""
22900 The first operand and the result have the same vector of floating-point type.
22901 The second operand is the vector mask and has the same number of elements as the
22902 result vector type. The third operand is the explicit vector length of the
22903 operation.
22905 Semantics:
22906 """"""""""
22908 The '``llvm.vp.floor``' intrinsic performs floating-point floor
22909 (:ref:`floor <int_floor>`) of the first vector operand on each enabled lane.
22910 The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
22912 Examples:
22913 """""""""
22915 .. code-block:: llvm
22917       %r = call <4 x float> @llvm.vp.floor.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22918       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22920       %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %a)
22921       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22923 .. _int_vp_rint:
22925 '``llvm.vp.rint.*``' Intrinsics
22926 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22928 Syntax:
22929 """""""
22930 This is an overloaded intrinsic.
22934       declare <16 x float>  @llvm.vp.rint.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22935       declare <vscale x 4 x float>  @llvm.vp.rint.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22936       declare <256 x double>  @llvm.vp.rint.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22938 Overview:
22939 """""""""
22941 Predicated floating-point rint of a vector of floating-point values.
22944 Arguments:
22945 """"""""""
22947 The first operand and the result have the same vector of floating-point type.
22948 The second operand is the vector mask and has the same number of elements as the
22949 result vector type. The third operand is the explicit vector length of the
22950 operation.
22952 Semantics:
22953 """"""""""
22955 The '``llvm.vp.rint``' intrinsic performs floating-point rint
22956 (:ref:`rint <int_rint>`) of the first vector operand on each enabled lane.
22957 The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
22959 Examples:
22960 """""""""
22962 .. code-block:: llvm
22964       %r = call <4 x float> @llvm.vp.rint.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
22965       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
22967       %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %a)
22968       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
22970 .. _int_vp_nearbyint:
22972 '``llvm.vp.nearbyint.*``' Intrinsics
22973 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22975 Syntax:
22976 """""""
22977 This is an overloaded intrinsic.
22981       declare <16 x float>  @llvm.vp.nearbyint.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
22982       declare <vscale x 4 x float>  @llvm.vp.nearbyint.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
22983       declare <256 x double>  @llvm.vp.nearbyint.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
22985 Overview:
22986 """""""""
22988 Predicated floating-point nearbyint of a vector of floating-point values.
22991 Arguments:
22992 """"""""""
22994 The first operand and the result have the same vector of floating-point type.
22995 The second operand is the vector mask and has the same number of elements as the
22996 result vector type. The third operand is the explicit vector length of the
22997 operation.
22999 Semantics:
23000 """"""""""
23002 The '``llvm.vp.nearbyint``' intrinsic performs floating-point nearbyint
23003 (:ref:`nearbyint <int_nearbyint>`) of the first vector operand on each enabled lane.
23004 The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23006 Examples:
23007 """""""""
23009 .. code-block:: llvm
23011       %r = call <4 x float> @llvm.vp.nearbyint.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
23012       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23014       %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %a)
23015       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
23017 .. _int_vp_round:
23019 '``llvm.vp.round.*``' Intrinsics
23020 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23022 Syntax:
23023 """""""
23024 This is an overloaded intrinsic.
23028       declare <16 x float>  @llvm.vp.round.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
23029       declare <vscale x 4 x float>  @llvm.vp.round.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23030       declare <256 x double>  @llvm.vp.round.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
23032 Overview:
23033 """""""""
23035 Predicated floating-point round of a vector of floating-point values.
23038 Arguments:
23039 """"""""""
23041 The first operand and the result have the same vector of floating-point type.
23042 The second operand is the vector mask and has the same number of elements as the
23043 result vector type. The third operand is the explicit vector length of the
23044 operation.
23046 Semantics:
23047 """"""""""
23049 The '``llvm.vp.round``' intrinsic performs floating-point round
23050 (:ref:`round <int_round>`) of the first vector operand on each enabled lane.
23051 The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23053 Examples:
23054 """""""""
23056 .. code-block:: llvm
23058       %r = call <4 x float> @llvm.vp.round.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
23059       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23061       %t = call <4 x float> @llvm.round.v4f32(<4 x float> %a)
23062       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
23064 .. _int_vp_roundeven:
23066 '``llvm.vp.roundeven.*``' Intrinsics
23067 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23069 Syntax:
23070 """""""
23071 This is an overloaded intrinsic.
23075       declare <16 x float>  @llvm.vp.roundeven.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
23076       declare <vscale x 4 x float>  @llvm.vp.roundeven.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23077       declare <256 x double>  @llvm.vp.roundeven.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
23079 Overview:
23080 """""""""
23082 Predicated floating-point roundeven of a vector of floating-point values.
23085 Arguments:
23086 """"""""""
23088 The first operand and the result have the same vector of floating-point type.
23089 The second operand is the vector mask and has the same number of elements as the
23090 result vector type. The third operand is the explicit vector length of the
23091 operation.
23093 Semantics:
23094 """"""""""
23096 The '``llvm.vp.roundeven``' intrinsic performs floating-point roundeven
23097 (:ref:`roundeven <int_roundeven>`) of the first vector operand on each enabled
23098 lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23100 Examples:
23101 """""""""
23103 .. code-block:: llvm
23105       %r = call <4 x float> @llvm.vp.roundeven.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
23106       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23108       %t = call <4 x float> @llvm.roundeven.v4f32(<4 x float> %a)
23109       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
23111 .. _int_vp_roundtozero:
23113 '``llvm.vp.roundtozero.*``' Intrinsics
23114 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23116 Syntax:
23117 """""""
23118 This is an overloaded intrinsic.
23122       declare <16 x float>  @llvm.vp.roundtozero.v16f32 (<16 x float> <op>, <16 x i1> <mask>, i32 <vector_length>)
23123       declare <vscale x 4 x float>  @llvm.vp.roundtozero.nxv4f32 (<vscale x 4 x float> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23124       declare <256 x double>  @llvm.vp.roundtozero.v256f64 (<256 x double> <op>, <256 x i1> <mask>, i32 <vector_length>)
23126 Overview:
23127 """""""""
23129 Predicated floating-point round-to-zero of a vector of floating-point values.
23132 Arguments:
23133 """"""""""
23135 The first operand and the result have the same vector of floating-point type.
23136 The second operand is the vector mask and has the same number of elements as the
23137 result vector type. The third operand is the explicit vector length of the
23138 operation.
23140 Semantics:
23141 """"""""""
23143 The '``llvm.vp.roundtozero``' intrinsic performs floating-point roundeven
23144 (:ref:`llvm.trunc <int_llvm_trunc>`) of the first vector operand on each enabled lane.  The
23145 result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23147 Examples:
23148 """""""""
23150 .. code-block:: llvm
23152       %r = call <4 x float> @llvm.vp.roundtozero.v4f32(<4 x float> %a, <4 x i1> %mask, i32 %evl)
23153       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23155       %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %a)
23156       %also.r = select <4 x i1> %mask, <4 x float> %t, <4 x float> poison
23158 .. _int_vp_bitreverse:
23160 '``llvm.vp.bitreverse.*``' Intrinsics
23161 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23163 Syntax:
23164 """""""
23165 This is an overloaded intrinsic.
23169       declare <16 x i32>  @llvm.vp.bitreverse.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
23170       declare <vscale x 4 x i32>  @llvm.vp.bitreverse.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23171       declare <256 x i64>  @llvm.vp.bitreverse.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>)
23173 Overview:
23174 """""""""
23176 Predicated bitreverse of a vector of integers.
23179 Arguments:
23180 """"""""""
23182 The first operand and the result have the same vector of integer type. The
23183 second operand is the vector mask and has the same number of elements as the
23184 result vector type. The third operand is the explicit vector length of the
23185 operation.
23187 Semantics:
23188 """"""""""
23190 The '``llvm.vp.bitreverse``' intrinsic performs bitreverse (:ref:`bitreverse <int_bitreverse>`) of the first operand on each
23191 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23193 Examples:
23194 """""""""
23196 .. code-block:: llvm
23198       %r = call <4 x i32> @llvm.vp.bitreverse.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
23199       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23201       %t = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a)
23202       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23205 .. _int_vp_bswap:
23207 '``llvm.vp.bswap.*``' Intrinsics
23208 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23210 Syntax:
23211 """""""
23212 This is an overloaded intrinsic.
23216       declare <16 x i32>  @llvm.vp.bswap.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
23217       declare <vscale x 4 x i32>  @llvm.vp.bswap.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23218       declare <256 x i64>  @llvm.vp.bswap.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>)
23220 Overview:
23221 """""""""
23223 Predicated bswap of a vector of integers.
23226 Arguments:
23227 """"""""""
23229 The first operand and the result have the same vector of integer type. The
23230 second operand is the vector mask and has the same number of elements as the
23231 result vector type. The third operand is the explicit vector length of the
23232 operation.
23234 Semantics:
23235 """"""""""
23237 The '``llvm.vp.bswap``' intrinsic performs bswap (:ref:`bswap <int_bswap>`) of the first operand on each
23238 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23240 Examples:
23241 """""""""
23243 .. code-block:: llvm
23245       %r = call <4 x i32> @llvm.vp.bswap.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
23246       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23248       %t = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %a)
23249       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23252 .. _int_vp_ctpop:
23254 '``llvm.vp.ctpop.*``' Intrinsics
23255 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23257 Syntax:
23258 """""""
23259 This is an overloaded intrinsic.
23263       declare <16 x i32>  @llvm.vp.ctpop.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>)
23264       declare <vscale x 4 x i32>  @llvm.vp.ctpop.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23265       declare <256 x i64>  @llvm.vp.ctpop.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>)
23267 Overview:
23268 """""""""
23270 Predicated ctpop of a vector of integers.
23273 Arguments:
23274 """"""""""
23276 The first operand and the result have the same vector of integer type. The
23277 second operand is the vector mask and has the same number of elements as the
23278 result vector type. The third operand is the explicit vector length of the
23279 operation.
23281 Semantics:
23282 """"""""""
23284 The '``llvm.vp.ctpop``' intrinsic performs ctpop (:ref:`ctpop <int_ctpop>`) of the first operand on each
23285 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23287 Examples:
23288 """""""""
23290 .. code-block:: llvm
23292       %r = call <4 x i32> @llvm.vp.ctpop.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl)
23293       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23295       %t = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %a)
23296       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23299 .. _int_vp_ctlz:
23301 '``llvm.vp.ctlz.*``' Intrinsics
23302 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23304 Syntax:
23305 """""""
23306 This is an overloaded intrinsic.
23310       declare <16 x i32>  @llvm.vp.ctlz.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23311       declare <vscale x 4 x i32>  @llvm.vp.ctlz.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23312       declare <256 x i64>  @llvm.vp.ctlz.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23314 Overview:
23315 """""""""
23317 Predicated ctlz of a vector of integers.
23320 Arguments:
23321 """"""""""
23323 The first operand and the result have the same vector of integer type. The
23324 second operand is the vector mask and has the same number of elements as the
23325 result vector type. The third operand is the explicit vector length of the
23326 operation.
23328 Semantics:
23329 """"""""""
23331 The '``llvm.vp.ctlz``' intrinsic performs ctlz (:ref:`ctlz <int_ctlz>`) of the first operand on each
23332 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23334 Examples:
23335 """""""""
23337 .. code-block:: llvm
23339       %r = call <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl, i1 false)
23340       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23342       %t = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
23343       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23346 .. _int_vp_cttz:
23348 '``llvm.vp.cttz.*``' Intrinsics
23349 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23351 Syntax:
23352 """""""
23353 This is an overloaded intrinsic.
23357       declare <16 x i32>  @llvm.vp.cttz.v16i32 (<16 x i32> <op>, <16 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23358       declare <vscale x 4 x i32>  @llvm.vp.cttz.nxv4i32 (<vscale x 4 x i32> <op>, <vscale x 4 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23359       declare <256 x i64>  @llvm.vp.cttz.v256i64 (<256 x i64> <op>, <256 x i1> <mask>, i32 <vector_length>, i1 <is_zero_poison>)
23361 Overview:
23362 """""""""
23364 Predicated cttz of a vector of integers.
23367 Arguments:
23368 """"""""""
23370 The first operand and the result have the same vector of integer type. The
23371 second operand is the vector mask and has the same number of elements as the
23372 result vector type. The third operand is the explicit vector length of the
23373 operation.
23375 Semantics:
23376 """"""""""
23378 The '``llvm.vp.cttz``' intrinsic performs cttz (:ref:`cttz <int_cttz>`) of the first operand on each
23379 enabled lane.  The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23381 Examples:
23382 """""""""
23384 .. code-block:: llvm
23386       %r = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %a, <4 x i1> %mask, i32 %evl, i1 false)
23387       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23389       %t = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
23390       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23393 .. _int_vp_fshl:
23395 '``llvm.vp.fshl.*``' Intrinsics
23396 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23398 Syntax:
23399 """""""
23400 This is an overloaded intrinsic.
23404       declare <16 x i32>  @llvm.vp.fshl.v16i32 (<16 x i32> <left_op>, <16 x i32> <middle_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
23405       declare <vscale x 4 x i32>  @llvm.vp.fshl.nxv4i32  (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <middle_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23406       declare <256 x i64>  @llvm.vp.fshl.v256i64 (<256 x i64> <left_op>, <256 x i64> <middle_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
23408 Overview:
23409 """""""""
23411 Predicated fshl of three vectors of integers.
23414 Arguments:
23415 """"""""""
23417 The first three operand and the result have the same vector of integer type. The
23418 fourth operand is the vector mask and has the same number of elements as the
23419 result vector type. The fifth operand is the explicit vector length of the
23420 operation.
23422 Semantics:
23423 """"""""""
23425 The '``llvm.vp.fshl``' intrinsic performs fshl (:ref:`fshl <int_fshl>`) of the first, second, and third
23426 vector operand on each enabled lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23429 Examples:
23430 """""""""
23432 .. code-block:: llvm
23434       %r = call <4 x i32> @llvm.vp.fshl.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %mask, i32 %evl)
23435       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23437       %t = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)
23438       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23441 '``llvm.vp.fshr.*``' Intrinsics
23442 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23444 Syntax:
23445 """""""
23446 This is an overloaded intrinsic.
23450       declare <16 x i32>  @llvm.vp.fshr.v16i32 (<16 x i32> <left_op>, <16 x i32> <middle_op>, <16 x i32> <right_op>, <16 x i1> <mask>, i32 <vector_length>)
23451       declare <vscale x 4 x i32>  @llvm.vp.fshr.nxv4i32  (<vscale x 4 x i32> <left_op>, <vscale x 4 x i32> <middle_op>, <vscale x 4 x i32> <right_op>, <vscale x 4 x i1> <mask>, i32 <vector_length>)
23452       declare <256 x i64>  @llvm.vp.fshr.v256i64 (<256 x i64> <left_op>, <256 x i64> <middle_op>, <256 x i64> <right_op>, <256 x i1> <mask>, i32 <vector_length>)
23454 Overview:
23455 """""""""
23457 Predicated fshr of three vectors of integers.
23460 Arguments:
23461 """"""""""
23463 The first three operand and the result have the same vector of integer type. The
23464 fourth operand is the vector mask and has the same number of elements as the
23465 result vector type. The fifth operand is the explicit vector length of the
23466 operation.
23468 Semantics:
23469 """"""""""
23471 The '``llvm.vp.fshr``' intrinsic performs fshr (:ref:`fshr <int_fshr>`) of the first, second, and third
23472 vector operand on each enabled lane. The result on disabled lanes is a :ref:`poison value <poisonvalues>`.
23475 Examples:
23476 """""""""
23478 .. code-block:: llvm
23480       %r = call <4 x i32> @llvm.vp.fshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %mask, i32 %evl)
23481       ;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
23483       %t = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c)
23484       %also.r = select <4 x i1> %mask, <4 x i32> %t, <4 x i32> poison
23486 '``llvm.vp.is.fpclass.*``' Intrinsics
23487 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23489 Syntax:
23490 """""""
23491 This is an overloaded intrinsic.
23495       declare <vscale x 2 x i1> @llvm.vp.is.fpclass.nxv2f32(<vscale x 2 x float> <op>, i32 <test>, <vscale x 2 x i1> <mask>, i32 <vector_length>)
23496       declare <2 x i1> @llvm.vp.is.fpclass.v2f16(<2 x half> <op>, i32 <test>, <2 x i1> <mask>, i32 <vector_length>)
23498 Overview:
23499 """""""""
23501 Predicated llvm.is.fpclass :ref:`llvm.is.fpclass <llvm.is.fpclass>`
23503 Arguments:
23504 """"""""""
23506 The first operand is a floating-point vector, the result type is a vector of
23507 boolean with the same number of elements as the first argument.  The second
23508 operand specifies, which tests to perform :ref:`llvm.is.fpclass <llvm.is.fpclass>`.
23509 The third operand is the vector mask and has the same number of elements as the
23510 result vector type. The fourth operand is the explicit vector length of the
23511 operation.
23513 Semantics:
23514 """"""""""
23516 The '``llvm.vp.is.fpclass``' intrinsic performs llvm.is.fpclass (:ref:`llvm.is.fpclass <llvm.is.fpclass>`).
23519 Examples:
23520 """""""""
23522 .. code-block:: llvm
23524       %r = call <2 x i1> @llvm.vp.is.fpclass.v2f16(<2 x half> %x, i32 3, <2 x i1> %m, i32 %evl)
23525       %t = call <vscale x 2 x i1> @llvm.vp.is.fpclass.nxv2f16(<vscale x 2 x half> %x, i32 3, <vscale x 2 x i1> %m, i32 %evl)
23527 .. _int_mload_mstore:
23529 Masked Vector Load and Store Intrinsics
23530 ---------------------------------------
23532 LLVM provides intrinsics for predicated vector load and store operations. The predicate is specified by a mask operand, which holds one bit per vector element, switching the associated vector lane on or off. The memory addresses corresponding to the "off" lanes are not accessed. When all bits of the mask are on, the intrinsic is identical to a regular vector load or store. When all bits are off, no memory is accessed.
23534 .. _int_mload:
23536 '``llvm.masked.load.*``' Intrinsics
23537 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23539 Syntax:
23540 """""""
23541 This is an overloaded intrinsic. The loaded data is a vector of any integer, floating-point or pointer data type.
23545       declare <16 x float>  @llvm.masked.load.v16f32.p0(ptr <ptr>, i32 <alignment>, <16 x i1> <mask>, <16 x float> <passthru>)
23546       declare <2 x double>  @llvm.masked.load.v2f64.p0(ptr <ptr>, i32 <alignment>, <2 x i1>  <mask>, <2 x double> <passthru>)
23547       ;; The data is a vector of pointers
23548       declare <8 x ptr> @llvm.masked.load.v8p0.p0(ptr <ptr>, i32 <alignment>, <8 x i1> <mask>, <8 x ptr> <passthru>)
23550 Overview:
23551 """""""""
23553 Reads a vector from memory according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes. The masked-off lanes in the result vector are taken from the corresponding lanes of the '``passthru``' operand.
23556 Arguments:
23557 """"""""""
23559 The first operand is the base pointer for the load. The second operand is the alignment of the source location. It must be a power of two constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the base pointer and the type of the '``passthru``' operand are the same vector types.
23561 Semantics:
23562 """"""""""
23564 The '``llvm.masked.load``' intrinsic is designed for conditional reading of selected vector elements in a single IR operation. It is useful for targets that support vector masked loads and allows vectorizing predicated basic blocks on these targets. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar load operations.
23565 The result of this operation is equivalent to a regular vector load instruction followed by a 'select' between the loaded and the passthru values, predicated on the same mask. However, using this intrinsic prevents exceptions on memory access to masked-off lanes.
23570        %res = call <16 x float> @llvm.masked.load.v16f32.p0(ptr %ptr, i32 4, <16 x i1>%mask, <16 x float> %passthru)
23572        ;; The result of the two following instructions is identical aside from potential memory access exception
23573        %loadlal = load <16 x float>, ptr %ptr, align 4
23574        %res = select <16 x i1> %mask, <16 x float> %loadlal, <16 x float> %passthru
23576 .. _int_mstore:
23578 '``llvm.masked.store.*``' Intrinsics
23579 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23581 Syntax:
23582 """""""
23583 This is an overloaded intrinsic. The data stored in memory is a vector of any integer, floating-point or pointer data type.
23587        declare void @llvm.masked.store.v8i32.p0 (<8  x i32>   <value>, ptr <ptr>, i32 <alignment>, <8  x i1> <mask>)
23588        declare void @llvm.masked.store.v16f32.p0(<16 x float> <value>, ptr <ptr>, i32 <alignment>, <16 x i1> <mask>)
23589        ;; The data is a vector of pointers
23590        declare void @llvm.masked.store.v8p0.p0  (<8 x ptr>    <value>, ptr <ptr>, i32 <alignment>, <8 x i1> <mask>)
23592 Overview:
23593 """""""""
23595 Writes a vector to memory according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes.
23597 Arguments:
23598 """"""""""
23600 The first operand is the vector value to be written to memory. The second operand is the base pointer for the store, it has the same underlying type as the value operand. The third operand is the alignment of the destination location. It must be a power of two constant integer value. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements.
23603 Semantics:
23604 """"""""""
23606 The '``llvm.masked.store``' intrinsics is designed for conditional writing of selected vector elements in a single IR operation. It is useful for targets that support vector masked store and allows vectorizing predicated basic blocks on these targets. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar store operations.
23607 The result of this operation is equivalent to a load-modify-store sequence. However, using this intrinsic prevents exceptions and data races on memory access to masked-off lanes.
23611        call void @llvm.masked.store.v16f32.p0(<16 x float> %value, ptr %ptr, i32 4,  <16 x i1> %mask)
23613        ;; The result of the following instructions is identical aside from potential data races and memory access exceptions
23614        %oldval = load <16 x float>, ptr %ptr, align 4
23615        %res = select <16 x i1> %mask, <16 x float> %value, <16 x float> %oldval
23616        store <16 x float> %res, ptr %ptr, align 4
23619 Masked Vector Gather and Scatter Intrinsics
23620 -------------------------------------------
23622 LLVM provides intrinsics for vector gather and scatter operations. They are similar to :ref:`Masked Vector Load and Store <int_mload_mstore>`, except they are designed for arbitrary memory accesses, rather than sequential memory accesses. Gather and scatter also employ a mask operand, which holds one bit per vector element, switching the associated vector lane on or off. The memory addresses corresponding to the "off" lanes are not accessed. When all bits are off, no memory is accessed.
23624 .. _int_mgather:
23626 '``llvm.masked.gather.*``' Intrinsics
23627 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23629 Syntax:
23630 """""""
23631 This is an overloaded intrinsic. The loaded data are multiple scalar values of any integer, floating-point or pointer data type gathered together into one vector.
23635       declare <16 x float> @llvm.masked.gather.v16f32.v16p0(<16 x ptr> <ptrs>, i32 <alignment>, <16 x i1> <mask>, <16 x float> <passthru>)
23636       declare <2 x double> @llvm.masked.gather.v2f64.v2p1(<2 x ptr addrspace(1)> <ptrs>, i32 <alignment>, <2 x i1>  <mask>, <2 x double> <passthru>)
23637       declare <8 x ptr> @llvm.masked.gather.v8p0.v8p0(<8 x ptr> <ptrs>, i32 <alignment>, <8 x i1>  <mask>, <8 x ptr> <passthru>)
23639 Overview:
23640 """""""""
23642 Reads scalar values from arbitrary memory locations and gathers them into one vector. The memory locations are provided in the vector of pointers '``ptrs``'. The memory is accessed according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes. The masked-off lanes in the result vector are taken from the corresponding lanes of the '``passthru``' operand.
23645 Arguments:
23646 """"""""""
23648 The first operand is a vector of pointers which holds all memory addresses to read. The second operand is an alignment of the source addresses. It must be 0 or a power of two constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the vector of pointers and the type of the '``passthru``' operand are the same vector types.
23650 Semantics:
23651 """"""""""
23653 The '``llvm.masked.gather``' intrinsic is designed for conditional reading of multiple scalar values from arbitrary memory locations in a single IR operation. It is useful for targets that support vector masked gathers and allows vectorizing basic blocks with data and control divergence. Other targets may support this intrinsic differently, for example by lowering it into a sequence of scalar load operations.
23654 The semantics of this operation are equivalent to a sequence of conditional scalar loads with subsequent gathering all loaded values into a single vector. The mask restricts memory access to certain lanes and facilitates vectorization of predicated basic blocks.
23659        %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x double> poison)
23661        ;; The gather with all-true mask is equivalent to the following instruction sequence
23662        %ptr0 = extractelement <4 x ptr> %ptrs, i32 0
23663        %ptr1 = extractelement <4 x ptr> %ptrs, i32 1
23664        %ptr2 = extractelement <4 x ptr> %ptrs, i32 2
23665        %ptr3 = extractelement <4 x ptr> %ptrs, i32 3
23667        %val0 = load double, ptr %ptr0, align 8
23668        %val1 = load double, ptr %ptr1, align 8
23669        %val2 = load double, ptr %ptr2, align 8
23670        %val3 = load double, ptr %ptr3, align 8
23672        %vec0    = insertelement <4 x double> poison, %val0, 0
23673        %vec01   = insertelement <4 x double> %vec0, %val1, 1
23674        %vec012  = insertelement <4 x double> %vec01, %val2, 2
23675        %vec0123 = insertelement <4 x double> %vec012, %val3, 3
23677 .. _int_mscatter:
23679 '``llvm.masked.scatter.*``' Intrinsics
23680 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23682 Syntax:
23683 """""""
23684 This is an overloaded intrinsic. The data stored in memory is a vector of any integer, floating-point or pointer data type. Each vector element is stored in an arbitrary memory address. Scatter with overlapping addresses is guaranteed to be ordered from least-significant to most-significant element.
23688        declare void @llvm.masked.scatter.v8i32.v8p0  (<8 x i32>    <value>, <8 x ptr>               <ptrs>, i32 <alignment>, <8 x i1>  <mask>)
23689        declare void @llvm.masked.scatter.v16f32.v16p1(<16 x float> <value>, <16 x ptr addrspace(1)> <ptrs>, i32 <alignment>, <16 x i1> <mask>)
23690        declare void @llvm.masked.scatter.v4p0.v4p0   (<4 x ptr>    <value>, <4 x ptr>               <ptrs>, i32 <alignment>, <4 x i1>  <mask>)
23692 Overview:
23693 """""""""
23695 Writes each element from the value vector to the corresponding memory address. The memory addresses are represented as a vector of pointers. Writing is done according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes.
23697 Arguments:
23698 """"""""""
23700 The first operand is a vector value to be written to memory. The second operand is a vector of pointers, pointing to where the value elements should be stored. It has the same underlying type as the value operand. The third operand is an alignment of the destination addresses. It must be 0 or a power of two constant integer value. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements.
23702 Semantics:
23703 """"""""""
23705 The '``llvm.masked.scatter``' intrinsics is designed for writing selected vector elements to arbitrary memory addresses in a single IR operation. The operation may be conditional, when not all bits in the mask are switched on. It is useful for targets that support vector masked scatter and allows vectorizing basic blocks with data and control divergence. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar store operations.
23709        ;; This instruction unconditionally stores data vector in multiple addresses
23710        call @llvm.masked.scatter.v8i32.v8p0(<8 x i32> %value, <8 x ptr> %ptrs, i32 4,  <8 x i1>  <true, true, .. true>)
23712        ;; It is equivalent to a list of scalar stores
23713        %val0 = extractelement <8 x i32> %value, i32 0
23714        %val1 = extractelement <8 x i32> %value, i32 1
23715        ..
23716        %val7 = extractelement <8 x i32> %value, i32 7
23717        %ptr0 = extractelement <8 x ptr> %ptrs, i32 0
23718        %ptr1 = extractelement <8 x ptr> %ptrs, i32 1
23719        ..
23720        %ptr7 = extractelement <8 x ptr> %ptrs, i32 7
23721        ;; Note: the order of the following stores is important when they overlap:
23722        store i32 %val0, ptr %ptr0, align 4
23723        store i32 %val1, ptr %ptr1, align 4
23724        ..
23725        store i32 %val7, ptr %ptr7, align 4
23728 Masked Vector Expanding Load and Compressing Store Intrinsics
23729 -------------------------------------------------------------
23731 LLVM provides intrinsics for expanding load and compressing store operations. Data selected from a vector according to a mask is stored in consecutive memory addresses (compressed store), and vice-versa (expanding load). These operations effective map to "if (cond.i) a[j++] = v.i" and "if (cond.i) v.i = a[j++]" patterns, respectively. Note that when the mask starts with '1' bits followed by '0' bits, these operations are identical to :ref:`llvm.masked.store <int_mstore>` and :ref:`llvm.masked.load <int_mload>`.
23733 .. _int_expandload:
23735 '``llvm.masked.expandload.*``' Intrinsics
23736 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23738 Syntax:
23739 """""""
23740 This is an overloaded intrinsic. Several values of integer, floating point or pointer data type are loaded from consecutive memory addresses and stored into the elements of a vector according to the mask.
23744       declare <16 x float>  @llvm.masked.expandload.v16f32 (ptr <ptr>, <16 x i1> <mask>, <16 x float> <passthru>)
23745       declare <2 x i64>     @llvm.masked.expandload.v2i64 (ptr <ptr>, <2 x i1>  <mask>, <2 x i64> <passthru>)
23747 Overview:
23748 """""""""
23750 Reads a number of scalar values sequentially from memory location provided in '``ptr``' and spreads them in a vector. The '``mask``' holds a bit for each vector lane. The number of elements read from memory is equal to the number of '1' bits in the mask. The loaded elements are positioned in the destination vector according to the sequence of '1' and '0' bits in the mask. E.g., if the mask vector is '10010001', "expandload" reads 3 values from memory addresses ptr, ptr+1, ptr+2 and places them in lanes 0, 3 and 7 accordingly. The masked-off lanes are filled by elements from the corresponding lanes of the '``passthru``' operand.
23753 Arguments:
23754 """"""""""
23756 The first operand is the base pointer for the load. It has the same underlying type as the element of the returned vector. The second operand, mask, is a vector of boolean values with the same number of elements as the return type. The third is a pass-through value that is used to fill the masked-off lanes of the result. The return type and the type of the '``passthru``' operand have the same vector type.
23758 Semantics:
23759 """"""""""
23761 The '``llvm.masked.expandload``' intrinsic is designed for reading multiple scalar values from adjacent memory addresses into possibly non-adjacent vector lanes. It is useful for targets that support vector expanding loads and allows vectorizing loop with cross-iteration dependency like in the following example:
23763 .. code-block:: c
23765     // In this loop we load from B and spread the elements into array A.
23766     double *A, B; int *C;
23767     for (int i = 0; i < size; ++i) {
23768       if (C[i] != 0)
23769         A[i] = B[j++];
23770     }
23773 .. code-block:: llvm
23775     ; Load several elements from array B and expand them in a vector.
23776     ; The number of loaded elements is equal to the number of '1' elements in the Mask.
23777     %Tmp = call <8 x double> @llvm.masked.expandload.v8f64(ptr %Bptr, <8 x i1> %Mask, <8 x double> poison)
23778     ; Store the result in A
23779     call void @llvm.masked.store.v8f64.p0(<8 x double> %Tmp, ptr %Aptr, i32 8, <8 x i1> %Mask)
23781     ; %Bptr should be increased on each iteration according to the number of '1' elements in the Mask.
23782     %MaskI = bitcast <8 x i1> %Mask to i8
23783     %MaskIPopcnt = call i8 @llvm.ctpop.i8(i8 %MaskI)
23784     %MaskI64 = zext i8 %MaskIPopcnt to i64
23785     %BNextInd = add i64 %BInd, %MaskI64
23788 Other targets may support this intrinsic differently, for example, by lowering it into a sequence of conditional scalar load operations and shuffles.
23789 If all mask elements are '1', the intrinsic behavior is equivalent to the regular unmasked vector load.
23791 .. _int_compressstore:
23793 '``llvm.masked.compressstore.*``' Intrinsics
23794 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23796 Syntax:
23797 """""""
23798 This is an overloaded intrinsic. A number of scalar values of integer, floating point or pointer data type are collected from an input vector and stored into adjacent memory addresses. A mask defines which elements to collect from the vector.
23802       declare void @llvm.masked.compressstore.v8i32  (<8  x i32>   <value>, ptr <ptr>, <8  x i1> <mask>)
23803       declare void @llvm.masked.compressstore.v16f32 (<16 x float> <value>, ptr <ptr>, <16 x i1> <mask>)
23805 Overview:
23806 """""""""
23808 Selects elements from input vector '``value``' according to the '``mask``'. All selected elements are written into adjacent memory addresses starting at address '`ptr`', from lower to higher. The mask holds a bit for each vector lane, and is used to select elements to be stored. The number of elements to be stored is equal to the number of active bits in the mask.
23810 Arguments:
23811 """"""""""
23813 The first operand is the input vector, from which elements are collected and written to memory. The second operand is the base pointer for the store, it has the same underlying type as the element of the input vector operand. The third operand is the mask, a vector of boolean values. The mask and the input vector must have the same number of vector elements.
23816 Semantics:
23817 """"""""""
23819 The '``llvm.masked.compressstore``' intrinsic is designed for compressing data in memory. It allows to collect elements from possibly non-adjacent lanes of a vector and store them contiguously in memory in one IR operation. It is useful for targets that support compressing store operations and allows vectorizing loops with cross-iteration dependences like in the following example:
23821 .. code-block:: c
23823     // In this loop we load elements from A and store them consecutively in B
23824     double *A, B; int *C;
23825     for (int i = 0; i < size; ++i) {
23826       if (C[i] != 0)
23827         B[j++] = A[i]
23828     }
23831 .. code-block:: llvm
23833     ; Load elements from A.
23834     %Tmp = call <8 x double> @llvm.masked.load.v8f64.p0(ptr %Aptr, i32 8, <8 x i1> %Mask, <8 x double> poison)
23835     ; Store all selected elements consecutively in array B
23836     call <void> @llvm.masked.compressstore.v8f64(<8 x double> %Tmp, ptr %Bptr, <8 x i1> %Mask)
23838     ; %Bptr should be increased on each iteration according to the number of '1' elements in the Mask.
23839     %MaskI = bitcast <8 x i1> %Mask to i8
23840     %MaskIPopcnt = call i8 @llvm.ctpop.i8(i8 %MaskI)
23841     %MaskI64 = zext i8 %MaskIPopcnt to i64
23842     %BNextInd = add i64 %BInd, %MaskI64
23845 Other targets may support this intrinsic differently, for example, by lowering it into a sequence of branches that guard scalar store operations.
23848 Memory Use Markers
23849 ------------------
23851 This class of intrinsics provides information about the
23852 :ref:`lifetime of memory objects <objectlifetime>` and ranges where variables
23853 are immutable.
23855 .. _int_lifestart:
23857 '``llvm.lifetime.start``' Intrinsic
23858 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23860 Syntax:
23861 """""""
23865       declare void @llvm.lifetime.start(i64 <size>, ptr nocapture <ptr>)
23867 Overview:
23868 """""""""
23870 The '``llvm.lifetime.start``' intrinsic specifies the start of a memory
23871 object's lifetime.
23873 Arguments:
23874 """"""""""
23876 The first argument is a constant integer representing the size of the
23877 object, or -1 if it is variable sized. The second argument is a pointer
23878 to the object.
23880 Semantics:
23881 """"""""""
23883 If ``ptr`` is a stack-allocated object and it points to the first byte of
23884 the object, the object is initially marked as dead.
23885 ``ptr`` is conservatively considered as a non-stack-allocated object if
23886 the stack coloring algorithm that is used in the optimization pipeline cannot
23887 conclude that ``ptr`` is a stack-allocated object.
23889 After '``llvm.lifetime.start``', the stack object that ``ptr`` points is marked
23890 as alive and has an uninitialized value.
23891 The stack object is marked as dead when either
23892 :ref:`llvm.lifetime.end <int_lifeend>` to the alloca is executed or the
23893 function returns.
23895 After :ref:`llvm.lifetime.end <int_lifeend>` is called,
23896 '``llvm.lifetime.start``' on the stack object can be called again.
23897 The second '``llvm.lifetime.start``' call marks the object as alive, but it
23898 does not change the address of the object.
23900 If ``ptr`` is a non-stack-allocated object, it does not point to the first
23901 byte of the object or it is a stack object that is already alive, it simply
23902 fills all bytes of the object with ``poison``.
23905 .. _int_lifeend:
23907 '``llvm.lifetime.end``' Intrinsic
23908 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23910 Syntax:
23911 """""""
23915       declare void @llvm.lifetime.end(i64 <size>, ptr nocapture <ptr>)
23917 Overview:
23918 """""""""
23920 The '``llvm.lifetime.end``' intrinsic specifies the end of a memory object's
23921 lifetime.
23923 Arguments:
23924 """"""""""
23926 The first argument is a constant integer representing the size of the
23927 object, or -1 if it is variable sized. The second argument is a pointer
23928 to the object.
23930 Semantics:
23931 """"""""""
23933 If ``ptr`` is a stack-allocated object and it points to the first byte of the
23934 object, the object is dead.
23935 ``ptr`` is conservatively considered as a non-stack-allocated object if
23936 the stack coloring algorithm that is used in the optimization pipeline cannot
23937 conclude that ``ptr`` is a stack-allocated object.
23939 Calling ``llvm.lifetime.end`` on an already dead alloca is no-op.
23941 If ``ptr`` is a non-stack-allocated object or it does not point to the first
23942 byte of the object, it is equivalent to simply filling all bytes of the object
23943 with ``poison``.
23946 '``llvm.invariant.start``' Intrinsic
23947 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23949 Syntax:
23950 """""""
23951 This is an overloaded intrinsic. The memory object can belong to any address space.
23955       declare ptr @llvm.invariant.start.p0(i64 <size>, ptr nocapture <ptr>)
23957 Overview:
23958 """""""""
23960 The '``llvm.invariant.start``' intrinsic specifies that the contents of
23961 a memory object will not change.
23963 Arguments:
23964 """"""""""
23966 The first argument is a constant integer representing the size of the
23967 object, or -1 if it is variable sized. The second argument is a pointer
23968 to the object.
23970 Semantics:
23971 """"""""""
23973 This intrinsic indicates that until an ``llvm.invariant.end`` that uses
23974 the return value, the referenced memory location is constant and
23975 unchanging.
23977 '``llvm.invariant.end``' Intrinsic
23978 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23980 Syntax:
23981 """""""
23982 This is an overloaded intrinsic. The memory object can belong to any address space.
23986       declare void @llvm.invariant.end.p0(ptr <start>, i64 <size>, ptr nocapture <ptr>)
23988 Overview:
23989 """""""""
23991 The '``llvm.invariant.end``' intrinsic specifies that the contents of a
23992 memory object are mutable.
23994 Arguments:
23995 """"""""""
23997 The first argument is the matching ``llvm.invariant.start`` intrinsic.
23998 The second argument is a constant integer representing the size of the
23999 object, or -1 if it is variable sized and the third argument is a
24000 pointer to the object.
24002 Semantics:
24003 """"""""""
24005 This intrinsic indicates that the memory is mutable again.
24007 '``llvm.launder.invariant.group``' Intrinsic
24008 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24010 Syntax:
24011 """""""
24012 This is an overloaded intrinsic. The memory object can belong to any address
24013 space. The returned pointer must belong to the same address space as the
24014 argument.
24018       declare ptr @llvm.launder.invariant.group.p0(ptr <ptr>)
24020 Overview:
24021 """""""""
24023 The '``llvm.launder.invariant.group``' intrinsic can be used when an invariant
24024 established by ``invariant.group`` metadata no longer holds, to obtain a new
24025 pointer value that carries fresh invariant group information. It is an
24026 experimental intrinsic, which means that its semantics might change in the
24027 future.
24030 Arguments:
24031 """"""""""
24033 The ``llvm.launder.invariant.group`` takes only one argument, which is a pointer
24034 to the memory.
24036 Semantics:
24037 """"""""""
24039 Returns another pointer that aliases its argument but which is considered different
24040 for the purposes of ``load``/``store`` ``invariant.group`` metadata.
24041 It does not read any accessible memory and the execution can be speculated.
24043 '``llvm.strip.invariant.group``' Intrinsic
24044 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24046 Syntax:
24047 """""""
24048 This is an overloaded intrinsic. The memory object can belong to any address
24049 space. The returned pointer must belong to the same address space as the
24050 argument.
24054       declare ptr @llvm.strip.invariant.group.p0(ptr <ptr>)
24056 Overview:
24057 """""""""
24059 The '``llvm.strip.invariant.group``' intrinsic can be used when an invariant
24060 established by ``invariant.group`` metadata no longer holds, to obtain a new pointer
24061 value that does not carry the invariant information. It is an experimental
24062 intrinsic, which means that its semantics might change in the future.
24065 Arguments:
24066 """"""""""
24068 The ``llvm.strip.invariant.group`` takes only one argument, which is a pointer
24069 to the memory.
24071 Semantics:
24072 """"""""""
24074 Returns another pointer that aliases its argument but which has no associated
24075 ``invariant.group`` metadata.
24076 It does not read any memory and can be speculated.
24080 .. _constrainedfp:
24082 Constrained Floating-Point Intrinsics
24083 -------------------------------------
24085 These intrinsics are used to provide special handling of floating-point
24086 operations when specific rounding mode or floating-point exception behavior is
24087 required.  By default, LLVM optimization passes assume that the rounding mode is
24088 round-to-nearest and that floating-point exceptions will not be monitored.
24089 Constrained FP intrinsics are used to support non-default rounding modes and
24090 accurately preserve exception behavior without compromising LLVM's ability to
24091 optimize FP code when the default behavior is used.
24093 If any FP operation in a function is constrained then they all must be
24094 constrained. This is required for correct LLVM IR. Optimizations that
24095 move code around can create miscompiles if mixing of constrained and normal
24096 operations is done. The correct way to mix constrained and less constrained
24097 operations is to use the rounding mode and exception handling metadata to
24098 mark constrained intrinsics as having LLVM's default behavior.
24100 Each of these intrinsics corresponds to a normal floating-point operation. The
24101 data arguments and the return value are the same as the corresponding FP
24102 operation.
24104 The rounding mode argument is a metadata string specifying what
24105 assumptions, if any, the optimizer can make when transforming constant
24106 values. Some constrained FP intrinsics omit this argument. If required
24107 by the intrinsic, this argument must be one of the following strings:
24111       "round.dynamic"
24112       "round.tonearest"
24113       "round.downward"
24114       "round.upward"
24115       "round.towardzero"
24116       "round.tonearestaway"
24118 If this argument is "round.dynamic" optimization passes must assume that the
24119 rounding mode is unknown and may change at runtime.  No transformations that
24120 depend on rounding mode may be performed in this case.
24122 The other possible values for the rounding mode argument correspond to the
24123 similarly named IEEE rounding modes.  If the argument is any of these values
24124 optimization passes may perform transformations as long as they are consistent
24125 with the specified rounding mode.
24127 For example, 'x-0'->'x' is not a valid transformation if the rounding mode is
24128 "round.downward" or "round.dynamic" because if the value of 'x' is +0 then
24129 'x-0' should evaluate to '-0' when rounding downward.  However, this
24130 transformation is legal for all other rounding modes.
24132 For values other than "round.dynamic" optimization passes may assume that the
24133 actual runtime rounding mode (as defined in a target-specific manner) matches
24134 the specified rounding mode, but this is not guaranteed.  Using a specific
24135 non-dynamic rounding mode which does not match the actual rounding mode at
24136 runtime results in undefined behavior.
24138 The exception behavior argument is a metadata string describing the floating
24139 point exception semantics that required for the intrinsic. This argument
24140 must be one of the following strings:
24144       "fpexcept.ignore"
24145       "fpexcept.maytrap"
24146       "fpexcept.strict"
24148 If this argument is "fpexcept.ignore" optimization passes may assume that the
24149 exception status flags will not be read and that floating-point exceptions will
24150 be masked.  This allows transformations to be performed that may change the
24151 exception semantics of the original code.  For example, FP operations may be
24152 speculatively executed in this case whereas they must not be for either of the
24153 other possible values of this argument.
24155 If the exception behavior argument is "fpexcept.maytrap" optimization passes
24156 must avoid transformations that may raise exceptions that would not have been
24157 raised by the original code (such as speculatively executing FP operations), but
24158 passes are not required to preserve all exceptions that are implied by the
24159 original code.  For example, exceptions may be potentially hidden by constant
24160 folding.
24162 If the exception behavior argument is "fpexcept.strict" all transformations must
24163 strictly preserve the floating-point exception semantics of the original code.
24164 Any FP exception that would have been raised by the original code must be raised
24165 by the transformed code, and the transformed code must not raise any FP
24166 exceptions that would not have been raised by the original code.  This is the
24167 exception behavior argument that will be used if the code being compiled reads
24168 the FP exception status flags, but this mode can also be used with code that
24169 unmasks FP exceptions.
24171 The number and order of floating-point exceptions is NOT guaranteed.  For
24172 example, a series of FP operations that each may raise exceptions may be
24173 vectorized into a single instruction that raises each unique exception a single
24174 time.
24176 Proper :ref:`function attributes <fnattrs>` usage is required for the
24177 constrained intrinsics to function correctly.
24179 All function *calls* done in a function that uses constrained floating
24180 point intrinsics must have the ``strictfp`` attribute either on the
24181 calling instruction or on the declaration or definition of the function
24182 being called.
24184 All function *definitions* that use constrained floating point intrinsics
24185 must have the ``strictfp`` attribute.
24187 '``llvm.experimental.constrained.fadd``' Intrinsic
24188 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24190 Syntax:
24191 """""""
24195       declare <type>
24196       @llvm.experimental.constrained.fadd(<type> <op1>, <type> <op2>,
24197                                           metadata <rounding mode>,
24198                                           metadata <exception behavior>)
24200 Overview:
24201 """""""""
24203 The '``llvm.experimental.constrained.fadd``' intrinsic returns the sum of its
24204 two operands.
24207 Arguments:
24208 """"""""""
24210 The first two arguments to the '``llvm.experimental.constrained.fadd``'
24211 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24212 of floating-point values. Both arguments must have identical types.
24214 The third and fourth arguments specify the rounding mode and exception
24215 behavior as described above.
24217 Semantics:
24218 """"""""""
24220 The value produced is the floating-point sum of the two value operands and has
24221 the same type as the operands.
24224 '``llvm.experimental.constrained.fsub``' Intrinsic
24225 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24227 Syntax:
24228 """""""
24232       declare <type>
24233       @llvm.experimental.constrained.fsub(<type> <op1>, <type> <op2>,
24234                                           metadata <rounding mode>,
24235                                           metadata <exception behavior>)
24237 Overview:
24238 """""""""
24240 The '``llvm.experimental.constrained.fsub``' intrinsic returns the difference
24241 of its two operands.
24244 Arguments:
24245 """"""""""
24247 The first two arguments to the '``llvm.experimental.constrained.fsub``'
24248 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24249 of floating-point values. Both arguments must have identical types.
24251 The third and fourth arguments specify the rounding mode and exception
24252 behavior as described above.
24254 Semantics:
24255 """"""""""
24257 The value produced is the floating-point difference of the two value operands
24258 and has the same type as the operands.
24261 '``llvm.experimental.constrained.fmul``' Intrinsic
24262 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24264 Syntax:
24265 """""""
24269       declare <type>
24270       @llvm.experimental.constrained.fmul(<type> <op1>, <type> <op2>,
24271                                           metadata <rounding mode>,
24272                                           metadata <exception behavior>)
24274 Overview:
24275 """""""""
24277 The '``llvm.experimental.constrained.fmul``' intrinsic returns the product of
24278 its two operands.
24281 Arguments:
24282 """"""""""
24284 The first two arguments to the '``llvm.experimental.constrained.fmul``'
24285 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24286 of floating-point values. Both arguments must have identical types.
24288 The third and fourth arguments specify the rounding mode and exception
24289 behavior as described above.
24291 Semantics:
24292 """"""""""
24294 The value produced is the floating-point product of the two value operands and
24295 has the same type as the operands.
24298 '``llvm.experimental.constrained.fdiv``' Intrinsic
24299 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24301 Syntax:
24302 """""""
24306       declare <type>
24307       @llvm.experimental.constrained.fdiv(<type> <op1>, <type> <op2>,
24308                                           metadata <rounding mode>,
24309                                           metadata <exception behavior>)
24311 Overview:
24312 """""""""
24314 The '``llvm.experimental.constrained.fdiv``' intrinsic returns the quotient of
24315 its two operands.
24318 Arguments:
24319 """"""""""
24321 The first two arguments to the '``llvm.experimental.constrained.fdiv``'
24322 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24323 of floating-point values. Both arguments must have identical types.
24325 The third and fourth arguments specify the rounding mode and exception
24326 behavior as described above.
24328 Semantics:
24329 """"""""""
24331 The value produced is the floating-point quotient of the two value operands and
24332 has the same type as the operands.
24335 '``llvm.experimental.constrained.frem``' Intrinsic
24336 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24338 Syntax:
24339 """""""
24343       declare <type>
24344       @llvm.experimental.constrained.frem(<type> <op1>, <type> <op2>,
24345                                           metadata <rounding mode>,
24346                                           metadata <exception behavior>)
24348 Overview:
24349 """""""""
24351 The '``llvm.experimental.constrained.frem``' intrinsic returns the remainder
24352 from the division of its two operands.
24355 Arguments:
24356 """"""""""
24358 The first two arguments to the '``llvm.experimental.constrained.frem``'
24359 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24360 of floating-point values. Both arguments must have identical types.
24362 The third and fourth arguments specify the rounding mode and exception
24363 behavior as described above.  The rounding mode argument has no effect, since
24364 the result of frem is never rounded, but the argument is included for
24365 consistency with the other constrained floating-point intrinsics.
24367 Semantics:
24368 """"""""""
24370 The value produced is the floating-point remainder from the division of the two
24371 value operands and has the same type as the operands.  The remainder has the
24372 same sign as the dividend.
24374 '``llvm.experimental.constrained.fma``' Intrinsic
24375 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24377 Syntax:
24378 """""""
24382       declare <type>
24383       @llvm.experimental.constrained.fma(<type> <op1>, <type> <op2>, <type> <op3>,
24384                                           metadata <rounding mode>,
24385                                           metadata <exception behavior>)
24387 Overview:
24388 """""""""
24390 The '``llvm.experimental.constrained.fma``' intrinsic returns the result of a
24391 fused-multiply-add operation on its operands.
24393 Arguments:
24394 """"""""""
24396 The first three arguments to the '``llvm.experimental.constrained.fma``'
24397 intrinsic must be :ref:`floating-point <t_floating>` or :ref:`vector
24398 <t_vector>` of floating-point values. All arguments must have identical types.
24400 The fourth and fifth arguments specify the rounding mode and exception behavior
24401 as described above.
24403 Semantics:
24404 """"""""""
24406 The result produced is the product of the first two operands added to the third
24407 operand computed with infinite precision, and then rounded to the target
24408 precision.
24410 '``llvm.experimental.constrained.fptoui``' Intrinsic
24411 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24413 Syntax:
24414 """""""
24418       declare <ty2>
24419       @llvm.experimental.constrained.fptoui(<type> <value>,
24420                                           metadata <exception behavior>)
24422 Overview:
24423 """""""""
24425 The '``llvm.experimental.constrained.fptoui``' intrinsic converts a
24426 floating-point ``value`` to its unsigned integer equivalent of type ``ty2``.
24428 Arguments:
24429 """"""""""
24431 The first argument to the '``llvm.experimental.constrained.fptoui``'
24432 intrinsic must be :ref:`floating point <t_floating>` or :ref:`vector
24433 <t_vector>` of floating point values.
24435 The second argument specifies the exception behavior as described above.
24437 Semantics:
24438 """"""""""
24440 The result produced is an unsigned integer converted from the floating
24441 point operand. The value is truncated, so it is rounded towards zero.
24443 '``llvm.experimental.constrained.fptosi``' Intrinsic
24444 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24446 Syntax:
24447 """""""
24451       declare <ty2>
24452       @llvm.experimental.constrained.fptosi(<type> <value>,
24453                                           metadata <exception behavior>)
24455 Overview:
24456 """""""""
24458 The '``llvm.experimental.constrained.fptosi``' intrinsic converts
24459 :ref:`floating-point <t_floating>` ``value`` to type ``ty2``.
24461 Arguments:
24462 """"""""""
24464 The first argument to the '``llvm.experimental.constrained.fptosi``'
24465 intrinsic must be :ref:`floating point <t_floating>` or :ref:`vector
24466 <t_vector>` of floating point values.
24468 The second argument specifies the exception behavior as described above.
24470 Semantics:
24471 """"""""""
24473 The result produced is a signed integer converted from the floating
24474 point operand. The value is truncated, so it is rounded towards zero.
24476 '``llvm.experimental.constrained.uitofp``' Intrinsic
24477 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24479 Syntax:
24480 """""""
24484       declare <ty2>
24485       @llvm.experimental.constrained.uitofp(<type> <value>,
24486                                           metadata <rounding mode>,
24487                                           metadata <exception behavior>)
24489 Overview:
24490 """""""""
24492 The '``llvm.experimental.constrained.uitofp``' intrinsic converts an
24493 unsigned integer ``value`` to a floating-point of type ``ty2``.
24495 Arguments:
24496 """"""""""
24498 The first argument to the '``llvm.experimental.constrained.uitofp``'
24499 intrinsic must be an :ref:`integer <t_integer>` or :ref:`vector
24500 <t_vector>` of integer values.
24502 The second and third arguments specify the rounding mode and exception
24503 behavior as described above.
24505 Semantics:
24506 """"""""""
24508 An inexact floating-point exception will be raised if rounding is required.
24509 Any result produced is a floating point value converted from the input
24510 integer operand.
24512 '``llvm.experimental.constrained.sitofp``' Intrinsic
24513 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24515 Syntax:
24516 """""""
24520       declare <ty2>
24521       @llvm.experimental.constrained.sitofp(<type> <value>,
24522                                           metadata <rounding mode>,
24523                                           metadata <exception behavior>)
24525 Overview:
24526 """""""""
24528 The '``llvm.experimental.constrained.sitofp``' intrinsic converts a
24529 signed integer ``value`` to a floating-point of type ``ty2``.
24531 Arguments:
24532 """"""""""
24534 The first argument to the '``llvm.experimental.constrained.sitofp``'
24535 intrinsic must be an :ref:`integer <t_integer>` or :ref:`vector
24536 <t_vector>` of integer values.
24538 The second and third arguments specify the rounding mode and exception
24539 behavior as described above.
24541 Semantics:
24542 """"""""""
24544 An inexact floating-point exception will be raised if rounding is required.
24545 Any result produced is a floating point value converted from the input
24546 integer operand.
24548 '``llvm.experimental.constrained.fptrunc``' Intrinsic
24549 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24551 Syntax:
24552 """""""
24556       declare <ty2>
24557       @llvm.experimental.constrained.fptrunc(<type> <value>,
24558                                           metadata <rounding mode>,
24559                                           metadata <exception behavior>)
24561 Overview:
24562 """""""""
24564 The '``llvm.experimental.constrained.fptrunc``' intrinsic truncates ``value``
24565 to type ``ty2``.
24567 Arguments:
24568 """"""""""
24570 The first argument to the '``llvm.experimental.constrained.fptrunc``'
24571 intrinsic must be :ref:`floating point <t_floating>` or :ref:`vector
24572 <t_vector>` of floating point values. This argument must be larger in size
24573 than the result.
24575 The second and third arguments specify the rounding mode and exception
24576 behavior as described above.
24578 Semantics:
24579 """"""""""
24581 The result produced is a floating point value truncated to be smaller in size
24582 than the operand.
24584 '``llvm.experimental.constrained.fpext``' Intrinsic
24585 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24587 Syntax:
24588 """""""
24592       declare <ty2>
24593       @llvm.experimental.constrained.fpext(<type> <value>,
24594                                           metadata <exception behavior>)
24596 Overview:
24597 """""""""
24599 The '``llvm.experimental.constrained.fpext``' intrinsic extends a
24600 floating-point ``value`` to a larger floating-point value.
24602 Arguments:
24603 """"""""""
24605 The first argument to the '``llvm.experimental.constrained.fpext``'
24606 intrinsic must be :ref:`floating point <t_floating>` or :ref:`vector
24607 <t_vector>` of floating point values. This argument must be smaller in size
24608 than the result.
24610 The second argument specifies the exception behavior as described above.
24612 Semantics:
24613 """"""""""
24615 The result produced is a floating point value extended to be larger in size
24616 than the operand. All restrictions that apply to the fpext instruction also
24617 apply to this intrinsic.
24619 '``llvm.experimental.constrained.fcmp``' and '``llvm.experimental.constrained.fcmps``' Intrinsics
24620 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24622 Syntax:
24623 """""""
24627       declare <ty2>
24628       @llvm.experimental.constrained.fcmp(<type> <op1>, <type> <op2>,
24629                                           metadata <condition code>,
24630                                           metadata <exception behavior>)
24631       declare <ty2>
24632       @llvm.experimental.constrained.fcmps(<type> <op1>, <type> <op2>,
24633                                            metadata <condition code>,
24634                                            metadata <exception behavior>)
24636 Overview:
24637 """""""""
24639 The '``llvm.experimental.constrained.fcmp``' and
24640 '``llvm.experimental.constrained.fcmps``' intrinsics return a boolean
24641 value or vector of boolean values based on comparison of its operands.
24643 If the operands are floating-point scalars, then the result type is a
24644 boolean (:ref:`i1 <t_integer>`).
24646 If the operands are floating-point vectors, then the result type is a
24647 vector of boolean with the same number of elements as the operands being
24648 compared.
24650 The '``llvm.experimental.constrained.fcmp``' intrinsic performs a quiet
24651 comparison operation while the '``llvm.experimental.constrained.fcmps``'
24652 intrinsic performs a signaling comparison operation.
24654 Arguments:
24655 """"""""""
24657 The first two arguments to the '``llvm.experimental.constrained.fcmp``'
24658 and '``llvm.experimental.constrained.fcmps``' intrinsics must be
24659 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
24660 of floating-point values. Both arguments must have identical types.
24662 The third argument is the condition code indicating the kind of comparison
24663 to perform. It must be a metadata string with one of the following values:
24665 .. _fcmp_md_cc:
24667 - "``oeq``": ordered and equal
24668 - "``ogt``": ordered and greater than
24669 - "``oge``": ordered and greater than or equal
24670 - "``olt``": ordered and less than
24671 - "``ole``": ordered and less than or equal
24672 - "``one``": ordered and not equal
24673 - "``ord``": ordered (no nans)
24674 - "``ueq``": unordered or equal
24675 - "``ugt``": unordered or greater than
24676 - "``uge``": unordered or greater than or equal
24677 - "``ult``": unordered or less than
24678 - "``ule``": unordered or less than or equal
24679 - "``une``": unordered or not equal
24680 - "``uno``": unordered (either nans)
24682 *Ordered* means that neither operand is a NAN while *unordered* means
24683 that either operand may be a NAN.
24685 The fourth argument specifies the exception behavior as described above.
24687 Semantics:
24688 """"""""""
24690 ``op1`` and ``op2`` are compared according to the condition code given
24691 as the third argument. If the operands are vectors, then the
24692 vectors are compared element by element. Each comparison performed
24693 always yields an :ref:`i1 <t_integer>` result, as follows:
24695 .. _fcmp_md_cc_sem:
24697 - "``oeq``": yields ``true`` if both operands are not a NAN and ``op1``
24698   is equal to ``op2``.
24699 - "``ogt``": yields ``true`` if both operands are not a NAN and ``op1``
24700   is greater than ``op2``.
24701 - "``oge``": yields ``true`` if both operands are not a NAN and ``op1``
24702   is greater than or equal to ``op2``.
24703 - "``olt``": yields ``true`` if both operands are not a NAN and ``op1``
24704   is less than ``op2``.
24705 - "``ole``": yields ``true`` if both operands are not a NAN and ``op1``
24706   is less than or equal to ``op2``.
24707 - "``one``": yields ``true`` if both operands are not a NAN and ``op1``
24708   is not equal to ``op2``.
24709 - "``ord``": yields ``true`` if both operands are not a NAN.
24710 - "``ueq``": yields ``true`` if either operand is a NAN or ``op1`` is
24711   equal to ``op2``.
24712 - "``ugt``": yields ``true`` if either operand is a NAN or ``op1`` is
24713   greater than ``op2``.
24714 - "``uge``": yields ``true`` if either operand is a NAN or ``op1`` is
24715   greater than or equal to ``op2``.
24716 - "``ult``": yields ``true`` if either operand is a NAN or ``op1`` is
24717   less than ``op2``.
24718 - "``ule``": yields ``true`` if either operand is a NAN or ``op1`` is
24719   less than or equal to ``op2``.
24720 - "``une``": yields ``true`` if either operand is a NAN or ``op1`` is
24721   not equal to ``op2``.
24722 - "``uno``": yields ``true`` if either operand is a NAN.
24724 The quiet comparison operation performed by
24725 '``llvm.experimental.constrained.fcmp``' will only raise an exception
24726 if either operand is a SNAN.  The signaling comparison operation
24727 performed by '``llvm.experimental.constrained.fcmps``' will raise an
24728 exception if either operand is a NAN (QNAN or SNAN). Such an exception
24729 does not preclude a result being produced (e.g. exception might only
24730 set a flag), therefore the distinction between ordered and unordered
24731 comparisons is also relevant for the
24732 '``llvm.experimental.constrained.fcmps``' intrinsic.
24734 '``llvm.experimental.constrained.fmuladd``' Intrinsic
24735 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24737 Syntax:
24738 """""""
24742       declare <type>
24743       @llvm.experimental.constrained.fmuladd(<type> <op1>, <type> <op2>,
24744                                              <type> <op3>,
24745                                              metadata <rounding mode>,
24746                                              metadata <exception behavior>)
24748 Overview:
24749 """""""""
24751 The '``llvm.experimental.constrained.fmuladd``' intrinsic represents
24752 multiply-add expressions that can be fused if the code generator determines
24753 that (a) the target instruction set has support for a fused operation,
24754 and (b) that the fused operation is more efficient than the equivalent,
24755 separate pair of mul and add instructions.
24757 Arguments:
24758 """"""""""
24760 The first three arguments to the '``llvm.experimental.constrained.fmuladd``'
24761 intrinsic must be floating-point or vector of floating-point values.
24762 All three arguments must have identical types.
24764 The fourth and fifth arguments specify the rounding mode and exception behavior
24765 as described above.
24767 Semantics:
24768 """"""""""
24770 The expression:
24774       %0 = call float @llvm.experimental.constrained.fmuladd.f32(%a, %b, %c,
24775                                                                  metadata <rounding mode>,
24776                                                                  metadata <exception behavior>)
24778 is equivalent to the expression:
24782       %0 = call float @llvm.experimental.constrained.fmul.f32(%a, %b,
24783                                                               metadata <rounding mode>,
24784                                                               metadata <exception behavior>)
24785       %1 = call float @llvm.experimental.constrained.fadd.f32(%0, %c,
24786                                                               metadata <rounding mode>,
24787                                                               metadata <exception behavior>)
24789 except that it is unspecified whether rounding will be performed between the
24790 multiplication and addition steps. Fusion is not guaranteed, even if the target
24791 platform supports it.
24792 If a fused multiply-add is required, the corresponding
24793 :ref:`llvm.experimental.constrained.fma <int_fma>` intrinsic function should be
24794 used instead.
24795 This never sets errno, just as '``llvm.experimental.constrained.fma.*``'.
24797 Constrained libm-equivalent Intrinsics
24798 --------------------------------------
24800 In addition to the basic floating-point operations for which constrained
24801 intrinsics are described above, there are constrained versions of various
24802 operations which provide equivalent behavior to a corresponding libm function.
24803 These intrinsics allow the precise behavior of these operations with respect to
24804 rounding mode and exception behavior to be controlled.
24806 As with the basic constrained floating-point intrinsics, the rounding mode
24807 and exception behavior arguments only control the behavior of the optimizer.
24808 They do not change the runtime floating-point environment.
24811 '``llvm.experimental.constrained.sqrt``' Intrinsic
24812 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24814 Syntax:
24815 """""""
24819       declare <type>
24820       @llvm.experimental.constrained.sqrt(<type> <op1>,
24821                                           metadata <rounding mode>,
24822                                           metadata <exception behavior>)
24824 Overview:
24825 """""""""
24827 The '``llvm.experimental.constrained.sqrt``' intrinsic returns the square root
24828 of the specified value, returning the same value as the libm '``sqrt``'
24829 functions would, but without setting ``errno``.
24831 Arguments:
24832 """"""""""
24834 The first argument and the return type are floating-point numbers of the same
24835 type.
24837 The second and third arguments specify the rounding mode and exception
24838 behavior as described above.
24840 Semantics:
24841 """"""""""
24843 This function returns the nonnegative square root of the specified value.
24844 If the value is less than negative zero, a floating-point exception occurs
24845 and the return value is architecture specific.
24848 '``llvm.experimental.constrained.pow``' Intrinsic
24849 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24851 Syntax:
24852 """""""
24856       declare <type>
24857       @llvm.experimental.constrained.pow(<type> <op1>, <type> <op2>,
24858                                          metadata <rounding mode>,
24859                                          metadata <exception behavior>)
24861 Overview:
24862 """""""""
24864 The '``llvm.experimental.constrained.pow``' intrinsic returns the first operand
24865 raised to the (positive or negative) power specified by the second operand.
24867 Arguments:
24868 """"""""""
24870 The first two arguments and the return value are floating-point numbers of the
24871 same type.  The second argument specifies the power to which the first argument
24872 should be raised.
24874 The third and fourth arguments specify the rounding mode and exception
24875 behavior as described above.
24877 Semantics:
24878 """"""""""
24880 This function returns the first value raised to the second power,
24881 returning the same values as the libm ``pow`` functions would, and
24882 handles error conditions in the same way.
24885 '``llvm.experimental.constrained.powi``' Intrinsic
24886 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24888 Syntax:
24889 """""""
24893       declare <type>
24894       @llvm.experimental.constrained.powi(<type> <op1>, i32 <op2>,
24895                                           metadata <rounding mode>,
24896                                           metadata <exception behavior>)
24898 Overview:
24899 """""""""
24901 The '``llvm.experimental.constrained.powi``' intrinsic returns the first operand
24902 raised to the (positive or negative) power specified by the second operand. The
24903 order of evaluation of multiplications is not defined. When a vector of
24904 floating-point type is used, the second argument remains a scalar integer value.
24907 Arguments:
24908 """"""""""
24910 The first argument and the return value are floating-point numbers of the same
24911 type.  The second argument is a 32-bit signed integer specifying the power to
24912 which the first argument should be raised.
24914 The third and fourth arguments specify the rounding mode and exception
24915 behavior as described above.
24917 Semantics:
24918 """"""""""
24920 This function returns the first value raised to the second power with an
24921 unspecified sequence of rounding operations.
24924 '``llvm.experimental.constrained.ldexp``' Intrinsic
24925 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24927 Syntax:
24928 """""""
24932       declare <type0>
24933       @llvm.experimental.constrained.ldexp(<type0> <op1>, <type1> <op2>,
24934                                           metadata <rounding mode>,
24935                                           metadata <exception behavior>)
24937 Overview:
24938 """""""""
24940 The '``llvm.experimental.constrained.ldexp``' performs the ldexp function.
24943 Arguments:
24944 """"""""""
24946 The first argument and the return value are :ref:`floating-point
24947 <t_floating>` or :ref:`vector <t_vector>` of floating-point values of
24948 the same type. The second argument is an integer with the same number
24949 of elements.
24952 The third and fourth arguments specify the rounding mode and exception
24953 behavior as described above.
24955 Semantics:
24956 """"""""""
24958 This function multiplies the first argument by 2 raised to the second
24959 argument's power. If the first argument is NaN or infinite, the same
24960 value is returned. If the result underflows a zero with the same sign
24961 is returned. If the result overflows, the result is an infinity with
24962 the same sign.
24965 '``llvm.experimental.constrained.sin``' Intrinsic
24966 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24968 Syntax:
24969 """""""
24973       declare <type>
24974       @llvm.experimental.constrained.sin(<type> <op1>,
24975                                          metadata <rounding mode>,
24976                                          metadata <exception behavior>)
24978 Overview:
24979 """""""""
24981 The '``llvm.experimental.constrained.sin``' intrinsic returns the sine of the
24982 first operand.
24984 Arguments:
24985 """"""""""
24987 The first argument and the return type are floating-point numbers of the same
24988 type.
24990 The second and third arguments specify the rounding mode and exception
24991 behavior as described above.
24993 Semantics:
24994 """"""""""
24996 This function returns the sine of the specified operand, returning the
24997 same values as the libm ``sin`` functions would, and handles error
24998 conditions in the same way.
25001 '``llvm.experimental.constrained.cos``' Intrinsic
25002 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25004 Syntax:
25005 """""""
25009       declare <type>
25010       @llvm.experimental.constrained.cos(<type> <op1>,
25011                                          metadata <rounding mode>,
25012                                          metadata <exception behavior>)
25014 Overview:
25015 """""""""
25017 The '``llvm.experimental.constrained.cos``' intrinsic returns the cosine of the
25018 first operand.
25020 Arguments:
25021 """"""""""
25023 The first argument and the return type are floating-point numbers of the same
25024 type.
25026 The second and third arguments specify the rounding mode and exception
25027 behavior as described above.
25029 Semantics:
25030 """"""""""
25032 This function returns the cosine of the specified operand, returning the
25033 same values as the libm ``cos`` functions would, and handles error
25034 conditions in the same way.
25037 '``llvm.experimental.constrained.exp``' Intrinsic
25038 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25040 Syntax:
25041 """""""
25045       declare <type>
25046       @llvm.experimental.constrained.exp(<type> <op1>,
25047                                          metadata <rounding mode>,
25048                                          metadata <exception behavior>)
25050 Overview:
25051 """""""""
25053 The '``llvm.experimental.constrained.exp``' intrinsic computes the base-e
25054 exponential of the specified value.
25056 Arguments:
25057 """"""""""
25059 The first argument and the return value are floating-point numbers of the same
25060 type.
25062 The second and third arguments specify the rounding mode and exception
25063 behavior as described above.
25065 Semantics:
25066 """"""""""
25068 This function returns the same values as the libm ``exp`` functions
25069 would, and handles error conditions in the same way.
25072 '``llvm.experimental.constrained.exp2``' Intrinsic
25073 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25075 Syntax:
25076 """""""
25080       declare <type>
25081       @llvm.experimental.constrained.exp2(<type> <op1>,
25082                                           metadata <rounding mode>,
25083                                           metadata <exception behavior>)
25085 Overview:
25086 """""""""
25088 The '``llvm.experimental.constrained.exp2``' intrinsic computes the base-2
25089 exponential of the specified value.
25092 Arguments:
25093 """"""""""
25095 The first argument and the return value are floating-point numbers of the same
25096 type.
25098 The second and third arguments specify the rounding mode and exception
25099 behavior as described above.
25101 Semantics:
25102 """"""""""
25104 This function returns the same values as the libm ``exp2`` functions
25105 would, and handles error conditions in the same way.
25108 '``llvm.experimental.constrained.log``' Intrinsic
25109 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25111 Syntax:
25112 """""""
25116       declare <type>
25117       @llvm.experimental.constrained.log(<type> <op1>,
25118                                          metadata <rounding mode>,
25119                                          metadata <exception behavior>)
25121 Overview:
25122 """""""""
25124 The '``llvm.experimental.constrained.log``' intrinsic computes the base-e
25125 logarithm of the specified value.
25127 Arguments:
25128 """"""""""
25130 The first argument and the return value are floating-point numbers of the same
25131 type.
25133 The second and third arguments specify the rounding mode and exception
25134 behavior as described above.
25137 Semantics:
25138 """"""""""
25140 This function returns the same values as the libm ``log`` functions
25141 would, and handles error conditions in the same way.
25144 '``llvm.experimental.constrained.log10``' Intrinsic
25145 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25147 Syntax:
25148 """""""
25152       declare <type>
25153       @llvm.experimental.constrained.log10(<type> <op1>,
25154                                            metadata <rounding mode>,
25155                                            metadata <exception behavior>)
25157 Overview:
25158 """""""""
25160 The '``llvm.experimental.constrained.log10``' intrinsic computes the base-10
25161 logarithm of the specified value.
25163 Arguments:
25164 """"""""""
25166 The first argument and the return value are floating-point numbers of the same
25167 type.
25169 The second and third arguments specify the rounding mode and exception
25170 behavior as described above.
25172 Semantics:
25173 """"""""""
25175 This function returns the same values as the libm ``log10`` functions
25176 would, and handles error conditions in the same way.
25179 '``llvm.experimental.constrained.log2``' Intrinsic
25180 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25182 Syntax:
25183 """""""
25187       declare <type>
25188       @llvm.experimental.constrained.log2(<type> <op1>,
25189                                           metadata <rounding mode>,
25190                                           metadata <exception behavior>)
25192 Overview:
25193 """""""""
25195 The '``llvm.experimental.constrained.log2``' intrinsic computes the base-2
25196 logarithm of the specified value.
25198 Arguments:
25199 """"""""""
25201 The first argument and the return value are floating-point numbers of the same
25202 type.
25204 The second and third arguments specify the rounding mode and exception
25205 behavior as described above.
25207 Semantics:
25208 """"""""""
25210 This function returns the same values as the libm ``log2`` functions
25211 would, and handles error conditions in the same way.
25214 '``llvm.experimental.constrained.rint``' Intrinsic
25215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25217 Syntax:
25218 """""""
25222       declare <type>
25223       @llvm.experimental.constrained.rint(<type> <op1>,
25224                                           metadata <rounding mode>,
25225                                           metadata <exception behavior>)
25227 Overview:
25228 """""""""
25230 The '``llvm.experimental.constrained.rint``' intrinsic returns the first
25231 operand rounded to the nearest integer. It may raise an inexact floating-point
25232 exception if the operand is not an integer.
25234 Arguments:
25235 """"""""""
25237 The first argument and the return value are floating-point numbers of the same
25238 type.
25240 The second and third arguments specify the rounding mode and exception
25241 behavior as described above.
25243 Semantics:
25244 """"""""""
25246 This function returns the same values as the libm ``rint`` functions
25247 would, and handles error conditions in the same way.  The rounding mode is
25248 described, not determined, by the rounding mode argument.  The actual rounding
25249 mode is determined by the runtime floating-point environment.  The rounding
25250 mode argument is only intended as information to the compiler.
25253 '``llvm.experimental.constrained.lrint``' Intrinsic
25254 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25256 Syntax:
25257 """""""
25261       declare <inttype>
25262       @llvm.experimental.constrained.lrint(<fptype> <op1>,
25263                                            metadata <rounding mode>,
25264                                            metadata <exception behavior>)
25266 Overview:
25267 """""""""
25269 The '``llvm.experimental.constrained.lrint``' intrinsic returns the first
25270 operand rounded to the nearest integer. An inexact floating-point exception
25271 will be raised if the operand is not an integer. An invalid exception is
25272 raised if the result is too large to fit into a supported integer type,
25273 and in this case the result is undefined.
25275 Arguments:
25276 """"""""""
25278 The first argument is a floating-point number. The return value is an
25279 integer type. Not all types are supported on all targets. The supported
25280 types are the same as the ``llvm.lrint`` intrinsic and the ``lrint``
25281 libm functions.
25283 The second and third arguments specify the rounding mode and exception
25284 behavior as described above.
25286 Semantics:
25287 """"""""""
25289 This function returns the same values as the libm ``lrint`` functions
25290 would, and handles error conditions in the same way.
25292 The rounding mode is described, not determined, by the rounding mode
25293 argument.  The actual rounding mode is determined by the runtime floating-point
25294 environment.  The rounding mode argument is only intended as information
25295 to the compiler.
25297 If the runtime floating-point environment is using the default rounding mode
25298 then the results will be the same as the llvm.lrint intrinsic.
25301 '``llvm.experimental.constrained.llrint``' Intrinsic
25302 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25304 Syntax:
25305 """""""
25309       declare <inttype>
25310       @llvm.experimental.constrained.llrint(<fptype> <op1>,
25311                                             metadata <rounding mode>,
25312                                             metadata <exception behavior>)
25314 Overview:
25315 """""""""
25317 The '``llvm.experimental.constrained.llrint``' intrinsic returns the first
25318 operand rounded to the nearest integer. An inexact floating-point exception
25319 will be raised if the operand is not an integer. An invalid exception is
25320 raised if the result is too large to fit into a supported integer type,
25321 and in this case the result is undefined.
25323 Arguments:
25324 """"""""""
25326 The first argument is a floating-point number. The return value is an
25327 integer type. Not all types are supported on all targets. The supported
25328 types are the same as the ``llvm.llrint`` intrinsic and the ``llrint``
25329 libm functions.
25331 The second and third arguments specify the rounding mode and exception
25332 behavior as described above.
25334 Semantics:
25335 """"""""""
25337 This function returns the same values as the libm ``llrint`` functions
25338 would, and handles error conditions in the same way.
25340 The rounding mode is described, not determined, by the rounding mode
25341 argument.  The actual rounding mode is determined by the runtime floating-point
25342 environment.  The rounding mode argument is only intended as information
25343 to the compiler.
25345 If the runtime floating-point environment is using the default rounding mode
25346 then the results will be the same as the llvm.llrint intrinsic.
25349 '``llvm.experimental.constrained.nearbyint``' Intrinsic
25350 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25352 Syntax:
25353 """""""
25357       declare <type>
25358       @llvm.experimental.constrained.nearbyint(<type> <op1>,
25359                                                metadata <rounding mode>,
25360                                                metadata <exception behavior>)
25362 Overview:
25363 """""""""
25365 The '``llvm.experimental.constrained.nearbyint``' intrinsic returns the first
25366 operand rounded to the nearest integer. It will not raise an inexact
25367 floating-point exception if the operand is not an integer.
25370 Arguments:
25371 """"""""""
25373 The first argument and the return value are floating-point numbers of the same
25374 type.
25376 The second and third arguments specify the rounding mode and exception
25377 behavior as described above.
25379 Semantics:
25380 """"""""""
25382 This function returns the same values as the libm ``nearbyint`` functions
25383 would, and handles error conditions in the same way.  The rounding mode is
25384 described, not determined, by the rounding mode argument.  The actual rounding
25385 mode is determined by the runtime floating-point environment.  The rounding
25386 mode argument is only intended as information to the compiler.
25389 '``llvm.experimental.constrained.maxnum``' Intrinsic
25390 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25392 Syntax:
25393 """""""
25397       declare <type>
25398       @llvm.experimental.constrained.maxnum(<type> <op1>, <type> <op2>
25399                                             metadata <exception behavior>)
25401 Overview:
25402 """""""""
25404 The '``llvm.experimental.constrained.maxnum``' intrinsic returns the maximum
25405 of the two arguments.
25407 Arguments:
25408 """"""""""
25410 The first two arguments and the return value are floating-point numbers
25411 of the same type.
25413 The third argument specifies the exception behavior as described above.
25415 Semantics:
25416 """"""""""
25418 This function follows the IEEE-754 semantics for maxNum.
25421 '``llvm.experimental.constrained.minnum``' Intrinsic
25422 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25424 Syntax:
25425 """""""
25429       declare <type>
25430       @llvm.experimental.constrained.minnum(<type> <op1>, <type> <op2>
25431                                             metadata <exception behavior>)
25433 Overview:
25434 """""""""
25436 The '``llvm.experimental.constrained.minnum``' intrinsic returns the minimum
25437 of the two arguments.
25439 Arguments:
25440 """"""""""
25442 The first two arguments and the return value are floating-point numbers
25443 of the same type.
25445 The third argument specifies the exception behavior as described above.
25447 Semantics:
25448 """"""""""
25450 This function follows the IEEE-754 semantics for minNum.
25453 '``llvm.experimental.constrained.maximum``' Intrinsic
25454 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25456 Syntax:
25457 """""""
25461       declare <type>
25462       @llvm.experimental.constrained.maximum(<type> <op1>, <type> <op2>
25463                                              metadata <exception behavior>)
25465 Overview:
25466 """""""""
25468 The '``llvm.experimental.constrained.maximum``' intrinsic returns the maximum
25469 of the two arguments, propagating NaNs and treating -0.0 as less than +0.0.
25471 Arguments:
25472 """"""""""
25474 The first two arguments and the return value are floating-point numbers
25475 of the same type.
25477 The third argument specifies the exception behavior as described above.
25479 Semantics:
25480 """"""""""
25482 This function follows semantics specified in the draft of IEEE 754-2018.
25485 '``llvm.experimental.constrained.minimum``' Intrinsic
25486 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25488 Syntax:
25489 """""""
25493       declare <type>
25494       @llvm.experimental.constrained.minimum(<type> <op1>, <type> <op2>
25495                                              metadata <exception behavior>)
25497 Overview:
25498 """""""""
25500 The '``llvm.experimental.constrained.minimum``' intrinsic returns the minimum
25501 of the two arguments, propagating NaNs and treating -0.0 as less than +0.0.
25503 Arguments:
25504 """"""""""
25506 The first two arguments and the return value are floating-point numbers
25507 of the same type.
25509 The third argument specifies the exception behavior as described above.
25511 Semantics:
25512 """"""""""
25514 This function follows semantics specified in the draft of IEEE 754-2018.
25517 '``llvm.experimental.constrained.ceil``' Intrinsic
25518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25520 Syntax:
25521 """""""
25525       declare <type>
25526       @llvm.experimental.constrained.ceil(<type> <op1>,
25527                                           metadata <exception behavior>)
25529 Overview:
25530 """""""""
25532 The '``llvm.experimental.constrained.ceil``' intrinsic returns the ceiling of the
25533 first operand.
25535 Arguments:
25536 """"""""""
25538 The first argument and the return value are floating-point numbers of the same
25539 type.
25541 The second argument specifies the exception behavior as described above.
25543 Semantics:
25544 """"""""""
25546 This function returns the same values as the libm ``ceil`` functions
25547 would and handles error conditions in the same way.
25550 '``llvm.experimental.constrained.floor``' Intrinsic
25551 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25553 Syntax:
25554 """""""
25558       declare <type>
25559       @llvm.experimental.constrained.floor(<type> <op1>,
25560                                            metadata <exception behavior>)
25562 Overview:
25563 """""""""
25565 The '``llvm.experimental.constrained.floor``' intrinsic returns the floor of the
25566 first operand.
25568 Arguments:
25569 """"""""""
25571 The first argument and the return value are floating-point numbers of the same
25572 type.
25574 The second argument specifies the exception behavior as described above.
25576 Semantics:
25577 """"""""""
25579 This function returns the same values as the libm ``floor`` functions
25580 would and handles error conditions in the same way.
25583 '``llvm.experimental.constrained.round``' Intrinsic
25584 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25586 Syntax:
25587 """""""
25591       declare <type>
25592       @llvm.experimental.constrained.round(<type> <op1>,
25593                                            metadata <exception behavior>)
25595 Overview:
25596 """""""""
25598 The '``llvm.experimental.constrained.round``' intrinsic returns the first
25599 operand rounded to the nearest integer.
25601 Arguments:
25602 """"""""""
25604 The first argument and the return value are floating-point numbers of the same
25605 type.
25607 The second argument specifies the exception behavior as described above.
25609 Semantics:
25610 """"""""""
25612 This function returns the same values as the libm ``round`` functions
25613 would and handles error conditions in the same way.
25616 '``llvm.experimental.constrained.roundeven``' Intrinsic
25617 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25619 Syntax:
25620 """""""
25624       declare <type>
25625       @llvm.experimental.constrained.roundeven(<type> <op1>,
25626                                                metadata <exception behavior>)
25628 Overview:
25629 """""""""
25631 The '``llvm.experimental.constrained.roundeven``' intrinsic returns the first
25632 operand rounded to the nearest integer in floating-point format, rounding
25633 halfway cases to even (that is, to the nearest value that is an even integer),
25634 regardless of the current rounding direction.
25636 Arguments:
25637 """"""""""
25639 The first argument and the return value are floating-point numbers of the same
25640 type.
25642 The second argument specifies the exception behavior as described above.
25644 Semantics:
25645 """"""""""
25647 This function implements IEEE-754 operation ``roundToIntegralTiesToEven``. It
25648 also behaves in the same way as C standard function ``roundeven`` and can signal
25649 the invalid operation exception for a SNAN operand.
25652 '``llvm.experimental.constrained.lround``' Intrinsic
25653 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25655 Syntax:
25656 """""""
25660       declare <inttype>
25661       @llvm.experimental.constrained.lround(<fptype> <op1>,
25662                                             metadata <exception behavior>)
25664 Overview:
25665 """""""""
25667 The '``llvm.experimental.constrained.lround``' intrinsic returns the first
25668 operand rounded to the nearest integer with ties away from zero.  It will
25669 raise an inexact floating-point exception if the operand is not an integer.
25670 An invalid exception is raised if the result is too large to fit into a
25671 supported integer type, and in this case the result is undefined.
25673 Arguments:
25674 """"""""""
25676 The first argument is a floating-point number. The return value is an
25677 integer type. Not all types are supported on all targets. The supported
25678 types are the same as the ``llvm.lround`` intrinsic and the ``lround``
25679 libm functions.
25681 The second argument specifies the exception behavior as described above.
25683 Semantics:
25684 """"""""""
25686 This function returns the same values as the libm ``lround`` functions
25687 would and handles error conditions in the same way.
25690 '``llvm.experimental.constrained.llround``' Intrinsic
25691 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25693 Syntax:
25694 """""""
25698       declare <inttype>
25699       @llvm.experimental.constrained.llround(<fptype> <op1>,
25700                                              metadata <exception behavior>)
25702 Overview:
25703 """""""""
25705 The '``llvm.experimental.constrained.llround``' intrinsic returns the first
25706 operand rounded to the nearest integer with ties away from zero. It will
25707 raise an inexact floating-point exception if the operand is not an integer.
25708 An invalid exception is raised if the result is too large to fit into a
25709 supported integer type, and in this case the result is undefined.
25711 Arguments:
25712 """"""""""
25714 The first argument is a floating-point number. The return value is an
25715 integer type. Not all types are supported on all targets. The supported
25716 types are the same as the ``llvm.llround`` intrinsic and the ``llround``
25717 libm functions.
25719 The second argument specifies the exception behavior as described above.
25721 Semantics:
25722 """"""""""
25724 This function returns the same values as the libm ``llround`` functions
25725 would and handles error conditions in the same way.
25728 '``llvm.experimental.constrained.trunc``' Intrinsic
25729 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25731 Syntax:
25732 """""""
25736       declare <type>
25737       @llvm.experimental.constrained.trunc(<type> <op1>,
25738                                            metadata <exception behavior>)
25740 Overview:
25741 """""""""
25743 The '``llvm.experimental.constrained.trunc``' intrinsic returns the first
25744 operand rounded to the nearest integer not larger in magnitude than the
25745 operand.
25747 Arguments:
25748 """"""""""
25750 The first argument and the return value are floating-point numbers of the same
25751 type.
25753 The second argument specifies the exception behavior as described above.
25755 Semantics:
25756 """"""""""
25758 This function returns the same values as the libm ``trunc`` functions
25759 would and handles error conditions in the same way.
25761 .. _int_experimental_noalias_scope_decl:
25763 '``llvm.experimental.noalias.scope.decl``' Intrinsic
25764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25766 Syntax:
25767 """""""
25772       declare void @llvm.experimental.noalias.scope.decl(metadata !id.scope.list)
25774 Overview:
25775 """""""""
25777 The ``llvm.experimental.noalias.scope.decl`` intrinsic identifies where a
25778 noalias scope is declared. When the intrinsic is duplicated, a decision must
25779 also be made about the scope: depending on the reason of the duplication,
25780 the scope might need to be duplicated as well.
25783 Arguments:
25784 """"""""""
25786 The ``!id.scope.list`` argument is metadata that is a list of ``noalias``
25787 metadata references. The format is identical to that required for ``noalias``
25788 metadata. This list must have exactly one element.
25790 Semantics:
25791 """"""""""
25793 The ``llvm.experimental.noalias.scope.decl`` intrinsic identifies where a
25794 noalias scope is declared. When the intrinsic is duplicated, a decision must
25795 also be made about the scope: depending on the reason of the duplication,
25796 the scope might need to be duplicated as well.
25798 For example, when the intrinsic is used inside a loop body, and that loop is
25799 unrolled, the associated noalias scope must also be duplicated. Otherwise, the
25800 noalias property it signifies would spill across loop iterations, whereas it
25801 was only valid within a single iteration.
25803 .. code-block:: llvm
25805   ; This examples shows two possible positions for noalias.decl and how they impact the semantics:
25806   ; If it is outside the loop (Version 1), then %a and %b are noalias across *all* iterations.
25807   ; If it is inside the loop (Version 2), then %a and %b are noalias only within *one* iteration.
25808   declare void @decl_in_loop(ptr %a.base, ptr %b.base) {
25809   entry:
25810     ; call void @llvm.experimental.noalias.scope.decl(metadata !2) ; Version 1: noalias decl outside loop
25811     br label %loop
25813   loop:
25814     %a = phi ptr [ %a.base, %entry ], [ %a.inc, %loop ]
25815     %b = phi ptr [ %b.base, %entry ], [ %b.inc, %loop ]
25816     ; call void @llvm.experimental.noalias.scope.decl(metadata !2) ; Version 2: noalias decl inside loop
25817     %val = load i8, ptr %a, !alias.scope !2
25818     store i8 %val, ptr %b, !noalias !2
25819     %a.inc = getelementptr inbounds i8, ptr %a, i64 1
25820     %b.inc = getelementptr inbounds i8, ptr %b, i64 1
25821     %cond = call i1 @cond()
25822     br i1 %cond, label %loop, label %exit
25824   exit:
25825     ret void
25826   }
25828   !0 = !{!0} ; domain
25829   !1 = !{!1, !0} ; scope
25830   !2 = !{!1} ; scope list
25832 Multiple calls to `@llvm.experimental.noalias.scope.decl` for the same scope
25833 are possible, but one should never dominate another. Violations are pointed out
25834 by the verifier as they indicate a problem in either a transformation pass or
25835 the input.
25838 Floating Point Environment Manipulation intrinsics
25839 --------------------------------------------------
25841 These functions read or write floating point environment, such as rounding
25842 mode or state of floating point exceptions. Altering the floating point
25843 environment requires special care. See :ref:`Floating Point Environment <floatenv>`.
25845 .. _int_get_rounding:
25847 '``llvm.get.rounding``' Intrinsic
25848 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25850 Syntax:
25851 """""""
25855       declare i32 @llvm.get.rounding()
25857 Overview:
25858 """""""""
25860 The '``llvm.get.rounding``' intrinsic reads the current rounding mode.
25862 Semantics:
25863 """"""""""
25865 The '``llvm.get.rounding``' intrinsic returns the current rounding mode.
25866 Encoding of the returned values is same as the result of ``FLT_ROUNDS``,
25867 specified by C standard:
25871     0  - toward zero
25872     1  - to nearest, ties to even
25873     2  - toward positive infinity
25874     3  - toward negative infinity
25875     4  - to nearest, ties away from zero
25877 Other values may be used to represent additional rounding modes, supported by a
25878 target. These values are target-specific.
25880 '``llvm.set.rounding``' Intrinsic
25881 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25883 Syntax:
25884 """""""
25888       declare void @llvm.set.rounding(i32 <val>)
25890 Overview:
25891 """""""""
25893 The '``llvm.set.rounding``' intrinsic sets current rounding mode.
25895 Arguments:
25896 """"""""""
25898 The argument is the required rounding mode. Encoding of rounding mode is
25899 the same as used by '``llvm.get.rounding``'.
25901 Semantics:
25902 """"""""""
25904 The '``llvm.set.rounding``' intrinsic sets the current rounding mode. It is
25905 similar to C library function 'fesetround', however this intrinsic does not
25906 return any value and uses platform-independent representation of IEEE rounding
25907 modes.
25910 '``llvm.get.fpenv``' Intrinsic
25911 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25913 Syntax:
25914 """""""
25918       declare <integer_type> @llvm.get.fpenv()
25920 Overview:
25921 """""""""
25923 The '``llvm.get.fpenv``' intrinsic returns bits of the current floating-point
25924 environment. The return value type is platform-specific.
25926 Semantics:
25927 """"""""""
25929 The '``llvm.get.fpenv``' intrinsic reads the current floating-point environment
25930 and returns it as an integer value.
25933 '``llvm.set.fpenv``' Intrinsic
25934 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25936 Syntax:
25937 """""""
25941       declare void @llvm.set.fpenv(<integer_type> <val>)
25943 Overview:
25944 """""""""
25946 The '``llvm.set.fpenv``' intrinsic sets the current floating-point environment.
25948 Arguments:
25949 """"""""""
25951 The argument is an integer representing the new floating-point environment. The
25952 integer type is platform-specific.
25954 Semantics:
25955 """"""""""
25957 The '``llvm.set.fpenv``' intrinsic sets the current floating-point environment
25958 to the state specified by the argument. The state may be previously obtained by a
25959 call to '``llvm.get.fpenv``' or synthesised in a platform-dependent way.
25962 '``llvm.reset.fpenv``' Intrinsic
25963 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25965 Syntax:
25966 """""""
25970       declare void @llvm.reset.fpenv()
25972 Overview:
25973 """""""""
25975 The '``llvm.reset.fpenv``' intrinsic sets the default floating-point environment.
25977 Semantics:
25978 """"""""""
25980 The '``llvm.reset.fpenv``' intrinsic sets the current floating-point environment
25981 to default state. It is similar to the call 'fesetenv(FE_DFL_ENV)', except it
25982 does not return any value.
25984 .. _int_get_fpmode:
25986 '``llvm.get.fpmode``' Intrinsic
25987 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25989 Syntax:
25990 """""""
25992 The '``llvm.get.fpmode``' intrinsic returns bits of the current floating-point
25993 control modes. The return value type is platform-specific.
25997       declare <integer_type> @llvm.get.fpmode()
25999 Overview:
26000 """""""""
26002 The '``llvm.get.fpmode``' intrinsic reads the current dynamic floating-point
26003 control modes and returns it as an integer value.
26005 Arguments:
26006 """"""""""
26008 None.
26010 Semantics:
26011 """"""""""
26013 The '``llvm.get.fpmode``' intrinsic reads the current dynamic floating-point
26014 control modes, such as rounding direction, precision, treatment of denormals and
26015 so on. It is similar to the C library function 'fegetmode', however this
26016 function does not store the set of control modes into memory but returns it as
26017 an integer value. Interpretation of the bits in this value is target-dependent.
26019 '``llvm.set.fpmode``' Intrinsic
26020 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26022 Syntax:
26023 """""""
26025 The '``llvm.set.fpmode``' intrinsic sets the current floating-point control modes.
26029       declare void @llvm.set.fpmode(<integer_type> <val>)
26031 Overview:
26032 """""""""
26034 The '``llvm.set.fpmode``' intrinsic sets the current dynamic floating-point
26035 control modes.
26037 Arguments:
26038 """"""""""
26040 The argument is a set of floating-point control modes, represented as an integer
26041 value in a target-dependent way.
26043 Semantics:
26044 """"""""""
26046 The '``llvm.set.fpmode``' intrinsic sets the current dynamic floating-point
26047 control modes to the state specified by the argument, which must be obtained by
26048 a call to '``llvm.get.fpmode``' or constructed in a target-specific way. It is
26049 similar to the C library function 'fesetmode', however this function does not
26050 read the set of control modes from memory but gets it as integer value.
26052 '``llvm.reset.fpmode``' Intrinsic
26053 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26055 Syntax:
26056 """""""
26060       declare void @llvm.reset.fpmode()
26062 Overview:
26063 """""""""
26065 The '``llvm.reset.fpmode``' intrinsic sets the default dynamic floating-point
26066 control modes.
26068 Arguments:
26069 """"""""""
26071 None.
26073 Semantics:
26074 """"""""""
26076 The '``llvm.reset.fpmode``' intrinsic sets the current dynamic floating-point
26077 environment to default state. It is similar to the C library function call
26078 'fesetmode(FE_DFL_MODE)', however this function does not return any value.
26081 Floating-Point Test Intrinsics
26082 ------------------------------
26084 These functions get properties of floating-point values.
26087 .. _llvm.is.fpclass:
26089 '``llvm.is.fpclass``' Intrinsic
26090 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26092 Syntax:
26093 """""""
26097       declare i1 @llvm.is.fpclass(<fptype> <op>, i32 <test>)
26098       declare <N x i1> @llvm.is.fpclass(<vector-fptype> <op>, i32 <test>)
26100 Overview:
26101 """""""""
26103 The '``llvm.is.fpclass``' intrinsic returns a boolean value or vector of boolean
26104 values depending on whether the first argument satisfies the test specified by
26105 the second argument.
26107 If the first argument is a floating-point scalar, then the result type is a
26108 boolean (:ref:`i1 <t_integer>`).
26110 If the first argument is a floating-point vector, then the result type is a
26111 vector of boolean with the same number of elements as the first argument.
26113 Arguments:
26114 """"""""""
26116 The first argument to the '``llvm.is.fpclass``' intrinsic must be
26117 :ref:`floating-point <t_floating>` or :ref:`vector <t_vector>`
26118 of floating-point values.
26120 The second argument specifies, which tests to perform. It must be a compile-time
26121 integer constant, each bit in which specifies floating-point class:
26123 +-------+----------------------+
26124 | Bit # | floating-point class |
26125 +=======+======================+
26126 | 0     | Signaling NaN        |
26127 +-------+----------------------+
26128 | 1     | Quiet NaN            |
26129 +-------+----------------------+
26130 | 2     | Negative infinity    |
26131 +-------+----------------------+
26132 | 3     | Negative normal      |
26133 +-------+----------------------+
26134 | 4     | Negative subnormal   |
26135 +-------+----------------------+
26136 | 5     | Negative zero        |
26137 +-------+----------------------+
26138 | 6     | Positive zero        |
26139 +-------+----------------------+
26140 | 7     | Positive subnormal   |
26141 +-------+----------------------+
26142 | 8     | Positive normal      |
26143 +-------+----------------------+
26144 | 9     | Positive infinity    |
26145 +-------+----------------------+
26147 Semantics:
26148 """"""""""
26150 The function checks if ``op`` belongs to any of the floating-point classes
26151 specified by ``test``. If ``op`` is a vector, then the check is made element by
26152 element. Each check yields an :ref:`i1 <t_integer>` result, which is ``true``,
26153 if the element value satisfies the specified test. The argument ``test`` is a
26154 bit mask where each bit specifies floating-point class to test. For example, the
26155 value 0x108 makes test for normal value, - bits 3 and 8 in it are set, which
26156 means that the function returns ``true`` if ``op`` is a positive or negative
26157 normal value. The function never raises floating-point exceptions. The
26158 function does not canonicalize its input value and does not depend
26159 on the floating-point environment. If the floating-point environment
26160 has a zeroing treatment of subnormal input values (such as indicated
26161 by the ``"denormal-fp-math"`` attribute), a subnormal value will be
26162 observed (will not be implicitly treated as zero).
26165 General Intrinsics
26166 ------------------
26168 This class of intrinsics is designed to be generic and has no specific
26169 purpose.
26171 '``llvm.var.annotation``' Intrinsic
26172 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26174 Syntax:
26175 """""""
26179       declare void @llvm.var.annotation(ptr <val>, ptr <str>, ptr <str>, i32  <int>)
26181 Overview:
26182 """""""""
26184 The '``llvm.var.annotation``' intrinsic.
26186 Arguments:
26187 """"""""""
26189 The first argument is a pointer to a value, the second is a pointer to a
26190 global string, the third is a pointer to a global string which is the
26191 source file name, and the last argument is the line number.
26193 Semantics:
26194 """"""""""
26196 This intrinsic allows annotation of local variables with arbitrary
26197 strings. This can be useful for special purpose optimizations that want
26198 to look for these annotations. These have no other defined use; they are
26199 ignored by code generation and optimization.
26201 '``llvm.ptr.annotation.*``' Intrinsic
26202 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26204 Syntax:
26205 """""""
26207 This is an overloaded intrinsic. You can use '``llvm.ptr.annotation``' on a
26208 pointer to an integer of any width. *NOTE* you must specify an address space for
26209 the pointer. The identifier for the default address space is the integer
26210 '``0``'.
26214       declare ptr @llvm.ptr.annotation.p0(ptr <val>, ptr <str>, ptr <str>, i32 <int>)
26215       declare ptr @llvm.ptr.annotation.p1(ptr addrspace(1) <val>, ptr <str>, ptr <str>, i32 <int>)
26217 Overview:
26218 """""""""
26220 The '``llvm.ptr.annotation``' intrinsic.
26222 Arguments:
26223 """"""""""
26225 The first argument is a pointer to an integer value of arbitrary bitwidth
26226 (result of some expression), the second is a pointer to a global string, the
26227 third is a pointer to a global string which is the source file name, and the
26228 last argument is the line number. It returns the value of the first argument.
26230 Semantics:
26231 """"""""""
26233 This intrinsic allows annotation of a pointer to an integer with arbitrary
26234 strings. This can be useful for special purpose optimizations that want to look
26235 for these annotations. These have no other defined use; transformations preserve
26236 annotations on a best-effort basis but are allowed to replace the intrinsic with
26237 its first argument without breaking semantics and the intrinsic is completely
26238 dropped during instruction selection.
26240 '``llvm.annotation.*``' Intrinsic
26241 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26243 Syntax:
26244 """""""
26246 This is an overloaded intrinsic. You can use '``llvm.annotation``' on
26247 any integer bit width.
26251       declare i8 @llvm.annotation.i8(i8 <val>, ptr <str>, ptr <str>, i32  <int>)
26252       declare i16 @llvm.annotation.i16(i16 <val>, ptr <str>, ptr <str>, i32  <int>)
26253       declare i32 @llvm.annotation.i32(i32 <val>, ptr <str>, ptr <str>, i32  <int>)
26254       declare i64 @llvm.annotation.i64(i64 <val>, ptr <str>, ptr <str>, i32  <int>)
26255       declare i256 @llvm.annotation.i256(i256 <val>, ptr <str>, ptr <str>, i32  <int>)
26257 Overview:
26258 """""""""
26260 The '``llvm.annotation``' intrinsic.
26262 Arguments:
26263 """"""""""
26265 The first argument is an integer value (result of some expression), the
26266 second is a pointer to a global string, the third is a pointer to a
26267 global string which is the source file name, and the last argument is
26268 the line number. It returns the value of the first argument.
26270 Semantics:
26271 """"""""""
26273 This intrinsic allows annotations to be put on arbitrary expressions with
26274 arbitrary strings. This can be useful for special purpose optimizations that
26275 want to look for these annotations. These have no other defined use;
26276 transformations preserve annotations on a best-effort basis but are allowed to
26277 replace the intrinsic with its first argument without breaking semantics and the
26278 intrinsic is completely dropped during instruction selection.
26280 '``llvm.codeview.annotation``' Intrinsic
26281 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26283 Syntax:
26284 """""""
26286 This annotation emits a label at its program point and an associated
26287 ``S_ANNOTATION`` codeview record with some additional string metadata. This is
26288 used to implement MSVC's ``__annotation`` intrinsic. It is marked
26289 ``noduplicate``, so calls to this intrinsic prevent inlining and should be
26290 considered expensive.
26294       declare void @llvm.codeview.annotation(metadata)
26296 Arguments:
26297 """"""""""
26299 The argument should be an MDTuple containing any number of MDStrings.
26301 '``llvm.trap``' Intrinsic
26302 ^^^^^^^^^^^^^^^^^^^^^^^^^
26304 Syntax:
26305 """""""
26309       declare void @llvm.trap() cold noreturn nounwind
26311 Overview:
26312 """""""""
26314 The '``llvm.trap``' intrinsic.
26316 Arguments:
26317 """"""""""
26319 None.
26321 Semantics:
26322 """"""""""
26324 This intrinsic is lowered to the target dependent trap instruction. If
26325 the target does not have a trap instruction, this intrinsic will be
26326 lowered to a call of the ``abort()`` function.
26328 '``llvm.debugtrap``' Intrinsic
26329 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26331 Syntax:
26332 """""""
26336       declare void @llvm.debugtrap() nounwind
26338 Overview:
26339 """""""""
26341 The '``llvm.debugtrap``' intrinsic.
26343 Arguments:
26344 """"""""""
26346 None.
26348 Semantics:
26349 """"""""""
26351 This intrinsic is lowered to code which is intended to cause an
26352 execution trap with the intention of requesting the attention of a
26353 debugger.
26355 '``llvm.ubsantrap``' Intrinsic
26356 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26358 Syntax:
26359 """""""
26363       declare void @llvm.ubsantrap(i8 immarg) cold noreturn nounwind
26365 Overview:
26366 """""""""
26368 The '``llvm.ubsantrap``' intrinsic.
26370 Arguments:
26371 """"""""""
26373 An integer describing the kind of failure detected.
26375 Semantics:
26376 """"""""""
26378 This intrinsic is lowered to code which is intended to cause an execution trap,
26379 embedding the argument into encoding of that trap somehow to discriminate
26380 crashes if possible.
26382 Equivalent to ``@llvm.trap`` for targets that do not support this behaviour.
26384 '``llvm.stackprotector``' Intrinsic
26385 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26387 Syntax:
26388 """""""
26392       declare void @llvm.stackprotector(ptr <guard>, ptr <slot>)
26394 Overview:
26395 """""""""
26397 The ``llvm.stackprotector`` intrinsic takes the ``guard`` and stores it
26398 onto the stack at ``slot``. The stack slot is adjusted to ensure that it
26399 is placed on the stack before local variables.
26401 Arguments:
26402 """"""""""
26404 The ``llvm.stackprotector`` intrinsic requires two pointer arguments.
26405 The first argument is the value loaded from the stack guard
26406 ``@__stack_chk_guard``. The second variable is an ``alloca`` that has
26407 enough space to hold the value of the guard.
26409 Semantics:
26410 """"""""""
26412 This intrinsic causes the prologue/epilogue inserter to force the position of
26413 the ``AllocaInst`` stack slot to be before local variables on the stack. This is
26414 to ensure that if a local variable on the stack is overwritten, it will destroy
26415 the value of the guard. When the function exits, the guard on the stack is
26416 checked against the original guard by ``llvm.stackprotectorcheck``. If they are
26417 different, then ``llvm.stackprotectorcheck`` causes the program to abort by
26418 calling the ``__stack_chk_fail()`` function.
26420 '``llvm.stackguard``' Intrinsic
26421 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26423 Syntax:
26424 """""""
26428       declare ptr @llvm.stackguard()
26430 Overview:
26431 """""""""
26433 The ``llvm.stackguard`` intrinsic returns the system stack guard value.
26435 It should not be generated by frontends, since it is only for internal usage.
26436 The reason why we create this intrinsic is that we still support IR form Stack
26437 Protector in FastISel.
26439 Arguments:
26440 """"""""""
26442 None.
26444 Semantics:
26445 """"""""""
26447 On some platforms, the value returned by this intrinsic remains unchanged
26448 between loads in the same thread. On other platforms, it returns the same
26449 global variable value, if any, e.g. ``@__stack_chk_guard``.
26451 Currently some platforms have IR-level customized stack guard loading (e.g.
26452 X86 Linux) that is not handled by ``llvm.stackguard()``, while they should be
26453 in the future.
26455 '``llvm.objectsize``' Intrinsic
26456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26458 Syntax:
26459 """""""
26463       declare i32 @llvm.objectsize.i32(ptr <object>, i1 <min>, i1 <nullunknown>, i1 <dynamic>)
26464       declare i64 @llvm.objectsize.i64(ptr <object>, i1 <min>, i1 <nullunknown>, i1 <dynamic>)
26466 Overview:
26467 """""""""
26469 The ``llvm.objectsize`` intrinsic is designed to provide information to the
26470 optimizer to determine whether a) an operation (like memcpy) will overflow a
26471 buffer that corresponds to an object, or b) that a runtime check for overflow
26472 isn't necessary. An object in this context means an allocation of a specific
26473 class, structure, array, or other object.
26475 Arguments:
26476 """"""""""
26478 The ``llvm.objectsize`` intrinsic takes four arguments. The first argument is a
26479 pointer to or into the ``object``. The second argument determines whether
26480 ``llvm.objectsize`` returns 0 (if true) or -1 (if false) when the object size is
26481 unknown. The third argument controls how ``llvm.objectsize`` acts when ``null``
26482 in address space 0 is used as its pointer argument. If it's ``false``,
26483 ``llvm.objectsize`` reports 0 bytes available when given ``null``. Otherwise, if
26484 the ``null`` is in a non-zero address space or if ``true`` is given for the
26485 third argument of ``llvm.objectsize``, we assume its size is unknown. The fourth
26486 argument to ``llvm.objectsize`` determines if the value should be evaluated at
26487 runtime.
26489 The second, third, and fourth arguments only accept constants.
26491 Semantics:
26492 """"""""""
26494 The ``llvm.objectsize`` intrinsic is lowered to a value representing the size of
26495 the object concerned. If the size cannot be determined, ``llvm.objectsize``
26496 returns ``i32/i64 -1 or 0`` (depending on the ``min`` argument).
26498 '``llvm.expect``' Intrinsic
26499 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
26501 Syntax:
26502 """""""
26504 This is an overloaded intrinsic. You can use ``llvm.expect`` on any
26505 integer bit width.
26509       declare i1 @llvm.expect.i1(i1 <val>, i1 <expected_val>)
26510       declare i32 @llvm.expect.i32(i32 <val>, i32 <expected_val>)
26511       declare i64 @llvm.expect.i64(i64 <val>, i64 <expected_val>)
26513 Overview:
26514 """""""""
26516 The ``llvm.expect`` intrinsic provides information about expected (the
26517 most probable) value of ``val``, which can be used by optimizers.
26519 Arguments:
26520 """"""""""
26522 The ``llvm.expect`` intrinsic takes two arguments. The first argument is
26523 a value. The second argument is an expected value.
26525 Semantics:
26526 """"""""""
26528 This intrinsic is lowered to the ``val``.
26530 '``llvm.expect.with.probability``' Intrinsic
26531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26533 Syntax:
26534 """""""
26536 This intrinsic is similar to ``llvm.expect``. This is an overloaded intrinsic.
26537 You can use ``llvm.expect.with.probability`` on any integer bit width.
26541       declare i1 @llvm.expect.with.probability.i1(i1 <val>, i1 <expected_val>, double <prob>)
26542       declare i32 @llvm.expect.with.probability.i32(i32 <val>, i32 <expected_val>, double <prob>)
26543       declare i64 @llvm.expect.with.probability.i64(i64 <val>, i64 <expected_val>, double <prob>)
26545 Overview:
26546 """""""""
26548 The ``llvm.expect.with.probability`` intrinsic provides information about
26549 expected value of ``val`` with probability(or confidence) ``prob``, which can
26550 be used by optimizers.
26552 Arguments:
26553 """"""""""
26555 The ``llvm.expect.with.probability`` intrinsic takes three arguments. The first
26556 argument is a value. The second argument is an expected value. The third
26557 argument is a probability.
26559 Semantics:
26560 """"""""""
26562 This intrinsic is lowered to the ``val``.
26564 .. _int_assume:
26566 '``llvm.assume``' Intrinsic
26567 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26569 Syntax:
26570 """""""
26574       declare void @llvm.assume(i1 %cond)
26576 Overview:
26577 """""""""
26579 The ``llvm.assume`` allows the optimizer to assume that the provided
26580 condition is true. This information can then be used in simplifying other parts
26581 of the code.
26583 More complex assumptions can be encoded as
26584 :ref:`assume operand bundles <assume_opbundles>`.
26586 Arguments:
26587 """"""""""
26589 The argument of the call is the condition which the optimizer may assume is
26590 always true.
26592 Semantics:
26593 """"""""""
26595 The intrinsic allows the optimizer to assume that the provided condition is
26596 always true whenever the control flow reaches the intrinsic call. No code is
26597 generated for this intrinsic, and instructions that contribute only to the
26598 provided condition are not used for code generation. If the condition is
26599 violated during execution, the behavior is undefined.
26601 Note that the optimizer might limit the transformations performed on values
26602 used by the ``llvm.assume`` intrinsic in order to preserve the instructions
26603 only used to form the intrinsic's input argument. This might prove undesirable
26604 if the extra information provided by the ``llvm.assume`` intrinsic does not cause
26605 sufficient overall improvement in code quality. For this reason,
26606 ``llvm.assume`` should not be used to document basic mathematical invariants
26607 that the optimizer can otherwise deduce or facts that are of little use to the
26608 optimizer.
26610 .. _int_ssa_copy:
26612 '``llvm.ssa.copy``' Intrinsic
26613 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26615 Syntax:
26616 """""""
26620       declare type @llvm.ssa.copy(type returned %operand) memory(none)
26622 Arguments:
26623 """"""""""
26625 The first argument is an operand which is used as the returned value.
26627 Overview:
26628 """"""""""
26630 The ``llvm.ssa.copy`` intrinsic can be used to attach information to
26631 operations by copying them and giving them new names.  For example,
26632 the PredicateInfo utility uses it to build Extended SSA form, and
26633 attach various forms of information to operands that dominate specific
26634 uses.  It is not meant for general use, only for building temporary
26635 renaming forms that require value splits at certain points.
26637 .. _type.test:
26639 '``llvm.type.test``' Intrinsic
26640 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26642 Syntax:
26643 """""""
26647       declare i1 @llvm.type.test(ptr %ptr, metadata %type) nounwind memory(none)
26650 Arguments:
26651 """"""""""
26653 The first argument is a pointer to be tested. The second argument is a
26654 metadata object representing a :doc:`type identifier <TypeMetadata>`.
26656 Overview:
26657 """""""""
26659 The ``llvm.type.test`` intrinsic tests whether the given pointer is associated
26660 with the given type identifier.
26662 .. _type.checked.load:
26664 '``llvm.type.checked.load``' Intrinsic
26665 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26667 Syntax:
26668 """""""
26672       declare {ptr, i1} @llvm.type.checked.load(ptr %ptr, i32 %offset, metadata %type) nounwind memory(argmem: read)
26675 Arguments:
26676 """"""""""
26678 The first argument is a pointer from which to load a function pointer. The
26679 second argument is the byte offset from which to load the function pointer. The
26680 third argument is a metadata object representing a :doc:`type identifier
26681 <TypeMetadata>`.
26683 Overview:
26684 """""""""
26686 The ``llvm.type.checked.load`` intrinsic safely loads a function pointer from a
26687 virtual table pointer using type metadata. This intrinsic is used to implement
26688 control flow integrity in conjunction with virtual call optimization. The
26689 virtual call optimization pass will optimize away ``llvm.type.checked.load``
26690 intrinsics associated with devirtualized calls, thereby removing the type
26691 check in cases where it is not needed to enforce the control flow integrity
26692 constraint.
26694 If the given pointer is associated with a type metadata identifier, this
26695 function returns true as the second element of its return value. (Note that
26696 the function may also return true if the given pointer is not associated
26697 with a type metadata identifier.) If the function's return value's second
26698 element is true, the following rules apply to the first element:
26700 - If the given pointer is associated with the given type metadata identifier,
26701   it is the function pointer loaded from the given byte offset from the given
26702   pointer.
26704 - If the given pointer is not associated with the given type metadata
26705   identifier, it is one of the following (the choice of which is unspecified):
26707   1. The function pointer that would have been loaded from an arbitrarily chosen
26708      (through an unspecified mechanism) pointer associated with the type
26709      metadata.
26711   2. If the function has a non-void return type, a pointer to a function that
26712      returns an unspecified value without causing side effects.
26714 If the function's return value's second element is false, the value of the
26715 first element is undefined.
26717 .. _type.checked.load.relative:
26719 '``llvm.type.checked.load.relative``' Intrinsic
26720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26722 Syntax:
26723 """""""
26727       declare {ptr, i1} @llvm.type.checked.load.relative(ptr %ptr, i32 %offset, metadata %type) argmemonly nounwind readonly
26729 Overview:
26730 """""""""
26732 The ``llvm.type.checked.load.relative`` intrinsic loads a relative pointer to a
26733 function from a virtual table pointer using metadata. Otherwise, its semantic is
26734 identical to the ``llvm.type.checked.load`` intrinsic.
26736 A relative pointer is a pointer to an offset to the pointed to value. The
26737 address of the underlying pointer of the relative pointer is obtained by adding
26738 the offset to the address of the offset value.
26740 '``llvm.arithmetic.fence``' Intrinsic
26741 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26743 Syntax:
26744 """""""
26748       declare <type>
26749       @llvm.arithmetic.fence(<type> <op>)
26751 Overview:
26752 """""""""
26754 The purpose of the ``llvm.arithmetic.fence`` intrinsic
26755 is to prevent the optimizer from performing fast-math optimizations,
26756 particularly reassociation,
26757 between the argument and the expression that contains the argument.
26758 It can be used to preserve the parentheses in the source language.
26760 Arguments:
26761 """"""""""
26763 The ``llvm.arithmetic.fence`` intrinsic takes only one argument.
26764 The argument and the return value are floating-point numbers,
26765 or vector floating-point numbers, of the same type.
26767 Semantics:
26768 """"""""""
26770 This intrinsic returns the value of its operand. The optimizer can optimize
26771 the argument, but the optimizer cannot hoist any component of the operand
26772 to the containing context, and the optimizer cannot move the calculation of
26773 any expression in the containing context into the operand.
26776 '``llvm.donothing``' Intrinsic
26777 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26779 Syntax:
26780 """""""
26784       declare void @llvm.donothing() nounwind memory(none)
26786 Overview:
26787 """""""""
26789 The ``llvm.donothing`` intrinsic doesn't perform any operation. It's one of only
26790 three intrinsics (besides ``llvm.experimental.patchpoint`` and
26791 ``llvm.experimental.gc.statepoint``) that can be called with an invoke
26792 instruction.
26794 Arguments:
26795 """"""""""
26797 None.
26799 Semantics:
26800 """"""""""
26802 This intrinsic does nothing, and it's removed by optimizers and ignored
26803 by codegen.
26805 '``llvm.experimental.deoptimize``' Intrinsic
26806 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26808 Syntax:
26809 """""""
26813       declare type @llvm.experimental.deoptimize(...) [ "deopt"(...) ]
26815 Overview:
26816 """""""""
26818 This intrinsic, together with :ref:`deoptimization operand bundles
26819 <deopt_opbundles>`, allow frontends to express transfer of control and
26820 frame-local state from the currently executing (typically more specialized,
26821 hence faster) version of a function into another (typically more generic, hence
26822 slower) version.
26824 In languages with a fully integrated managed runtime like Java and JavaScript
26825 this intrinsic can be used to implement "uncommon trap" or "side exit" like
26826 functionality.  In unmanaged languages like C and C++, this intrinsic can be
26827 used to represent the slow paths of specialized functions.
26830 Arguments:
26831 """"""""""
26833 The intrinsic takes an arbitrary number of arguments, whose meaning is
26834 decided by the :ref:`lowering strategy<deoptimize_lowering>`.
26836 Semantics:
26837 """"""""""
26839 The ``@llvm.experimental.deoptimize`` intrinsic executes an attached
26840 deoptimization continuation (denoted using a :ref:`deoptimization
26841 operand bundle <deopt_opbundles>`) and returns the value returned by
26842 the deoptimization continuation.  Defining the semantic properties of
26843 the continuation itself is out of scope of the language reference --
26844 as far as LLVM is concerned, the deoptimization continuation can
26845 invoke arbitrary side effects, including reading from and writing to
26846 the entire heap.
26848 Deoptimization continuations expressed using ``"deopt"`` operand bundles always
26849 continue execution to the end of the physical frame containing them, so all
26850 calls to ``@llvm.experimental.deoptimize`` must be in "tail position":
26852    - ``@llvm.experimental.deoptimize`` cannot be invoked.
26853    - The call must immediately precede a :ref:`ret <i_ret>` instruction.
26854    - The ``ret`` instruction must return the value produced by the
26855      ``@llvm.experimental.deoptimize`` call if there is one, or void.
26857 Note that the above restrictions imply that the return type for a call to
26858 ``@llvm.experimental.deoptimize`` will match the return type of its immediate
26859 caller.
26861 The inliner composes the ``"deopt"`` continuations of the caller into the
26862 ``"deopt"`` continuations present in the inlinee, and also updates calls to this
26863 intrinsic to return directly from the frame of the function it inlined into.
26865 All declarations of ``@llvm.experimental.deoptimize`` must share the
26866 same calling convention.
26868 .. _deoptimize_lowering:
26870 Lowering:
26871 """""""""
26873 Calls to ``@llvm.experimental.deoptimize`` are lowered to calls to the
26874 symbol ``__llvm_deoptimize`` (it is the frontend's responsibility to
26875 ensure that this symbol is defined).  The call arguments to
26876 ``@llvm.experimental.deoptimize`` are lowered as if they were formal
26877 arguments of the specified types, and not as varargs.
26880 '``llvm.experimental.guard``' Intrinsic
26881 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26883 Syntax:
26884 """""""
26888       declare void @llvm.experimental.guard(i1, ...) [ "deopt"(...) ]
26890 Overview:
26891 """""""""
26893 This intrinsic, together with :ref:`deoptimization operand bundles
26894 <deopt_opbundles>`, allows frontends to express guards or checks on
26895 optimistic assumptions made during compilation.  The semantics of
26896 ``@llvm.experimental.guard`` is defined in terms of
26897 ``@llvm.experimental.deoptimize`` -- its body is defined to be
26898 equivalent to:
26900 .. code-block:: text
26902   define void @llvm.experimental.guard(i1 %pred, <args...>) {
26903     %realPred = and i1 %pred, undef
26904     br i1 %realPred, label %continue, label %leave [, !make.implicit !{}]
26906   leave:
26907     call void @llvm.experimental.deoptimize(<args...>) [ "deopt"() ]
26908     ret void
26910   continue:
26911     ret void
26912   }
26915 with the optional ``[, !make.implicit !{}]`` present if and only if it
26916 is present on the call site.  For more details on ``!make.implicit``,
26917 see :doc:`FaultMaps`.
26919 In words, ``@llvm.experimental.guard`` executes the attached
26920 ``"deopt"`` continuation if (but **not** only if) its first argument
26921 is ``false``.  Since the optimizer is allowed to replace the ``undef``
26922 with an arbitrary value, it can optimize guard to fail "spuriously",
26923 i.e. without the original condition being false (hence the "not only
26924 if"); and this allows for "check widening" type optimizations.
26926 ``@llvm.experimental.guard`` cannot be invoked.
26928 After ``@llvm.experimental.guard`` was first added, a more general
26929 formulation was found in ``@llvm.experimental.widenable.condition``.
26930 Support for ``@llvm.experimental.guard`` is slowly being rephrased in
26931 terms of this alternate.
26933 '``llvm.experimental.widenable.condition``' Intrinsic
26934 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26936 Syntax:
26937 """""""
26941       declare i1 @llvm.experimental.widenable.condition()
26943 Overview:
26944 """""""""
26946 This intrinsic represents a "widenable condition" which is
26947 boolean expressions with the following property: whether this
26948 expression is `true` or `false`, the program is correct and
26949 well-defined.
26951 Together with :ref:`deoptimization operand bundles <deopt_opbundles>`,
26952 ``@llvm.experimental.widenable.condition`` allows frontends to
26953 express guards or checks on optimistic assumptions made during
26954 compilation and represent them as branch instructions on special
26955 conditions.
26957 While this may appear similar in semantics to `undef`, it is very
26958 different in that an invocation produces a particular, singular
26959 value. It is also intended to be lowered late, and remain available
26960 for specific optimizations and transforms that can benefit from its
26961 special properties.
26963 Arguments:
26964 """"""""""
26966 None.
26968 Semantics:
26969 """"""""""
26971 The intrinsic ``@llvm.experimental.widenable.condition()``
26972 returns either `true` or `false`. For each evaluation of a call
26973 to this intrinsic, the program must be valid and correct both if
26974 it returns `true` and if it returns `false`. This allows
26975 transformation passes to replace evaluations of this intrinsic
26976 with either value whenever one is beneficial.
26978 When used in a branch condition, it allows us to choose between
26979 two alternative correct solutions for the same problem, like
26980 in example below:
26982 .. code-block:: text
26984     %cond = call i1 @llvm.experimental.widenable.condition()
26985     br i1 %cond, label %solution_1, label %solution_2
26987   label %fast_path:
26988     ; Apply memory-consuming but fast solution for a task.
26990   label %slow_path:
26991     ; Cheap in memory but slow solution.
26993 Whether the result of intrinsic's call is `true` or `false`,
26994 it should be correct to pick either solution. We can switch
26995 between them by replacing the result of
26996 ``@llvm.experimental.widenable.condition`` with different
26997 `i1` expressions.
26999 This is how it can be used to represent guards as widenable branches:
27001 .. code-block:: text
27003   block:
27004     ; Unguarded instructions
27005     call void @llvm.experimental.guard(i1 %cond, <args...>) ["deopt"(<deopt_args...>)]
27006     ; Guarded instructions
27008 Can be expressed in an alternative equivalent form of explicit branch using
27009 ``@llvm.experimental.widenable.condition``:
27011 .. code-block:: text
27013   block:
27014     ; Unguarded instructions
27015     %widenable_condition = call i1 @llvm.experimental.widenable.condition()
27016     %guard_condition = and i1 %cond, %widenable_condition
27017     br i1 %guard_condition, label %guarded, label %deopt
27019   guarded:
27020     ; Guarded instructions
27022   deopt:
27023     call type @llvm.experimental.deoptimize(<args...>) [ "deopt"(<deopt_args...>) ]
27025 So the block `guarded` is only reachable when `%cond` is `true`,
27026 and it should be valid to go to the block `deopt` whenever `%cond`
27027 is `true` or `false`.
27029 ``@llvm.experimental.widenable.condition`` will never throw, thus
27030 it cannot be invoked.
27032 Guard widening:
27033 """""""""""""""
27035 When ``@llvm.experimental.widenable.condition()`` is used in
27036 condition of a guard represented as explicit branch, it is
27037 legal to widen the guard's condition with any additional
27038 conditions.
27040 Guard widening looks like replacement of
27042 .. code-block:: text
27044   %widenable_cond = call i1 @llvm.experimental.widenable.condition()
27045   %guard_cond = and i1 %cond, %widenable_cond
27046   br i1 %guard_cond, label %guarded, label %deopt
27048 with
27050 .. code-block:: text
27052   %widenable_cond = call i1 @llvm.experimental.widenable.condition()
27053   %new_cond = and i1 %any_other_cond, %widenable_cond
27054   %new_guard_cond = and i1 %cond, %new_cond
27055   br i1 %new_guard_cond, label %guarded, label %deopt
27057 for this branch. Here `%any_other_cond` is an arbitrarily chosen
27058 well-defined `i1` value. By making guard widening, we may
27059 impose stricter conditions on `guarded` block and bail to the
27060 deopt when the new condition is not met.
27062 Lowering:
27063 """""""""
27065 Default lowering strategy is replacing the result of
27066 call of ``@llvm.experimental.widenable.condition``  with
27067 constant `true`. However it is always correct to replace
27068 it with any other `i1` value. Any pass can
27069 freely do it if it can benefit from non-default lowering.
27072 '``llvm.load.relative``' Intrinsic
27073 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27075 Syntax:
27076 """""""
27080       declare ptr @llvm.load.relative.iN(ptr %ptr, iN %offset) nounwind memory(argmem: read)
27082 Overview:
27083 """""""""
27085 This intrinsic loads a 32-bit value from the address ``%ptr + %offset``,
27086 adds ``%ptr`` to that value and returns it. The constant folder specifically
27087 recognizes the form of this intrinsic and the constant initializers it may
27088 load from; if a loaded constant initializer is known to have the form
27089 ``i32 trunc(x - %ptr)``, the intrinsic call is folded to ``x``.
27091 LLVM provides that the calculation of such a constant initializer will
27092 not overflow at link time under the medium code model if ``x`` is an
27093 ``unnamed_addr`` function. However, it does not provide this guarantee for
27094 a constant initializer folded into a function body. This intrinsic can be
27095 used to avoid the possibility of overflows when loading from such a constant.
27097 .. _llvm_sideeffect:
27099 '``llvm.sideeffect``' Intrinsic
27100 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27102 Syntax:
27103 """""""
27107       declare void @llvm.sideeffect() inaccessiblememonly nounwind willreturn
27109 Overview:
27110 """""""""
27112 The ``llvm.sideeffect`` intrinsic doesn't perform any operation. Optimizers
27113 treat it as having side effects, so it can be inserted into a loop to
27114 indicate that the loop shouldn't be assumed to terminate (which could
27115 potentially lead to the loop being optimized away entirely), even if it's
27116 an infinite loop with no other side effects.
27118 Arguments:
27119 """"""""""
27121 None.
27123 Semantics:
27124 """"""""""
27126 This intrinsic actually does nothing, but optimizers must assume that it
27127 has externally observable side effects.
27129 '``llvm.is.constant.*``' Intrinsic
27130 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27132 Syntax:
27133 """""""
27135 This is an overloaded intrinsic. You can use llvm.is.constant with any argument type.
27139       declare i1 @llvm.is.constant.i32(i32 %operand) nounwind memory(none)
27140       declare i1 @llvm.is.constant.f32(float %operand) nounwind memory(none)
27141       declare i1 @llvm.is.constant.TYPENAME(TYPE %operand) nounwind memory(none)
27143 Overview:
27144 """""""""
27146 The '``llvm.is.constant``' intrinsic will return true if the argument
27147 is known to be a manifest compile-time constant. It is guaranteed to
27148 fold to either true or false before generating machine code.
27150 Semantics:
27151 """"""""""
27153 This intrinsic generates no code. If its argument is known to be a
27154 manifest compile-time constant value, then the intrinsic will be
27155 converted to a constant true value. Otherwise, it will be converted to
27156 a constant false value.
27158 In particular, note that if the argument is a constant expression
27159 which refers to a global (the address of which _is_ a constant, but
27160 not manifest during the compile), then the intrinsic evaluates to
27161 false.
27163 The result also intentionally depends on the result of optimization
27164 passes -- e.g., the result can change depending on whether a
27165 function gets inlined or not. A function's parameters are
27166 obviously not constant. However, a call like
27167 ``llvm.is.constant.i32(i32 %param)`` *can* return true after the
27168 function is inlined, if the value passed to the function parameter was
27169 a constant.
27171 On the other hand, if constant folding is not run, it will never
27172 evaluate to true, even in simple cases.
27174 .. _int_ptrmask:
27176 '``llvm.ptrmask``' Intrinsic
27177 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27179 Syntax:
27180 """""""
27184       declare ptrty llvm.ptrmask(ptrty %ptr, intty %mask) speculatable memory(none)
27186 Arguments:
27187 """"""""""
27189 The first argument is a pointer or vector of pointers. The second argument is
27190 an integer or vector of integers with the same bit width as the index type
27191 size of the first argument.
27193 Overview:
27194 """"""""""
27196 The ``llvm.ptrmask`` intrinsic masks out bits of the pointer according to a mask.
27197 This allows stripping data from tagged pointers without converting them to an
27198 integer (ptrtoint/inttoptr). As a consequence, we can preserve more information
27199 to facilitate alias analysis and underlying-object detection.
27201 Semantics:
27202 """"""""""
27204 The result of ``ptrmask(%ptr, %mask)`` is equivalent to the following expansion,
27205 where ``iPtrIdx`` is the index type size of the pointer::
27207     %intptr = ptrtoint ptr %ptr to iPtrIdx ; this may truncate
27208     %masked = and iPtrIdx %intptr, %mask
27209     %diff = sub iPtrIdx %masked, %intptr
27210     %result = getelementptr i8, ptr %ptr, iPtrIdx %diff
27212 If the pointer index type size is smaller than the pointer type size, this
27213 implies that pointer bits beyond the index size are not affected by this
27214 intrinsic. For integral pointers, it behaves as if the mask were extended with
27215 1 bits to the pointer type size.
27217 Both the returned pointer(s) and the first argument are based on the same
27218 underlying object (for more information on the *based on* terminology see
27219 :ref:`the pointer aliasing rules <pointeraliasing>`).
27221 The intrinsic only captures the pointer argument through the return value.
27223 .. _int_threadlocal_address:
27225 '``llvm.threadlocal.address``' Intrinsic
27226 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27228 Syntax:
27229 """""""
27233       declare ptr @llvm.threadlocal.address(ptr) nounwind willreturn memory(none)
27235 Arguments:
27236 """"""""""
27238 The first argument is a pointer, which refers to a thread local global.
27240 Semantics:
27241 """"""""""
27243 The address of a thread local global is not a constant, since it depends on
27244 the calling thread. The `llvm.threadlocal.address` intrinsic returns the
27245 address of the given thread local global in the calling thread.
27247 .. _int_vscale:
27249 '``llvm.vscale``' Intrinsic
27250 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
27252 Syntax:
27253 """""""
27257       declare i32 llvm.vscale.i32()
27258       declare i64 llvm.vscale.i64()
27260 Overview:
27261 """""""""
27263 The ``llvm.vscale`` intrinsic returns the value for ``vscale`` in scalable
27264 vectors such as ``<vscale x 16 x i8>``.
27266 Semantics:
27267 """"""""""
27269 ``vscale`` is a positive value that is constant throughout program
27270 execution, but is unknown at compile time.
27271 If the result value does not fit in the result type, then the result is
27272 a :ref:`poison value <poisonvalues>`.
27275 Stack Map Intrinsics
27276 --------------------
27278 LLVM provides experimental intrinsics to support runtime patching
27279 mechanisms commonly desired in dynamic language JITs. These intrinsics
27280 are described in :doc:`StackMaps`.
27282 Element Wise Atomic Memory Intrinsics
27283 -------------------------------------
27285 These intrinsics are similar to the standard library memory intrinsics except
27286 that they perform memory transfer as a sequence of atomic memory accesses.
27288 .. _int_memcpy_element_unordered_atomic:
27290 '``llvm.memcpy.element.unordered.atomic``' Intrinsic
27291 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27293 Syntax:
27294 """""""
27296 This is an overloaded intrinsic. You can use ``llvm.memcpy.element.unordered.atomic`` on
27297 any integer bit width and for different address spaces. Not all targets
27298 support all bit widths however.
27302       declare void @llvm.memcpy.element.unordered.atomic.p0.p0.i32(ptr <dest>,
27303                                                                    ptr <src>,
27304                                                                    i32 <len>,
27305                                                                    i32 <element_size>)
27306       declare void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr <dest>,
27307                                                                    ptr <src>,
27308                                                                    i64 <len>,
27309                                                                    i32 <element_size>)
27311 Overview:
27312 """""""""
27314 The '``llvm.memcpy.element.unordered.atomic.*``' intrinsic is a specialization of the
27315 '``llvm.memcpy.*``' intrinsic. It differs in that the ``dest`` and ``src`` are treated
27316 as arrays with elements that are exactly ``element_size`` bytes, and the copy between
27317 buffers uses a sequence of :ref:`unordered atomic <ordering>` load/store operations
27318 that are a positive integer multiple of the ``element_size`` in size.
27320 Arguments:
27321 """"""""""
27323 The first three arguments are the same as they are in the :ref:`@llvm.memcpy <int_memcpy>`
27324 intrinsic, with the added constraint that ``len`` is required to be a positive integer
27325 multiple of the ``element_size``. If ``len`` is not a positive integer multiple of
27326 ``element_size``, then the behaviour of the intrinsic is undefined.
27328 ``element_size`` must be a compile-time constant positive power of two no greater than
27329 target-specific atomic access size limit.
27331 For each of the input pointers ``align`` parameter attribute must be specified. It
27332 must be a power of two no less than the ``element_size``. Caller guarantees that
27333 both the source and destination pointers are aligned to that boundary.
27335 Semantics:
27336 """"""""""
27338 The '``llvm.memcpy.element.unordered.atomic.*``' intrinsic copies ``len`` bytes of
27339 memory from the source location to the destination location. These locations are not
27340 allowed to overlap. The memory copy is performed as a sequence of load/store operations
27341 where each access is guaranteed to be a multiple of ``element_size`` bytes wide and
27342 aligned at an ``element_size`` boundary.
27344 The order of the copy is unspecified. The same value may be read from the source
27345 buffer many times, but only one write is issued to the destination buffer per
27346 element. It is well defined to have concurrent reads and writes to both source and
27347 destination provided those reads and writes are unordered atomic when specified.
27349 This intrinsic does not provide any additional ordering guarantees over those
27350 provided by a set of unordered loads from the source location and stores to the
27351 destination.
27353 Lowering:
27354 """""""""
27356 In the most general case call to the '``llvm.memcpy.element.unordered.atomic.*``' is
27357 lowered to a call to the symbol ``__llvm_memcpy_element_unordered_atomic_*``. Where '*'
27358 is replaced with an actual element size. See :ref:`RewriteStatepointsForGC intrinsic
27359 lowering <RewriteStatepointsForGC_intrinsic_lowering>` for details on GC specific
27360 lowering.
27362 Optimizer is allowed to inline memory copy when it's profitable to do so.
27364 '``llvm.memmove.element.unordered.atomic``' Intrinsic
27365 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27367 Syntax:
27368 """""""
27370 This is an overloaded intrinsic. You can use
27371 ``llvm.memmove.element.unordered.atomic`` on any integer bit width and for
27372 different address spaces. Not all targets support all bit widths however.
27376       declare void @llvm.memmove.element.unordered.atomic.p0.p0.i32(ptr <dest>,
27377                                                                     ptr <src>,
27378                                                                     i32 <len>,
27379                                                                     i32 <element_size>)
27380       declare void @llvm.memmove.element.unordered.atomic.p0.p0.i64(ptr <dest>,
27381                                                                     ptr <src>,
27382                                                                     i64 <len>,
27383                                                                     i32 <element_size>)
27385 Overview:
27386 """""""""
27388 The '``llvm.memmove.element.unordered.atomic.*``' intrinsic is a specialization
27389 of the '``llvm.memmove.*``' intrinsic. It differs in that the ``dest`` and
27390 ``src`` are treated as arrays with elements that are exactly ``element_size``
27391 bytes, and the copy between buffers uses a sequence of
27392 :ref:`unordered atomic <ordering>` load/store operations that are a positive
27393 integer multiple of the ``element_size`` in size.
27395 Arguments:
27396 """"""""""
27398 The first three arguments are the same as they are in the
27399 :ref:`@llvm.memmove <int_memmove>` intrinsic, with the added constraint that
27400 ``len`` is required to be a positive integer multiple of the ``element_size``.
27401 If ``len`` is not a positive integer multiple of ``element_size``, then the
27402 behaviour of the intrinsic is undefined.
27404 ``element_size`` must be a compile-time constant positive power of two no
27405 greater than a target-specific atomic access size limit.
27407 For each of the input pointers the ``align`` parameter attribute must be
27408 specified. It must be a power of two no less than the ``element_size``. Caller
27409 guarantees that both the source and destination pointers are aligned to that
27410 boundary.
27412 Semantics:
27413 """"""""""
27415 The '``llvm.memmove.element.unordered.atomic.*``' intrinsic copies ``len`` bytes
27416 of memory from the source location to the destination location. These locations
27417 are allowed to overlap. The memory copy is performed as a sequence of load/store
27418 operations where each access is guaranteed to be a multiple of ``element_size``
27419 bytes wide and aligned at an ``element_size`` boundary.
27421 The order of the copy is unspecified. The same value may be read from the source
27422 buffer many times, but only one write is issued to the destination buffer per
27423 element. It is well defined to have concurrent reads and writes to both source
27424 and destination provided those reads and writes are unordered atomic when
27425 specified.
27427 This intrinsic does not provide any additional ordering guarantees over those
27428 provided by a set of unordered loads from the source location and stores to the
27429 destination.
27431 Lowering:
27432 """""""""
27434 In the most general case call to the
27435 '``llvm.memmove.element.unordered.atomic.*``' is lowered to a call to the symbol
27436 ``__llvm_memmove_element_unordered_atomic_*``. Where '*' is replaced with an
27437 actual element size. See :ref:`RewriteStatepointsForGC intrinsic lowering
27438 <RewriteStatepointsForGC_intrinsic_lowering>` for details on GC specific
27439 lowering.
27441 The optimizer is allowed to inline the memory copy when it's profitable to do so.
27443 .. _int_memset_element_unordered_atomic:
27445 '``llvm.memset.element.unordered.atomic``' Intrinsic
27446 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27448 Syntax:
27449 """""""
27451 This is an overloaded intrinsic. You can use ``llvm.memset.element.unordered.atomic`` on
27452 any integer bit width and for different address spaces. Not all targets
27453 support all bit widths however.
27457       declare void @llvm.memset.element.unordered.atomic.p0.i32(ptr <dest>,
27458                                                                 i8 <value>,
27459                                                                 i32 <len>,
27460                                                                 i32 <element_size>)
27461       declare void @llvm.memset.element.unordered.atomic.p0.i64(ptr <dest>,
27462                                                                 i8 <value>,
27463                                                                 i64 <len>,
27464                                                                 i32 <element_size>)
27466 Overview:
27467 """""""""
27469 The '``llvm.memset.element.unordered.atomic.*``' intrinsic is a specialization of the
27470 '``llvm.memset.*``' intrinsic. It differs in that the ``dest`` is treated as an array
27471 with elements that are exactly ``element_size`` bytes, and the assignment to that array
27472 uses uses a sequence of :ref:`unordered atomic <ordering>` store operations
27473 that are a positive integer multiple of the ``element_size`` in size.
27475 Arguments:
27476 """"""""""
27478 The first three arguments are the same as they are in the :ref:`@llvm.memset <int_memset>`
27479 intrinsic, with the added constraint that ``len`` is required to be a positive integer
27480 multiple of the ``element_size``. If ``len`` is not a positive integer multiple of
27481 ``element_size``, then the behaviour of the intrinsic is undefined.
27483 ``element_size`` must be a compile-time constant positive power of two no greater than
27484 target-specific atomic access size limit.
27486 The ``dest`` input pointer must have the ``align`` parameter attribute specified. It
27487 must be a power of two no less than the ``element_size``. Caller guarantees that
27488 the destination pointer is aligned to that boundary.
27490 Semantics:
27491 """"""""""
27493 The '``llvm.memset.element.unordered.atomic.*``' intrinsic sets the ``len`` bytes of
27494 memory starting at the destination location to the given ``value``. The memory is
27495 set with a sequence of store operations where each access is guaranteed to be a
27496 multiple of ``element_size`` bytes wide and aligned at an ``element_size`` boundary.
27498 The order of the assignment is unspecified. Only one write is issued to the
27499 destination buffer per element. It is well defined to have concurrent reads and
27500 writes to the destination provided those reads and writes are unordered atomic
27501 when specified.
27503 This intrinsic does not provide any additional ordering guarantees over those
27504 provided by a set of unordered stores to the destination.
27506 Lowering:
27507 """""""""
27509 In the most general case call to the '``llvm.memset.element.unordered.atomic.*``' is
27510 lowered to a call to the symbol ``__llvm_memset_element_unordered_atomic_*``. Where '*'
27511 is replaced with an actual element size.
27513 The optimizer is allowed to inline the memory assignment when it's profitable to do so.
27515 Objective-C ARC Runtime Intrinsics
27516 ----------------------------------
27518 LLVM provides intrinsics that lower to Objective-C ARC runtime entry points.
27519 LLVM is aware of the semantics of these functions, and optimizes based on that
27520 knowledge. You can read more about the details of Objective-C ARC `here
27521 <https://clang.llvm.org/docs/AutomaticReferenceCounting.html>`_.
27523 '``llvm.objc.autorelease``' Intrinsic
27524 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27526 Syntax:
27527 """""""
27530       declare ptr @llvm.objc.autorelease(ptr)
27532 Lowering:
27533 """""""""
27535 Lowers to a call to `objc_autorelease <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-autorelease>`_.
27537 '``llvm.objc.autoreleasePoolPop``' Intrinsic
27538 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27540 Syntax:
27541 """""""
27544       declare void @llvm.objc.autoreleasePoolPop(ptr)
27546 Lowering:
27547 """""""""
27549 Lowers to a call to `objc_autoreleasePoolPop <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-autoreleasepoolpop-void-pool>`_.
27551 '``llvm.objc.autoreleasePoolPush``' Intrinsic
27552 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27554 Syntax:
27555 """""""
27558       declare ptr @llvm.objc.autoreleasePoolPush()
27560 Lowering:
27561 """""""""
27563 Lowers to a call to `objc_autoreleasePoolPush <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-autoreleasepoolpush-void>`_.
27565 '``llvm.objc.autoreleaseReturnValue``' Intrinsic
27566 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27568 Syntax:
27569 """""""
27572       declare ptr @llvm.objc.autoreleaseReturnValue(ptr)
27574 Lowering:
27575 """""""""
27577 Lowers to a call to `objc_autoreleaseReturnValue <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-autoreleasereturnvalue>`_.
27579 '``llvm.objc.copyWeak``' Intrinsic
27580 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27582 Syntax:
27583 """""""
27586       declare void @llvm.objc.copyWeak(ptr, ptr)
27588 Lowering:
27589 """""""""
27591 Lowers to a call to `objc_copyWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-copyweak-id-dest-id-src>`_.
27593 '``llvm.objc.destroyWeak``' Intrinsic
27594 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27596 Syntax:
27597 """""""
27600       declare void @llvm.objc.destroyWeak(ptr)
27602 Lowering:
27603 """""""""
27605 Lowers to a call to `objc_destroyWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-destroyweak-id-object>`_.
27607 '``llvm.objc.initWeak``' Intrinsic
27608 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27610 Syntax:
27611 """""""
27614       declare ptr @llvm.objc.initWeak(ptr, ptr)
27616 Lowering:
27617 """""""""
27619 Lowers to a call to `objc_initWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-initweak>`_.
27621 '``llvm.objc.loadWeak``' Intrinsic
27622 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27624 Syntax:
27625 """""""
27628       declare ptr @llvm.objc.loadWeak(ptr)
27630 Lowering:
27631 """""""""
27633 Lowers to a call to `objc_loadWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-loadweak>`_.
27635 '``llvm.objc.loadWeakRetained``' Intrinsic
27636 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27638 Syntax:
27639 """""""
27642       declare ptr @llvm.objc.loadWeakRetained(ptr)
27644 Lowering:
27645 """""""""
27647 Lowers to a call to `objc_loadWeakRetained <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-loadweakretained>`_.
27649 '``llvm.objc.moveWeak``' Intrinsic
27650 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27652 Syntax:
27653 """""""
27656       declare void @llvm.objc.moveWeak(ptr, ptr)
27658 Lowering:
27659 """""""""
27661 Lowers to a call to `objc_moveWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-moveweak-id-dest-id-src>`_.
27663 '``llvm.objc.release``' Intrinsic
27664 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27666 Syntax:
27667 """""""
27670       declare void @llvm.objc.release(ptr)
27672 Lowering:
27673 """""""""
27675 Lowers to a call to `objc_release <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-release-id-value>`_.
27677 '``llvm.objc.retain``' Intrinsic
27678 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27680 Syntax:
27681 """""""
27684       declare ptr @llvm.objc.retain(ptr)
27686 Lowering:
27687 """""""""
27689 Lowers to a call to `objc_retain <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retain>`_.
27691 '``llvm.objc.retainAutorelease``' Intrinsic
27692 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27694 Syntax:
27695 """""""
27698       declare ptr @llvm.objc.retainAutorelease(ptr)
27700 Lowering:
27701 """""""""
27703 Lowers to a call to `objc_retainAutorelease <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retainautorelease>`_.
27705 '``llvm.objc.retainAutoreleaseReturnValue``' Intrinsic
27706 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27708 Syntax:
27709 """""""
27712       declare ptr @llvm.objc.retainAutoreleaseReturnValue(ptr)
27714 Lowering:
27715 """""""""
27717 Lowers to a call to `objc_retainAutoreleaseReturnValue <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retainautoreleasereturnvalue>`_.
27719 '``llvm.objc.retainAutoreleasedReturnValue``' Intrinsic
27720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27722 Syntax:
27723 """""""
27726       declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)
27728 Lowering:
27729 """""""""
27731 Lowers to a call to `objc_retainAutoreleasedReturnValue <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retainautoreleasedreturnvalue>`_.
27733 '``llvm.objc.retainBlock``' Intrinsic
27734 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27736 Syntax:
27737 """""""
27740       declare ptr @llvm.objc.retainBlock(ptr)
27742 Lowering:
27743 """""""""
27745 Lowers to a call to `objc_retainBlock <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retainblock>`_.
27747 '``llvm.objc.storeStrong``' Intrinsic
27748 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27750 Syntax:
27751 """""""
27754       declare void @llvm.objc.storeStrong(ptr, ptr)
27756 Lowering:
27757 """""""""
27759 Lowers to a call to `objc_storeStrong <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#void-objc-storestrong-id-object-id-value>`_.
27761 '``llvm.objc.storeWeak``' Intrinsic
27762 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27764 Syntax:
27765 """""""
27768       declare ptr @llvm.objc.storeWeak(ptr, ptr)
27770 Lowering:
27771 """""""""
27773 Lowers to a call to `objc_storeWeak <https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-storeweak>`_.
27775 Preserving Debug Information Intrinsics
27776 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27778 These intrinsics are used to carry certain debuginfo together with
27779 IR-level operations. For example, it may be desirable to
27780 know the structure/union name and the original user-level field
27781 indices. Such information got lost in IR GetElementPtr instruction
27782 since the IR types are different from debugInfo types and unions
27783 are converted to structs in IR.
27785 '``llvm.preserve.array.access.index``' Intrinsic
27786 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27788 Syntax:
27789 """""""
27792       declare <ret_type>
27793       @llvm.preserve.array.access.index.p0s_union.anons.p0a10s_union.anons(<type> base,
27794                                                                            i32 dim,
27795                                                                            i32 index)
27797 Overview:
27798 """""""""
27800 The '``llvm.preserve.array.access.index``' intrinsic returns the getelementptr address
27801 based on array base ``base``, array dimension ``dim`` and the last access index ``index``
27802 into the array. The return type ``ret_type`` is a pointer type to the array element.
27803 The array ``dim`` and ``index`` are preserved which is more robust than
27804 getelementptr instruction which may be subject to compiler transformation.
27805 The ``llvm.preserve.access.index`` type of metadata is attached to this call instruction
27806 to provide array or pointer debuginfo type.
27807 The metadata is a ``DICompositeType`` or ``DIDerivedType`` representing the
27808 debuginfo version of ``type``.
27810 Arguments:
27811 """"""""""
27813 The ``base`` is the array base address.  The ``dim`` is the array dimension.
27814 The ``base`` is a pointer if ``dim`` equals 0.
27815 The ``index`` is the last access index into the array or pointer.
27817 The ``base`` argument must be annotated with an :ref:`elementtype
27818 <attr_elementtype>` attribute at the call-site. This attribute specifies the
27819 getelementptr element type.
27821 Semantics:
27822 """"""""""
27824 The '``llvm.preserve.array.access.index``' intrinsic produces the same result
27825 as a getelementptr with base ``base`` and access operands ``{dim's 0's, index}``.
27827 '``llvm.preserve.union.access.index``' Intrinsic
27828 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27830 Syntax:
27831 """""""
27834       declare <type>
27835       @llvm.preserve.union.access.index.p0s_union.anons.p0s_union.anons(<type> base,
27836                                                                         i32 di_index)
27838 Overview:
27839 """""""""
27841 The '``llvm.preserve.union.access.index``' intrinsic carries the debuginfo field index
27842 ``di_index`` and returns the ``base`` address.
27843 The ``llvm.preserve.access.index`` type of metadata is attached to this call instruction
27844 to provide union debuginfo type.
27845 The metadata is a ``DICompositeType`` representing the debuginfo version of ``type``.
27846 The return type ``type`` is the same as the ``base`` type.
27848 Arguments:
27849 """"""""""
27851 The ``base`` is the union base address. The ``di_index`` is the field index in debuginfo.
27853 Semantics:
27854 """"""""""
27856 The '``llvm.preserve.union.access.index``' intrinsic returns the ``base`` address.
27858 '``llvm.preserve.struct.access.index``' Intrinsic
27859 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27861 Syntax:
27862 """""""
27865       declare <ret_type>
27866       @llvm.preserve.struct.access.index.p0i8.p0s_struct.anon.0s(<type> base,
27867                                                                  i32 gep_index,
27868                                                                  i32 di_index)
27870 Overview:
27871 """""""""
27873 The '``llvm.preserve.struct.access.index``' intrinsic returns the getelementptr address
27874 based on struct base ``base`` and IR struct member index ``gep_index``.
27875 The ``llvm.preserve.access.index`` type of metadata is attached to this call instruction
27876 to provide struct debuginfo type.
27877 The metadata is a ``DICompositeType`` representing the debuginfo version of ``type``.
27878 The return type ``ret_type`` is a pointer type to the structure member.
27880 Arguments:
27881 """"""""""
27883 The ``base`` is the structure base address. The ``gep_index`` is the struct member index
27884 based on IR structures. The ``di_index`` is the struct member index based on debuginfo.
27886 The ``base`` argument must be annotated with an :ref:`elementtype
27887 <attr_elementtype>` attribute at the call-site. This attribute specifies the
27888 getelementptr element type.
27890 Semantics:
27891 """"""""""
27893 The '``llvm.preserve.struct.access.index``' intrinsic produces the same result
27894 as a getelementptr with base ``base`` and access operands ``{0, gep_index}``.
27896 '``llvm.fptrunc.round``' Intrinsic
27897 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27899 Syntax:
27900 """""""
27904       declare <ty2>
27905       @llvm.fptrunc.round(<type> <value>, metadata <rounding mode>)
27907 Overview:
27908 """""""""
27910 The '``llvm.fptrunc.round``' intrinsic truncates
27911 :ref:`floating-point <t_floating>` ``value`` to type ``ty2``
27912 with a specified rounding mode.
27914 Arguments:
27915 """"""""""
27917 The '``llvm.fptrunc.round``' intrinsic takes a :ref:`floating-point
27918 <t_floating>` value to cast and a :ref:`floating-point <t_floating>` type
27919 to cast it to. This argument must be larger in size than the result.
27921 The second argument specifies the rounding mode as described in the constrained
27922 intrinsics section.
27923 For this intrinsic, the "round.dynamic" mode is not supported.
27925 Semantics:
27926 """"""""""
27928 The '``llvm.fptrunc.round``' intrinsic casts a ``value`` from a larger
27929 :ref:`floating-point <t_floating>` type to a smaller :ref:`floating-point
27930 <t_floating>` type.
27931 This intrinsic is assumed to execute in the default :ref:`floating-point
27932 environment <floatenv>` *except* for the rounding mode.
27933 This intrinsic is not supported on all targets. Some targets may not support
27934 all rounding modes.