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