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