blob: cf1ceab1f1c6b736080289be4f3bff3cbd07b102 [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
Sean Silva9d01a5b2015-01-07 21:35:14 +000078 '``[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*``'. Identifiers that require other
Sean Silvab084af42012-12-07 10:36:55 +000079 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
Hans Wennborg85e06532014-07-30 20:02:08 +000082 be used in a name value, even quotes themselves. The ``"\01"`` prefix
83 can be used on global variables to suppress mangling.
Sean Silvab084af42012-12-07 10:36:55 +000084#. Unnamed values are represented as an unsigned numeric value with
85 their prefix. For example, ``%12``, ``@2``, ``%44``.
Sean Silvaa1190322015-08-06 22:56:48 +000086#. Constants, which are described in the section Constants_ below.
Sean Silvab084af42012-12-07 10:36:55 +000087
88LLVM requires that values start with a prefix for two reasons: Compilers
89don't need to worry about name clashes with reserved words, and the set
90of reserved words may be expanded in the future without penalty.
91Additionally, unnamed identifiers allow a compiler to quickly come up
92with a temporary variable without having to avoid symbol table
93conflicts.
94
95Reserved words in LLVM are very similar to reserved words in other
96languages. There are keywords for different opcodes ('``add``',
97'``bitcast``', '``ret``', etc...), for primitive type names ('``void``',
98'``i32``', etc...), and others. These reserved words cannot conflict
99with variable names, because none of them start with a prefix character
100(``'%'`` or ``'@'``).
101
102Here is an example of LLVM code to multiply the integer variable
103'``%X``' by 8:
104
105The easy way:
106
107.. code-block:: llvm
108
109 %result = mul i32 %X, 8
110
111After strength reduction:
112
113.. code-block:: llvm
114
Dmitri Gribenko675911d2013-01-26 13:30:13 +0000115 %result = shl i32 %X, 3
Sean Silvab084af42012-12-07 10:36:55 +0000116
117And the hard way:
118
119.. code-block:: llvm
120
Tim Northover675a0962014-06-13 14:24:23 +0000121 %0 = add i32 %X, %X ; yields i32:%0
122 %1 = add i32 %0, %0 ; yields i32:%1
Sean Silvab084af42012-12-07 10:36:55 +0000123 %result = add i32 %1, %1
124
125This last way of multiplying ``%X`` by 8 illustrates several important
126lexical features of LLVM:
127
128#. Comments are delimited with a '``;``' and go until the end of line.
129#. Unnamed temporaries are created when the result of a computation is
130 not assigned to a named value.
Sean Silva8ca11782013-05-20 23:31:12 +0000131#. Unnamed temporaries are numbered sequentially (using a per-function
Dan Liew2661dfc2014-08-20 15:06:30 +0000132 incrementing counter, starting with 0). Note that basic blocks and unnamed
133 function parameters are included in this numbering. For example, if the
134 entry basic block is not given a label name and all function parameters are
135 named, then it will get number 0.
Sean Silvab084af42012-12-07 10:36:55 +0000136
137It also shows a convention that we follow in this document. When
138demonstrating instructions, we will follow an instruction with a comment
139that defines the type and name of value produced.
140
141High Level Structure
142====================
143
144Module Structure
145----------------
146
147LLVM programs are composed of ``Module``'s, each of which is a
148translation unit of the input programs. Each module consists of
149functions, global variables, and symbol table entries. Modules may be
150combined together with the LLVM linker, which merges function (and
151global variable) definitions, resolves forward declarations, and merges
152symbol table entries. Here is an example of the "hello world" module:
153
154.. code-block:: llvm
155
Michael Liaoa7699082013-03-06 18:24:34 +0000156 ; Declare the string constant as a global constant.
157 @.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"
Sean Silvab084af42012-12-07 10:36:55 +0000158
Michael Liaoa7699082013-03-06 18:24:34 +0000159 ; External declaration of the puts function
160 declare i32 @puts(i8* nocapture) nounwind
Sean Silvab084af42012-12-07 10:36:55 +0000161
162 ; Definition of main function
Michael Liaoa7699082013-03-06 18:24:34 +0000163 define i32 @main() { ; i32()*
164 ; Convert [13 x i8]* to i8 *...
David Blaikie16a97eb2015-03-04 22:02:58 +0000165 %cast210 = getelementptr [13 x i8], [13 x i8]* @.str, i64 0, i64 0
Sean Silvab084af42012-12-07 10:36:55 +0000166
Michael Liaoa7699082013-03-06 18:24:34 +0000167 ; Call puts function to write out the string to stdout.
Sean Silvab084af42012-12-07 10:36:55 +0000168 call i32 @puts(i8* %cast210)
Michael Liaoa7699082013-03-06 18:24:34 +0000169 ret i32 0
Sean Silvab084af42012-12-07 10:36:55 +0000170 }
171
172 ; Named metadata
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000173 !0 = !{i32 42, null, !"string"}
Nick Lewyckya0de40a2014-08-13 04:54:05 +0000174 !foo = !{!0}
Sean Silvab084af42012-12-07 10:36:55 +0000175
176This example is made up of a :ref:`global variable <globalvars>` named
177"``.str``", an external declaration of the "``puts``" function, a
178:ref:`function definition <functionstructure>` for "``main``" and
179:ref:`named metadata <namedmetadatastructure>` "``foo``".
180
181In general, a module is made up of a list of global values (where both
182functions and global variables are global values). Global values are
183represented by a pointer to a memory location (in this case, a pointer
184to an array of char, and a pointer to a function), and have one of the
185following :ref:`linkage types <linkage>`.
186
187.. _linkage:
188
189Linkage Types
190-------------
191
192All Global Variables and Functions have one of the following types of
193linkage:
194
195``private``
196 Global values with "``private``" linkage are only directly
197 accessible by objects in the current module. In particular, linking
198 code into a module with an private global value may cause the
199 private to be renamed as necessary to avoid collisions. Because the
200 symbol is private to the module, all references can be updated. This
201 doesn't show up in any symbol table in the object file.
Sean Silvab084af42012-12-07 10:36:55 +0000202``internal``
203 Similar to private, but the value shows as a local symbol
204 (``STB_LOCAL`` in the case of ELF) in the object file. This
205 corresponds to the notion of the '``static``' keyword in C.
206``available_externally``
207 Globals with "``available_externally``" linkage are never emitted
208 into the object file corresponding to the LLVM module. They exist to
209 allow inlining and other optimizations to take place given knowledge
210 of the definition of the global, which is known to be somewhere
211 outside the module. Globals with ``available_externally`` linkage
212 are allowed to be discarded at will, and are otherwise the same as
213 ``linkonce_odr``. This linkage type is only allowed on definitions,
214 not declarations.
215``linkonce``
216 Globals with "``linkonce``" linkage are merged with other globals of
217 the same name when linkage occurs. This can be used to implement
218 some forms of inline functions, templates, or other code which must
219 be generated in each translation unit that uses it, but where the
220 body may be overridden with a more definitive definition later.
221 Unreferenced ``linkonce`` globals are allowed to be discarded. Note
222 that ``linkonce`` linkage does not actually allow the optimizer to
223 inline the body of this function into callers because it doesn't
224 know if this definition of the function is the definitive definition
225 within the program or whether it will be overridden by a stronger
226 definition. To enable inlining and other optimizations, use
227 "``linkonce_odr``" linkage.
228``weak``
229 "``weak``" linkage has the same merging semantics as ``linkonce``
230 linkage, except that unreferenced globals with ``weak`` linkage may
231 not be discarded. This is used for globals that are declared "weak"
232 in C source code.
233``common``
234 "``common``" linkage is most similar to "``weak``" linkage, but they
235 are used for tentative definitions in C, such as "``int X;``" at
236 global scope. Symbols with "``common``" linkage are merged in the
237 same way as ``weak symbols``, and they may not be deleted if
238 unreferenced. ``common`` symbols may not have an explicit section,
239 must have a zero initializer, and may not be marked
240 ':ref:`constant <globalvars>`'. Functions and aliases may not have
241 common linkage.
242
243.. _linkage_appending:
244
245``appending``
246 "``appending``" linkage may only be applied to global variables of
247 pointer to array type. When two global variables with appending
248 linkage are linked together, the two global arrays are appended
249 together. This is the LLVM, typesafe, equivalent of having the
250 system linker append together "sections" with identical names when
251 .o files are linked.
252``extern_weak``
253 The semantics of this linkage follow the ELF object file model: the
254 symbol is weak until linked, if not linked, the symbol becomes null
255 instead of being an undefined reference.
256``linkonce_odr``, ``weak_odr``
257 Some languages allow differing globals to be merged, such as two
258 functions with different semantics. Other languages, such as
259 ``C++``, ensure that only equivalent globals are ever merged (the
Sean Silvaa1190322015-08-06 22:56:48 +0000260 "one definition rule" --- "ODR"). Such languages can use the
Sean Silvab084af42012-12-07 10:36:55 +0000261 ``linkonce_odr`` and ``weak_odr`` linkage types to indicate that the
262 global will only be merged with equivalent globals. These linkage
263 types are otherwise the same as their non-``odr`` versions.
Sean Silvab084af42012-12-07 10:36:55 +0000264``external``
265 If none of the above identifiers are used, the global is externally
266 visible, meaning that it participates in linkage and can be used to
267 resolve external symbol references.
268
Sean Silvab084af42012-12-07 10:36:55 +0000269It is illegal for a function *declaration* to have any linkage type
Nico Rieck7157bb72014-01-14 15:22:47 +0000270other than ``external`` or ``extern_weak``.
Sean Silvab084af42012-12-07 10:36:55 +0000271
Sean Silvab084af42012-12-07 10:36:55 +0000272.. _callingconv:
273
274Calling Conventions
275-------------------
276
277LLVM :ref:`functions <functionstructure>`, :ref:`calls <i_call>` and
278:ref:`invokes <i_invoke>` can all have an optional calling convention
279specified for the call. The calling convention of any pair of dynamic
280caller/callee must match, or the behavior of the program is undefined.
281The following calling conventions are supported by LLVM, and more may be
282added in the future:
283
284"``ccc``" - The C calling convention
285 This calling convention (the default if no other calling convention
286 is specified) matches the target C calling conventions. This calling
287 convention supports varargs function calls and tolerates some
288 mismatch in the declared prototype and implemented declaration of
289 the function (as does normal C).
290"``fastcc``" - The fast calling convention
291 This calling convention attempts to make calls as fast as possible
292 (e.g. by passing things in registers). This calling convention
293 allows the target to use whatever tricks it wants to produce fast
294 code for the target, without having to conform to an externally
295 specified ABI (Application Binary Interface). `Tail calls can only
296 be optimized when this, the GHC or the HiPE convention is
297 used. <CodeGenerator.html#id80>`_ This calling convention does not
298 support varargs and requires the prototype of all callees to exactly
299 match the prototype of the function definition.
300"``coldcc``" - The cold calling convention
301 This calling convention attempts to make code in the caller as
302 efficient as possible under the assumption that the call is not
303 commonly executed. As such, these calls often preserve all registers
304 so that the call does not break any live ranges in the caller side.
305 This calling convention does not support varargs and requires the
306 prototype of all callees to exactly match the prototype of the
Juergen Ributzka5d05ed12014-01-17 22:24:35 +0000307 function definition. Furthermore the inliner doesn't consider such function
308 calls for inlining.
Sean Silvab084af42012-12-07 10:36:55 +0000309"``cc 10``" - GHC convention
310 This calling convention has been implemented specifically for use by
311 the `Glasgow Haskell Compiler (GHC) <http://www.haskell.org/ghc>`_.
312 It passes everything in registers, going to extremes to achieve this
313 by disabling callee save registers. This calling convention should
314 not be used lightly but only for specific situations such as an
315 alternative to the *register pinning* performance technique often
316 used when implementing functional programming languages. At the
317 moment only X86 supports this convention and it has the following
318 limitations:
319
320 - On *X86-32* only supports up to 4 bit type parameters. No
321 floating point types are supported.
322 - On *X86-64* only supports up to 10 bit type parameters and 6
323 floating point parameters.
324
325 This calling convention supports `tail call
326 optimization <CodeGenerator.html#id80>`_ but requires both the
327 caller and callee are using it.
328"``cc 11``" - The HiPE calling convention
329 This calling convention has been implemented specifically for use by
330 the `High-Performance Erlang
331 (HiPE) <http://www.it.uu.se/research/group/hipe/>`_ compiler, *the*
332 native code compiler of the `Ericsson's Open Source Erlang/OTP
333 system <http://www.erlang.org/download.shtml>`_. It uses more
334 registers for argument passing than the ordinary C calling
335 convention and defines no callee-saved registers. The calling
336 convention properly supports `tail call
337 optimization <CodeGenerator.html#id80>`_ but requires that both the
338 caller and the callee use it. It uses a *register pinning*
339 mechanism, similar to GHC's convention, for keeping frequently
340 accessed runtime components pinned to specific hardware registers.
341 At the moment only X86 supports this convention (both 32 and 64
342 bit).
Andrew Trick5e029ce2013-12-24 02:57:25 +0000343"``webkit_jscc``" - WebKit's JavaScript calling convention
344 This calling convention has been implemented for `WebKit FTL JIT
345 <https://trac.webkit.org/wiki/FTLJIT>`_. It passes arguments on the
346 stack right to left (as cdecl does), and returns a value in the
347 platform's customary return register.
348"``anyregcc``" - Dynamic calling convention for code patching
349 This is a special convention that supports patching an arbitrary code
350 sequence in place of a call site. This convention forces the call
Eli Bendersky45324ce2015-04-02 15:20:04 +0000351 arguments into registers but allows them to be dynamically
Andrew Trick5e029ce2013-12-24 02:57:25 +0000352 allocated. This can currently only be used with calls to
353 llvm.experimental.patchpoint because only this intrinsic records
354 the location of its arguments in a side table. See :doc:`StackMaps`.
Juergen Ributzkae6250132014-01-17 19:47:03 +0000355"``preserve_mostcc``" - The `PreserveMost` calling convention
Eli Bendersky45324ce2015-04-02 15:20:04 +0000356 This calling convention attempts to make the code in the caller as
357 unintrusive as possible. This convention behaves identically to the `C`
Juergen Ributzkae6250132014-01-17 19:47:03 +0000358 calling convention on how arguments and return values are passed, but it
359 uses a different set of caller/callee-saved registers. This alleviates the
360 burden of saving and recovering a large register set before and after the
Juergen Ributzka980f2dc2014-01-30 02:39:00 +0000361 call in the caller. If the arguments are passed in callee-saved registers,
362 then they will be preserved by the callee across the call. This doesn't
363 apply for values returned in callee-saved registers.
Juergen Ributzkae6250132014-01-17 19:47:03 +0000364
365 - On X86-64 the callee preserves all general purpose registers, except for
366 R11. R11 can be used as a scratch register. Floating-point registers
367 (XMMs/YMMs) are not preserved and need to be saved by the caller.
368
369 The idea behind this convention is to support calls to runtime functions
370 that have a hot path and a cold path. The hot path is usually a small piece
Eric Christopher1e61ffd2015-02-19 18:46:25 +0000371 of code that doesn't use many registers. The cold path might need to call out to
Juergen Ributzkae6250132014-01-17 19:47:03 +0000372 another function and therefore only needs to preserve the caller-saved
Juergen Ributzka5d05ed12014-01-17 22:24:35 +0000373 registers, which haven't already been saved by the caller. The
374 `PreserveMost` calling convention is very similar to the `cold` calling
375 convention in terms of caller/callee-saved registers, but they are used for
376 different types of function calls. `coldcc` is for function calls that are
377 rarely executed, whereas `preserve_mostcc` function calls are intended to be
378 on the hot path and definitely executed a lot. Furthermore `preserve_mostcc`
379 doesn't prevent the inliner from inlining the function call.
Juergen Ributzkae6250132014-01-17 19:47:03 +0000380
381 This calling convention will be used by a future version of the ObjectiveC
382 runtime and should therefore still be considered experimental at this time.
383 Although this convention was created to optimize certain runtime calls to
384 the ObjectiveC runtime, it is not limited to this runtime and might be used
385 by other runtimes in the future too. The current implementation only
386 supports X86-64, but the intention is to support more architectures in the
387 future.
388"``preserve_allcc``" - The `PreserveAll` calling convention
389 This calling convention attempts to make the code in the caller even less
390 intrusive than the `PreserveMost` calling convention. This calling
391 convention also behaves identical to the `C` calling convention on how
392 arguments and return values are passed, but it uses a different set of
393 caller/callee-saved registers. This removes the burden of saving and
Juergen Ributzka980f2dc2014-01-30 02:39:00 +0000394 recovering a large register set before and after the call in the caller. If
395 the arguments are passed in callee-saved registers, then they will be
396 preserved by the callee across the call. This doesn't apply for values
397 returned in callee-saved registers.
Juergen Ributzkae6250132014-01-17 19:47:03 +0000398
399 - On X86-64 the callee preserves all general purpose registers, except for
400 R11. R11 can be used as a scratch register. Furthermore it also preserves
401 all floating-point registers (XMMs/YMMs).
402
403 The idea behind this convention is to support calls to runtime functions
404 that don't need to call out to any other functions.
405
406 This calling convention, like the `PreserveMost` calling convention, will be
407 used by a future version of the ObjectiveC runtime and should be considered
408 experimental at this time.
Sean Silvab084af42012-12-07 10:36:55 +0000409"``cc <n>``" - Numbered convention
410 Any calling convention may be specified by number, allowing
411 target-specific calling conventions to be used. Target specific
412 calling conventions start at 64.
413
414More calling conventions can be added/defined on an as-needed basis, to
415support Pascal conventions or any other well-known target-independent
416convention.
417
Eli Benderskyfdc529a2013-06-07 19:40:08 +0000418.. _visibilitystyles:
419
Sean Silvab084af42012-12-07 10:36:55 +0000420Visibility Styles
421-----------------
422
423All Global Variables and Functions have one of the following visibility
424styles:
425
426"``default``" - Default style
427 On targets that use the ELF object file format, default visibility
428 means that the declaration is visible to other modules and, in
429 shared libraries, means that the declared entity may be overridden.
430 On Darwin, default visibility means that the declaration is visible
431 to other modules. Default visibility corresponds to "external
432 linkage" in the language.
433"``hidden``" - Hidden style
434 Two declarations of an object with hidden visibility refer to the
435 same object if they are in the same shared object. Usually, hidden
436 visibility indicates that the symbol will not be placed into the
437 dynamic symbol table, so no other module (executable or shared
438 library) can reference it directly.
439"``protected``" - Protected style
440 On ELF, protected visibility indicates that the symbol will be
441 placed in the dynamic symbol table, but that references within the
442 defining module will bind to the local symbol. That is, the symbol
443 cannot be overridden by another module.
444
Duncan P. N. Exon Smithb80de102014-05-07 22:57:20 +0000445A symbol with ``internal`` or ``private`` linkage must have ``default``
446visibility.
447
Rafael Espindola3bc64d52014-05-26 21:30:40 +0000448.. _dllstorageclass:
Eli Benderskyfdc529a2013-06-07 19:40:08 +0000449
Nico Rieck7157bb72014-01-14 15:22:47 +0000450DLL Storage Classes
451-------------------
452
453All Global Variables, Functions and Aliases can have one of the following
454DLL storage class:
455
456``dllimport``
457 "``dllimport``" causes the compiler to reference a function or variable via
458 a global pointer to a pointer that is set up by the DLL exporting the
459 symbol. On Microsoft Windows targets, the pointer name is formed by
460 combining ``__imp_`` and the function or variable name.
461``dllexport``
462 "``dllexport``" causes the compiler to provide a global pointer to a pointer
463 in a DLL, so that it can be referenced with the ``dllimport`` attribute. On
464 Microsoft Windows targets, the pointer name is formed by combining
465 ``__imp_`` and the function or variable name. Since this storage class
466 exists for defining a dll interface, the compiler, assembler and linker know
467 it is externally referenced and must refrain from deleting the symbol.
468
Rafael Espindola59f7eba2014-05-28 18:15:43 +0000469.. _tls_model:
470
471Thread Local Storage Models
472---------------------------
473
474A variable may be defined as ``thread_local``, which means that it will
475not be shared by threads (each thread will have a separated copy of the
476variable). Not all targets support thread-local variables. Optionally, a
477TLS model may be specified:
478
479``localdynamic``
480 For variables that are only used within the current shared library.
481``initialexec``
482 For variables in modules that will not be loaded dynamically.
483``localexec``
484 For variables defined in the executable and only used within it.
485
486If no explicit model is given, the "general dynamic" model is used.
487
488The models correspond to the ELF TLS models; see `ELF Handling For
489Thread-Local Storage <http://people.redhat.com/drepper/tls.pdf>`_ for
490more information on under which circumstances the different models may
491be used. The target may choose a different TLS model if the specified
492model is not supported, or if a better choice of model can be made.
493
Sean Silva706fba52015-08-06 22:56:24 +0000494A model can also be specified in an alias, but then it only governs how
Rafael Espindola59f7eba2014-05-28 18:15:43 +0000495the alias is accessed. It will not have any effect in the aliasee.
496
Chih-Hung Hsieh1e859582015-07-28 16:24:05 +0000497For platforms without linker support of ELF TLS model, the -femulated-tls
498flag can be used to generate GCC compatible emulated TLS code.
499
Rafael Espindola3bc64d52014-05-26 21:30:40 +0000500.. _namedtypes:
501
Reid Kleckner7c84d1d2014-03-05 02:21:50 +0000502Structure Types
503---------------
Sean Silvab084af42012-12-07 10:36:55 +0000504
Reid Kleckner7c84d1d2014-03-05 02:21:50 +0000505LLVM IR allows you to specify both "identified" and "literal" :ref:`structure
Sean Silvaa1190322015-08-06 22:56:48 +0000506types <t_struct>`. Literal types are uniqued structurally, but identified types
507are never uniqued. An :ref:`opaque structural type <t_opaque>` can also be used
Richard Smith32dbdf62014-07-31 04:25:36 +0000508to forward declare a type that is not yet available.
Reid Kleckner7c84d1d2014-03-05 02:21:50 +0000509
Sean Silva706fba52015-08-06 22:56:24 +0000510An example of an identified structure specification is:
Sean Silvab084af42012-12-07 10:36:55 +0000511
512.. code-block:: llvm
513
514 %mytype = type { %mytype*, i32 }
515
Sean Silvaa1190322015-08-06 22:56:48 +0000516Prior to the LLVM 3.0 release, identified types were structurally uniqued. Only
Reid Kleckner7c84d1d2014-03-05 02:21:50 +0000517literal types are uniqued in recent versions of LLVM.
Sean Silvab084af42012-12-07 10:36:55 +0000518
519.. _globalvars:
520
521Global Variables
522----------------
523
524Global variables define regions of memory allocated at compilation time
Rafael Espindola5d1b7452013-10-29 13:44:11 +0000525instead of run-time.
526
Eric Christopher1e61ffd2015-02-19 18:46:25 +0000527Global variable definitions must be initialized.
Rafael Espindola5d1b7452013-10-29 13:44:11 +0000528
529Global variables in other translation units can also be declared, in which
530case they don't have an initializer.
Sean Silvab084af42012-12-07 10:36:55 +0000531
Bob Wilson85b24f22014-06-12 20:40:33 +0000532Either global variable definitions or declarations may have an explicit section
533to be placed in and may have an optional explicit alignment specified.
534
Michael Gottesman006039c2013-01-31 05:48:48 +0000535A variable may be defined as a global ``constant``, which indicates that
Sean Silvab084af42012-12-07 10:36:55 +0000536the contents of the variable will **never** be modified (enabling better
537optimization, allowing the global data to be placed in the read-only
538section of an executable, etc). Note that variables that need runtime
Michael Gottesman1cffcf742013-01-31 05:44:04 +0000539initialization cannot be marked ``constant`` as there is a store to the
Sean Silvab084af42012-12-07 10:36:55 +0000540variable.
541
542LLVM explicitly allows *declarations* of global variables to be marked
543constant, even if the final definition of the global is not. This
544capability can be used to enable slightly better optimization of the
545program, but requires the language definition to guarantee that
546optimizations based on the 'constantness' are valid for the translation
547units that do not include the definition.
548
549As SSA values, global variables define pointer values that are in scope
550(i.e. they dominate) all basic blocks in the program. Global variables
551always define a pointer to their "content" type because they describe a
552region of memory, and all memory objects in LLVM are accessed through
553pointers.
554
555Global variables can be marked with ``unnamed_addr`` which indicates
556that the address is not significant, only the content. Constants marked
557like this can be merged with other constants if they have the same
558initializer. Note that a constant with significant address *can* be
559merged with a ``unnamed_addr`` constant, the result being a constant
560whose address is significant.
561
562A global variable may be declared to reside in a target-specific
563numbered address space. For targets that support them, address spaces
564may affect how optimizations are performed and/or what target
565instructions are used to access the variable. The default address space
566is zero. The address space qualifier must precede any other attributes.
567
568LLVM allows an explicit section to be specified for globals. If the
569target supports it, it will emit globals to the section specified.
David Majnemerdad0a642014-06-27 18:19:56 +0000570Additionally, the global can placed in a comdat if the target has the necessary
571support.
Sean Silvab084af42012-12-07 10:36:55 +0000572
Michael Gottesmane743a302013-02-04 03:22:00 +0000573By default, global initializers are optimized by assuming that global
Michael Gottesmanef2bc772013-02-03 09:57:15 +0000574variables defined within the module are not modified from their
Sean Silvaa1190322015-08-06 22:56:48 +0000575initial values before the start of the global initializer. This is
Michael Gottesmanef2bc772013-02-03 09:57:15 +0000576true even for variables potentially accessible from outside the
577module, including those with external linkage or appearing in
Yunzhong Gaof5b769e2013-12-05 18:37:54 +0000578``@llvm.used`` or dllexported variables. This assumption may be suppressed
579by marking the variable with ``externally_initialized``.
Michael Gottesmanef2bc772013-02-03 09:57:15 +0000580
Sean Silvab084af42012-12-07 10:36:55 +0000581An explicit alignment may be specified for a global, which must be a
582power of 2. If not present, or if the alignment is set to zero, the
583alignment of the global is set by the target to whatever it feels
584convenient. If an explicit alignment is specified, the global is forced
585to have exactly that alignment. Targets and optimizers are not allowed
586to over-align the global if the global has an assigned section. In this
587case, the extra alignment could be observable: for example, code could
588assume that the globals are densely packed in their section and try to
589iterate over them as an array, alignment padding would break this
Reid Kleckner15fe7a52014-07-15 01:16:09 +0000590iteration. The maximum alignment is ``1 << 29``.
Sean Silvab084af42012-12-07 10:36:55 +0000591
Nico Rieck7157bb72014-01-14 15:22:47 +0000592Globals can also have a :ref:`DLL storage class <dllstorageclass>`.
593
Peter Collingbourne69ba0162015-02-04 00:42:45 +0000594Variables and aliases can have a
Rafael Espindola59f7eba2014-05-28 18:15:43 +0000595:ref:`Thread Local Storage Model <tls_model>`.
596
Nico Rieck7157bb72014-01-14 15:22:47 +0000597Syntax::
598
599 [@<GlobalVarName> =] [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal]
Rafael Espindola28f3ca62014-06-09 21:21:33 +0000600 [unnamed_addr] [AddrSpace] [ExternallyInitialized]
Bob Wilson85b24f22014-06-12 20:40:33 +0000601 <global | constant> <Type> [<InitializerConstant>]
Rafael Espindola83a362c2015-01-06 22:55:16 +0000602 [, section "name"] [, comdat [($name)]]
603 [, align <Alignment>]
Nico Rieck7157bb72014-01-14 15:22:47 +0000604
Sean Silvab084af42012-12-07 10:36:55 +0000605For example, the following defines a global in a numbered address space
606with an initializer, section, and alignment:
607
608.. code-block:: llvm
609
610 @G = addrspace(5) constant float 1.0, section "foo", align 4
611
Rafael Espindola5d1b7452013-10-29 13:44:11 +0000612The following example just declares a global variable
613
614.. code-block:: llvm
615
616 @G = external global i32
617
Sean Silvab084af42012-12-07 10:36:55 +0000618The following example defines a thread-local global with the
619``initialexec`` TLS model:
620
621.. code-block:: llvm
622
623 @G = thread_local(initialexec) global i32 0, align 4
624
625.. _functionstructure:
626
627Functions
628---------
629
630LLVM function definitions consist of the "``define``" keyword, an
631optional :ref:`linkage type <linkage>`, an optional :ref:`visibility
Nico Rieck7157bb72014-01-14 15:22:47 +0000632style <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`,
633an optional :ref:`calling convention <callingconv>`,
Sean Silvab084af42012-12-07 10:36:55 +0000634an optional ``unnamed_addr`` attribute, a return type, an optional
635:ref:`parameter attribute <paramattrs>` for the return type, a function
636name, a (possibly empty) argument list (each with optional :ref:`parameter
637attributes <paramattrs>`), optional :ref:`function attributes <fnattrs>`,
David Majnemerdad0a642014-06-27 18:19:56 +0000638an optional section, an optional alignment,
639an optional :ref:`comdat <langref_comdats>`,
Peter Collingbourne51d2de72014-12-03 02:08:38 +0000640an optional :ref:`garbage collector name <gc>`, an optional :ref:`prefix <prefixdata>`,
David Majnemer7fddecc2015-06-17 20:52:32 +0000641an optional :ref:`prologue <prologuedata>`,
642an optional :ref:`personality <personalityfn>`,
Peter Collingbourne50108682015-11-06 02:41:02 +0000643an optional list of attached :ref:`metadata <metadata>`,
David Majnemer7fddecc2015-06-17 20:52:32 +0000644an opening curly brace, a list of basic blocks, and a closing curly brace.
Sean Silvab084af42012-12-07 10:36:55 +0000645
646LLVM function declarations consist of the "``declare``" keyword, an
647optional :ref:`linkage type <linkage>`, an optional :ref:`visibility
Nico Rieck7157bb72014-01-14 15:22:47 +0000648style <visibility>`, an optional :ref:`DLL storage class <dllstorageclass>`,
649an optional :ref:`calling convention <callingconv>`,
Sean Silvab084af42012-12-07 10:36:55 +0000650an optional ``unnamed_addr`` attribute, a return type, an optional
651:ref:`parameter attribute <paramattrs>` for the return type, a function
Peter Collingbourne3fa50f92013-09-16 01:08:15 +0000652name, a possibly empty list of arguments, an optional alignment, an optional
Peter Collingbourne51d2de72014-12-03 02:08:38 +0000653:ref:`garbage collector name <gc>`, an optional :ref:`prefix <prefixdata>`,
654and an optional :ref:`prologue <prologuedata>`.
Sean Silvab084af42012-12-07 10:36:55 +0000655
Bill Wendling6822ecb2013-10-27 05:09:12 +0000656A function definition contains a list of basic blocks, forming the CFG (Control
657Flow Graph) for the function. Each basic block may optionally start with a label
658(giving the basic block a symbol table entry), contains a list of instructions,
659and ends with a :ref:`terminator <terminators>` instruction (such as a branch or
660function return). If an explicit label is not provided, a block is assigned an
661implicit numbered label, using the next value from the same counter as used for
662unnamed temporaries (:ref:`see above<identifiers>`). For example, if a function
663entry block does not have an explicit label, it will be assigned label "%0",
664then the first unnamed temporary in that block will be "%1", etc.
Sean Silvab084af42012-12-07 10:36:55 +0000665
666The first basic block in a function is special in two ways: it is
667immediately executed on entrance to the function, and it is not allowed
668to have predecessor basic blocks (i.e. there can not be any branches to
669the entry block of a function). Because the block can have no
670predecessors, it also cannot have any :ref:`PHI nodes <i_phi>`.
671
672LLVM allows an explicit section to be specified for functions. If the
673target supports it, it will emit functions to the section specified.
Eric Christopher1e61ffd2015-02-19 18:46:25 +0000674Additionally, the function can be placed in a COMDAT.
Sean Silvab084af42012-12-07 10:36:55 +0000675
676An explicit alignment may be specified for a function. If not present,
677or if the alignment is set to zero, the alignment of the function is set
678by the target to whatever it feels convenient. If an explicit alignment
679is specified, the function is forced to have at least that much
680alignment. All alignments must be a power of 2.
681
Eric Christopher1e61ffd2015-02-19 18:46:25 +0000682If the ``unnamed_addr`` attribute is given, the address is known to not
Sean Silvab084af42012-12-07 10:36:55 +0000683be significant and two identical functions can be merged.
684
685Syntax::
686
Nico Rieck7157bb72014-01-14 15:22:47 +0000687 define [linkage] [visibility] [DLLStorageClass]
Sean Silvab084af42012-12-07 10:36:55 +0000688 [cconv] [ret attrs]
689 <ResultType> @<FunctionName> ([argument list])
Rafael Espindola83a362c2015-01-06 22:55:16 +0000690 [unnamed_addr] [fn Attrs] [section "name"] [comdat [($name)]]
David Majnemer7fddecc2015-06-17 20:52:32 +0000691 [align N] [gc] [prefix Constant] [prologue Constant]
Peter Collingbourne50108682015-11-06 02:41:02 +0000692 [personality Constant] (!name !N)* { ... }
Sean Silvab084af42012-12-07 10:36:55 +0000693
Sean Silva706fba52015-08-06 22:56:24 +0000694The argument list is a comma separated sequence of arguments where each
695argument is of the following form:
Dan Liew2661dfc2014-08-20 15:06:30 +0000696
697Syntax::
698
699 <type> [parameter Attrs] [name]
700
701
Eli Benderskyfdc529a2013-06-07 19:40:08 +0000702.. _langref_aliases:
703
Sean Silvab084af42012-12-07 10:36:55 +0000704Aliases
705-------
706
Rafael Espindola64c1e182014-06-03 02:41:57 +0000707Aliases, unlike function or variables, don't create any new data. They
708are just a new symbol and metadata for an existing position.
709
710Aliases have a name and an aliasee that is either a global value or a
711constant expression.
712
Nico Rieck7157bb72014-01-14 15:22:47 +0000713Aliases may have an optional :ref:`linkage type <linkage>`, an optional
Rafael Espindola64c1e182014-06-03 02:41:57 +0000714:ref:`visibility style <visibility>`, an optional :ref:`DLL storage class
715<dllstorageclass>` and an optional :ref:`tls model <tls_model>`.
Sean Silvab084af42012-12-07 10:36:55 +0000716
717Syntax::
718
David Blaikie196582e2015-10-22 01:17:29 +0000719 @<Name> = [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal] [unnamed_addr] alias <AliaseeTy>, <AliaseeTy>* @<Aliasee>
Sean Silvab084af42012-12-07 10:36:55 +0000720
Rafael Espindola2fb5bc32014-03-13 23:18:37 +0000721The linkage must be one of ``private``, ``internal``, ``linkonce``, ``weak``,
Rafael Espindola716e7402013-11-01 17:09:14 +0000722``linkonce_odr``, ``weak_odr``, ``external``. Note that some system linkers
Rafael Espindola64c1e182014-06-03 02:41:57 +0000723might not correctly handle dropping a weak symbol that is aliased.
Rafael Espindola78527052013-10-06 15:10:43 +0000724
Eric Christopher1e61ffd2015-02-19 18:46:25 +0000725Aliases that are not ``unnamed_addr`` are guaranteed to have the same address as
Rafael Espindola42a4c9f2014-06-06 01:20:28 +0000726the aliasee expression. ``unnamed_addr`` ones are only guaranteed to point
727to the same content.
Rafael Espindolaf3336bc2014-03-12 20:15:49 +0000728
Rafael Espindola64c1e182014-06-03 02:41:57 +0000729Since aliases are only a second name, some restrictions apply, of which
730some can only be checked when producing an object file:
Rafael Espindolaf3336bc2014-03-12 20:15:49 +0000731
Rafael Espindola64c1e182014-06-03 02:41:57 +0000732* The expression defining the aliasee must be computable at assembly
733 time. Since it is just a name, no relocations can be used.
734
735* No alias in the expression can be weak as the possibility of the
736 intermediate alias being overridden cannot be represented in an
737 object file.
738
739* No global value in the expression can be a declaration, since that
740 would require a relocation, which is not possible.
Rafael Espindola24a669d2014-03-27 15:26:56 +0000741
David Majnemerdad0a642014-06-27 18:19:56 +0000742.. _langref_comdats:
743
744Comdats
745-------
746
747Comdat IR provides access to COFF and ELF object file COMDAT functionality.
748
Sean Silvaa1190322015-08-06 22:56:48 +0000749Comdats have a name which represents the COMDAT key. All global objects that
David Majnemerdad0a642014-06-27 18:19:56 +0000750specify this key will only end up in the final object file if the linker chooses
Sean Silvaa1190322015-08-06 22:56:48 +0000751that key over some other key. Aliases are placed in the same COMDAT that their
David Majnemerdad0a642014-06-27 18:19:56 +0000752aliasee computes to, if any.
753
754Comdats have a selection kind to provide input on how the linker should
755choose between keys in two different object files.
756
757Syntax::
758
759 $<Name> = comdat SelectionKind
760
761The selection kind must be one of the following:
762
763``any``
764 The linker may choose any COMDAT key, the choice is arbitrary.
765``exactmatch``
766 The linker may choose any COMDAT key but the sections must contain the
767 same data.
768``largest``
769 The linker will choose the section containing the largest COMDAT key.
770``noduplicates``
771 The linker requires that only section with this COMDAT key exist.
772``samesize``
773 The linker may choose any COMDAT key but the sections must contain the
774 same amount of data.
775
776Note that the Mach-O platform doesn't support COMDATs and ELF only supports
777``any`` as a selection kind.
778
779Here is an example of a COMDAT group where a function will only be selected if
780the COMDAT key's section is the largest:
781
782.. code-block:: llvm
783
784 $foo = comdat largest
Rafael Espindola83a362c2015-01-06 22:55:16 +0000785 @foo = global i32 2, comdat($foo)
David Majnemerdad0a642014-06-27 18:19:56 +0000786
Rafael Espindola83a362c2015-01-06 22:55:16 +0000787 define void @bar() comdat($foo) {
David Majnemerdad0a642014-06-27 18:19:56 +0000788 ret void
789 }
790
Rafael Espindola83a362c2015-01-06 22:55:16 +0000791As a syntactic sugar the ``$name`` can be omitted if the name is the same as
792the global name:
793
794.. code-block:: llvm
795
796 $foo = comdat any
797 @foo = global i32 2, comdat
798
799
David Majnemerdad0a642014-06-27 18:19:56 +0000800In a COFF object file, this will create a COMDAT section with selection kind
801``IMAGE_COMDAT_SELECT_LARGEST`` containing the contents of the ``@foo`` symbol
802and another COMDAT section with selection kind
803``IMAGE_COMDAT_SELECT_ASSOCIATIVE`` which is associated with the first COMDAT
Hans Wennborg0def0662014-09-10 17:05:08 +0000804section and contains the contents of the ``@bar`` symbol.
David Majnemerdad0a642014-06-27 18:19:56 +0000805
806There are some restrictions on the properties of the global object.
807It, or an alias to it, must have the same name as the COMDAT group when
808targeting COFF.
809The contents and size of this object may be used during link-time to determine
810which COMDAT groups get selected depending on the selection kind.
811Because the name of the object must match the name of the COMDAT group, the
812linkage of the global object must not be local; local symbols can get renamed
813if a collision occurs in the symbol table.
814
815The combined use of COMDATS and section attributes may yield surprising results.
816For example:
817
818.. code-block:: llvm
819
820 $foo = comdat any
821 $bar = comdat any
Rafael Espindola83a362c2015-01-06 22:55:16 +0000822 @g1 = global i32 42, section "sec", comdat($foo)
823 @g2 = global i32 42, section "sec", comdat($bar)
David Majnemerdad0a642014-06-27 18:19:56 +0000824
825From the object file perspective, this requires the creation of two sections
Sean Silvaa1190322015-08-06 22:56:48 +0000826with the same name. This is necessary because both globals belong to different
David Majnemerdad0a642014-06-27 18:19:56 +0000827COMDAT groups and COMDATs, at the object file level, are represented by
828sections.
829
Peter Collingbourne1feef2e2015-06-30 19:10:31 +0000830Note that certain IR constructs like global variables and functions may
831create COMDATs in the object file in addition to any which are specified using
Sean Silvaa1190322015-08-06 22:56:48 +0000832COMDAT IR. This arises when the code generator is configured to emit globals
Peter Collingbourne1feef2e2015-06-30 19:10:31 +0000833in individual sections (e.g. when `-data-sections` or `-function-sections`
834is supplied to `llc`).
David Majnemerdad0a642014-06-27 18:19:56 +0000835
Sean Silvab084af42012-12-07 10:36:55 +0000836.. _namedmetadatastructure:
837
838Named Metadata
839--------------
840
841Named metadata is a collection of metadata. :ref:`Metadata
842nodes <metadata>` (but not metadata strings) are the only valid
843operands for a named metadata.
844
Filipe Cabecinhas62431b12015-06-02 21:25:08 +0000845#. Named metadata are represented as a string of characters with the
846 metadata prefix. The rules for metadata names are the same as for
847 identifiers, but quoted names are not allowed. ``"\xx"`` type escapes
848 are still valid, which allows any character to be part of a name.
849
Sean Silvab084af42012-12-07 10:36:55 +0000850Syntax::
851
852 ; Some unnamed metadata nodes, which are referenced by the named metadata.
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000853 !0 = !{!"zero"}
854 !1 = !{!"one"}
855 !2 = !{!"two"}
Sean Silvab084af42012-12-07 10:36:55 +0000856 ; A named metadata.
857 !name = !{!0, !1, !2}
858
859.. _paramattrs:
860
861Parameter Attributes
862--------------------
863
864The return type and each parameter of a function type may have a set of
865*parameter attributes* associated with them. Parameter attributes are
866used to communicate additional information about the result or
867parameters of a function. Parameter attributes are considered to be part
868of the function, not of the function type, so functions with different
869parameter attributes can have the same function type.
870
871Parameter attributes are simple keywords that follow the type specified.
872If multiple parameter attributes are needed, they are space separated.
873For example:
874
875.. code-block:: llvm
876
877 declare i32 @printf(i8* noalias nocapture, ...)
878 declare i32 @atoi(i8 zeroext)
879 declare signext i8 @returns_signed_char()
880
881Note that any attributes for the function result (``nounwind``,
882``readonly``) come immediately after the argument list.
883
884Currently, only the following parameter attributes are defined:
885
886``zeroext``
887 This indicates to the code generator that the parameter or return
888 value should be zero-extended to the extent required by the target's
889 ABI (which is usually 32-bits, but is 8-bits for a i1 on x86-64) by
890 the caller (for a parameter) or the callee (for a return value).
891``signext``
892 This indicates to the code generator that the parameter or return
893 value should be sign-extended to the extent required by the target's
894 ABI (which is usually 32-bits) by the caller (for a parameter) or
895 the callee (for a return value).
896``inreg``
897 This indicates that this parameter or return value should be treated
Sean Silva706fba52015-08-06 22:56:24 +0000898 in a special target-dependent fashion while emitting code for
Sean Silvab084af42012-12-07 10:36:55 +0000899 a function call or return (usually, by putting it in a register as
900 opposed to memory, though some targets use it to distinguish between
901 two different kinds of registers). Use of this attribute is
902 target-specific.
903``byval``
904 This indicates that the pointer parameter should really be passed by
905 value to the function. The attribute implies that a hidden copy of
906 the pointee is made between the caller and the callee, so the callee
907 is unable to modify the value in the caller. This attribute is only
908 valid on LLVM pointer arguments. It is generally used to pass
909 structs and arrays by value, but is also valid on pointers to
910 scalars. The copy is considered to belong to the caller not the
911 callee (for example, ``readonly`` functions should not write to
912 ``byval`` parameters). This is not a valid attribute for return
913 values.
914
915 The byval attribute also supports specifying an alignment with the
916 align attribute. It indicates the alignment of the stack slot to
917 form and the known alignment of the pointer specified to the call
918 site. If the alignment is not specified, then the code generator
919 makes a target-specific assumption.
920
Reid Klecknera534a382013-12-19 02:14:12 +0000921.. _attr_inalloca:
922
923``inalloca``
924
Reid Kleckner60d3a832014-01-16 22:59:24 +0000925 The ``inalloca`` argument attribute allows the caller to take the
Sean Silvaa1190322015-08-06 22:56:48 +0000926 address of outgoing stack arguments. An ``inalloca`` argument must
Reid Kleckner436c42e2014-01-17 23:58:17 +0000927 be a pointer to stack memory produced by an ``alloca`` instruction.
928 The alloca, or argument allocation, must also be tagged with the
Sean Silvaa1190322015-08-06 22:56:48 +0000929 inalloca keyword. Only the last argument may have the ``inalloca``
Reid Kleckner436c42e2014-01-17 23:58:17 +0000930 attribute, and that argument is guaranteed to be passed in memory.
Reid Klecknera534a382013-12-19 02:14:12 +0000931
Reid Kleckner436c42e2014-01-17 23:58:17 +0000932 An argument allocation may be used by a call at most once because
Sean Silvaa1190322015-08-06 22:56:48 +0000933 the call may deallocate it. The ``inalloca`` attribute cannot be
Reid Kleckner436c42e2014-01-17 23:58:17 +0000934 used in conjunction with other attributes that affect argument
Sean Silvaa1190322015-08-06 22:56:48 +0000935 storage, like ``inreg``, ``nest``, ``sret``, or ``byval``. The
Reid Klecknerf5b76512014-01-31 23:50:57 +0000936 ``inalloca`` attribute also disables LLVM's implicit lowering of
937 large aggregate return values, which means that frontend authors
938 must lower them with ``sret`` pointers.
Reid Klecknera534a382013-12-19 02:14:12 +0000939
Reid Kleckner60d3a832014-01-16 22:59:24 +0000940 When the call site is reached, the argument allocation must have
941 been the most recent stack allocation that is still live, or the
Sean Silvaa1190322015-08-06 22:56:48 +0000942 results are undefined. It is possible to allocate additional stack
Reid Kleckner60d3a832014-01-16 22:59:24 +0000943 space after an argument allocation and before its call site, but it
944 must be cleared off with :ref:`llvm.stackrestore
945 <int_stackrestore>`.
Reid Klecknera534a382013-12-19 02:14:12 +0000946
947 See :doc:`InAlloca` for more information on how to use this
948 attribute.
949
Sean Silvab084af42012-12-07 10:36:55 +0000950``sret``
951 This indicates that the pointer parameter specifies the address of a
952 structure that is the return value of the function in the source
953 program. This pointer must be guaranteed by the caller to be valid:
Eli Bendersky4f2162f2013-01-23 22:05:19 +0000954 loads and stores to the structure may be assumed by the callee
Sean Silvab084af42012-12-07 10:36:55 +0000955 not to trap and to be properly aligned. This may only be applied to
956 the first parameter. This is not a valid attribute for return
957 values.
Sean Silva1703e702014-04-08 21:06:22 +0000958
Hal Finkelccc70902014-07-22 16:58:55 +0000959``align <n>``
960 This indicates that the pointer value may be assumed by the optimizer to
961 have the specified alignment.
962
963 Note that this attribute has additional semantics when combined with the
964 ``byval`` attribute.
965
Sean Silva1703e702014-04-08 21:06:22 +0000966.. _noalias:
967
Sean Silvab084af42012-12-07 10:36:55 +0000968``noalias``
Hal Finkel12d36302014-11-21 02:22:46 +0000969 This indicates that objects accessed via pointer values
970 :ref:`based <pointeraliasing>` on the argument or return value are not also
971 accessed, during the execution of the function, via pointer values not
972 *based* on the argument or return value. The attribute on a return value
973 also has additional semantics described below. The caller shares the
974 responsibility with the callee for ensuring that these requirements are met.
975 For further details, please see the discussion of the NoAlias response in
976 :ref:`alias analysis <Must, May, or No>`.
Sean Silvab084af42012-12-07 10:36:55 +0000977
978 Note that this definition of ``noalias`` is intentionally similar
Hal Finkel12d36302014-11-21 02:22:46 +0000979 to the definition of ``restrict`` in C99 for function arguments.
Sean Silvab084af42012-12-07 10:36:55 +0000980
981 For function return values, C99's ``restrict`` is not meaningful,
Hal Finkel12d36302014-11-21 02:22:46 +0000982 while LLVM's ``noalias`` is. Furthermore, the semantics of the ``noalias``
983 attribute on return values are stronger than the semantics of the attribute
984 when used on function arguments. On function return values, the ``noalias``
985 attribute indicates that the function acts like a system memory allocation
986 function, returning a pointer to allocated storage disjoint from the
987 storage for any other object accessible to the caller.
988
Sean Silvab084af42012-12-07 10:36:55 +0000989``nocapture``
990 This indicates that the callee does not make any copies of the
991 pointer that outlive the callee itself. This is not a valid
992 attribute for return values.
993
994.. _nest:
995
996``nest``
997 This indicates that the pointer parameter can be excised using the
998 :ref:`trampoline intrinsics <int_trampoline>`. This is not a valid
Stephen Linb8bd2322013-04-20 05:14:40 +0000999 attribute for return values and can only be applied to one parameter.
1000
1001``returned``
Stephen Linfec5b0b2013-06-20 21:55:10 +00001002 This indicates that the function always returns the argument as its return
1003 value. This is an optimization hint to the code generator when generating
1004 the caller, allowing tail call optimization and omission of register saves
1005 and restores in some cases; it is not checked or enforced when generating
1006 the callee. The parameter and the function return type must be valid
1007 operands for the :ref:`bitcast instruction <i_bitcast>`. This is not a
1008 valid attribute for return values and can only be applied to one parameter.
Sean Silvab084af42012-12-07 10:36:55 +00001009
Nick Lewyckyd52b1522014-05-20 01:23:40 +00001010``nonnull``
1011 This indicates that the parameter or return pointer is not null. This
1012 attribute may only be applied to pointer typed parameters. This is not
1013 checked or enforced by LLVM, the caller must ensure that the pointer
Mehdi Amini4a121fa2015-03-14 22:04:06 +00001014 passed in is non-null, or the callee must ensure that the returned pointer
Nick Lewyckyd52b1522014-05-20 01:23:40 +00001015 is non-null.
1016
Hal Finkelb0407ba2014-07-18 15:51:28 +00001017``dereferenceable(<n>)``
1018 This indicates that the parameter or return pointer is dereferenceable. This
1019 attribute may only be applied to pointer typed parameters. A pointer that
1020 is dereferenceable can be loaded from speculatively without a risk of
1021 trapping. The number of bytes known to be dereferenceable must be provided
1022 in parentheses. It is legal for the number of bytes to be less than the
1023 size of the pointee type. The ``nonnull`` attribute does not imply
1024 dereferenceability (consider a pointer to one element past the end of an
1025 array), however ``dereferenceable(<n>)`` does imply ``nonnull`` in
1026 ``addrspace(0)`` (which is the default address space).
1027
Sanjoy Das31ea6d12015-04-16 20:29:50 +00001028``dereferenceable_or_null(<n>)``
1029 This indicates that the parameter or return value isn't both
1030 non-null and non-dereferenceable (up to ``<n>`` bytes) at the same
Sean Silvaa1190322015-08-06 22:56:48 +00001031 time. All non-null pointers tagged with
Sanjoy Das31ea6d12015-04-16 20:29:50 +00001032 ``dereferenceable_or_null(<n>)`` are ``dereferenceable(<n>)``.
1033 For address space 0 ``dereferenceable_or_null(<n>)`` implies that
1034 a pointer is exactly one of ``dereferenceable(<n>)`` or ``null``,
1035 and in other address spaces ``dereferenceable_or_null(<n>)``
1036 implies that a pointer is at least one of ``dereferenceable(<n>)``
1037 or ``null`` (i.e. it may be both ``null`` and
Sean Silvaa1190322015-08-06 22:56:48 +00001038 ``dereferenceable(<n>)``). This attribute may only be applied to
Sanjoy Das31ea6d12015-04-16 20:29:50 +00001039 pointer typed parameters.
1040
Sean Silvab084af42012-12-07 10:36:55 +00001041.. _gc:
1042
Philip Reamesf80bbff2015-02-25 23:45:20 +00001043Garbage Collector Strategy Names
1044--------------------------------
Sean Silvab084af42012-12-07 10:36:55 +00001045
Philip Reamesf80bbff2015-02-25 23:45:20 +00001046Each function may specify a garbage collector strategy name, which is simply a
Sean Silvab084af42012-12-07 10:36:55 +00001047string:
1048
1049.. code-block:: llvm
1050
1051 define void @f() gc "name" { ... }
1052
Mehdi Amini4a121fa2015-03-14 22:04:06 +00001053The supported values of *name* includes those :ref:`built in to LLVM
Sean Silvaa1190322015-08-06 22:56:48 +00001054<builtin-gc-strategies>` and any provided by loaded plugins. Specifying a GC
Mehdi Amini4a121fa2015-03-14 22:04:06 +00001055strategy will cause the compiler to alter its output in order to support the
Sean Silvaa1190322015-08-06 22:56:48 +00001056named garbage collection algorithm. Note that LLVM itself does not contain a
Philip Reamesf80bbff2015-02-25 23:45:20 +00001057garbage collector, this functionality is restricted to generating machine code
Mehdi Amini4a121fa2015-03-14 22:04:06 +00001058which can interoperate with a collector provided externally.
Sean Silvab084af42012-12-07 10:36:55 +00001059
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001060.. _prefixdata:
1061
1062Prefix Data
1063-----------
1064
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001065Prefix data is data associated with a function which the code
1066generator will emit immediately before the function's entrypoint.
1067The purpose of this feature is to allow frontends to associate
1068language-specific runtime metadata with specific functions and make it
1069available through the function pointer while still allowing the
1070function pointer to be called.
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001071
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001072To access the data for a given function, a program may bitcast the
1073function pointer to a pointer to the constant's type and dereference
Sean Silvaa1190322015-08-06 22:56:48 +00001074index -1. This implies that the IR symbol points just past the end of
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001075the prefix data. For instance, take the example of a function annotated
1076with a single ``i32``,
1077
1078.. code-block:: llvm
1079
1080 define void @f() prefix i32 123 { ... }
1081
1082The prefix data can be referenced as,
1083
1084.. code-block:: llvm
1085
David Blaikie16a97eb2015-03-04 22:02:58 +00001086 %0 = bitcast void* () @f to i32*
1087 %a = getelementptr inbounds i32, i32* %0, i32 -1
David Blaikiec7aabbb2015-03-04 22:06:14 +00001088 %b = load i32, i32* %a
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001089
1090Prefix data is laid out as if it were an initializer for a global variable
Sean Silvaa1190322015-08-06 22:56:48 +00001091of the prefix data's type. The function will be placed such that the
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001092beginning of the prefix data is aligned. This means that if the size
1093of the prefix data is not a multiple of the alignment size, the
1094function's entrypoint will not be aligned. If alignment of the
1095function's entrypoint is desired, padding must be added to the prefix
1096data.
1097
Sean Silvaa1190322015-08-06 22:56:48 +00001098A function may have prefix data but no body. This has similar semantics
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001099to the ``available_externally`` linkage in that the data may be used by the
1100optimizers but will not be emitted in the object file.
1101
1102.. _prologuedata:
1103
1104Prologue Data
1105-------------
1106
1107The ``prologue`` attribute allows arbitrary code (encoded as bytes) to
1108be inserted prior to the function body. This can be used for enabling
1109function hot-patching and instrumentation.
1110
1111To maintain the semantics of ordinary function calls, the prologue data must
Sean Silvaa1190322015-08-06 22:56:48 +00001112have a particular format. Specifically, it must begin with a sequence of
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001113bytes which decode to a sequence of machine instructions, valid for the
1114module's target, which transfer control to the point immediately succeeding
Sean Silvaa1190322015-08-06 22:56:48 +00001115the prologue data, without performing any other visible action. This allows
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001116the inliner and other passes to reason about the semantics of the function
Sean Silvaa1190322015-08-06 22:56:48 +00001117definition without needing to reason about the prologue data. Obviously this
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001118makes the format of the prologue data highly target dependent.
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001119
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001120A trivial example of valid prologue data for the x86 architecture is ``i8 144``,
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001121which encodes the ``nop`` instruction:
1122
1123.. code-block:: llvm
1124
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001125 define void @f() prologue i8 144 { ... }
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001126
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001127Generally prologue data can be formed by encoding a relative branch instruction
1128which skips the metadata, as in this example of valid prologue data for the
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001129x86_64 architecture, where the first two bytes encode ``jmp .+10``:
1130
1131.. code-block:: llvm
1132
1133 %0 = type <{ i8, i8, i8* }>
1134
Peter Collingbourne51d2de72014-12-03 02:08:38 +00001135 define void @f() prologue %0 <{ i8 235, i8 8, i8* @md}> { ... }
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001136
Sean Silvaa1190322015-08-06 22:56:48 +00001137A function may have prologue data but no body. This has similar semantics
Peter Collingbourne3fa50f92013-09-16 01:08:15 +00001138to the ``available_externally`` linkage in that the data may be used by the
1139optimizers but will not be emitted in the object file.
1140
David Majnemer7fddecc2015-06-17 20:52:32 +00001141.. _personalityfn:
1142
1143Personality Function
David Majnemerc5ad8a92015-06-17 21:21:16 +00001144--------------------
David Majnemer7fddecc2015-06-17 20:52:32 +00001145
1146The ``personality`` attribute permits functions to specify what function
1147to use for exception handling.
1148
Bill Wendling63b88192013-02-06 06:52:58 +00001149.. _attrgrp:
1150
1151Attribute Groups
1152----------------
1153
1154Attribute groups are groups of attributes that are referenced by objects within
1155the IR. They are important for keeping ``.ll`` files readable, because a lot of
1156functions will use the same set of attributes. In the degenerative case of a
1157``.ll`` file that corresponds to a single ``.c`` file, the single attribute
1158group will capture the important command line flags used to build that file.
1159
1160An attribute group is a module-level object. To use an attribute group, an
1161object references the attribute group's ID (e.g. ``#37``). An object may refer
1162to more than one attribute group. In that situation, the attributes from the
1163different groups are merged.
1164
1165Here is an example of attribute groups for a function that should always be
1166inlined, has a stack alignment of 4, and which shouldn't use SSE instructions:
1167
1168.. code-block:: llvm
1169
1170 ; Target-independent attributes:
Eli Bendersky97ad9242013-04-18 16:11:44 +00001171 attributes #0 = { alwaysinline alignstack=4 }
Bill Wendling63b88192013-02-06 06:52:58 +00001172
1173 ; Target-dependent attributes:
Eli Bendersky97ad9242013-04-18 16:11:44 +00001174 attributes #1 = { "no-sse" }
Bill Wendling63b88192013-02-06 06:52:58 +00001175
1176 ; Function @f has attributes: alwaysinline, alignstack=4, and "no-sse".
1177 define void @f() #0 #1 { ... }
1178
Sean Silvab084af42012-12-07 10:36:55 +00001179.. _fnattrs:
1180
1181Function Attributes
1182-------------------
1183
1184Function attributes are set to communicate additional information about
1185a function. Function attributes are considered to be part of the
1186function, not of the function type, so functions with different function
1187attributes can have the same function type.
1188
1189Function attributes are simple keywords that follow the type specified.
1190If multiple attributes are needed, they are space separated. For
1191example:
1192
1193.. code-block:: llvm
1194
1195 define void @f() noinline { ... }
1196 define void @f() alwaysinline { ... }
1197 define void @f() alwaysinline optsize { ... }
1198 define void @f() optsize { ... }
1199
Sean Silvab084af42012-12-07 10:36:55 +00001200``alignstack(<n>)``
1201 This attribute indicates that, when emitting the prologue and
1202 epilogue, the backend should forcibly align the stack pointer.
1203 Specify the desired alignment, which must be a power of two, in
1204 parentheses.
1205``alwaysinline``
1206 This attribute indicates that the inliner should attempt to inline
1207 this function into callers whenever possible, ignoring any active
1208 inlining size threshold for this caller.
Michael Gottesman41748d72013-06-27 00:25:01 +00001209``builtin``
1210 This indicates that the callee function at a call site should be
1211 recognized as a built-in function, even though the function's declaration
Michael Gottesman3a6a9672013-07-02 21:32:56 +00001212 uses the ``nobuiltin`` attribute. This is only valid at call sites for
Richard Smith32dbdf62014-07-31 04:25:36 +00001213 direct calls to functions that are declared with the ``nobuiltin``
Michael Gottesman41748d72013-06-27 00:25:01 +00001214 attribute.
Michael Gottesman296adb82013-06-27 22:48:08 +00001215``cold``
1216 This attribute indicates that this function is rarely called. When
1217 computing edge weights, basic blocks post-dominated by a cold
1218 function call are also considered to be cold; and, thus, given low
1219 weight.
Owen Anderson85fa7d52015-05-26 23:48:40 +00001220``convergent``
1221 This attribute indicates that the callee is dependent on a convergent
1222 thread execution pattern under certain parallel execution models.
Owen Andersond95b08a2015-10-09 18:06:13 +00001223 Transformations that are execution model agnostic may not make the execution
1224 of a convergent operation control dependent on any additional values.
Sean Silvab084af42012-12-07 10:36:55 +00001225``inlinehint``
1226 This attribute indicates that the source code contained a hint that
1227 inlining this function is desirable (such as the "inline" keyword in
1228 C/C++). It is just a hint; it imposes no requirements on the
1229 inliner.
Tom Roeder44cb65f2014-06-05 19:29:43 +00001230``jumptable``
1231 This attribute indicates that the function should be added to a
1232 jump-instruction table at code-generation time, and that all address-taken
1233 references to this function should be replaced with a reference to the
1234 appropriate jump-instruction-table function pointer. Note that this creates
1235 a new pointer for the original function, which means that code that depends
1236 on function-pointer identity can break. So, any function annotated with
1237 ``jumptable`` must also be ``unnamed_addr``.
Andrea Di Biagio9b5d23b2013-08-09 18:42:18 +00001238``minsize``
1239 This attribute suggests that optimization passes and code generator
1240 passes make choices that keep the code size of this function as small
Andrew Trickd4d1d9c2013-10-31 17:18:07 +00001241 as possible and perform optimizations that may sacrifice runtime
Andrea Di Biagio9b5d23b2013-08-09 18:42:18 +00001242 performance in order to minimize the size of the generated code.
Sean Silvab084af42012-12-07 10:36:55 +00001243``naked``
1244 This attribute disables prologue / epilogue emission for the
1245 function. This can have very system-specific consequences.
Eli Bendersky97ad9242013-04-18 16:11:44 +00001246``nobuiltin``
Michael Gottesman41748d72013-06-27 00:25:01 +00001247 This indicates that the callee function at a call site is not recognized as
1248 a built-in function. LLVM will retain the original call and not replace it
1249 with equivalent code based on the semantics of the built-in function, unless
1250 the call site uses the ``builtin`` attribute. This is valid at call sites
1251 and on function declarations and definitions.
Bill Wendlingbf902f12013-02-06 06:22:58 +00001252``noduplicate``
1253 This attribute indicates that calls to the function cannot be
1254 duplicated. A call to a ``noduplicate`` function may be moved
1255 within its parent function, but may not be duplicated within
1256 its parent function.
1257
1258 A function containing a ``noduplicate`` call may still
1259 be an inlining candidate, provided that the call is not
1260 duplicated by inlining. That implies that the function has
1261 internal linkage and only has one call site, so the original
1262 call is dead after inlining.
Sean Silvab084af42012-12-07 10:36:55 +00001263``noimplicitfloat``
1264 This attributes disables implicit floating point instructions.
1265``noinline``
1266 This attribute indicates that the inliner should never inline this
1267 function in any situation. This attribute may not be used together
1268 with the ``alwaysinline`` attribute.
Sean Silva1cbbcf12013-08-06 19:34:37 +00001269``nonlazybind``
1270 This attribute suppresses lazy symbol binding for the function. This
1271 may make calls to the function faster, at the cost of extra program
1272 startup time if the function is not called during program startup.
Sean Silvab084af42012-12-07 10:36:55 +00001273``noredzone``
1274 This attribute indicates that the code generator should not use a
1275 red zone, even if the target-specific ABI normally permits it.
1276``noreturn``
1277 This function attribute indicates that the function never returns
1278 normally. This produces undefined behavior at runtime if the
1279 function ever does dynamically return.
James Molloye6f87ca2015-11-06 10:32:53 +00001280``norecurse``
1281 This function attribute indicates that the function does not call itself
1282 either directly or indirectly down any possible call path. This produces
1283 undefined behavior at runtime if the function ever does recurse.
Sean Silvab084af42012-12-07 10:36:55 +00001284``nounwind``
Reid Kleckner96d01132015-02-11 01:23:16 +00001285 This function attribute indicates that the function never raises an
1286 exception. If the function does raise an exception, its runtime
1287 behavior is undefined. However, functions marked nounwind may still
1288 trap or generate asynchronous exceptions. Exception handling schemes
1289 that are recognized by LLVM to handle asynchronous exceptions, such
1290 as SEH, will still provide their implementation defined semantics.
Andrea Di Biagio377496b2013-08-23 11:53:55 +00001291``optnone``
Paul Robinsona2550a62015-11-30 21:56:16 +00001292 This function attribute indicates that most optimization passes will skip
1293 this function, with the exception of interprocedural optimization passes.
1294 Code generation defaults to the "fast" instruction selector.
Andrea Di Biagio377496b2013-08-23 11:53:55 +00001295 This attribute cannot be used together with the ``alwaysinline``
1296 attribute; this attribute is also incompatible
1297 with the ``minsize`` attribute and the ``optsize`` attribute.
Andrew Trickd4d1d9c2013-10-31 17:18:07 +00001298
Paul Robinsondcbe35b2013-11-18 21:44:03 +00001299 This attribute requires the ``noinline`` attribute to be specified on
1300 the function as well, so the function is never inlined into any caller.
Andrea Di Biagio377496b2013-08-23 11:53:55 +00001301 Only functions with the ``alwaysinline`` attribute are valid
Paul Robinsondcbe35b2013-11-18 21:44:03 +00001302 candidates for inlining into the body of this function.
Sean Silvab084af42012-12-07 10:36:55 +00001303``optsize``
1304 This attribute suggests that optimization passes and code generator
1305 passes make choices that keep the code size of this function low,
Andrea Di Biagio9b5d23b2013-08-09 18:42:18 +00001306 and otherwise do optimizations specifically to reduce code size as
1307 long as they do not significantly impact runtime performance.
Sean Silvab084af42012-12-07 10:36:55 +00001308``readnone``
Nick Lewyckyc2ec0722013-07-06 00:29:58 +00001309 On a function, this attribute indicates that the function computes its
1310 result (or decides to unwind an exception) based strictly on its arguments,
Sean Silvab084af42012-12-07 10:36:55 +00001311 without dereferencing any pointer arguments or otherwise accessing
1312 any mutable state (e.g. memory, control registers, etc) visible to
1313 caller functions. It does not write through any pointer arguments
1314 (including ``byval`` arguments) and never changes any state visible
1315 to callers. This means that it cannot unwind exceptions by calling
1316 the ``C++`` exception throwing methods.
Andrew Trickd4d1d9c2013-10-31 17:18:07 +00001317
Nick Lewyckyc2ec0722013-07-06 00:29:58 +00001318 On an argument, this attribute indicates that the function does not
1319 dereference that pointer argument, even though it may read or write the
Nick Lewyckyefe31f22013-07-06 01:04:47 +00001320 memory that the pointer points to if accessed through other pointers.
Sean Silvab084af42012-12-07 10:36:55 +00001321``readonly``
Nick Lewyckyc2ec0722013-07-06 00:29:58 +00001322 On a function, this attribute indicates that the function does not write
1323 through any pointer arguments (including ``byval`` arguments) or otherwise
Sean Silvab084af42012-12-07 10:36:55 +00001324 modify any state (e.g. memory, control registers, etc) visible to
1325 caller functions. It may dereference pointer arguments and read
1326 state that may be set in the caller. A readonly function always
1327 returns the same value (or unwinds an exception identically) when
1328 called with the same set of arguments and global state. It cannot
1329 unwind an exception by calling the ``C++`` exception throwing
1330 methods.
Andrew Trickd4d1d9c2013-10-31 17:18:07 +00001331
Nick Lewyckyc2ec0722013-07-06 00:29:58 +00001332 On an argument, this attribute indicates that the function does not write
1333 through this pointer argument, even though it may write to the memory that
1334 the pointer points to.
Igor Laevsky39d662f2015-07-11 10:30:36 +00001335``argmemonly``
1336 This attribute indicates that the only memory accesses inside function are
1337 loads and stores from objects pointed to by its pointer-typed arguments,
1338 with arbitrary offsets. Or in other words, all memory operations in the
1339 function can refer to memory only using pointers based on its function
1340 arguments.
1341 Note that ``argmemonly`` can be used together with ``readonly`` attribute
1342 in order to specify that function reads only from its arguments.
Sean Silvab084af42012-12-07 10:36:55 +00001343``returns_twice``
1344 This attribute indicates that this function can return twice. The C
1345 ``setjmp`` is an example of such a function. The compiler disables
1346 some optimizations (like tail calls) in the caller of these
1347 functions.
Peter Collingbourne82437bf2015-06-15 21:07:11 +00001348``safestack``
1349 This attribute indicates that
1350 `SafeStack <http://clang.llvm.org/docs/SafeStack.html>`_
1351 protection is enabled for this function.
1352
1353 If a function that has a ``safestack`` attribute is inlined into a
1354 function that doesn't have a ``safestack`` attribute or which has an
1355 ``ssp``, ``sspstrong`` or ``sspreq`` attribute, then the resulting
1356 function will have a ``safestack`` attribute.
Kostya Serebryanycf880b92013-02-26 06:58:09 +00001357``sanitize_address``
1358 This attribute indicates that AddressSanitizer checks
1359 (dynamic address safety analysis) are enabled for this function.
1360``sanitize_memory``
1361 This attribute indicates that MemorySanitizer checks (dynamic detection
1362 of accesses to uninitialized memory) are enabled for this function.
1363``sanitize_thread``
1364 This attribute indicates that ThreadSanitizer checks
1365 (dynamic thread safety analysis) are enabled for this function.
Sean Silvab084af42012-12-07 10:36:55 +00001366``ssp``
1367 This attribute indicates that the function should emit a stack
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00001368 smashing protector. It is in the form of a "canary" --- a random value
Sean Silvab084af42012-12-07 10:36:55 +00001369 placed on the stack before the local variables that's checked upon
1370 return from the function to see if it has been overwritten. A
1371 heuristic is used to determine if a function needs stack protectors
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001372 or not. The heuristic used will enable protectors for functions with:
Dmitri Gribenko69b56472013-01-29 23:14:41 +00001373
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001374 - Character arrays larger than ``ssp-buffer-size`` (default 8).
1375 - Aggregates containing character arrays larger than ``ssp-buffer-size``.
1376 - Calls to alloca() with variable sizes or constant sizes greater than
1377 ``ssp-buffer-size``.
Sean Silvab084af42012-12-07 10:36:55 +00001378
Josh Magee24c7f062014-02-01 01:36:16 +00001379 Variables that are identified as requiring a protector will be arranged
1380 on the stack such that they are adjacent to the stack protector guard.
1381
Sean Silvab084af42012-12-07 10:36:55 +00001382 If a function that has an ``ssp`` attribute is inlined into a
1383 function that doesn't have an ``ssp`` attribute, then the resulting
1384 function will have an ``ssp`` attribute.
1385``sspreq``
1386 This attribute indicates that the function should *always* emit a
1387 stack smashing protector. This overrides the ``ssp`` function
1388 attribute.
1389
Josh Magee24c7f062014-02-01 01:36:16 +00001390 Variables that are identified as requiring a protector will be arranged
1391 on the stack such that they are adjacent to the stack protector guard.
1392 The specific layout rules are:
1393
1394 #. Large arrays and structures containing large arrays
1395 (``>= ssp-buffer-size``) are closest to the stack protector.
1396 #. Small arrays and structures containing small arrays
1397 (``< ssp-buffer-size``) are 2nd closest to the protector.
1398 #. Variables that have had their address taken are 3rd closest to the
1399 protector.
1400
Sean Silvab084af42012-12-07 10:36:55 +00001401 If a function that has an ``sspreq`` attribute is inlined into a
1402 function that doesn't have an ``sspreq`` attribute or which has an
Bill Wendlingd154e2832013-01-23 06:41:41 +00001403 ``ssp`` or ``sspstrong`` attribute, then the resulting function will have
1404 an ``sspreq`` attribute.
1405``sspstrong``
1406 This attribute indicates that the function should emit a stack smashing
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001407 protector. This attribute causes a strong heuristic to be used when
Sean Silvaa1190322015-08-06 22:56:48 +00001408 determining if a function needs stack protectors. The strong heuristic
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001409 will enable protectors for functions with:
Dmitri Gribenko69b56472013-01-29 23:14:41 +00001410
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001411 - Arrays of any size and type
1412 - Aggregates containing an array of any size and type.
1413 - Calls to alloca().
1414 - Local variables that have had their address taken.
1415
Josh Magee24c7f062014-02-01 01:36:16 +00001416 Variables that are identified as requiring a protector will be arranged
1417 on the stack such that they are adjacent to the stack protector guard.
1418 The specific layout rules are:
1419
1420 #. Large arrays and structures containing large arrays
1421 (``>= ssp-buffer-size``) are closest to the stack protector.
1422 #. Small arrays and structures containing small arrays
1423 (``< ssp-buffer-size``) are 2nd closest to the protector.
1424 #. Variables that have had their address taken are 3rd closest to the
1425 protector.
1426
Bill Wendling7c8f96a2013-01-23 06:43:53 +00001427 This overrides the ``ssp`` function attribute.
Bill Wendlingd154e2832013-01-23 06:41:41 +00001428
1429 If a function that has an ``sspstrong`` attribute is inlined into a
1430 function that doesn't have an ``sspstrong`` attribute, then the
1431 resulting function will have an ``sspstrong`` attribute.
Reid Kleckner5a2ab2b2015-03-04 00:08:56 +00001432``"thunk"``
1433 This attribute indicates that the function will delegate to some other
1434 function with a tail call. The prototype of a thunk should not be used for
1435 optimization purposes. The caller is expected to cast the thunk prototype to
1436 match the thunk target prototype.
Sean Silvab084af42012-12-07 10:36:55 +00001437``uwtable``
1438 This attribute indicates that the ABI being targeted requires that
Sean Silva706fba52015-08-06 22:56:24 +00001439 an unwind table entry be produced for this function even if we can
Sean Silvab084af42012-12-07 10:36:55 +00001440 show that no exceptions passes by it. This is normally the case for
1441 the ELF x86-64 abi, but it can be disabled for some compilation
1442 units.
Sean Silvab084af42012-12-07 10:36:55 +00001443
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00001444
1445.. _opbundles:
1446
1447Operand Bundles
1448---------------
1449
1450Note: operand bundles are a work in progress, and they should be
1451considered experimental at this time.
1452
1453Operand bundles are tagged sets of SSA values that can be associated
Sanjoy Dasb0e9d4a52015-09-25 00:05:40 +00001454with certain LLVM instructions (currently only ``call`` s and
1455``invoke`` s). In a way they are like metadata, but dropping them is
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00001456incorrect and will change program semantics.
1457
1458Syntax::
David Majnemer34cacb42015-10-22 01:46:38 +00001459
Sanjoy Das9f3c1252015-11-21 09:12:07 +00001460 operand bundle set ::= '[' operand bundle (, operand bundle )* ']'
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00001461 operand bundle ::= tag '(' [ bundle operand ] (, bundle operand )* ')'
1462 bundle operand ::= SSA value
1463 tag ::= string constant
1464
1465Operand bundles are **not** part of a function's signature, and a
1466given function may be called from multiple places with different kinds
1467of operand bundles. This reflects the fact that the operand bundles
1468are conceptually a part of the ``call`` (or ``invoke``), not the
1469callee being dispatched to.
1470
1471Operand bundles are a generic mechanism intended to support
1472runtime-introspection-like functionality for managed languages. While
1473the exact semantics of an operand bundle depend on the bundle tag,
1474there are certain limitations to how much the presence of an operand
1475bundle can influence the semantics of a program. These restrictions
1476are described as the semantics of an "unknown" operand bundle. As
1477long as the behavior of an operand bundle is describable within these
1478restrictions, LLVM does not need to have special knowledge of the
1479operand bundle to not miscompile programs containing it.
1480
David Majnemer34cacb42015-10-22 01:46:38 +00001481- The bundle operands for an unknown operand bundle escape in unknown
1482 ways before control is transferred to the callee or invokee.
1483- Calls and invokes with operand bundles have unknown read / write
1484 effect on the heap on entry and exit (even if the call target is
Sanjoy Das98a341b2015-10-22 03:12:22 +00001485 ``readnone`` or ``readonly``), unless they're overriden with
1486 callsite specific attributes.
1487- An operand bundle at a call site cannot change the implementation
1488 of the called function. Inter-procedural optimizations work as
1489 usual as long as they take into account the first two properties.
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00001490
Sanjoy Dascdafd842015-11-11 21:38:02 +00001491More specific types of operand bundles are described below.
1492
1493Deoptimization Operand Bundles
1494^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1495
Sanjoy Das9f3c1252015-11-21 09:12:07 +00001496Deoptimization operand bundles are characterized by the ``"deopt"``
Sanjoy Dascdafd842015-11-11 21:38:02 +00001497operand bundle tag. These operand bundles represent an alternate
1498"safe" continuation for the call site they're attached to, and can be
1499used by a suitable runtime to deoptimize the compiled frame at the
Sanjoy Das9f3c1252015-11-21 09:12:07 +00001500specified call site. There can be at most one ``"deopt"`` operand
1501bundle attached to a call site. Exact details of deoptimization is
1502out of scope for the language reference, but it usually involves
1503rewriting a compiled frame into a set of interpreted frames.
Sanjoy Dascdafd842015-11-11 21:38:02 +00001504
1505From the compiler's perspective, deoptimization operand bundles make
1506the call sites they're attached to at least ``readonly``. They read
1507through all of their pointer typed operands (even if they're not
1508otherwise escaped) and the entire visible heap. Deoptimization
1509operand bundles do not capture their operands except during
1510deoptimization, in which case control will not be returned to the
1511compiled frame.
1512
Sanjoy Das2d161452015-11-18 06:23:38 +00001513The inliner knows how to inline through calls that have deoptimization
1514operand bundles. Just like inlining through a normal call site
1515involves composing the normal and exceptional continuations, inlining
1516through a call site with a deoptimization operand bundle needs to
1517appropriately compose the "safe" deoptimization continuation. The
1518inliner does this by prepending the parent's deoptimization
1519continuation to every deoptimization continuation in the inlined body.
1520E.g. inlining ``@f`` into ``@g`` in the following example
1521
1522.. code-block:: llvm
1523
1524 define void @f() {
1525 call void @x() ;; no deopt state
1526 call void @y() [ "deopt"(i32 10) ]
1527 call void @y() [ "deopt"(i32 10), "unknown"(i8* null) ]
1528 ret void
1529 }
1530
1531 define void @g() {
1532 call void @f() [ "deopt"(i32 20) ]
1533 ret void
1534 }
1535
1536will result in
1537
1538.. code-block:: llvm
1539
1540 define void @g() {
1541 call void @x() ;; still no deopt state
1542 call void @y() [ "deopt"(i32 20, i32 10) ]
1543 call void @y() [ "deopt"(i32 20, i32 10), "unknown"(i8* null) ]
1544 ret void
1545 }
1546
1547It is the frontend's responsibility to structure or encode the
1548deoptimization state in a way that syntactically prepending the
1549caller's deoptimization state to the callee's deoptimization state is
1550semantically equivalent to composing the caller's deoptimization
1551continuation after the callee's deoptimization continuation.
1552
Sean Silvab084af42012-12-07 10:36:55 +00001553.. _moduleasm:
1554
1555Module-Level Inline Assembly
1556----------------------------
1557
1558Modules may contain "module-level inline asm" blocks, which corresponds
1559to the GCC "file scope inline asm" blocks. These blocks are internally
1560concatenated by LLVM and treated as a single unit, but may be separated
1561in the ``.ll`` file if desired. The syntax is very simple:
1562
1563.. code-block:: llvm
1564
1565 module asm "inline asm code goes here"
1566 module asm "more can go here"
1567
1568The strings can contain any character by escaping non-printable
1569characters. The escape sequence used is simply "\\xx" where "xx" is the
1570two digit hex code for the number.
1571
James Y Knightbc832ed2015-07-08 18:08:36 +00001572Note that the assembly string *must* be parseable by LLVM's integrated assembler
1573(unless it is disabled), even when emitting a ``.s`` file.
Sean Silvab084af42012-12-07 10:36:55 +00001574
Eli Benderskyfdc529a2013-06-07 19:40:08 +00001575.. _langref_datalayout:
1576
Sean Silvab084af42012-12-07 10:36:55 +00001577Data Layout
1578-----------
1579
1580A module may specify a target specific data layout string that specifies
1581how data is to be laid out in memory. The syntax for the data layout is
1582simply:
1583
1584.. code-block:: llvm
1585
1586 target datalayout = "layout specification"
1587
1588The *layout specification* consists of a list of specifications
1589separated by the minus sign character ('-'). Each specification starts
1590with a letter and may include other information after the letter to
1591define some aspect of the data layout. The specifications accepted are
1592as follows:
1593
1594``E``
1595 Specifies that the target lays out data in big-endian form. That is,
1596 the bits with the most significance have the lowest address
1597 location.
1598``e``
1599 Specifies that the target lays out data in little-endian form. That
1600 is, the bits with the least significance have the lowest address
1601 location.
1602``S<size>``
1603 Specifies the natural alignment of the stack in bits. Alignment
1604 promotion of stack variables is limited to the natural stack
1605 alignment to avoid dynamic stack realignment. The stack alignment
1606 must be a multiple of 8-bits. If omitted, the natural stack
1607 alignment defaults to "unspecified", which does not prevent any
1608 alignment promotions.
1609``p[n]:<size>:<abi>:<pref>``
1610 This specifies the *size* of a pointer and its ``<abi>`` and
1611 ``<pref>``\erred alignments for address space ``n``. All sizes are in
Sean Silva706fba52015-08-06 22:56:24 +00001612 bits. The address space, ``n``, is optional, and if not specified,
Sean Silvaa1190322015-08-06 22:56:48 +00001613 denotes the default address space 0. The value of ``n`` must be
Rafael Espindolaabdd7262014-01-06 21:40:24 +00001614 in the range [1,2^23).
Sean Silvab084af42012-12-07 10:36:55 +00001615``i<size>:<abi>:<pref>``
1616 This specifies the alignment for an integer type of a given bit
1617 ``<size>``. The value of ``<size>`` must be in the range [1,2^23).
1618``v<size>:<abi>:<pref>``
1619 This specifies the alignment for a vector type of a given bit
1620 ``<size>``.
1621``f<size>:<abi>:<pref>``
1622 This specifies the alignment for a floating point type of a given bit
1623 ``<size>``. Only values of ``<size>`` that are supported by the target
1624 will work. 32 (float) and 64 (double) are supported on all targets; 80
1625 or 128 (different flavors of long double) are also supported on some
1626 targets.
Rafael Espindolaabdd7262014-01-06 21:40:24 +00001627``a:<abi>:<pref>``
1628 This specifies the alignment for an object of aggregate type.
Rafael Espindola58873562014-01-03 19:21:54 +00001629``m:<mangling>``
Hans Wennborgd4245ac2014-01-15 02:49:17 +00001630 If present, specifies that llvm names are mangled in the output. The
1631 options are
1632
1633 * ``e``: ELF mangling: Private symbols get a ``.L`` prefix.
1634 * ``m``: Mips mangling: Private symbols get a ``$`` prefix.
1635 * ``o``: Mach-O mangling: Private symbols get ``L`` prefix. Other
1636 symbols get a ``_`` prefix.
1637 * ``w``: Windows COFF prefix: Similar to Mach-O, but stdcall and fastcall
1638 functions also get a suffix based on the frame size.
Saleem Abdulrasool70d2d642015-10-25 20:39:35 +00001639 * ``x``: Windows x86 COFF prefix: Similar to Windows COFF, but use a ``_``
1640 prefix for ``__cdecl`` functions.
Sean Silvab084af42012-12-07 10:36:55 +00001641``n<size1>:<size2>:<size3>...``
1642 This specifies a set of native integer widths for the target CPU in
1643 bits. For example, it might contain ``n32`` for 32-bit PowerPC,
1644 ``n32:64`` for PowerPC 64, or ``n8:16:32:64`` for X86-64. Elements of
1645 this set are considered to support most general arithmetic operations
1646 efficiently.
1647
Rafael Espindolaabdd7262014-01-06 21:40:24 +00001648On every specification that takes a ``<abi>:<pref>``, specifying the
1649``<pref>`` alignment is optional. If omitted, the preceding ``:``
1650should be omitted too and ``<pref>`` will be equal to ``<abi>``.
1651
Sean Silvab084af42012-12-07 10:36:55 +00001652When constructing the data layout for a given target, LLVM starts with a
1653default set of specifications which are then (possibly) overridden by
1654the specifications in the ``datalayout`` keyword. The default
1655specifications are given in this list:
1656
1657- ``E`` - big endian
Matt Arsenault24b49c42013-07-31 17:49:08 +00001658- ``p:64:64:64`` - 64-bit pointers with 64-bit alignment.
1659- ``p[n]:64:64:64`` - Other address spaces are assumed to be the
1660 same as the default address space.
Patrik Hagglunda832ab12013-01-30 09:02:06 +00001661- ``S0`` - natural stack alignment is unspecified
Sean Silvab084af42012-12-07 10:36:55 +00001662- ``i1:8:8`` - i1 is 8-bit (byte) aligned
1663- ``i8:8:8`` - i8 is 8-bit (byte) aligned
1664- ``i16:16:16`` - i16 is 16-bit aligned
1665- ``i32:32:32`` - i32 is 32-bit aligned
1666- ``i64:32:64`` - i64 has ABI alignment of 32-bits but preferred
1667 alignment of 64-bits
Patrik Hagglunda832ab12013-01-30 09:02:06 +00001668- ``f16:16:16`` - half is 16-bit aligned
Sean Silvab084af42012-12-07 10:36:55 +00001669- ``f32:32:32`` - float is 32-bit aligned
1670- ``f64:64:64`` - double is 64-bit aligned
Patrik Hagglunda832ab12013-01-30 09:02:06 +00001671- ``f128:128:128`` - quad is 128-bit aligned
Sean Silvab084af42012-12-07 10:36:55 +00001672- ``v64:64:64`` - 64-bit vector is 64-bit aligned
1673- ``v128:128:128`` - 128-bit vector is 128-bit aligned
Rafael Espindolae8f4d582013-12-12 17:21:51 +00001674- ``a:0:64`` - aggregates are 64-bit aligned
Sean Silvab084af42012-12-07 10:36:55 +00001675
1676When LLVM is determining the alignment for a given type, it uses the
1677following rules:
1678
1679#. If the type sought is an exact match for one of the specifications,
1680 that specification is used.
1681#. If no match is found, and the type sought is an integer type, then
1682 the smallest integer type that is larger than the bitwidth of the
1683 sought type is used. If none of the specifications are larger than
1684 the bitwidth then the largest integer type is used. For example,
1685 given the default specifications above, the i7 type will use the
1686 alignment of i8 (next largest) while both i65 and i256 will use the
1687 alignment of i64 (largest specified).
1688#. If no match is found, and the type sought is a vector type, then the
1689 largest vector type that is smaller than the sought vector type will
1690 be used as a fall back. This happens because <128 x double> can be
1691 implemented in terms of 64 <2 x double>, for example.
1692
1693The function of the data layout string may not be what you expect.
1694Notably, this is not a specification from the frontend of what alignment
1695the code generator should use.
1696
1697Instead, if specified, the target data layout is required to match what
1698the ultimate *code generator* expects. This string is used by the
1699mid-level optimizers to improve code, and this only works if it matches
Mehdi Amini4a121fa2015-03-14 22:04:06 +00001700what the ultimate code generator uses. There is no way to generate IR
1701that does not embed this target-specific detail into the IR. If you
1702don't specify the string, the default specifications will be used to
1703generate a Data Layout and the optimization phases will operate
1704accordingly and introduce target specificity into the IR with respect to
1705these default specifications.
Sean Silvab084af42012-12-07 10:36:55 +00001706
Bill Wendling5cc90842013-10-18 23:41:25 +00001707.. _langref_triple:
1708
1709Target Triple
1710-------------
1711
1712A module may specify a target triple string that describes the target
1713host. The syntax for the target triple is simply:
1714
1715.. code-block:: llvm
1716
1717 target triple = "x86_64-apple-macosx10.7.0"
1718
1719The *target triple* string consists of a series of identifiers delimited
1720by the minus sign character ('-'). The canonical forms are:
1721
1722::
1723
1724 ARCHITECTURE-VENDOR-OPERATING_SYSTEM
1725 ARCHITECTURE-VENDOR-OPERATING_SYSTEM-ENVIRONMENT
1726
1727This information is passed along to the backend so that it generates
1728code for the proper architecture. It's possible to override this on the
1729command line with the ``-mtriple`` command line option.
1730
Sean Silvab084af42012-12-07 10:36:55 +00001731.. _pointeraliasing:
1732
1733Pointer Aliasing Rules
1734----------------------
1735
1736Any memory access must be done through a pointer value associated with
1737an address range of the memory access, otherwise the behavior is
1738undefined. Pointer values are associated with address ranges according
1739to the following rules:
1740
1741- A pointer value is associated with the addresses associated with any
1742 value it is *based* on.
1743- An address of a global variable is associated with the address range
1744 of the variable's storage.
1745- The result value of an allocation instruction is associated with the
1746 address range of the allocated storage.
1747- A null pointer in the default address-space is associated with no
1748 address.
1749- An integer constant other than zero or a pointer value returned from
1750 a function not defined within LLVM may be associated with address
1751 ranges allocated through mechanisms other than those provided by
1752 LLVM. Such ranges shall not overlap with any ranges of addresses
1753 allocated by mechanisms provided by LLVM.
1754
1755A pointer value is *based* on another pointer value according to the
1756following rules:
1757
1758- A pointer value formed from a ``getelementptr`` operation is *based*
David Blaikie16a97eb2015-03-04 22:02:58 +00001759 on the first value operand of the ``getelementptr``.
Sean Silvab084af42012-12-07 10:36:55 +00001760- The result value of a ``bitcast`` is *based* on the operand of the
1761 ``bitcast``.
1762- A pointer value formed by an ``inttoptr`` is *based* on all pointer
1763 values that contribute (directly or indirectly) to the computation of
1764 the pointer's value.
1765- The "*based* on" relationship is transitive.
1766
1767Note that this definition of *"based"* is intentionally similar to the
1768definition of *"based"* in C99, though it is slightly weaker.
1769
1770LLVM IR does not associate types with memory. The result type of a
1771``load`` merely indicates the size and alignment of the memory from
1772which to load, as well as the interpretation of the value. The first
1773operand type of a ``store`` similarly only indicates the size and
1774alignment of the store.
1775
1776Consequently, type-based alias analysis, aka TBAA, aka
1777``-fstrict-aliasing``, is not applicable to general unadorned LLVM IR.
1778:ref:`Metadata <metadata>` may be used to encode additional information
1779which specialized optimization passes may use to implement type-based
1780alias analysis.
1781
1782.. _volatile:
1783
1784Volatile Memory Accesses
1785------------------------
1786
1787Certain memory accesses, such as :ref:`load <i_load>`'s,
1788:ref:`store <i_store>`'s, and :ref:`llvm.memcpy <int_memcpy>`'s may be
1789marked ``volatile``. The optimizers must not change the number of
1790volatile operations or change their order of execution relative to other
1791volatile operations. The optimizers *may* change the order of volatile
1792operations relative to non-volatile operations. This is not Java's
1793"volatile" and has no cross-thread synchronization behavior.
1794
Andrew Trick89fc5a62013-01-30 21:19:35 +00001795IR-level volatile loads and stores cannot safely be optimized into
1796llvm.memcpy or llvm.memmove intrinsics even when those intrinsics are
1797flagged volatile. Likewise, the backend should never split or merge
1798target-legal volatile load/store instructions.
1799
Andrew Trick7e6f9282013-01-31 00:49:39 +00001800.. admonition:: Rationale
1801
1802 Platforms may rely on volatile loads and stores of natively supported
1803 data width to be executed as single instruction. For example, in C
1804 this holds for an l-value of volatile primitive type with native
1805 hardware support, but not necessarily for aggregate types. The
1806 frontend upholds these expectations, which are intentionally
Sean Silva706fba52015-08-06 22:56:24 +00001807 unspecified in the IR. The rules above ensure that IR transformations
Andrew Trick7e6f9282013-01-31 00:49:39 +00001808 do not violate the frontend's contract with the language.
1809
Sean Silvab084af42012-12-07 10:36:55 +00001810.. _memmodel:
1811
1812Memory Model for Concurrent Operations
1813--------------------------------------
1814
1815The LLVM IR does not define any way to start parallel threads of
1816execution or to register signal handlers. Nonetheless, there are
1817platform-specific ways to create them, and we define LLVM IR's behavior
1818in their presence. This model is inspired by the C++0x memory model.
1819
1820For a more informal introduction to this model, see the :doc:`Atomics`.
1821
1822We define a *happens-before* partial order as the least partial order
1823that
1824
1825- Is a superset of single-thread program order, and
1826- When a *synchronizes-with* ``b``, includes an edge from ``a`` to
1827 ``b``. *Synchronizes-with* pairs are introduced by platform-specific
1828 techniques, like pthread locks, thread creation, thread joining,
1829 etc., and by atomic instructions. (See also :ref:`Atomic Memory Ordering
1830 Constraints <ordering>`).
1831
1832Note that program order does not introduce *happens-before* edges
1833between a thread and signals executing inside that thread.
1834
1835Every (defined) read operation (load instructions, memcpy, atomic
1836loads/read-modify-writes, etc.) R reads a series of bytes written by
1837(defined) write operations (store instructions, atomic
1838stores/read-modify-writes, memcpy, etc.). For the purposes of this
1839section, initialized globals are considered to have a write of the
1840initializer which is atomic and happens before any other read or write
1841of the memory in question. For each byte of a read R, R\ :sub:`byte`
1842may see any write to the same byte, except:
1843
1844- If write\ :sub:`1` happens before write\ :sub:`2`, and
1845 write\ :sub:`2` happens before R\ :sub:`byte`, then
1846 R\ :sub:`byte` does not see write\ :sub:`1`.
1847- If R\ :sub:`byte` happens before write\ :sub:`3`, then
1848 R\ :sub:`byte` does not see write\ :sub:`3`.
1849
1850Given that definition, R\ :sub:`byte` is defined as follows:
1851
1852- If R is volatile, the result is target-dependent. (Volatile is
1853 supposed to give guarantees which can support ``sig_atomic_t`` in
Richard Smith32dbdf62014-07-31 04:25:36 +00001854 C/C++, and may be used for accesses to addresses that do not behave
Sean Silvab084af42012-12-07 10:36:55 +00001855 like normal memory. It does not generally provide cross-thread
1856 synchronization.)
1857- Otherwise, if there is no write to the same byte that happens before
1858 R\ :sub:`byte`, R\ :sub:`byte` returns ``undef`` for that byte.
1859- Otherwise, if R\ :sub:`byte` may see exactly one write,
1860 R\ :sub:`byte` returns the value written by that write.
1861- Otherwise, if R is atomic, and all the writes R\ :sub:`byte` may
1862 see are atomic, it chooses one of the values written. See the :ref:`Atomic
1863 Memory Ordering Constraints <ordering>` section for additional
1864 constraints on how the choice is made.
1865- Otherwise R\ :sub:`byte` returns ``undef``.
1866
1867R returns the value composed of the series of bytes it read. This
1868implies that some bytes within the value may be ``undef`` **without**
1869the entire value being ``undef``. Note that this only defines the
1870semantics of the operation; it doesn't mean that targets will emit more
1871than one instruction to read the series of bytes.
1872
1873Note that in cases where none of the atomic intrinsics are used, this
1874model places only one restriction on IR transformations on top of what
1875is required for single-threaded execution: introducing a store to a byte
1876which might not otherwise be stored is not allowed in general.
1877(Specifically, in the case where another thread might write to and read
1878from an address, introducing a store can change a load that may see
1879exactly one write into a load that may see multiple writes.)
1880
1881.. _ordering:
1882
1883Atomic Memory Ordering Constraints
1884----------------------------------
1885
1886Atomic instructions (:ref:`cmpxchg <i_cmpxchg>`,
1887:ref:`atomicrmw <i_atomicrmw>`, :ref:`fence <i_fence>`,
1888:ref:`atomic load <i_load>`, and :ref:`atomic store <i_store>`) take
Tim Northovere94a5182014-03-11 10:48:52 +00001889ordering parameters that determine which other atomic instructions on
Sean Silvab084af42012-12-07 10:36:55 +00001890the same address they *synchronize with*. These semantics are borrowed
1891from Java and C++0x, but are somewhat more colloquial. If these
1892descriptions aren't precise enough, check those specs (see spec
1893references in the :doc:`atomics guide <Atomics>`).
1894:ref:`fence <i_fence>` instructions treat these orderings somewhat
1895differently since they don't take an address. See that instruction's
1896documentation for details.
1897
1898For a simpler introduction to the ordering constraints, see the
1899:doc:`Atomics`.
1900
1901``unordered``
1902 The set of values that can be read is governed by the happens-before
1903 partial order. A value cannot be read unless some operation wrote
1904 it. This is intended to provide a guarantee strong enough to model
1905 Java's non-volatile shared variables. This ordering cannot be
1906 specified for read-modify-write operations; it is not strong enough
1907 to make them atomic in any interesting way.
1908``monotonic``
1909 In addition to the guarantees of ``unordered``, there is a single
1910 total order for modifications by ``monotonic`` operations on each
1911 address. All modification orders must be compatible with the
1912 happens-before order. There is no guarantee that the modification
1913 orders can be combined to a global total order for the whole program
1914 (and this often will not be possible). The read in an atomic
1915 read-modify-write operation (:ref:`cmpxchg <i_cmpxchg>` and
1916 :ref:`atomicrmw <i_atomicrmw>`) reads the value in the modification
1917 order immediately before the value it writes. If one atomic read
1918 happens before another atomic read of the same address, the later
1919 read must see the same value or a later value in the address's
1920 modification order. This disallows reordering of ``monotonic`` (or
1921 stronger) operations on the same address. If an address is written
1922 ``monotonic``-ally by one thread, and other threads ``monotonic``-ally
1923 read that address repeatedly, the other threads must eventually see
1924 the write. This corresponds to the C++0x/C1x
1925 ``memory_order_relaxed``.
1926``acquire``
1927 In addition to the guarantees of ``monotonic``, a
1928 *synchronizes-with* edge may be formed with a ``release`` operation.
1929 This is intended to model C++'s ``memory_order_acquire``.
1930``release``
1931 In addition to the guarantees of ``monotonic``, if this operation
1932 writes a value which is subsequently read by an ``acquire``
1933 operation, it *synchronizes-with* that operation. (This isn't a
1934 complete description; see the C++0x definition of a release
1935 sequence.) This corresponds to the C++0x/C1x
1936 ``memory_order_release``.
1937``acq_rel`` (acquire+release)
1938 Acts as both an ``acquire`` and ``release`` operation on its
1939 address. This corresponds to the C++0x/C1x ``memory_order_acq_rel``.
1940``seq_cst`` (sequentially consistent)
1941 In addition to the guarantees of ``acq_rel`` (``acquire`` for an
Richard Smith32dbdf62014-07-31 04:25:36 +00001942 operation that only reads, ``release`` for an operation that only
Sean Silvab084af42012-12-07 10:36:55 +00001943 writes), there is a global total order on all
1944 sequentially-consistent operations on all addresses, which is
1945 consistent with the *happens-before* partial order and with the
1946 modification orders of all the affected addresses. Each
1947 sequentially-consistent read sees the last preceding write to the
1948 same address in this global order. This corresponds to the C++0x/C1x
1949 ``memory_order_seq_cst`` and Java volatile.
1950
1951.. _singlethread:
1952
1953If an atomic operation is marked ``singlethread``, it only *synchronizes
1954with* or participates in modification and seq\_cst total orderings with
1955other operations running in the same thread (for example, in signal
1956handlers).
1957
1958.. _fastmath:
1959
1960Fast-Math Flags
1961---------------
1962
1963LLVM IR floating-point binary ops (:ref:`fadd <i_fadd>`,
1964:ref:`fsub <i_fsub>`, :ref:`fmul <i_fmul>`, :ref:`fdiv <i_fdiv>`,
James Molloy88eb5352015-07-10 12:52:00 +00001965:ref:`frem <i_frem>`, :ref:`fcmp <i_fcmp>`) have the following flags that can
1966be set to enable otherwise unsafe floating point operations
Sean Silvab084af42012-12-07 10:36:55 +00001967
1968``nnan``
1969 No NaNs - Allow optimizations to assume the arguments and result are not
1970 NaN. Such optimizations are required to retain defined behavior over
1971 NaNs, but the value of the result is undefined.
1972
1973``ninf``
1974 No Infs - Allow optimizations to assume the arguments and result are not
1975 +/-Inf. Such optimizations are required to retain defined behavior over
1976 +/-Inf, but the value of the result is undefined.
1977
1978``nsz``
1979 No Signed Zeros - Allow optimizations to treat the sign of a zero
1980 argument or result as insignificant.
1981
1982``arcp``
1983 Allow Reciprocal - Allow optimizations to use the reciprocal of an
1984 argument rather than perform division.
1985
1986``fast``
1987 Fast - Allow algebraically equivalent transformations that may
1988 dramatically change results in floating point (e.g. reassociate). This
1989 flag implies all the others.
1990
Duncan P. N. Exon Smith0a448fb2014-08-19 21:30:15 +00001991.. _uselistorder:
1992
1993Use-list Order Directives
1994-------------------------
1995
1996Use-list directives encode the in-memory order of each use-list, allowing the
Sean Silvaa1190322015-08-06 22:56:48 +00001997order to be recreated. ``<order-indexes>`` is a comma-separated list of
1998indexes that are assigned to the referenced value's uses. The referenced
Duncan P. N. Exon Smith0a448fb2014-08-19 21:30:15 +00001999value's use-list is immediately sorted by these indexes.
2000
Sean Silvaa1190322015-08-06 22:56:48 +00002001Use-list directives may appear at function scope or global scope. They are not
2002instructions, and have no effect on the semantics of the IR. When they're at
Duncan P. N. Exon Smith0a448fb2014-08-19 21:30:15 +00002003function scope, they must appear after the terminator of the final basic block.
2004
2005If basic blocks have their address taken via ``blockaddress()`` expressions,
2006``uselistorder_bb`` can be used to reorder their use-lists from outside their
2007function's scope.
2008
2009:Syntax:
2010
2011::
2012
2013 uselistorder <ty> <value>, { <order-indexes> }
2014 uselistorder_bb @function, %block { <order-indexes> }
2015
2016:Examples:
2017
2018::
2019
Duncan P. N. Exon Smith23046652014-08-19 21:48:04 +00002020 define void @foo(i32 %arg1, i32 %arg2) {
2021 entry:
2022 ; ... instructions ...
2023 bb:
2024 ; ... instructions ...
2025
2026 ; At function scope.
2027 uselistorder i32 %arg1, { 1, 0, 2 }
2028 uselistorder label %bb, { 1, 0 }
2029 }
Duncan P. N. Exon Smith0a448fb2014-08-19 21:30:15 +00002030
2031 ; At global scope.
2032 uselistorder i32* @global, { 1, 2, 0 }
2033 uselistorder i32 7, { 1, 0 }
2034 uselistorder i32 (i32) @bar, { 1, 0 }
2035 uselistorder_bb @foo, %bb, { 5, 1, 3, 2, 0, 4 }
2036
Sean Silvab084af42012-12-07 10:36:55 +00002037.. _typesystem:
2038
2039Type System
2040===========
2041
2042The LLVM type system is one of the most important features of the
2043intermediate representation. Being typed enables a number of
2044optimizations to be performed on the intermediate representation
2045directly, without having to do extra analyses on the side before the
2046transformation. A strong type system makes it easier to read the
2047generated code and enables novel analyses and transformations that are
2048not feasible to perform on normal three address code representations.
2049
Rafael Espindola08013342013-12-07 19:34:20 +00002050.. _t_void:
Eli Bendersky0220e6b2013-06-07 20:24:43 +00002051
Rafael Espindola08013342013-12-07 19:34:20 +00002052Void Type
2053---------
Sean Silvab084af42012-12-07 10:36:55 +00002054
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002055:Overview:
2056
Rafael Espindola08013342013-12-07 19:34:20 +00002057
2058The void type does not represent any value and has no size.
2059
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002060:Syntax:
2061
Rafael Espindola08013342013-12-07 19:34:20 +00002062
2063::
2064
2065 void
Sean Silvab084af42012-12-07 10:36:55 +00002066
2067
Rafael Espindola08013342013-12-07 19:34:20 +00002068.. _t_function:
Sean Silvab084af42012-12-07 10:36:55 +00002069
Rafael Espindola08013342013-12-07 19:34:20 +00002070Function Type
2071-------------
Sean Silvab084af42012-12-07 10:36:55 +00002072
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002073:Overview:
2074
Sean Silvab084af42012-12-07 10:36:55 +00002075
Rafael Espindola08013342013-12-07 19:34:20 +00002076The function type can be thought of as a function signature. It consists of a
2077return type and a list of formal parameter types. The return type of a function
2078type is a void type or first class type --- except for :ref:`label <t_label>`
2079and :ref:`metadata <t_metadata>` types.
Sean Silvab084af42012-12-07 10:36:55 +00002080
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002081:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002082
Rafael Espindola08013342013-12-07 19:34:20 +00002083::
Sean Silvab084af42012-12-07 10:36:55 +00002084
Rafael Espindola08013342013-12-07 19:34:20 +00002085 <returntype> (<parameter list>)
Sean Silvab084af42012-12-07 10:36:55 +00002086
Rafael Espindola08013342013-12-07 19:34:20 +00002087...where '``<parameter list>``' is a comma-separated list of type
2088specifiers. Optionally, the parameter list may include a type ``...``, which
Sean Silvaa1190322015-08-06 22:56:48 +00002089indicates that the function takes a variable number of arguments. Variable
Rafael Espindola08013342013-12-07 19:34:20 +00002090argument functions can access their arguments with the :ref:`variable argument
Sean Silvaa1190322015-08-06 22:56:48 +00002091handling intrinsic <int_varargs>` functions. '``<returntype>``' is any type
Rafael Espindola08013342013-12-07 19:34:20 +00002092except :ref:`label <t_label>` and :ref:`metadata <t_metadata>`.
Sean Silvab084af42012-12-07 10:36:55 +00002093
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002094:Examples:
Sean Silvab084af42012-12-07 10:36:55 +00002095
Rafael Espindola08013342013-12-07 19:34:20 +00002096+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2097| ``i32 (i32)`` | function taking an ``i32``, returning an ``i32`` |
2098+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2099| ``float (i16, i32 *) *`` | :ref:`Pointer <t_pointer>` to a function that takes an ``i16`` and a :ref:`pointer <t_pointer>` to ``i32``, returning ``float``. |
2100+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2101| ``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. |
2102+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2103| ``{i32, i32} (i32)`` | A function taking an ``i32``, returning a :ref:`structure <t_struct>` containing two ``i32`` values |
2104+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2105
2106.. _t_firstclass:
2107
2108First Class Types
2109-----------------
Sean Silvab084af42012-12-07 10:36:55 +00002110
2111The :ref:`first class <t_firstclass>` types are perhaps the most important.
2112Values of these types are the only ones which can be produced by
2113instructions.
2114
Rafael Espindola08013342013-12-07 19:34:20 +00002115.. _t_single_value:
Sean Silvab084af42012-12-07 10:36:55 +00002116
Rafael Espindola08013342013-12-07 19:34:20 +00002117Single Value Types
2118^^^^^^^^^^^^^^^^^^
Sean Silvab084af42012-12-07 10:36:55 +00002119
Rafael Espindola08013342013-12-07 19:34:20 +00002120These are the types that are valid in registers from CodeGen's perspective.
Sean Silvab084af42012-12-07 10:36:55 +00002121
2122.. _t_integer:
2123
2124Integer Type
Rafael Espindola08013342013-12-07 19:34:20 +00002125""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002126
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002127:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002128
2129The integer type is a very simple type that simply specifies an
2130arbitrary bit width for the integer type desired. Any bit width from 1
2131bit to 2\ :sup:`23`\ -1 (about 8 million) can be specified.
2132
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002133:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002134
2135::
2136
2137 iN
2138
2139The number of bits the integer will occupy is specified by the ``N``
2140value.
2141
2142Examples:
Rafael Espindola08013342013-12-07 19:34:20 +00002143*********
Sean Silvab084af42012-12-07 10:36:55 +00002144
2145+----------------+------------------------------------------------+
2146| ``i1`` | a single-bit integer. |
2147+----------------+------------------------------------------------+
2148| ``i32`` | a 32-bit integer. |
2149+----------------+------------------------------------------------+
2150| ``i1942652`` | a really big integer of over 1 million bits. |
2151+----------------+------------------------------------------------+
2152
2153.. _t_floating:
2154
2155Floating Point Types
Rafael Espindola08013342013-12-07 19:34:20 +00002156""""""""""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002157
2158.. list-table::
2159 :header-rows: 1
2160
2161 * - Type
2162 - Description
2163
2164 * - ``half``
2165 - 16-bit floating point value
2166
2167 * - ``float``
2168 - 32-bit floating point value
2169
2170 * - ``double``
2171 - 64-bit floating point value
2172
2173 * - ``fp128``
2174 - 128-bit floating point value (112-bit mantissa)
2175
2176 * - ``x86_fp80``
2177 - 80-bit floating point value (X87)
2178
2179 * - ``ppc_fp128``
2180 - 128-bit floating point value (two 64-bits)
2181
Reid Kleckner9a16d082014-03-05 02:41:37 +00002182X86_mmx Type
2183""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002184
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002185:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002186
Reid Kleckner9a16d082014-03-05 02:41:37 +00002187The x86_mmx type represents a value held in an MMX register on an x86
Sean Silvab084af42012-12-07 10:36:55 +00002188machine. The operations allowed on it are quite limited: parameters and
2189return values, load and store, and bitcast. User-specified MMX
2190instructions are represented as intrinsic or asm calls with arguments
2191and/or results of this type. There are no arrays, vectors or constants
2192of this type.
2193
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002194:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002195
2196::
2197
Reid Kleckner9a16d082014-03-05 02:41:37 +00002198 x86_mmx
Sean Silvab084af42012-12-07 10:36:55 +00002199
Sean Silvab084af42012-12-07 10:36:55 +00002200
Rafael Espindola08013342013-12-07 19:34:20 +00002201.. _t_pointer:
2202
2203Pointer Type
2204""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002205
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002206:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002207
Rafael Espindola08013342013-12-07 19:34:20 +00002208The pointer type is used to specify memory locations. Pointers are
2209commonly used to reference objects in memory.
2210
2211Pointer types may have an optional address space attribute defining the
2212numbered address space where the pointed-to object resides. The default
2213address space is number zero. The semantics of non-zero address spaces
2214are target-specific.
2215
2216Note that LLVM does not permit pointers to void (``void*``) nor does it
2217permit pointers to labels (``label*``). Use ``i8*`` instead.
Sean Silvab084af42012-12-07 10:36:55 +00002218
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002219:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002220
2221::
2222
Rafael Espindola08013342013-12-07 19:34:20 +00002223 <type> *
2224
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002225:Examples:
Rafael Espindola08013342013-12-07 19:34:20 +00002226
2227+-------------------------+--------------------------------------------------------------------------------------------------------------+
2228| ``[4 x i32]*`` | A :ref:`pointer <t_pointer>` to :ref:`array <t_array>` of four ``i32`` values. |
2229+-------------------------+--------------------------------------------------------------------------------------------------------------+
2230| ``i32 (i32*) *`` | A :ref:`pointer <t_pointer>` to a :ref:`function <t_function>` that takes an ``i32*``, returning an ``i32``. |
2231+-------------------------+--------------------------------------------------------------------------------------------------------------+
2232| ``i32 addrspace(5)*`` | A :ref:`pointer <t_pointer>` to an ``i32`` value that resides in address space #5. |
2233+-------------------------+--------------------------------------------------------------------------------------------------------------+
2234
2235.. _t_vector:
2236
2237Vector Type
2238"""""""""""
2239
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002240:Overview:
Rafael Espindola08013342013-12-07 19:34:20 +00002241
2242A vector type is a simple derived type that represents a vector of
2243elements. Vector types are used when multiple primitive data are
2244operated in parallel using a single instruction (SIMD). A vector type
2245requires a size (number of elements) and an underlying primitive data
2246type. Vector types are considered :ref:`first class <t_firstclass>`.
2247
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002248:Syntax:
Rafael Espindola08013342013-12-07 19:34:20 +00002249
2250::
2251
2252 < <# elements> x <elementtype> >
2253
2254The number of elements is a constant integer value larger than 0;
Manuel Jacob961f7872014-07-30 12:30:06 +00002255elementtype may be any integer, floating point or pointer type. Vectors
2256of size zero are not allowed.
Rafael Espindola08013342013-12-07 19:34:20 +00002257
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002258:Examples:
Rafael Espindola08013342013-12-07 19:34:20 +00002259
2260+-------------------+--------------------------------------------------+
2261| ``<4 x i32>`` | Vector of 4 32-bit integer values. |
2262+-------------------+--------------------------------------------------+
2263| ``<8 x float>`` | Vector of 8 32-bit floating-point values. |
2264+-------------------+--------------------------------------------------+
2265| ``<2 x i64>`` | Vector of 2 64-bit integer values. |
2266+-------------------+--------------------------------------------------+
2267| ``<4 x i64*>`` | Vector of 4 pointers to 64-bit integer values. |
2268+-------------------+--------------------------------------------------+
Sean Silvab084af42012-12-07 10:36:55 +00002269
2270.. _t_label:
2271
2272Label Type
2273^^^^^^^^^^
2274
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002275:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002276
2277The label type represents code labels.
2278
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002279:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002280
2281::
2282
2283 label
2284
David Majnemerb611e3f2015-08-14 05:09:07 +00002285.. _t_token:
2286
2287Token Type
2288^^^^^^^^^^
2289
2290:Overview:
2291
2292The token type is used when a value is associated with an instruction
2293but all uses of the value must not attempt to introspect or obscure it.
2294As such, it is not appropriate to have a :ref:`phi <i_phi>` or
2295:ref:`select <i_select>` of type token.
2296
2297:Syntax:
2298
2299::
2300
2301 token
2302
2303
2304
Sean Silvab084af42012-12-07 10:36:55 +00002305.. _t_metadata:
2306
2307Metadata Type
2308^^^^^^^^^^^^^
2309
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002310:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002311
2312The metadata type represents embedded metadata. No derived types may be
2313created from metadata except for :ref:`function <t_function>` arguments.
2314
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002315:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002316
2317::
2318
2319 metadata
2320
Sean Silvab084af42012-12-07 10:36:55 +00002321.. _t_aggregate:
2322
2323Aggregate Types
2324^^^^^^^^^^^^^^^
2325
2326Aggregate Types are a subset of derived types that can contain multiple
2327member types. :ref:`Arrays <t_array>` and :ref:`structs <t_struct>` are
2328aggregate types. :ref:`Vectors <t_vector>` are not considered to be
2329aggregate types.
2330
2331.. _t_array:
2332
2333Array Type
Rafael Espindola08013342013-12-07 19:34:20 +00002334""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002335
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002336:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002337
2338The array type is a very simple derived type that arranges elements
2339sequentially in memory. The array type requires a size (number of
2340elements) and an underlying data type.
2341
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002342:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002343
2344::
2345
2346 [<# elements> x <elementtype>]
2347
2348The number of elements is a constant integer value; ``elementtype`` may
2349be any type with a size.
2350
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002351:Examples:
Sean Silvab084af42012-12-07 10:36:55 +00002352
2353+------------------+--------------------------------------+
2354| ``[40 x i32]`` | Array of 40 32-bit integer values. |
2355+------------------+--------------------------------------+
2356| ``[41 x i32]`` | Array of 41 32-bit integer values. |
2357+------------------+--------------------------------------+
2358| ``[4 x i8]`` | Array of 4 8-bit integer values. |
2359+------------------+--------------------------------------+
2360
2361Here are some examples of multidimensional arrays:
2362
2363+-----------------------------+----------------------------------------------------------+
2364| ``[3 x [4 x i32]]`` | 3x4 array of 32-bit integer values. |
2365+-----------------------------+----------------------------------------------------------+
2366| ``[12 x [10 x float]]`` | 12x10 array of single precision floating point values. |
2367+-----------------------------+----------------------------------------------------------+
2368| ``[2 x [3 x [4 x i16]]]`` | 2x3x4 array of 16-bit integer values. |
2369+-----------------------------+----------------------------------------------------------+
2370
2371There is no restriction on indexing beyond the end of the array implied
2372by a static type (though there are restrictions on indexing beyond the
2373bounds of an allocated object in some cases). This means that
2374single-dimension 'variable sized array' addressing can be implemented in
2375LLVM with a zero length array type. An implementation of 'pascal style
2376arrays' in LLVM could use the type "``{ i32, [0 x float]}``", for
2377example.
2378
Sean Silvab084af42012-12-07 10:36:55 +00002379.. _t_struct:
2380
2381Structure Type
Rafael Espindola08013342013-12-07 19:34:20 +00002382""""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002383
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002384:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002385
2386The structure type is used to represent a collection of data members
2387together in memory. The elements of a structure may be any type that has
2388a size.
2389
2390Structures in memory are accessed using '``load``' and '``store``' by
2391getting a pointer to a field with the '``getelementptr``' instruction.
2392Structures in registers are accessed using the '``extractvalue``' and
2393'``insertvalue``' instructions.
2394
2395Structures may optionally be "packed" structures, which indicate that
2396the alignment of the struct is one byte, and that there is no padding
2397between the elements. In non-packed structs, padding between field types
2398is inserted as defined by the DataLayout string in the module, which is
2399required to match what the underlying code generator expects.
2400
2401Structures can either be "literal" or "identified". A literal structure
2402is defined inline with other types (e.g. ``{i32, i32}*``) whereas
2403identified types are always defined at the top level with a name.
2404Literal types are uniqued by their contents and can never be recursive
2405or opaque since there is no way to write one. Identified types can be
2406recursive, can be opaqued, and are never uniqued.
2407
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002408:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002409
2410::
2411
2412 %T1 = type { <type list> } ; Identified normal struct type
2413 %T2 = type <{ <type list> }> ; Identified packed struct type
2414
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002415:Examples:
Sean Silvab084af42012-12-07 10:36:55 +00002416
2417+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2418| ``{ i32, i32, i32 }`` | A triple of three ``i32`` values |
2419+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00002420| ``{ 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 +00002421+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2422| ``<{ i8, i32 }>`` | A packed struct known to be 5 bytes in size. |
2423+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2424
2425.. _t_opaque:
2426
2427Opaque Structure Types
Rafael Espindola08013342013-12-07 19:34:20 +00002428""""""""""""""""""""""
Sean Silvab084af42012-12-07 10:36:55 +00002429
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002430:Overview:
Sean Silvab084af42012-12-07 10:36:55 +00002431
2432Opaque structure types are used to represent named structure types that
2433do not have a body specified. This corresponds (for example) to the C
2434notion of a forward declared structure.
2435
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002436:Syntax:
Sean Silvab084af42012-12-07 10:36:55 +00002437
2438::
2439
2440 %X = type opaque
2441 %52 = type opaque
2442
Rafael Espindola2f6d7b92013-12-10 14:53:22 +00002443:Examples:
Sean Silvab084af42012-12-07 10:36:55 +00002444
2445+--------------+-------------------+
2446| ``opaque`` | An opaque type. |
2447+--------------+-------------------+
2448
Sean Silva1703e702014-04-08 21:06:22 +00002449.. _constants:
2450
Sean Silvab084af42012-12-07 10:36:55 +00002451Constants
2452=========
2453
2454LLVM has several different basic types of constants. This section
2455describes them all and their syntax.
2456
2457Simple Constants
2458----------------
2459
2460**Boolean constants**
2461 The two strings '``true``' and '``false``' are both valid constants
2462 of the ``i1`` type.
2463**Integer constants**
2464 Standard integers (such as '4') are constants of the
2465 :ref:`integer <t_integer>` type. Negative numbers may be used with
2466 integer types.
2467**Floating point constants**
2468 Floating point constants use standard decimal notation (e.g.
2469 123.421), exponential notation (e.g. 1.23421e+2), or a more precise
2470 hexadecimal notation (see below). The assembler requires the exact
2471 decimal value of a floating-point constant. For example, the
2472 assembler accepts 1.25 but rejects 1.3 because 1.3 is a repeating
2473 decimal in binary. Floating point constants must have a :ref:`floating
2474 point <t_floating>` type.
2475**Null pointer constants**
2476 The identifier '``null``' is recognized as a null pointer constant
2477 and must be of :ref:`pointer type <t_pointer>`.
David Majnemerf0f224d2015-11-11 21:57:16 +00002478**Token constants**
2479 The identifier '``none``' is recognized as an empty token constant
2480 and must be of :ref:`token type <t_token>`.
Sean Silvab084af42012-12-07 10:36:55 +00002481
2482The one non-intuitive notation for constants is the hexadecimal form of
2483floating point constants. For example, the form
2484'``double 0x432ff973cafa8000``' is equivalent to (but harder to read
2485than) '``double 4.5e+15``'. The only time hexadecimal floating point
2486constants are required (and the only time that they are generated by the
2487disassembler) is when a floating point constant must be emitted but it
2488cannot be represented as a decimal floating point number in a reasonable
2489number of digits. For example, NaN's, infinities, and other special
2490values are represented in their IEEE hexadecimal format so that assembly
2491and disassembly do not cause any bits to change in the constants.
2492
2493When using the hexadecimal form, constants of types half, float, and
2494double are represented using the 16-digit form shown above (which
2495matches the IEEE754 representation for double); half and float values
Dmitri Gribenko4dc2ba12013-01-16 23:40:37 +00002496must, however, be exactly representable as IEEE 754 half and single
Sean Silvab084af42012-12-07 10:36:55 +00002497precision, respectively. Hexadecimal format is always used for long
2498double, and there are three forms of long double. The 80-bit format used
2499by x86 is represented as ``0xK`` followed by 20 hexadecimal digits. The
2500128-bit format used by PowerPC (two adjacent doubles) is represented by
2501``0xM`` followed by 32 hexadecimal digits. The IEEE 128-bit format is
Richard Sandifordae426b42013-05-03 14:32:27 +00002502represented by ``0xL`` followed by 32 hexadecimal digits. Long doubles
2503will only work if they match the long double format on your target.
2504The IEEE 16-bit format (half precision) is represented by ``0xH``
2505followed by 4 hexadecimal digits. All hexadecimal formats are big-endian
2506(sign bit at the left).
Sean Silvab084af42012-12-07 10:36:55 +00002507
Reid Kleckner9a16d082014-03-05 02:41:37 +00002508There are no constants of type x86_mmx.
Sean Silvab084af42012-12-07 10:36:55 +00002509
Eli Bendersky0220e6b2013-06-07 20:24:43 +00002510.. _complexconstants:
2511
Sean Silvab084af42012-12-07 10:36:55 +00002512Complex Constants
2513-----------------
2514
2515Complex constants are a (potentially recursive) combination of simple
2516constants and smaller complex constants.
2517
2518**Structure constants**
2519 Structure constants are represented with notation similar to
2520 structure type definitions (a comma separated list of elements,
2521 surrounded by braces (``{}``)). For example:
2522 "``{ i32 4, float 17.0, i32* @G }``", where "``@G``" is declared as
2523 "``@G = external global i32``". Structure constants must have
2524 :ref:`structure type <t_struct>`, and the number and types of elements
2525 must match those specified by the type.
2526**Array constants**
2527 Array constants are represented with notation similar to array type
2528 definitions (a comma separated list of elements, surrounded by
2529 square brackets (``[]``)). For example:
2530 "``[ i32 42, i32 11, i32 74 ]``". Array constants must have
2531 :ref:`array type <t_array>`, and the number and types of elements must
Daniel Sandersf6051842014-09-11 12:02:59 +00002532 match those specified by the type. As a special case, character array
2533 constants may also be represented as a double-quoted string using the ``c``
2534 prefix. For example: "``c"Hello World\0A\00"``".
Sean Silvab084af42012-12-07 10:36:55 +00002535**Vector constants**
2536 Vector constants are represented with notation similar to vector
2537 type definitions (a comma separated list of elements, surrounded by
2538 less-than/greater-than's (``<>``)). For example:
2539 "``< i32 42, i32 11, i32 74, i32 100 >``". Vector constants
2540 must have :ref:`vector type <t_vector>`, and the number and types of
2541 elements must match those specified by the type.
2542**Zero initialization**
2543 The string '``zeroinitializer``' can be used to zero initialize a
2544 value to zero of *any* type, including scalar and
2545 :ref:`aggregate <t_aggregate>` types. This is often used to avoid
2546 having to print large zero initializers (e.g. for large arrays) and
2547 is always exactly equivalent to using explicit zero initializers.
2548**Metadata node**
Sean Silvaa1190322015-08-06 22:56:48 +00002549 A metadata node is a constant tuple without types. For example:
2550 "``!{!0, !{!2, !0}, !"test"}``". Metadata can reference constant values,
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00002551 for example: "``!{!0, i32 0, i8* @global, i64 (i64)* @function, !"str"}``".
2552 Unlike other typed constants that are meant to be interpreted as part of
2553 the instruction stream, metadata is a place to attach additional
Sean Silvab084af42012-12-07 10:36:55 +00002554 information such as debug info.
2555
2556Global Variable and Function Addresses
2557--------------------------------------
2558
2559The addresses of :ref:`global variables <globalvars>` and
2560:ref:`functions <functionstructure>` are always implicitly valid
2561(link-time) constants. These constants are explicitly referenced when
2562the :ref:`identifier for the global <identifiers>` is used and always have
2563:ref:`pointer <t_pointer>` type. For example, the following is a legal LLVM
2564file:
2565
2566.. code-block:: llvm
2567
2568 @X = global i32 17
2569 @Y = global i32 42
2570 @Z = global [2 x i32*] [ i32* @X, i32* @Y ]
2571
2572.. _undefvalues:
2573
2574Undefined Values
2575----------------
2576
2577The string '``undef``' can be used anywhere a constant is expected, and
2578indicates that the user of the value may receive an unspecified
2579bit-pattern. Undefined values may be of any type (other than '``label``'
2580or '``void``') and be used anywhere a constant is permitted.
2581
2582Undefined values are useful because they indicate to the compiler that
2583the program is well defined no matter what value is used. This gives the
2584compiler more freedom to optimize. Here are some examples of
2585(potentially surprising) transformations that are valid (in pseudo IR):
2586
2587.. code-block:: llvm
2588
2589 %A = add %X, undef
2590 %B = sub %X, undef
2591 %C = xor %X, undef
2592 Safe:
2593 %A = undef
2594 %B = undef
2595 %C = undef
2596
2597This is safe because all of the output bits are affected by the undef
2598bits. Any output bit can have a zero or one depending on the input bits.
2599
2600.. code-block:: llvm
2601
2602 %A = or %X, undef
2603 %B = and %X, undef
2604 Safe:
2605 %A = -1
2606 %B = 0
2607 Unsafe:
2608 %A = undef
2609 %B = undef
2610
2611These logical operations have bits that are not always affected by the
2612input. For example, if ``%X`` has a zero bit, then the output of the
2613'``and``' operation will always be a zero for that bit, no matter what
2614the corresponding bit from the '``undef``' is. As such, it is unsafe to
2615optimize or assume that the result of the '``and``' is '``undef``'.
2616However, it is safe to assume that all bits of the '``undef``' could be
26170, and optimize the '``and``' to 0. Likewise, it is safe to assume that
2618all the bits of the '``undef``' operand to the '``or``' could be set,
2619allowing the '``or``' to be folded to -1.
2620
2621.. code-block:: llvm
2622
2623 %A = select undef, %X, %Y
2624 %B = select undef, 42, %Y
2625 %C = select %X, %Y, undef
2626 Safe:
2627 %A = %X (or %Y)
2628 %B = 42 (or %Y)
2629 %C = %Y
2630 Unsafe:
2631 %A = undef
2632 %B = undef
2633 %C = undef
2634
2635This set of examples shows that undefined '``select``' (and conditional
2636branch) conditions can go *either way*, but they have to come from one
2637of the two operands. In the ``%A`` example, if ``%X`` and ``%Y`` were
2638both known to have a clear low bit, then ``%A`` would have to have a
2639cleared low bit. However, in the ``%C`` example, the optimizer is
2640allowed to assume that the '``undef``' operand could be the same as
2641``%Y``, allowing the whole '``select``' to be eliminated.
2642
2643.. code-block:: llvm
2644
2645 %A = xor undef, undef
2646
2647 %B = undef
2648 %C = xor %B, %B
2649
2650 %D = undef
Jonathan Roelofsec81c0b2014-10-16 19:28:10 +00002651 %E = icmp slt %D, 4
Sean Silvab084af42012-12-07 10:36:55 +00002652 %F = icmp gte %D, 4
2653
2654 Safe:
2655 %A = undef
2656 %B = undef
2657 %C = undef
2658 %D = undef
2659 %E = undef
2660 %F = undef
2661
2662This example points out that two '``undef``' operands are not
2663necessarily the same. This can be surprising to people (and also matches
2664C semantics) where they assume that "``X^X``" is always zero, even if
2665``X`` is undefined. This isn't true for a number of reasons, but the
2666short answer is that an '``undef``' "variable" can arbitrarily change
2667its value over its "live range". This is true because the variable
2668doesn't actually *have a live range*. Instead, the value is logically
2669read from arbitrary registers that happen to be around when needed, so
2670the value is not necessarily consistent over time. In fact, ``%A`` and
2671``%C`` need to have the same semantics or the core LLVM "replace all
2672uses with" concept would not hold.
2673
2674.. code-block:: llvm
2675
2676 %A = fdiv undef, %X
2677 %B = fdiv %X, undef
2678 Safe:
2679 %A = undef
2680 b: unreachable
2681
2682These examples show the crucial difference between an *undefined value*
2683and *undefined behavior*. An undefined value (like '``undef``') is
2684allowed to have an arbitrary bit-pattern. This means that the ``%A``
2685operation can be constant folded to '``undef``', because the '``undef``'
2686could be an SNaN, and ``fdiv`` is not (currently) defined on SNaN's.
2687However, in the second example, we can make a more aggressive
2688assumption: because the ``undef`` is allowed to be an arbitrary value,
2689we are allowed to assume that it could be zero. Since a divide by zero
2690has *undefined behavior*, we are allowed to assume that the operation
2691does not execute at all. This allows us to delete the divide and all
2692code after it. Because the undefined operation "can't happen", the
2693optimizer can assume that it occurs in dead code.
2694
2695.. code-block:: llvm
2696
2697 a: store undef -> %X
2698 b: store %X -> undef
2699 Safe:
2700 a: <deleted>
2701 b: unreachable
2702
2703These examples reiterate the ``fdiv`` example: a store *of* an undefined
2704value can be assumed to not have any effect; we can assume that the
2705value is overwritten with bits that happen to match what was already
2706there. However, a store *to* an undefined location could clobber
2707arbitrary memory, therefore, it has undefined behavior.
2708
2709.. _poisonvalues:
2710
2711Poison Values
2712-------------
2713
2714Poison values are similar to :ref:`undef values <undefvalues>`, however
2715they also represent the fact that an instruction or constant expression
Richard Smith32dbdf62014-07-31 04:25:36 +00002716that cannot evoke side effects has nevertheless detected a condition
2717that results in undefined behavior.
Sean Silvab084af42012-12-07 10:36:55 +00002718
2719There is currently no way of representing a poison value in the IR; they
2720only exist when produced by operations such as :ref:`add <i_add>` with
2721the ``nsw`` flag.
2722
2723Poison value behavior is defined in terms of value *dependence*:
2724
2725- Values other than :ref:`phi <i_phi>` nodes depend on their operands.
2726- :ref:`Phi <i_phi>` nodes depend on the operand corresponding to
2727 their dynamic predecessor basic block.
2728- Function arguments depend on the corresponding actual argument values
2729 in the dynamic callers of their functions.
2730- :ref:`Call <i_call>` instructions depend on the :ref:`ret <i_ret>`
2731 instructions that dynamically transfer control back to them.
2732- :ref:`Invoke <i_invoke>` instructions depend on the
2733 :ref:`ret <i_ret>`, :ref:`resume <i_resume>`, or exception-throwing
2734 call instructions that dynamically transfer control back to them.
2735- Non-volatile loads and stores depend on the most recent stores to all
2736 of the referenced memory addresses, following the order in the IR
2737 (including loads and stores implied by intrinsics such as
2738 :ref:`@llvm.memcpy <int_memcpy>`.)
2739- An instruction with externally visible side effects depends on the
2740 most recent preceding instruction with externally visible side
2741 effects, following the order in the IR. (This includes :ref:`volatile
2742 operations <volatile>`.)
2743- An instruction *control-depends* on a :ref:`terminator
2744 instruction <terminators>` if the terminator instruction has
2745 multiple successors and the instruction is always executed when
2746 control transfers to one of the successors, and may not be executed
2747 when control is transferred to another.
2748- Additionally, an instruction also *control-depends* on a terminator
2749 instruction if the set of instructions it otherwise depends on would
2750 be different if the terminator had transferred control to a different
2751 successor.
2752- Dependence is transitive.
2753
Richard Smith32dbdf62014-07-31 04:25:36 +00002754Poison values have the same behavior as :ref:`undef values <undefvalues>`,
2755with the additional effect that any instruction that has a *dependence*
Sean Silvab084af42012-12-07 10:36:55 +00002756on a poison value has undefined behavior.
2757
2758Here are some examples:
2759
2760.. code-block:: llvm
2761
2762 entry:
2763 %poison = sub nuw i32 0, 1 ; Results in a poison value.
2764 %still_poison = and i32 %poison, 0 ; 0, but also poison.
David Blaikie16a97eb2015-03-04 22:02:58 +00002765 %poison_yet_again = getelementptr i32, i32* @h, i32 %still_poison
Sean Silvab084af42012-12-07 10:36:55 +00002766 store i32 0, i32* %poison_yet_again ; memory at @h[0] is poisoned
2767
2768 store i32 %poison, i32* @g ; Poison value stored to memory.
David Blaikiec7aabbb2015-03-04 22:06:14 +00002769 %poison2 = load i32, i32* @g ; Poison value loaded back from memory.
Sean Silvab084af42012-12-07 10:36:55 +00002770
2771 store volatile i32 %poison, i32* @g ; External observation; undefined behavior.
2772
2773 %narrowaddr = bitcast i32* @g to i16*
2774 %wideaddr = bitcast i32* @g to i64*
David Blaikiec7aabbb2015-03-04 22:06:14 +00002775 %poison3 = load i16, i16* %narrowaddr ; Returns a poison value.
2776 %poison4 = load i64, i64* %wideaddr ; Returns a poison value.
Sean Silvab084af42012-12-07 10:36:55 +00002777
2778 %cmp = icmp slt i32 %poison, 0 ; Returns a poison value.
2779 br i1 %cmp, label %true, label %end ; Branch to either destination.
2780
2781 true:
2782 store volatile i32 0, i32* @g ; This is control-dependent on %cmp, so
2783 ; it has undefined behavior.
2784 br label %end
2785
2786 end:
2787 %p = phi i32 [ 0, %entry ], [ 1, %true ]
2788 ; Both edges into this PHI are
2789 ; control-dependent on %cmp, so this
2790 ; always results in a poison value.
2791
2792 store volatile i32 0, i32* @g ; This would depend on the store in %true
2793 ; if %cmp is true, or the store in %entry
2794 ; otherwise, so this is undefined behavior.
2795
2796 br i1 %cmp, label %second_true, label %second_end
2797 ; The same branch again, but this time the
2798 ; true block doesn't have side effects.
2799
2800 second_true:
2801 ; No side effects!
2802 ret void
2803
2804 second_end:
2805 store volatile i32 0, i32* @g ; This time, the instruction always depends
2806 ; on the store in %end. Also, it is
2807 ; control-equivalent to %end, so this is
2808 ; well-defined (ignoring earlier undefined
2809 ; behavior in this example).
2810
2811.. _blockaddress:
2812
2813Addresses of Basic Blocks
2814-------------------------
2815
2816``blockaddress(@function, %block)``
2817
2818The '``blockaddress``' constant computes the address of the specified
2819basic block in the specified function, and always has an ``i8*`` type.
2820Taking the address of the entry block is illegal.
2821
2822This value only has defined behavior when used as an operand to the
2823':ref:`indirectbr <i_indirectbr>`' instruction, or for comparisons
2824against null. Pointer equality tests between labels addresses results in
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00002825undefined behavior --- though, again, comparison against null is ok, and
Sean Silvab084af42012-12-07 10:36:55 +00002826no label is equal to the null pointer. This may be passed around as an
2827opaque pointer sized value as long as the bits are not inspected. This
2828allows ``ptrtoint`` and arithmetic to be performed on these values so
2829long as the original value is reconstituted before the ``indirectbr``
2830instruction.
2831
2832Finally, some targets may provide defined semantics when using the value
2833as the operand to an inline assembly, but that is target specific.
2834
Eli Bendersky0220e6b2013-06-07 20:24:43 +00002835.. _constantexprs:
2836
Sean Silvab084af42012-12-07 10:36:55 +00002837Constant Expressions
2838--------------------
2839
2840Constant expressions are used to allow expressions involving other
2841constants to be used as constants. Constant expressions may be of any
2842:ref:`first class <t_firstclass>` type and may involve any LLVM operation
2843that does not have side effects (e.g. load and call are not supported).
2844The following is the syntax for constant expressions:
2845
2846``trunc (CST to TYPE)``
2847 Truncate a constant to another type. The bit size of CST must be
2848 larger than the bit size of TYPE. Both types must be integers.
2849``zext (CST to TYPE)``
2850 Zero extend a constant to another type. The bit size of CST must be
2851 smaller than the bit size of TYPE. Both types must be integers.
2852``sext (CST to TYPE)``
2853 Sign extend a constant to another type. The bit size of CST must be
2854 smaller than the bit size of TYPE. Both types must be integers.
2855``fptrunc (CST to TYPE)``
2856 Truncate a floating point constant to another floating point type.
2857 The size of CST must be larger than the size of TYPE. Both types
2858 must be floating point.
2859``fpext (CST to TYPE)``
2860 Floating point extend a constant to another type. The size of CST
2861 must be smaller or equal to the size of TYPE. Both types must be
2862 floating point.
2863``fptoui (CST to TYPE)``
2864 Convert a floating point constant to the corresponding unsigned
2865 integer constant. TYPE must be a scalar or vector integer type. CST
2866 must be of scalar or vector floating point type. Both CST and TYPE
2867 must be scalars, or vectors of the same number of elements. If the
2868 value won't fit in the integer type, the results are undefined.
2869``fptosi (CST to TYPE)``
2870 Convert a floating point constant to the corresponding signed
2871 integer constant. TYPE must be a scalar or vector integer type. CST
2872 must be of scalar or vector floating point type. Both CST and TYPE
2873 must be scalars, or vectors of the same number of elements. If the
2874 value won't fit in the integer type, the results are undefined.
2875``uitofp (CST to TYPE)``
2876 Convert an unsigned integer constant to the corresponding floating
2877 point constant. TYPE must be a scalar or vector floating point type.
2878 CST must be of scalar or vector integer type. Both CST and TYPE must
2879 be scalars, or vectors of the same number of elements. If the value
2880 won't fit in the floating point type, the results are undefined.
2881``sitofp (CST to TYPE)``
2882 Convert a signed integer constant to the corresponding floating
2883 point constant. TYPE must be a scalar or vector floating point type.
2884 CST must be of scalar or vector integer type. Both CST and TYPE must
2885 be scalars, or vectors of the same number of elements. If the value
2886 won't fit in the floating point type, the results are undefined.
2887``ptrtoint (CST to TYPE)``
2888 Convert a pointer typed constant to the corresponding integer
Eli Bendersky9c0d4932013-03-11 16:51:15 +00002889 constant. ``TYPE`` must be an integer type. ``CST`` must be of
Sean Silvab084af42012-12-07 10:36:55 +00002890 pointer type. The ``CST`` value is zero extended, truncated, or
2891 unchanged to make it fit in ``TYPE``.
2892``inttoptr (CST to TYPE)``
2893 Convert an integer constant to a pointer constant. TYPE must be a
2894 pointer type. CST must be of integer type. The CST value is zero
2895 extended, truncated, or unchanged to make it fit in a pointer size.
2896 This one is *really* dangerous!
2897``bitcast (CST to TYPE)``
2898 Convert a constant, CST, to another TYPE. The constraints of the
2899 operands are the same as those for the :ref:`bitcast
2900 instruction <i_bitcast>`.
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00002901``addrspacecast (CST to TYPE)``
2902 Convert a constant pointer or constant vector of pointer, CST, to another
2903 TYPE in a different address space. The constraints of the operands are the
2904 same as those for the :ref:`addrspacecast instruction <i_addrspacecast>`.
David Blaikief72d05b2015-03-13 18:20:45 +00002905``getelementptr (TY, CSTPTR, IDX0, IDX1, ...)``, ``getelementptr inbounds (TY, CSTPTR, IDX0, IDX1, ...)``
Sean Silvab084af42012-12-07 10:36:55 +00002906 Perform the :ref:`getelementptr operation <i_getelementptr>` on
2907 constants. As with the :ref:`getelementptr <i_getelementptr>`
2908 instruction, the index list may have zero or more indexes, which are
David Blaikief72d05b2015-03-13 18:20:45 +00002909 required to make sense for the type of "pointer to TY".
Sean Silvab084af42012-12-07 10:36:55 +00002910``select (COND, VAL1, VAL2)``
2911 Perform the :ref:`select operation <i_select>` on constants.
2912``icmp COND (VAL1, VAL2)``
2913 Performs the :ref:`icmp operation <i_icmp>` on constants.
2914``fcmp COND (VAL1, VAL2)``
2915 Performs the :ref:`fcmp operation <i_fcmp>` on constants.
2916``extractelement (VAL, IDX)``
2917 Perform the :ref:`extractelement operation <i_extractelement>` on
2918 constants.
2919``insertelement (VAL, ELT, IDX)``
2920 Perform the :ref:`insertelement operation <i_insertelement>` on
2921 constants.
2922``shufflevector (VEC1, VEC2, IDXMASK)``
2923 Perform the :ref:`shufflevector operation <i_shufflevector>` on
2924 constants.
2925``extractvalue (VAL, IDX0, IDX1, ...)``
2926 Perform the :ref:`extractvalue operation <i_extractvalue>` on
2927 constants. The index list is interpreted in a similar manner as
2928 indices in a ':ref:`getelementptr <i_getelementptr>`' operation. At
2929 least one index value must be specified.
2930``insertvalue (VAL, ELT, IDX0, IDX1, ...)``
2931 Perform the :ref:`insertvalue operation <i_insertvalue>` on constants.
2932 The index list is interpreted in a similar manner as indices in a
2933 ':ref:`getelementptr <i_getelementptr>`' operation. At least one index
2934 value must be specified.
2935``OPCODE (LHS, RHS)``
2936 Perform the specified operation of the LHS and RHS constants. OPCODE
2937 may be any of the :ref:`binary <binaryops>` or :ref:`bitwise
2938 binary <bitwiseops>` operations. The constraints on operands are
2939 the same as those for the corresponding instruction (e.g. no bitwise
2940 operations on floating point values are allowed).
2941
2942Other Values
2943============
2944
Eli Bendersky0220e6b2013-06-07 20:24:43 +00002945.. _inlineasmexprs:
2946
Sean Silvab084af42012-12-07 10:36:55 +00002947Inline Assembler Expressions
2948----------------------------
2949
2950LLVM supports inline assembler expressions (as opposed to :ref:`Module-Level
James Y Knightbc832ed2015-07-08 18:08:36 +00002951Inline Assembly <moduleasm>`) through the use of a special value. This value
2952represents the inline assembler as a template string (containing the
2953instructions to emit), a list of operand constraints (stored as a string), a
2954flag that indicates whether or not the inline asm expression has side effects,
2955and a flag indicating whether the function containing the asm needs to align its
2956stack conservatively.
2957
2958The template string supports argument substitution of the operands using "``$``"
2959followed by a number, to indicate substitution of the given register/memory
2960location, as specified by the constraint string. "``${NUM:MODIFIER}``" may also
2961be used, where ``MODIFIER`` is a target-specific annotation for how to print the
2962operand (See :ref:`inline-asm-modifiers`).
2963
2964A literal "``$``" may be included by using "``$$``" in the template. To include
2965other special characters into the output, the usual "``\XX``" escapes may be
2966used, just as in other strings. Note that after template substitution, the
2967resulting assembly string is parsed by LLVM's integrated assembler unless it is
2968disabled -- even when emitting a ``.s`` file -- and thus must contain assembly
2969syntax known to LLVM.
2970
2971LLVM's support for inline asm is modeled closely on the requirements of Clang's
2972GCC-compatible inline-asm support. Thus, the feature-set and the constraint and
2973modifier codes listed here are similar or identical to those in GCC's inline asm
2974support. However, to be clear, the syntax of the template and constraint strings
2975described here is *not* the same as the syntax accepted by GCC and Clang, and,
2976while most constraint letters are passed through as-is by Clang, some get
2977translated to other codes when converting from the C source to the LLVM
2978assembly.
2979
2980An example inline assembler expression is:
Sean Silvab084af42012-12-07 10:36:55 +00002981
2982.. code-block:: llvm
2983
2984 i32 (i32) asm "bswap $0", "=r,r"
2985
2986Inline assembler expressions may **only** be used as the callee operand
2987of a :ref:`call <i_call>` or an :ref:`invoke <i_invoke>` instruction.
2988Thus, typically we have:
2989
2990.. code-block:: llvm
2991
2992 %X = call i32 asm "bswap $0", "=r,r"(i32 %Y)
2993
2994Inline asms with side effects not visible in the constraint list must be
2995marked as having side effects. This is done through the use of the
2996'``sideeffect``' keyword, like so:
2997
2998.. code-block:: llvm
2999
3000 call void asm sideeffect "eieio", ""()
3001
3002In some cases inline asms will contain code that will not work unless
3003the stack is aligned in some way, such as calls or SSE instructions on
3004x86, yet will not contain code that does that alignment within the asm.
3005The compiler should make conservative assumptions about what the asm
3006might contain and should generate its usual stack alignment code in the
3007prologue if the '``alignstack``' keyword is present:
3008
3009.. code-block:: llvm
3010
3011 call void asm alignstack "eieio", ""()
3012
3013Inline asms also support using non-standard assembly dialects. The
3014assumed dialect is ATT. When the '``inteldialect``' keyword is present,
3015the inline asm is using the Intel dialect. Currently, ATT and Intel are
3016the only supported dialects. An example is:
3017
3018.. code-block:: llvm
3019
3020 call void asm inteldialect "eieio", ""()
3021
3022If multiple keywords appear the '``sideeffect``' keyword must come
3023first, the '``alignstack``' keyword second and the '``inteldialect``'
3024keyword last.
3025
James Y Knightbc832ed2015-07-08 18:08:36 +00003026Inline Asm Constraint String
3027^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3028
3029The constraint list is a comma-separated string, each element containing one or
3030more constraint codes.
3031
3032For each element in the constraint list an appropriate register or memory
3033operand will be chosen, and it will be made available to assembly template
3034string expansion as ``$0`` for the first constraint in the list, ``$1`` for the
3035second, etc.
3036
3037There are three different types of constraints, which are distinguished by a
3038prefix symbol in front of the constraint code: Output, Input, and Clobber. The
3039constraints must always be given in that order: outputs first, then inputs, then
3040clobbers. They cannot be intermingled.
3041
3042There are also three different categories of constraint codes:
3043
3044- Register constraint. This is either a register class, or a fixed physical
3045 register. This kind of constraint will allocate a register, and if necessary,
3046 bitcast the argument or result to the appropriate type.
3047- Memory constraint. This kind of constraint is for use with an instruction
3048 taking a memory operand. Different constraints allow for different addressing
3049 modes used by the target.
3050- Immediate value constraint. This kind of constraint is for an integer or other
3051 immediate value which can be rendered directly into an instruction. The
3052 various target-specific constraints allow the selection of a value in the
3053 proper range for the instruction you wish to use it with.
3054
3055Output constraints
3056""""""""""""""""""
3057
3058Output constraints are specified by an "``=``" prefix (e.g. "``=r``"). This
3059indicates that the assembly will write to this operand, and the operand will
3060then be made available as a return value of the ``asm`` expression. Output
3061constraints do not consume an argument from the call instruction. (Except, see
3062below about indirect outputs).
3063
3064Normally, it is expected that no output locations are written to by the assembly
3065expression until *all* of the inputs have been read. As such, LLVM may assign
3066the same register to an output and an input. If this is not safe (e.g. if the
3067assembly contains two instructions, where the first writes to one output, and
3068the second reads an input and writes to a second output), then the "``&``"
3069modifier must be used (e.g. "``=&r``") to specify that the output is an
3070"early-clobber" output. Marking an ouput as "early-clobber" ensures that LLVM
3071will not use the same register for any inputs (other than an input tied to this
3072output).
3073
3074Input constraints
3075"""""""""""""""""
3076
3077Input constraints do not have a prefix -- just the constraint codes. Each input
3078constraint will consume one argument from the call instruction. It is not
3079permitted for the asm to write to any input register or memory location (unless
3080that input is tied to an output). Note also that multiple inputs may all be
3081assigned to the same register, if LLVM can determine that they necessarily all
3082contain the same value.
3083
3084Instead of providing a Constraint Code, input constraints may also "tie"
3085themselves to an output constraint, by providing an integer as the constraint
3086string. Tied inputs still consume an argument from the call instruction, and
3087take up a position in the asm template numbering as is usual -- they will simply
3088be constrained to always use the same register as the output they've been tied
3089to. For example, a constraint string of "``=r,0``" says to assign a register for
3090output, and use that register as an input as well (it being the 0'th
3091constraint).
3092
3093It is permitted to tie an input to an "early-clobber" output. In that case, no
3094*other* input may share the same register as the input tied to the early-clobber
3095(even when the other input has the same value).
3096
3097You may only tie an input to an output which has a register constraint, not a
3098memory constraint. Only a single input may be tied to an output.
3099
3100There is also an "interesting" feature which deserves a bit of explanation: if a
3101register class constraint allocates a register which is too small for the value
3102type operand provided as input, the input value will be split into multiple
3103registers, and all of them passed to the inline asm.
3104
3105However, this feature is often not as useful as you might think.
3106
3107Firstly, the registers are *not* guaranteed to be consecutive. So, on those
3108architectures that have instructions which operate on multiple consecutive
3109instructions, this is not an appropriate way to support them. (e.g. the 32-bit
3110SparcV8 has a 64-bit load, which instruction takes a single 32-bit register. The
3111hardware then loads into both the named register, and the next register. This
3112feature of inline asm would not be useful to support that.)
3113
3114A few of the targets provide a template string modifier allowing explicit access
3115to the second register of a two-register operand (e.g. MIPS ``L``, ``M``, and
3116``D``). On such an architecture, you can actually access the second allocated
3117register (yet, still, not any subsequent ones). But, in that case, you're still
3118probably better off simply splitting the value into two separate operands, for
3119clarity. (e.g. see the description of the ``A`` constraint on X86, which,
3120despite existing only for use with this feature, is not really a good idea to
3121use)
3122
3123Indirect inputs and outputs
3124"""""""""""""""""""""""""""
3125
3126Indirect output or input constraints can be specified by the "``*``" modifier
3127(which goes after the "``=``" in case of an output). This indicates that the asm
3128will write to or read from the contents of an *address* provided as an input
3129argument. (Note that in this way, indirect outputs act more like an *input* than
3130an output: just like an input, they consume an argument of the call expression,
3131rather than producing a return value. An indirect output constraint is an
3132"output" only in that the asm is expected to write to the contents of the input
3133memory location, instead of just read from it).
3134
3135This is most typically used for memory constraint, e.g. "``=*m``", to pass the
3136address of a variable as a value.
3137
3138It is also possible to use an indirect *register* constraint, but only on output
3139(e.g. "``=*r``"). This will cause LLVM to allocate a register for an output
3140value normally, and then, separately emit a store to the address provided as
3141input, after the provided inline asm. (It's not clear what value this
3142functionality provides, compared to writing the store explicitly after the asm
3143statement, and it can only produce worse code, since it bypasses many
3144optimization passes. I would recommend not using it.)
3145
3146
3147Clobber constraints
3148"""""""""""""""""""
3149
3150A clobber constraint is indicated by a "``~``" prefix. A clobber does not
3151consume an input operand, nor generate an output. Clobbers cannot use any of the
3152general constraint code letters -- they may use only explicit register
3153constraints, e.g. "``~{eax}``". The one exception is that a clobber string of
3154"``~{memory}``" indicates that the assembly writes to arbitrary undeclared
3155memory locations -- not only the memory pointed to by a declared indirect
3156output.
3157
3158
3159Constraint Codes
3160""""""""""""""""
3161After a potential prefix comes constraint code, or codes.
3162
3163A Constraint Code is either a single letter (e.g. "``r``"), a "``^``" character
3164followed by two letters (e.g. "``^wc``"), or "``{``" register-name "``}``"
3165(e.g. "``{eax}``").
3166
3167The one and two letter constraint codes are typically chosen to be the same as
3168GCC's constraint codes.
3169
3170A single constraint may include one or more than constraint code in it, leaving
3171it up to LLVM to choose which one to use. This is included mainly for
3172compatibility with the translation of GCC inline asm coming from clang.
3173
3174There are two ways to specify alternatives, and either or both may be used in an
3175inline asm constraint list:
3176
31771) Append the codes to each other, making a constraint code set. E.g. "``im``"
3178 or "``{eax}m``". This means "choose any of the options in the set". The
3179 choice of constraint is made independently for each constraint in the
3180 constraint list.
3181
31822) Use "``|``" between constraint code sets, creating alternatives. Every
3183 constraint in the constraint list must have the same number of alternative
3184 sets. With this syntax, the same alternative in *all* of the items in the
3185 constraint list will be chosen together.
3186
3187Putting those together, you might have a two operand constraint string like
3188``"rm|r,ri|rm"``. This indicates that if operand 0 is ``r`` or ``m``, then
3189operand 1 may be one of ``r`` or ``i``. If operand 0 is ``r``, then operand 1
3190may be one of ``r`` or ``m``. But, operand 0 and 1 cannot both be of type m.
3191
3192However, the use of either of the alternatives features is *NOT* recommended, as
3193LLVM is not able to make an intelligent choice about which one to use. (At the
3194point it currently needs to choose, not enough information is available to do so
3195in a smart way.) Thus, it simply tries to make a choice that's most likely to
3196compile, not one that will be optimal performance. (e.g., given "``rm``", it'll
3197always choose to use memory, not registers). And, if given multiple registers,
3198or multiple register classes, it will simply choose the first one. (In fact, it
3199doesn't currently even ensure explicitly specified physical registers are
3200unique, so specifying multiple physical registers as alternatives, like
3201``{r11}{r12},{r11}{r12}``, will assign r11 to both operands, not at all what was
3202intended.)
3203
3204Supported Constraint Code List
3205""""""""""""""""""""""""""""""
3206
3207The constraint codes are, in general, expected to behave the same way they do in
3208GCC. LLVM's support is often implemented on an 'as-needed' basis, to support C
3209inline asm code which was supported by GCC. A mismatch in behavior between LLVM
3210and GCC likely indicates a bug in LLVM.
3211
3212Some constraint codes are typically supported by all targets:
3213
3214- ``r``: A register in the target's general purpose register class.
3215- ``m``: A memory address operand. It is target-specific what addressing modes
3216 are supported, typical examples are register, or register + register offset,
3217 or register + immediate offset (of some target-specific size).
3218- ``i``: An integer constant (of target-specific width). Allows either a simple
3219 immediate, or a relocatable value.
3220- ``n``: An integer constant -- *not* including relocatable values.
3221- ``s``: An integer constant, but allowing *only* relocatable values.
3222- ``X``: Allows an operand of any kind, no constraint whatsoever. Typically
3223 useful to pass a label for an asm branch or call.
3224
3225 .. FIXME: but that surely isn't actually okay to jump out of an asm
3226 block without telling llvm about the control transfer???)
3227
3228- ``{register-name}``: Requires exactly the named physical register.
3229
3230Other constraints are target-specific:
3231
3232AArch64:
3233
3234- ``z``: An immediate integer 0. Outputs ``WZR`` or ``XZR``, as appropriate.
3235- ``I``: An immediate integer valid for an ``ADD`` or ``SUB`` instruction,
3236 i.e. 0 to 4095 with optional shift by 12.
3237- ``J``: An immediate integer that, when negated, is valid for an ``ADD`` or
3238 ``SUB`` instruction, i.e. -1 to -4095 with optional left shift by 12.
3239- ``K``: An immediate integer that is valid for the 'bitmask immediate 32' of a
3240 logical instruction like ``AND``, ``EOR``, or ``ORR`` with a 32-bit register.
3241- ``L``: An immediate integer that is valid for the 'bitmask immediate 64' of a
3242 logical instruction like ``AND``, ``EOR``, or ``ORR`` with a 64-bit register.
3243- ``M``: An immediate integer for use with the ``MOV`` assembly alias on a
3244 32-bit register. This is a superset of ``K``: in addition to the bitmask
3245 immediate, also allows immediate integers which can be loaded with a single
3246 ``MOVZ`` or ``MOVL`` instruction.
3247- ``N``: An immediate integer for use with the ``MOV`` assembly alias on a
3248 64-bit register. This is a superset of ``L``.
3249- ``Q``: Memory address operand must be in a single register (no
3250 offsets). (However, LLVM currently does this for the ``m`` constraint as
3251 well.)
3252- ``r``: A 32 or 64-bit integer register (W* or X*).
3253- ``w``: A 32, 64, or 128-bit floating-point/SIMD register.
3254- ``x``: A lower 128-bit floating-point/SIMD register (``V0`` to ``V15``).
3255
3256AMDGPU:
3257
3258- ``r``: A 32 or 64-bit integer register.
3259- ``[0-9]v``: The 32-bit VGPR register, number 0-9.
3260- ``[0-9]s``: The 32-bit SGPR register, number 0-9.
3261
3262
3263All ARM modes:
3264
3265- ``Q``, ``Um``, ``Un``, ``Uq``, ``Us``, ``Ut``, ``Uv``, ``Uy``: Memory address
3266 operand. Treated the same as operand ``m``, at the moment.
3267
3268ARM and ARM's Thumb2 mode:
3269
3270- ``j``: An immediate integer between 0 and 65535 (valid for ``MOVW``)
3271- ``I``: An immediate integer valid for a data-processing instruction.
3272- ``J``: An immediate integer between -4095 and 4095.
3273- ``K``: An immediate integer whose bitwise inverse is valid for a
3274 data-processing instruction. (Can be used with template modifier "``B``" to
3275 print the inverted value).
3276- ``L``: An immediate integer whose negation is valid for a data-processing
3277 instruction. (Can be used with template modifier "``n``" to print the negated
3278 value).
3279- ``M``: A power of two or a integer between 0 and 32.
3280- ``N``: Invalid immediate constraint.
3281- ``O``: Invalid immediate constraint.
3282- ``r``: A general-purpose 32-bit integer register (``r0-r15``).
3283- ``l``: In Thumb2 mode, low 32-bit GPR registers (``r0-r7``). In ARM mode, same
3284 as ``r``.
3285- ``h``: In Thumb2 mode, a high 32-bit GPR register (``r8-r15``). In ARM mode,
3286 invalid.
3287- ``w``: A 32, 64, or 128-bit floating-point/SIMD register: ``s0-s31``,
3288 ``d0-d31``, or ``q0-q15``.
3289- ``x``: A 32, 64, or 128-bit floating-point/SIMD register: ``s0-s15``,
3290 ``d0-d7``, or ``q0-q3``.
3291- ``t``: A floating-point/SIMD register, only supports 32-bit values:
3292 ``s0-s31``.
3293
3294ARM's Thumb1 mode:
3295
3296- ``I``: An immediate integer between 0 and 255.
3297- ``J``: An immediate integer between -255 and -1.
3298- ``K``: An immediate integer between 0 and 255, with optional left-shift by
3299 some amount.
3300- ``L``: An immediate integer between -7 and 7.
3301- ``M``: An immediate integer which is a multiple of 4 between 0 and 1020.
3302- ``N``: An immediate integer between 0 and 31.
3303- ``O``: An immediate integer which is a multiple of 4 between -508 and 508.
3304- ``r``: A low 32-bit GPR register (``r0-r7``).
3305- ``l``: A low 32-bit GPR register (``r0-r7``).
3306- ``h``: A high GPR register (``r0-r7``).
3307- ``w``: A 32, 64, or 128-bit floating-point/SIMD register: ``s0-s31``,
3308 ``d0-d31``, or ``q0-q15``.
3309- ``x``: A 32, 64, or 128-bit floating-point/SIMD register: ``s0-s15``,
3310 ``d0-d7``, or ``q0-q3``.
3311- ``t``: A floating-point/SIMD register, only supports 32-bit values:
3312 ``s0-s31``.
3313
3314
3315Hexagon:
3316
3317- ``o``, ``v``: A memory address operand, treated the same as constraint ``m``,
3318 at the moment.
3319- ``r``: A 32 or 64-bit register.
3320
3321MSP430:
3322
3323- ``r``: An 8 or 16-bit register.
3324
3325MIPS:
3326
3327- ``I``: An immediate signed 16-bit integer.
3328- ``J``: An immediate integer zero.
3329- ``K``: An immediate unsigned 16-bit integer.
3330- ``L``: An immediate 32-bit integer, where the lower 16 bits are 0.
3331- ``N``: An immediate integer between -65535 and -1.
3332- ``O``: An immediate signed 15-bit integer.
3333- ``P``: An immediate integer between 1 and 65535.
3334- ``m``: A memory address operand. In MIPS-SE mode, allows a base address
3335 register plus 16-bit immediate offset. In MIPS mode, just a base register.
3336- ``R``: A memory address operand. In MIPS-SE mode, allows a base address
3337 register plus a 9-bit signed offset. In MIPS mode, the same as constraint
3338 ``m``.
3339- ``ZC``: A memory address operand, suitable for use in a ``pref``, ``ll``, or
3340 ``sc`` instruction on the given subtarget (details vary).
3341- ``r``, ``d``, ``y``: A 32 or 64-bit GPR register.
3342- ``f``: A 32 or 64-bit FPU register (``F0-F31``), or a 128-bit MSA register
Daniel Sanders3745e022015-07-13 09:24:21 +00003343 (``W0-W31``). In the case of MSA registers, it is recommended to use the ``w``
3344 argument modifier for compatibility with GCC.
James Y Knightbc832ed2015-07-08 18:08:36 +00003345- ``c``: A 32-bit or 64-bit GPR register suitable for indirect jump (always
3346 ``25``).
3347- ``l``: The ``lo`` register, 32 or 64-bit.
3348- ``x``: Invalid.
3349
3350NVPTX:
3351
3352- ``b``: A 1-bit integer register.
3353- ``c`` or ``h``: A 16-bit integer register.
3354- ``r``: A 32-bit integer register.
3355- ``l`` or ``N``: A 64-bit integer register.
3356- ``f``: A 32-bit float register.
3357- ``d``: A 64-bit float register.
3358
3359
3360PowerPC:
3361
3362- ``I``: An immediate signed 16-bit integer.
3363- ``J``: An immediate unsigned 16-bit integer, shifted left 16 bits.
3364- ``K``: An immediate unsigned 16-bit integer.
3365- ``L``: An immediate signed 16-bit integer, shifted left 16 bits.
3366- ``M``: An immediate integer greater than 31.
3367- ``N``: An immediate integer that is an exact power of 2.
3368- ``O``: The immediate integer constant 0.
3369- ``P``: An immediate integer constant whose negation is a signed 16-bit
3370 constant.
3371- ``es``, ``o``, ``Q``, ``Z``, ``Zy``: A memory address operand, currently
3372 treated the same as ``m``.
3373- ``r``: A 32 or 64-bit integer register.
3374- ``b``: A 32 or 64-bit integer register, excluding ``R0`` (that is:
3375 ``R1-R31``).
3376- ``f``: A 32 or 64-bit float register (``F0-F31``), or when QPX is enabled, a
3377 128 or 256-bit QPX register (``Q0-Q31``; aliases the ``F`` registers).
3378- ``v``: For ``4 x f32`` or ``4 x f64`` types, when QPX is enabled, a
3379 128 or 256-bit QPX register (``Q0-Q31``), otherwise a 128-bit
3380 altivec vector register (``V0-V31``).
3381
3382 .. FIXME: is this a bug that v accepts QPX registers? I think this
3383 is supposed to only use the altivec vector registers?
3384
3385- ``y``: Condition register (``CR0-CR7``).
3386- ``wc``: An individual CR bit in a CR register.
3387- ``wa``, ``wd``, ``wf``: Any 128-bit VSX vector register, from the full VSX
3388 register set (overlapping both the floating-point and vector register files).
3389- ``ws``: A 32 or 64-bit floating point register, from the full VSX register
3390 set.
3391
3392Sparc:
3393
3394- ``I``: An immediate 13-bit signed integer.
3395- ``r``: A 32-bit integer register.
3396
3397SystemZ:
3398
3399- ``I``: An immediate unsigned 8-bit integer.
3400- ``J``: An immediate unsigned 12-bit integer.
3401- ``K``: An immediate signed 16-bit integer.
3402- ``L``: An immediate signed 20-bit integer.
3403- ``M``: An immediate integer 0x7fffffff.
3404- ``Q``, ``R``, ``S``, ``T``: A memory address operand, treated the same as
3405 ``m``, at the moment.
3406- ``r`` or ``d``: A 32, 64, or 128-bit integer register.
3407- ``a``: A 32, 64, or 128-bit integer address register (excludes R0, which in an
3408 address context evaluates as zero).
3409- ``h``: A 32-bit value in the high part of a 64bit data register
3410 (LLVM-specific)
3411- ``f``: A 32, 64, or 128-bit floating point register.
3412
3413X86:
3414
3415- ``I``: An immediate integer between 0 and 31.
3416- ``J``: An immediate integer between 0 and 64.
3417- ``K``: An immediate signed 8-bit integer.
3418- ``L``: An immediate integer, 0xff or 0xffff or (in 64-bit mode only)
3419 0xffffffff.
3420- ``M``: An immediate integer between 0 and 3.
3421- ``N``: An immediate unsigned 8-bit integer.
3422- ``O``: An immediate integer between 0 and 127.
3423- ``e``: An immediate 32-bit signed integer.
3424- ``Z``: An immediate 32-bit unsigned integer.
3425- ``o``, ``v``: Treated the same as ``m``, at the moment.
3426- ``q``: An 8, 16, 32, or 64-bit register which can be accessed as an 8-bit
3427 ``l`` integer register. On X86-32, this is the ``a``, ``b``, ``c``, and ``d``
3428 registers, and on X86-64, it is all of the integer registers.
3429- ``Q``: An 8, 16, 32, or 64-bit register which can be accessed as an 8-bit
3430 ``h`` integer register. This is the ``a``, ``b``, ``c``, and ``d`` registers.
3431- ``r`` or ``l``: An 8, 16, 32, or 64-bit integer register.
3432- ``R``: An 8, 16, 32, or 64-bit "legacy" integer register -- one which has
3433 existed since i386, and can be accessed without the REX prefix.
3434- ``f``: A 32, 64, or 80-bit '387 FPU stack pseudo-register.
3435- ``y``: A 64-bit MMX register, if MMX is enabled.
3436- ``x``: If SSE is enabled: a 32 or 64-bit scalar operand, or 128-bit vector
3437 operand in a SSE register. If AVX is also enabled, can also be a 256-bit
3438 vector operand in an AVX register. If AVX-512 is also enabled, can also be a
3439 512-bit vector operand in an AVX512 register, Otherwise, an error.
3440- ``Y``: The same as ``x``, if *SSE2* is enabled, otherwise an error.
3441- ``A``: Special case: allocates EAX first, then EDX, for a single operand (in
3442 32-bit mode, a 64-bit integer operand will get split into two registers). It
3443 is not recommended to use this constraint, as in 64-bit mode, the 64-bit
3444 operand will get allocated only to RAX -- if two 32-bit operands are needed,
3445 you're better off splitting it yourself, before passing it to the asm
3446 statement.
3447
3448XCore:
3449
3450- ``r``: A 32-bit integer register.
3451
3452
3453.. _inline-asm-modifiers:
3454
3455Asm template argument modifiers
3456^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3457
3458In the asm template string, modifiers can be used on the operand reference, like
3459"``${0:n}``".
3460
3461The modifiers are, in general, expected to behave the same way they do in
3462GCC. LLVM's support is often implemented on an 'as-needed' basis, to support C
3463inline asm code which was supported by GCC. A mismatch in behavior between LLVM
3464and GCC likely indicates a bug in LLVM.
3465
3466Target-independent:
3467
Sean Silvaa1190322015-08-06 22:56:48 +00003468- ``c``: Print an immediate integer constant unadorned, without
James Y Knightbc832ed2015-07-08 18:08:36 +00003469 the target-specific immediate punctuation (e.g. no ``$`` prefix).
3470- ``n``: Negate and print immediate integer constant unadorned, without the
3471 target-specific immediate punctuation (e.g. no ``$`` prefix).
3472- ``l``: Print as an unadorned label, without the target-specific label
3473 punctuation (e.g. no ``$`` prefix).
3474
3475AArch64:
3476
3477- ``w``: Print a GPR register with a ``w*`` name instead of ``x*`` name. E.g.,
3478 instead of ``x30``, print ``w30``.
3479- ``x``: Print a GPR register with a ``x*`` name. (this is the default, anyhow).
3480- ``b``, ``h``, ``s``, ``d``, ``q``: Print a floating-point/SIMD register with a
3481 ``b*``, ``h*``, ``s*``, ``d*``, or ``q*`` name, rather than the default of
3482 ``v*``.
3483
3484AMDGPU:
3485
3486- ``r``: No effect.
3487
3488ARM:
3489
3490- ``a``: Print an operand as an address (with ``[`` and ``]`` surrounding a
3491 register).
3492- ``P``: No effect.
3493- ``q``: No effect.
3494- ``y``: Print a VFP single-precision register as an indexed double (e.g. print
3495 as ``d4[1]`` instead of ``s9``)
3496- ``B``: Bitwise invert and print an immediate integer constant without ``#``
3497 prefix.
3498- ``L``: Print the low 16-bits of an immediate integer constant.
3499- ``M``: Print as a register set suitable for ldm/stm. Also prints *all*
3500 register operands subsequent to the specified one (!), so use carefully.
3501- ``Q``: Print the low-order register of a register-pair, or the low-order
3502 register of a two-register operand.
3503- ``R``: Print the high-order register of a register-pair, or the high-order
3504 register of a two-register operand.
3505- ``H``: Print the second register of a register-pair. (On a big-endian system,
3506 ``H`` is equivalent to ``Q``, and on little-endian system, ``H`` is equivalent
3507 to ``R``.)
3508
3509 .. FIXME: H doesn't currently support printing the second register
3510 of a two-register operand.
3511
3512- ``e``: Print the low doubleword register of a NEON quad register.
3513- ``f``: Print the high doubleword register of a NEON quad register.
3514- ``m``: Print the base register of a memory operand without the ``[`` and ``]``
3515 adornment.
3516
3517Hexagon:
3518
3519- ``L``: Print the second register of a two-register operand. Requires that it
3520 has been allocated consecutively to the first.
3521
3522 .. FIXME: why is it restricted to consecutive ones? And there's
3523 nothing that ensures that happens, is there?
3524
3525- ``I``: Print the letter 'i' if the operand is an integer constant, otherwise
3526 nothing. Used to print 'addi' vs 'add' instructions.
3527
3528MSP430:
3529
3530No additional modifiers.
3531
3532MIPS:
3533
3534- ``X``: Print an immediate integer as hexadecimal
3535- ``x``: Print the low 16 bits of an immediate integer as hexadecimal.
3536- ``d``: Print an immediate integer as decimal.
3537- ``m``: Subtract one and print an immediate integer as decimal.
3538- ``z``: Print $0 if an immediate zero, otherwise print normally.
3539- ``L``: Print the low-order register of a two-register operand, or prints the
3540 address of the low-order word of a double-word memory operand.
3541
3542 .. FIXME: L seems to be missing memory operand support.
3543
3544- ``M``: Print the high-order register of a two-register operand, or prints the
3545 address of the high-order word of a double-word memory operand.
3546
3547 .. FIXME: M seems to be missing memory operand support.
3548
3549- ``D``: Print the second register of a two-register operand, or prints the
3550 second word of a double-word memory operand. (On a big-endian system, ``D`` is
3551 equivalent to ``L``, and on little-endian system, ``D`` is equivalent to
3552 ``M``.)
Daniel Sanders3745e022015-07-13 09:24:21 +00003553- ``w``: No effect. Provided for compatibility with GCC which requires this
3554 modifier in order to print MSA registers (``W0-W31``) with the ``f``
3555 constraint.
James Y Knightbc832ed2015-07-08 18:08:36 +00003556
3557NVPTX:
3558
3559- ``r``: No effect.
3560
3561PowerPC:
3562
3563- ``L``: Print the second register of a two-register operand. Requires that it
3564 has been allocated consecutively to the first.
3565
3566 .. FIXME: why is it restricted to consecutive ones? And there's
3567 nothing that ensures that happens, is there?
3568
3569- ``I``: Print the letter 'i' if the operand is an integer constant, otherwise
3570 nothing. Used to print 'addi' vs 'add' instructions.
3571- ``y``: For a memory operand, prints formatter for a two-register X-form
3572 instruction. (Currently always prints ``r0,OPERAND``).
3573- ``U``: Prints 'u' if the memory operand is an update form, and nothing
3574 otherwise. (NOTE: LLVM does not support update form, so this will currently
3575 always print nothing)
3576- ``X``: Prints 'x' if the memory operand is an indexed form. (NOTE: LLVM does
3577 not support indexed form, so this will currently always print nothing)
3578
3579Sparc:
3580
3581- ``r``: No effect.
3582
3583SystemZ:
3584
3585SystemZ implements only ``n``, and does *not* support any of the other
3586target-independent modifiers.
3587
3588X86:
3589
3590- ``c``: Print an unadorned integer or symbol name. (The latter is
3591 target-specific behavior for this typically target-independent modifier).
3592- ``A``: Print a register name with a '``*``' before it.
3593- ``b``: Print an 8-bit register name (e.g. ``al``); do nothing on a memory
3594 operand.
3595- ``h``: Print the upper 8-bit register name (e.g. ``ah``); do nothing on a
3596 memory operand.
3597- ``w``: Print the 16-bit register name (e.g. ``ax``); do nothing on a memory
3598 operand.
3599- ``k``: Print the 32-bit register name (e.g. ``eax``); do nothing on a memory
3600 operand.
3601- ``q``: Print the 64-bit register name (e.g. ``rax``), if 64-bit registers are
3602 available, otherwise the 32-bit register name; do nothing on a memory operand.
3603- ``n``: Negate and print an unadorned integer, or, for operands other than an
3604 immediate integer (e.g. a relocatable symbol expression), print a '-' before
3605 the operand. (The behavior for relocatable symbol expressions is a
3606 target-specific behavior for this typically target-independent modifier)
3607- ``H``: Print a memory reference with additional offset +8.
3608- ``P``: Print a memory reference or operand for use as the argument of a call
3609 instruction. (E.g. omit ``(rip)``, even though it's PC-relative.)
3610
3611XCore:
3612
3613No additional modifiers.
3614
3615
Sean Silvab084af42012-12-07 10:36:55 +00003616Inline Asm Metadata
3617^^^^^^^^^^^^^^^^^^^
3618
3619The call instructions that wrap inline asm nodes may have a
3620"``!srcloc``" MDNode attached to it that contains a list of constant
3621integers. If present, the code generator will use the integer as the
3622location cookie value when report errors through the ``LLVMContext``
3623error reporting mechanisms. This allows a front-end to correlate backend
3624errors that occur with inline asm back to the source code that produced
3625it. For example:
3626
3627.. code-block:: llvm
3628
3629 call void asm sideeffect "something bad", ""(), !srcloc !42
3630 ...
3631 !42 = !{ i32 1234567 }
3632
3633It is up to the front-end to make sense of the magic numbers it places
3634in the IR. If the MDNode contains multiple constants, the code generator
3635will use the one that corresponds to the line of the asm that the error
3636occurs on.
3637
3638.. _metadata:
3639
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003640Metadata
3641========
Sean Silvab084af42012-12-07 10:36:55 +00003642
3643LLVM IR allows metadata to be attached to instructions in the program
3644that can convey extra information about the code to the optimizers and
3645code generator. One example application of metadata is source-level
3646debug information. There are two metadata primitives: strings and nodes.
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003647
Sean Silvaa1190322015-08-06 22:56:48 +00003648Metadata does not have a type, and is not a value. If referenced from a
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003649``call`` instruction, it uses the ``metadata`` type.
3650
3651All metadata are identified in syntax by a exclamation point ('``!``').
3652
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003653.. _metadata-string:
3654
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003655Metadata Nodes and Metadata Strings
3656-----------------------------------
Sean Silvab084af42012-12-07 10:36:55 +00003657
3658A metadata string is a string surrounded by double quotes. It can
3659contain any character by escaping non-printable characters with
3660"``\xx``" where "``xx``" is the two digit hex code. For example:
3661"``!"test\00"``".
3662
3663Metadata nodes are represented with notation similar to structure
3664constants (a comma separated list of elements, surrounded by braces and
3665preceded by an exclamation point). Metadata nodes can have any values as
3666their operand. For example:
3667
3668.. code-block:: llvm
3669
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003670 !{ !"test\00", i32 10}
Sean Silvab084af42012-12-07 10:36:55 +00003671
Duncan P. N. Exon Smith090a19b2015-01-08 22:38:29 +00003672Metadata nodes that aren't uniqued use the ``distinct`` keyword. For example:
3673
3674.. code-block:: llvm
3675
3676 !0 = distinct !{!"test\00", i32 10}
3677
Duncan P. N. Exon Smith99010342015-01-08 23:50:26 +00003678``distinct`` nodes are useful when nodes shouldn't be merged based on their
Sean Silvaa1190322015-08-06 22:56:48 +00003679content. They can also occur when transformations cause uniquing collisions
Duncan P. N. Exon Smith99010342015-01-08 23:50:26 +00003680when metadata operands change.
3681
Sean Silvab084af42012-12-07 10:36:55 +00003682A :ref:`named metadata <namedmetadatastructure>` is a collection of
3683metadata nodes, which can be looked up in the module symbol table. For
3684example:
3685
3686.. code-block:: llvm
3687
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00003688 !foo = !{!4, !3}
Sean Silvab084af42012-12-07 10:36:55 +00003689
3690Metadata can be used as function arguments. Here ``llvm.dbg.value``
3691function is using two metadata arguments:
3692
3693.. code-block:: llvm
3694
3695 call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
3696
Peter Collingbourne50108682015-11-06 02:41:02 +00003697Metadata can be attached to an instruction. Here metadata ``!21`` is attached
3698to the ``add`` instruction using the ``!dbg`` identifier:
Sean Silvab084af42012-12-07 10:36:55 +00003699
3700.. code-block:: llvm
3701
3702 %indvar.next = add i64 %indvar, 1, !dbg !21
3703
Peter Collingbourne50108682015-11-06 02:41:02 +00003704Metadata can also be attached to a function definition. Here metadata ``!22``
3705is attached to the ``foo`` function using the ``!dbg`` identifier:
3706
3707.. code-block:: llvm
3708
3709 define void @foo() !dbg !22 {
3710 ret void
3711 }
3712
Sean Silvab084af42012-12-07 10:36:55 +00003713More information about specific metadata nodes recognized by the
3714optimizers and code generator is found below.
3715
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003716.. _specialized-metadata:
3717
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +00003718Specialized Metadata Nodes
3719^^^^^^^^^^^^^^^^^^^^^^^^^^
3720
3721Specialized metadata nodes are custom data structures in metadata (as opposed
Sean Silvaa1190322015-08-06 22:56:48 +00003722to generic tuples). Their fields are labelled, and can be specified in any
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +00003723order.
3724
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003725These aren't inherently debug info centric, but currently all the specialized
3726metadata nodes are related to debug info.
3727
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003728.. _DICompileUnit:
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003729
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003730DICompileUnit
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003731"""""""""""""
3732
Sean Silvaa1190322015-08-06 22:56:48 +00003733``DICompileUnit`` nodes represent a compile unit. The ``enums:``,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003734``retainedTypes:``, ``subprograms:``, ``globals:`` and ``imports:`` fields are
3735tuples containing the debug info to be emitted along with the compile unit,
3736regardless of code optimizations (some nodes are only emitted if there are
3737references to them from instructions).
3738
3739.. code-block:: llvm
3740
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003741 !0 = !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang",
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003742 isOptimized: true, flags: "-O2", runtimeVersion: 2,
3743 splitDebugFilename: "abc.debug", emissionKind: 1,
3744 enums: !2, retainedTypes: !3, subprograms: !4,
3745 globals: !5, imports: !6)
3746
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003747Compile unit descriptors provide the root scope for objects declared in a
Sean Silvaa1190322015-08-06 22:56:48 +00003748specific compilation unit. File descriptors are defined using this scope.
3749These descriptors are collected by a named metadata ``!llvm.dbg.cu``. They
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003750keep track of subprograms, global variables, type information, and imported
3751entities (declarations and namespaces).
3752
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003753.. _DIFile:
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003754
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003755DIFile
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003756""""""
3757
Sean Silvaa1190322015-08-06 22:56:48 +00003758``DIFile`` nodes represent files. The ``filename:`` can include slashes.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003759
3760.. code-block:: llvm
3761
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003762 !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003763
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003764Files are sometimes used in ``scope:`` fields, and are the only valid target
3765for ``file:`` fields.
3766
Michael Kuperstein605308a2015-05-14 10:58:59 +00003767.. _DIBasicType:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003768
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003769DIBasicType
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003770"""""""""""
3771
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003772``DIBasicType`` nodes represent primitive types, such as ``int``, ``bool`` and
Sean Silvaa1190322015-08-06 22:56:48 +00003773``float``. ``tag:`` defaults to ``DW_TAG_base_type``.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003774
3775.. code-block:: llvm
3776
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003777 !0 = !DIBasicType(name: "unsigned char", size: 8, align: 8,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003778 encoding: DW_ATE_unsigned_char)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003779 !1 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003780
Sean Silvaa1190322015-08-06 22:56:48 +00003781The ``encoding:`` describes the details of the type. Usually it's one of the
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003782following:
3783
3784.. code-block:: llvm
3785
3786 DW_ATE_address = 1
3787 DW_ATE_boolean = 2
3788 DW_ATE_float = 4
3789 DW_ATE_signed = 5
3790 DW_ATE_signed_char = 6
3791 DW_ATE_unsigned = 7
3792 DW_ATE_unsigned_char = 8
3793
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003794.. _DISubroutineType:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003795
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003796DISubroutineType
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003797""""""""""""""""
3798
Sean Silvaa1190322015-08-06 22:56:48 +00003799``DISubroutineType`` nodes represent subroutine types. Their ``types:`` field
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003800refers to a tuple; the first operand is the return type, while the rest are the
Sean Silvaa1190322015-08-06 22:56:48 +00003801types of the formal arguments in order. If the first operand is ``null``, that
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003802represents a function with no return value (such as ``void foo() {}`` in C++).
3803
3804.. code-block:: llvm
3805
3806 !0 = !BasicType(name: "int", size: 32, align: 32, DW_ATE_signed)
3807 !1 = !BasicType(name: "char", size: 8, align: 8, DW_ATE_signed_char)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003808 !2 = !DISubroutineType(types: !{null, !0, !1}) ; void (int, char)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003809
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003810.. _DIDerivedType:
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003811
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003812DIDerivedType
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003813"""""""""""""
3814
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003815``DIDerivedType`` nodes represent types derived from other types, such as
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003816qualified types.
3817
3818.. code-block:: llvm
3819
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003820 !0 = !DIBasicType(name: "unsigned char", size: 8, align: 8,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003821 encoding: DW_ATE_unsigned_char)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003822 !1 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !0, size: 32,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003823 align: 32)
3824
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003825The following ``tag:`` values are valid:
3826
3827.. code-block:: llvm
3828
3829 DW_TAG_formal_parameter = 5
3830 DW_TAG_member = 13
3831 DW_TAG_pointer_type = 15
3832 DW_TAG_reference_type = 16
3833 DW_TAG_typedef = 22
3834 DW_TAG_ptr_to_member_type = 31
3835 DW_TAG_const_type = 38
3836 DW_TAG_volatile_type = 53
3837 DW_TAG_restrict_type = 55
3838
3839``DW_TAG_member`` is used to define a member of a :ref:`composite type
Sean Silvaa1190322015-08-06 22:56:48 +00003840<DICompositeType>` or :ref:`subprogram <DISubprogram>`. The type of the member
3841is the ``baseType:``. The ``offset:`` is the member's bit offset.
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003842``DW_TAG_formal_parameter`` is used to define a member which is a formal
3843argument of a subprogram.
3844
3845``DW_TAG_typedef`` is used to provide a name for the ``baseType:``.
3846
3847``DW_TAG_pointer_type``, ``DW_TAG_reference_type``, ``DW_TAG_const_type``,
3848``DW_TAG_volatile_type`` and ``DW_TAG_restrict_type`` are used to qualify the
3849``baseType:``.
3850
3851Note that the ``void *`` type is expressed as a type derived from NULL.
3852
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003853.. _DICompositeType:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003854
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003855DICompositeType
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003856"""""""""""""""
3857
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003858``DICompositeType`` nodes represent types composed of other types, like
Sean Silvaa1190322015-08-06 22:56:48 +00003859structures and unions. ``elements:`` points to a tuple of the composed types.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003860
3861If the source language supports ODR, the ``identifier:`` field gives the unique
Sean Silvaa1190322015-08-06 22:56:48 +00003862identifier used for type merging between modules. When specified, other types
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003863can refer to composite types indirectly via a :ref:`metadata string
3864<metadata-string>` that matches their identifier.
3865
3866.. code-block:: llvm
3867
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003868 !0 = !DIEnumerator(name: "SixKind", value: 7)
3869 !1 = !DIEnumerator(name: "SevenKind", value: 7)
3870 !2 = !DIEnumerator(name: "NegEightKind", value: -8)
3871 !3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum", file: !12,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003872 line: 2, size: 32, align: 32, identifier: "_M4Enum",
3873 elements: !{!0, !1, !2})
3874
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003875The following ``tag:`` values are valid:
3876
3877.. code-block:: llvm
3878
3879 DW_TAG_array_type = 1
3880 DW_TAG_class_type = 2
3881 DW_TAG_enumeration_type = 4
3882 DW_TAG_structure_type = 19
3883 DW_TAG_union_type = 23
3884 DW_TAG_subroutine_type = 21
3885 DW_TAG_inheritance = 28
3886
3887
3888For ``DW_TAG_array_type``, the ``elements:`` should be :ref:`subrange
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003889descriptors <DISubrange>`, each representing the range of subscripts at that
Sean Silvaa1190322015-08-06 22:56:48 +00003890level of indexing. The ``DIFlagVector`` flag to ``flags:`` indicates that an
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003891array type is a native packed vector.
3892
3893For ``DW_TAG_enumeration_type``, the ``elements:`` should be :ref:`enumerator
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003894descriptors <DIEnumerator>`, each representing the definition of an enumeration
Sean Silvaa1190322015-08-06 22:56:48 +00003895value for the set. All enumeration type descriptors are collected in the
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003896``enums:`` field of the :ref:`compile unit <DICompileUnit>`.
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003897
3898For ``DW_TAG_structure_type``, ``DW_TAG_class_type``, and
3899``DW_TAG_union_type``, the ``elements:`` should be :ref:`derived types
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003900<DIDerivedType>` with ``tag: DW_TAG_member`` or ``tag: DW_TAG_inheritance``.
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003901
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003902.. _DISubrange:
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003903
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003904DISubrange
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003905""""""""""
3906
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003907``DISubrange`` nodes are the elements for ``DW_TAG_array_type`` variants of
Sean Silvaa1190322015-08-06 22:56:48 +00003908:ref:`DICompositeType`. ``count: -1`` indicates an empty array.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003909
3910.. code-block:: llvm
3911
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003912 !0 = !DISubrange(count: 5, lowerBound: 0) ; array counting from 0
3913 !1 = !DISubrange(count: 5, lowerBound: 1) ; array counting from 1
3914 !2 = !DISubrange(count: -1) ; empty array.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003915
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003916.. _DIEnumerator:
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003917
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003918DIEnumerator
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003919""""""""""""
3920
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003921``DIEnumerator`` nodes are the elements for ``DW_TAG_enumeration_type``
3922variants of :ref:`DICompositeType`.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003923
3924.. code-block:: llvm
3925
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003926 !0 = !DIEnumerator(name: "SixKind", value: 7)
3927 !1 = !DIEnumerator(name: "SevenKind", value: 7)
3928 !2 = !DIEnumerator(name: "NegEightKind", value: -8)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003929
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003930DITemplateTypeParameter
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003931"""""""""""""""""""""""
3932
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003933``DITemplateTypeParameter`` nodes represent type parameters to generic source
Sean Silvaa1190322015-08-06 22:56:48 +00003934language constructs. They are used (optionally) in :ref:`DICompositeType` and
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003935:ref:`DISubprogram` ``templateParams:`` fields.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003936
3937.. code-block:: llvm
3938
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003939 !0 = !DITemplateTypeParameter(name: "Ty", type: !1)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003940
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003941DITemplateValueParameter
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003942""""""""""""""""""""""""
3943
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003944``DITemplateValueParameter`` nodes represent value parameters to generic source
Sean Silvaa1190322015-08-06 22:56:48 +00003945language constructs. ``tag:`` defaults to ``DW_TAG_template_value_parameter``,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003946but if specified can also be set to ``DW_TAG_GNU_template_template_param`` or
Sean Silvaa1190322015-08-06 22:56:48 +00003947``DW_TAG_GNU_template_param_pack``. They are used (optionally) in
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003948:ref:`DICompositeType` and :ref:`DISubprogram` ``templateParams:`` fields.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003949
3950.. code-block:: llvm
3951
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003952 !0 = !DITemplateValueParameter(name: "Ty", type: !1, value: i32 7)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003953
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003954DINamespace
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003955"""""""""""
3956
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003957``DINamespace`` nodes represent namespaces in the source language.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003958
3959.. code-block:: llvm
3960
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003961 !0 = !DINamespace(name: "myawesomeproject", scope: !1, file: !2, line: 7)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003962
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003963DIGlobalVariable
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003964""""""""""""""""
3965
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003966``DIGlobalVariable`` nodes represent global variables in the source language.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003967
3968.. code-block:: llvm
3969
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003970 !0 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !1,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003971 file: !2, line: 7, type: !3, isLocal: true,
3972 isDefinition: false, variable: i32* @foo,
3973 declaration: !4)
3974
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003975All global variables should be referenced by the `globals:` field of a
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003976:ref:`compile unit <DICompileUnit>`.
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00003977
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003978.. _DISubprogram:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003979
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00003980DISubprogram
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003981""""""""""""
3982
Peter Collingbourne50108682015-11-06 02:41:02 +00003983``DISubprogram`` nodes represent functions from the source language. A
3984``DISubprogram`` may be attached to a function definition using ``!dbg``
3985metadata. The ``variables:`` field points at :ref:`variables <DILocalVariable>`
3986that must be retained, even if their IR counterparts are optimized out of
3987the IR. The ``type:`` field must point at an :ref:`DISubroutineType`.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00003988
3989.. code-block:: llvm
3990
Peter Collingbourne50108682015-11-06 02:41:02 +00003991 define void @_Z3foov() !dbg !0 {
3992 ...
3993 }
3994
3995 !0 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,
3996 file: !2, line: 7, type: !3, isLocal: true,
3997 isDefinition: false, scopeLine: 8,
3998 containingType: !4,
3999 virtuality: DW_VIRTUALITY_pure_virtual,
4000 virtualIndex: 10, flags: DIFlagPrototyped,
4001 isOptimized: true, templateParams: !5,
4002 declaration: !6, variables: !7)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004003
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004004.. _DILexicalBlock:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004005
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004006DILexicalBlock
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004007""""""""""""""
4008
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004009``DILexicalBlock`` nodes describe nested blocks within a :ref:`subprogram
Bruce Mitchenere9ffb452015-09-12 01:17:08 +00004010<DISubprogram>`. The line number and column numbers are used to distinguish
Sean Silvaa1190322015-08-06 22:56:48 +00004011two lexical blocks at same depth. They are valid targets for ``scope:``
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00004012fields.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004013
4014.. code-block:: llvm
4015
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004016 !0 = distinct !DILexicalBlock(scope: !1, file: !2, line: 7, column: 35)
Duncan P. N. Exon Smithd937cd92015-03-17 23:41:05 +00004017
4018Usually lexical blocks are ``distinct`` to prevent node merging based on
4019operands.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004020
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004021.. _DILexicalBlockFile:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004022
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004023DILexicalBlockFile
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004024""""""""""""""""""
4025
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004026``DILexicalBlockFile`` nodes are used to discriminate between sections of a
Sean Silvaa1190322015-08-06 22:56:48 +00004027:ref:`lexical block <DILexicalBlock>`. The ``file:`` field can be changed to
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004028indicate textual inclusion, or the ``discriminator:`` field can be used to
4029discriminate between control flow within a single block in the source language.
4030
4031.. code-block:: llvm
4032
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004033 !0 = !DILexicalBlock(scope: !3, file: !4, line: 7, column: 35)
4034 !1 = !DILexicalBlockFile(scope: !0, file: !4, discriminator: 0)
4035 !2 = !DILexicalBlockFile(scope: !0, file: !4, discriminator: 1)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004036
Michael Kuperstein605308a2015-05-14 10:58:59 +00004037.. _DILocation:
4038
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004039DILocation
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +00004040""""""""""
4041
Sean Silvaa1190322015-08-06 22:56:48 +00004042``DILocation`` nodes represent source debug locations. The ``scope:`` field is
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004043mandatory, and points at an :ref:`DILexicalBlockFile`, an
4044:ref:`DILexicalBlock`, or an :ref:`DISubprogram`.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +00004045
4046.. code-block:: llvm
4047
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004048 !0 = !DILocation(line: 2900, column: 42, scope: !1, inlinedAt: !2)
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +00004049
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004050.. _DILocalVariable:
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004051
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004052DILocalVariable
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004053"""""""""""""""
4054
Sean Silvaa1190322015-08-06 22:56:48 +00004055``DILocalVariable`` nodes represent local variables in the source language. If
Duncan P. N. Exon Smithed013cd2015-07-31 18:58:39 +00004056the ``arg:`` field is set to non-zero, then this variable is a subprogram
4057parameter, and it will be included in the ``variables:`` field of its
4058:ref:`DISubprogram`.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004059
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004060.. code-block:: llvm
4061
Duncan P. N. Exon Smithed013cd2015-07-31 18:58:39 +00004062 !0 = !DILocalVariable(name: "this", arg: 1, scope: !3, file: !2, line: 7,
4063 type: !3, flags: DIFlagArtificial)
4064 !1 = !DILocalVariable(name: "x", arg: 2, scope: !4, file: !2, line: 7,
4065 type: !3)
4066 !2 = !DILocalVariable(name: "y", scope: !5, file: !2, line: 7, type: !3)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004067
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004068DIExpression
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004069""""""""""""
4070
Sean Silvaa1190322015-08-06 22:56:48 +00004071``DIExpression`` nodes represent DWARF expression sequences. They are used in
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004072:ref:`debug intrinsics<dbg_intrinsics>` (such as ``llvm.dbg.declare``) to
4073describe how the referenced LLVM variable relates to the source language
4074variable.
4075
4076The current supported vocabulary is limited:
4077
4078- ``DW_OP_deref`` dereferences the working expression.
4079- ``DW_OP_plus, 93`` adds ``93`` to the working expression.
4080- ``DW_OP_bit_piece, 16, 8`` specifies the offset and size (``16`` and ``8``
4081 here, respectively) of the variable piece from the working expression.
4082
4083.. code-block:: llvm
4084
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004085 !0 = !DIExpression(DW_OP_deref)
4086 !1 = !DIExpression(DW_OP_plus, 3)
4087 !2 = !DIExpression(DW_OP_bit_piece, 3, 7)
4088 !3 = !DIExpression(DW_OP_deref, DW_OP_plus, 3, DW_OP_bit_piece, 3, 7)
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004089
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004090DIObjCProperty
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004091""""""""""""""
4092
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004093``DIObjCProperty`` nodes represent Objective-C property nodes.
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004094
4095.. code-block:: llvm
4096
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004097 !3 = !DIObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo",
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004098 getter: "getFoo", attributes: 7, type: !2)
4099
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004100DIImportedEntity
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004101""""""""""""""""
4102
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004103``DIImportedEntity`` nodes represent entities (such as modules) imported into a
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004104compile unit.
4105
4106.. code-block:: llvm
4107
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +00004108 !2 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "foo", scope: !0,
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +00004109 entity: !1, line: 7)
4110
Sean Silvab084af42012-12-07 10:36:55 +00004111'``tbaa``' Metadata
4112^^^^^^^^^^^^^^^^^^^
4113
4114In LLVM IR, memory does not have types, so LLVM's own type system is not
4115suitable for doing TBAA. Instead, metadata is added to the IR to
4116describe a type system of a higher level language. This can be used to
4117implement typical C/C++ TBAA, but it can also be used to implement
4118custom alias analysis behavior for other languages.
4119
4120The current metadata format is very simple. TBAA metadata nodes have up
4121to three fields, e.g.:
4122
4123.. code-block:: llvm
4124
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004125 !0 = !{ !"an example type tree" }
4126 !1 = !{ !"int", !0 }
4127 !2 = !{ !"float", !0 }
4128 !3 = !{ !"const float", !2, i64 1 }
Sean Silvab084af42012-12-07 10:36:55 +00004129
4130The first field is an identity field. It can be any value, usually a
4131metadata string, which uniquely identifies the type. The most important
4132name in the tree is the name of the root node. Two trees with different
4133root node names are entirely disjoint, even if they have leaves with
4134common names.
4135
4136The second field identifies the type's parent node in the tree, or is
4137null or omitted for a root node. A type is considered to alias all of
4138its descendants and all of its ancestors in the tree. Also, a type is
4139considered to alias all types in other trees, so that bitcode produced
4140from multiple front-ends is handled conservatively.
4141
4142If the third field is present, it's an integer which if equal to 1
4143indicates that the type is "constant" (meaning
4144``pointsToConstantMemory`` should return true; see `other useful
4145AliasAnalysis methods <AliasAnalysis.html#OtherItfs>`_).
4146
4147'``tbaa.struct``' Metadata
4148^^^^^^^^^^^^^^^^^^^^^^^^^^
4149
4150The :ref:`llvm.memcpy <int_memcpy>` is often used to implement
4151aggregate assignment operations in C and similar languages, however it
4152is defined to copy a contiguous region of memory, which is more than
4153strictly necessary for aggregate types which contain holes due to
4154padding. Also, it doesn't contain any TBAA information about the fields
4155of the aggregate.
4156
4157``!tbaa.struct`` metadata can describe which memory subregions in a
4158memcpy are padding and what the TBAA tags of the struct are.
4159
4160The current metadata format is very simple. ``!tbaa.struct`` metadata
4161nodes are a list of operands which are in conceptual groups of three.
4162For each group of three, the first operand gives the byte offset of a
4163field in bytes, the second gives its size in bytes, and the third gives
4164its tbaa tag. e.g.:
4165
4166.. code-block:: llvm
4167
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004168 !4 = !{ i64 0, i64 4, !1, i64 8, i64 4, !2 }
Sean Silvab084af42012-12-07 10:36:55 +00004169
4170This describes a struct with two fields. The first is at offset 0 bytes
4171with size 4 bytes, and has tbaa tag !1. The second is at offset 8 bytes
4172and has size 4 bytes and has tbaa tag !2.
4173
4174Note that the fields need not be contiguous. In this example, there is a
41754 byte gap between the two fields. This gap represents padding which
4176does not carry useful data and need not be preserved.
4177
Hal Finkel94146652014-07-24 14:25:39 +00004178'``noalias``' and '``alias.scope``' Metadata
Dan Liewbafdcba2014-07-28 13:33:51 +00004179^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Hal Finkel94146652014-07-24 14:25:39 +00004180
4181``noalias`` and ``alias.scope`` metadata provide the ability to specify generic
4182noalias memory-access sets. This means that some collection of memory access
4183instructions (loads, stores, memory-accessing calls, etc.) that carry
4184``noalias`` metadata can specifically be specified not to alias with some other
4185collection of memory access instructions that carry ``alias.scope`` metadata.
Hal Finkel029cde62014-07-25 15:50:02 +00004186Each type of metadata specifies a list of scopes where each scope has an id and
Ed Maste8ed40ce2015-04-14 20:52:58 +00004187a domain. When evaluating an aliasing query, if for some domain, the set
Hal Finkel029cde62014-07-25 15:50:02 +00004188of scopes with that domain in one instruction's ``alias.scope`` list is a
Arch D. Robison96cf7ab2015-02-24 20:11:49 +00004189subset of (or equal to) the set of scopes for that domain in another
Hal Finkel029cde62014-07-25 15:50:02 +00004190instruction's ``noalias`` list, then the two memory accesses are assumed not to
4191alias.
Hal Finkel94146652014-07-24 14:25:39 +00004192
Hal Finkel029cde62014-07-25 15:50:02 +00004193The metadata identifying each domain is itself a list containing one or two
4194entries. The first entry is the name of the domain. Note that if the name is a
Bruce Mitchenere9ffb452015-09-12 01:17:08 +00004195string then it can be combined across functions and translation units. A
Hal Finkel029cde62014-07-25 15:50:02 +00004196self-reference can be used to create globally unique domain names. A
4197descriptive string may optionally be provided as a second list entry.
4198
4199The metadata identifying each scope is also itself a list containing two or
4200three entries. The first entry is the name of the scope. Note that if the name
Bruce Mitchenere9ffb452015-09-12 01:17:08 +00004201is a string then it can be combined across functions and translation units. A
Hal Finkel029cde62014-07-25 15:50:02 +00004202self-reference can be used to create globally unique scope names. A metadata
4203reference to the scope's domain is the second entry. A descriptive string may
4204optionally be provided as a third list entry.
Hal Finkel94146652014-07-24 14:25:39 +00004205
4206For example,
4207
4208.. code-block:: llvm
4209
Hal Finkel029cde62014-07-25 15:50:02 +00004210 ; Two scope domains:
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004211 !0 = !{!0}
4212 !1 = !{!1}
Hal Finkel94146652014-07-24 14:25:39 +00004213
Hal Finkel029cde62014-07-25 15:50:02 +00004214 ; Some scopes in these domains:
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004215 !2 = !{!2, !0}
4216 !3 = !{!3, !0}
4217 !4 = !{!4, !1}
Hal Finkel94146652014-07-24 14:25:39 +00004218
Hal Finkel029cde62014-07-25 15:50:02 +00004219 ; Some scope lists:
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004220 !5 = !{!4} ; A list containing only scope !4
4221 !6 = !{!4, !3, !2}
4222 !7 = !{!3}
Hal Finkel94146652014-07-24 14:25:39 +00004223
4224 ; These two instructions don't alias:
David Blaikiec7aabbb2015-03-04 22:06:14 +00004225 %0 = load float, float* %c, align 4, !alias.scope !5
Hal Finkel029cde62014-07-25 15:50:02 +00004226 store float %0, float* %arrayidx.i, align 4, !noalias !5
Hal Finkel94146652014-07-24 14:25:39 +00004227
Hal Finkel029cde62014-07-25 15:50:02 +00004228 ; These two instructions also don't alias (for domain !1, the set of scopes
4229 ; in the !alias.scope equals that in the !noalias list):
David Blaikiec7aabbb2015-03-04 22:06:14 +00004230 %2 = load float, float* %c, align 4, !alias.scope !5
Hal Finkel029cde62014-07-25 15:50:02 +00004231 store float %2, float* %arrayidx.i2, align 4, !noalias !6
Hal Finkel94146652014-07-24 14:25:39 +00004232
Adam Nemet0a8416f2015-05-11 08:30:28 +00004233 ; These two instructions may alias (for domain !0, the set of scopes in
Hal Finkel029cde62014-07-25 15:50:02 +00004234 ; the !noalias list is not a superset of, or equal to, the scopes in the
4235 ; !alias.scope list):
David Blaikiec7aabbb2015-03-04 22:06:14 +00004236 %2 = load float, float* %c, align 4, !alias.scope !6
Hal Finkel029cde62014-07-25 15:50:02 +00004237 store float %0, float* %arrayidx.i, align 4, !noalias !7
Hal Finkel94146652014-07-24 14:25:39 +00004238
Sean Silvab084af42012-12-07 10:36:55 +00004239'``fpmath``' Metadata
4240^^^^^^^^^^^^^^^^^^^^^
4241
4242``fpmath`` metadata may be attached to any instruction of floating point
4243type. It can be used to express the maximum acceptable error in the
4244result of that instruction, in ULPs, thus potentially allowing the
4245compiler to use a more efficient but less accurate method of computing
4246it. ULP is defined as follows:
4247
4248 If ``x`` is a real number that lies between two finite consecutive
4249 floating-point numbers ``a`` and ``b``, without being equal to one
4250 of them, then ``ulp(x) = |b - a|``, otherwise ``ulp(x)`` is the
4251 distance between the two non-equal finite floating-point numbers
4252 nearest ``x``. Moreover, ``ulp(NaN)`` is ``NaN``.
4253
4254The metadata node shall consist of a single positive floating point
4255number representing the maximum relative error, for example:
4256
4257.. code-block:: llvm
4258
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004259 !0 = !{ float 2.5 } ; maximum acceptable inaccuracy is 2.5 ULPs
Sean Silvab084af42012-12-07 10:36:55 +00004260
Philip Reamesf8bf9dd2015-02-27 23:14:50 +00004261.. _range-metadata:
4262
Sean Silvab084af42012-12-07 10:36:55 +00004263'``range``' Metadata
4264^^^^^^^^^^^^^^^^^^^^
4265
Jingyue Wu37fcb592014-06-19 16:50:16 +00004266``range`` metadata may be attached only to ``load``, ``call`` and ``invoke`` of
4267integer types. It expresses the possible ranges the loaded value or the value
4268returned by the called function at this call site is in. The ranges are
4269represented with a flattened list of integers. The loaded value or the value
4270returned is known to be in the union of the ranges defined by each consecutive
4271pair. Each pair has the following properties:
Sean Silvab084af42012-12-07 10:36:55 +00004272
4273- The type must match the type loaded by the instruction.
4274- The pair ``a,b`` represents the range ``[a,b)``.
4275- Both ``a`` and ``b`` are constants.
4276- The range is allowed to wrap.
4277- The range should not represent the full or empty set. That is,
4278 ``a!=b``.
4279
4280In addition, the pairs must be in signed order of the lower bound and
4281they must be non-contiguous.
4282
4283Examples:
4284
4285.. code-block:: llvm
4286
David Blaikiec7aabbb2015-03-04 22:06:14 +00004287 %a = load i8, i8* %x, align 1, !range !0 ; Can only be 0 or 1
4288 %b = load i8, i8* %y, align 1, !range !1 ; Can only be 255 (-1), 0 or 1
Jingyue Wu37fcb592014-06-19 16:50:16 +00004289 %c = call i8 @foo(), !range !2 ; Can only be 0, 1, 3, 4 or 5
4290 %d = invoke i8 @bar() to label %cont
4291 unwind label %lpad, !range !3 ; Can only be -2, -1, 3, 4 or 5
Sean Silvab084af42012-12-07 10:36:55 +00004292 ...
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004293 !0 = !{ i8 0, i8 2 }
4294 !1 = !{ i8 255, i8 2 }
4295 !2 = !{ i8 0, i8 2, i8 3, i8 6 }
4296 !3 = !{ i8 -2, i8 0, i8 3, i8 6 }
Sean Silvab084af42012-12-07 10:36:55 +00004297
Sanjay Patela99ab1f2015-09-02 19:06:43 +00004298'``unpredictable``' Metadata
Sanjay Patel1f12b342015-09-02 19:35:31 +00004299^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sanjay Patela99ab1f2015-09-02 19:06:43 +00004300
4301``unpredictable`` metadata may be attached to any branch or switch
4302instruction. It can be used to express the unpredictability of control
4303flow. Similar to the llvm.expect intrinsic, it may be used to alter
4304optimizations related to compare and branch instructions. The metadata
4305is treated as a boolean value; if it exists, it signals that the branch
4306or switch that it is attached to is completely unpredictable.
4307
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004308'``llvm.loop``'
4309^^^^^^^^^^^^^^^
4310
4311It is sometimes useful to attach information to loop constructs. Currently,
4312loop metadata is implemented as metadata attached to the branch instruction
4313in the loop latch block. This type of metadata refer to a metadata node that is
Matt Arsenault24b49c42013-07-31 17:49:08 +00004314guaranteed to be separate for each loop. The loop identifier metadata is
Paul Redmond5fdf8362013-05-28 20:00:34 +00004315specified with the name ``llvm.loop``.
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004316
4317The loop identifier metadata is implemented using a metadata that refers to
Michael Liaoa7699082013-03-06 18:24:34 +00004318itself to avoid merging it with any other identifier metadata, e.g.,
4319during module linkage or function inlining. That is, each loop should refer
4320to their own identification metadata even if they reside in separate functions.
4321The following example contains loop identifier metadata for two separate loop
Pekka Jaaskelainen119a2b62013-02-22 12:03:07 +00004322constructs:
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004323
4324.. code-block:: llvm
Paul Redmondeaaed3b2013-02-21 17:20:45 +00004325
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004326 !0 = !{!0}
4327 !1 = !{!1}
Pekka Jaaskelainen119a2b62013-02-22 12:03:07 +00004328
Mark Heffernan893752a2014-07-18 19:24:51 +00004329The loop identifier metadata can be used to specify additional
4330per-loop metadata. Any operands after the first operand can be treated
4331as user-defined metadata. For example the ``llvm.loop.unroll.count``
4332suggests an unroll factor to the loop unroller:
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004333
Paul Redmond5fdf8362013-05-28 20:00:34 +00004334.. code-block:: llvm
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004335
Paul Redmond5fdf8362013-05-28 20:00:34 +00004336 br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0
4337 ...
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004338 !0 = !{!0, !1}
4339 !1 = !{!"llvm.loop.unroll.count", i32 4}
Mark Heffernan893752a2014-07-18 19:24:51 +00004340
Mark Heffernan9d20e422014-07-21 23:11:03 +00004341'``llvm.loop.vectorize``' and '``llvm.loop.interleave``'
4342^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mark Heffernan893752a2014-07-18 19:24:51 +00004343
Mark Heffernan9d20e422014-07-21 23:11:03 +00004344Metadata prefixed with ``llvm.loop.vectorize`` or ``llvm.loop.interleave`` are
4345used to control per-loop vectorization and interleaving parameters such as
Sean Silvaa1190322015-08-06 22:56:48 +00004346vectorization width and interleave count. These metadata should be used in
4347conjunction with ``llvm.loop`` loop identification metadata. The
Mark Heffernan9d20e422014-07-21 23:11:03 +00004348``llvm.loop.vectorize`` and ``llvm.loop.interleave`` metadata are only
4349optimization hints and the optimizer will only interleave and vectorize loops if
Sean Silvaa1190322015-08-06 22:56:48 +00004350it believes it is safe to do so. The ``llvm.mem.parallel_loop_access`` metadata
Mark Heffernan9d20e422014-07-21 23:11:03 +00004351which contains information about loop-carried memory dependencies can be helpful
4352in determining the safety of these transformations.
Mark Heffernan893752a2014-07-18 19:24:51 +00004353
Mark Heffernan9d20e422014-07-21 23:11:03 +00004354'``llvm.loop.interleave.count``' Metadata
Mark Heffernan893752a2014-07-18 19:24:51 +00004355^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4356
Mark Heffernan9d20e422014-07-21 23:11:03 +00004357This metadata suggests an interleave count to the loop interleaver.
4358The first operand is the string ``llvm.loop.interleave.count`` and the
Mark Heffernan893752a2014-07-18 19:24:51 +00004359second operand is an integer specifying the interleave count. For
4360example:
4361
4362.. code-block:: llvm
4363
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004364 !0 = !{!"llvm.loop.interleave.count", i32 4}
Mark Heffernan893752a2014-07-18 19:24:51 +00004365
Mark Heffernan9d20e422014-07-21 23:11:03 +00004366Note that setting ``llvm.loop.interleave.count`` to 1 disables interleaving
Sean Silvaa1190322015-08-06 22:56:48 +00004367multiple iterations of the loop. If ``llvm.loop.interleave.count`` is set to 0
Mark Heffernan9d20e422014-07-21 23:11:03 +00004368then the interleave count will be determined automatically.
4369
4370'``llvm.loop.vectorize.enable``' Metadata
Dan Liew9a1829d2014-07-22 14:59:38 +00004371^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mark Heffernan9d20e422014-07-21 23:11:03 +00004372
4373This metadata selectively enables or disables vectorization for the loop. The
4374first operand is the string ``llvm.loop.vectorize.enable`` and the second operand
Sean Silvaa1190322015-08-06 22:56:48 +00004375is a bit. If the bit operand value is 1 vectorization is enabled. A value of
Mark Heffernan9d20e422014-07-21 23:11:03 +000043760 disables vectorization:
4377
4378.. code-block:: llvm
4379
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004380 !0 = !{!"llvm.loop.vectorize.enable", i1 0}
4381 !1 = !{!"llvm.loop.vectorize.enable", i1 1}
Mark Heffernan893752a2014-07-18 19:24:51 +00004382
4383'``llvm.loop.vectorize.width``' Metadata
4384^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4385
4386This metadata sets the target width of the vectorizer. The first
4387operand is the string ``llvm.loop.vectorize.width`` and the second
4388operand is an integer specifying the width. For example:
4389
4390.. code-block:: llvm
4391
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004392 !0 = !{!"llvm.loop.vectorize.width", i32 4}
Mark Heffernan893752a2014-07-18 19:24:51 +00004393
4394Note that setting ``llvm.loop.vectorize.width`` to 1 disables
Sean Silvaa1190322015-08-06 22:56:48 +00004395vectorization of the loop. If ``llvm.loop.vectorize.width`` is set to
Mark Heffernan893752a2014-07-18 19:24:51 +000043960 or if the loop does not have this metadata the width will be
4397determined automatically.
4398
4399'``llvm.loop.unroll``'
4400^^^^^^^^^^^^^^^^^^^^^^
4401
4402Metadata prefixed with ``llvm.loop.unroll`` are loop unrolling
4403optimization hints such as the unroll factor. ``llvm.loop.unroll``
4404metadata should be used in conjunction with ``llvm.loop`` loop
4405identification metadata. The ``llvm.loop.unroll`` metadata are only
4406optimization hints and the unrolling will only be performed if the
4407optimizer believes it is safe to do so.
4408
Mark Heffernan893752a2014-07-18 19:24:51 +00004409'``llvm.loop.unroll.count``' Metadata
4410^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4411
4412This metadata suggests an unroll factor to the loop unroller. The
4413first operand is the string ``llvm.loop.unroll.count`` and the second
4414operand is a positive integer specifying the unroll factor. For
4415example:
4416
4417.. code-block:: llvm
4418
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004419 !0 = !{!"llvm.loop.unroll.count", i32 4}
Mark Heffernan893752a2014-07-18 19:24:51 +00004420
4421If the trip count of the loop is less than the unroll count the loop
4422will be partially unrolled.
4423
Mark Heffernane6b4ba12014-07-23 17:31:37 +00004424'``llvm.loop.unroll.disable``' Metadata
4425^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4426
Mark Heffernan3e32a4e2015-06-30 22:48:51 +00004427This metadata disables loop unrolling. The metadata has a single operand
Sean Silvaa1190322015-08-06 22:56:48 +00004428which is the string ``llvm.loop.unroll.disable``. For example:
Mark Heffernane6b4ba12014-07-23 17:31:37 +00004429
4430.. code-block:: llvm
4431
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004432 !0 = !{!"llvm.loop.unroll.disable"}
Mark Heffernane6b4ba12014-07-23 17:31:37 +00004433
Kevin Qin715b01e2015-03-09 06:14:18 +00004434'``llvm.loop.unroll.runtime.disable``' Metadata
Dan Liew868b0742015-03-11 13:34:49 +00004435^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Kevin Qin715b01e2015-03-09 06:14:18 +00004436
Mark Heffernan3e32a4e2015-06-30 22:48:51 +00004437This metadata disables runtime loop unrolling. The metadata has a single
Sean Silvaa1190322015-08-06 22:56:48 +00004438operand which is the string ``llvm.loop.unroll.runtime.disable``. For example:
Kevin Qin715b01e2015-03-09 06:14:18 +00004439
4440.. code-block:: llvm
4441
4442 !0 = !{!"llvm.loop.unroll.runtime.disable"}
4443
Mark Heffernan89391542015-08-10 17:28:08 +00004444'``llvm.loop.unroll.enable``' Metadata
4445^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4446
4447This metadata suggests that the loop should be fully unrolled if the trip count
4448is known at compile time and partially unrolled if the trip count is not known
4449at compile time. The metadata has a single operand which is the string
4450``llvm.loop.unroll.enable``. For example:
4451
4452.. code-block:: llvm
4453
4454 !0 = !{!"llvm.loop.unroll.enable"}
4455
Mark Heffernane6b4ba12014-07-23 17:31:37 +00004456'``llvm.loop.unroll.full``' Metadata
4457^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4458
Mark Heffernan3e32a4e2015-06-30 22:48:51 +00004459This metadata suggests that the loop should be unrolled fully. The
4460metadata has a single operand which is the string ``llvm.loop.unroll.full``.
Mark Heffernane6b4ba12014-07-23 17:31:37 +00004461For example:
4462
4463.. code-block:: llvm
4464
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004465 !0 = !{!"llvm.loop.unroll.full"}
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004466
4467'``llvm.mem``'
4468^^^^^^^^^^^^^^^
4469
4470Metadata types used to annotate memory accesses with information helpful
4471for optimizations are prefixed with ``llvm.mem``.
4472
4473'``llvm.mem.parallel_loop_access``' Metadata
4474^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4475
Mehdi Amini4a121fa2015-03-14 22:04:06 +00004476The ``llvm.mem.parallel_loop_access`` metadata refers to a loop identifier,
4477or metadata containing a list of loop identifiers for nested loops.
4478The metadata is attached to memory accessing instructions and denotes that
4479no loop carried memory dependence exist between it and other instructions denoted
Pekka Jaaskelainen23b222cc2014-05-23 11:35:46 +00004480with the same loop identifier.
4481
Mehdi Amini4a121fa2015-03-14 22:04:06 +00004482Precisely, given two instructions ``m1`` and ``m2`` that both have the
4483``llvm.mem.parallel_loop_access`` metadata, with ``L1`` and ``L2`` being the
4484set of loops associated with that metadata, respectively, then there is no loop
4485carried dependence between ``m1`` and ``m2`` for loops in both ``L1`` and
Pekka Jaaskelainen23b222cc2014-05-23 11:35:46 +00004486``L2``.
4487
Mehdi Amini4a121fa2015-03-14 22:04:06 +00004488As a special case, if all memory accessing instructions in a loop have
4489``llvm.mem.parallel_loop_access`` metadata that refers to that loop, then the
4490loop has no loop carried memory dependences and is considered to be a parallel
4491loop.
Pekka Jaaskelainen23b222cc2014-05-23 11:35:46 +00004492
Mehdi Amini4a121fa2015-03-14 22:04:06 +00004493Note that if not all memory access instructions have such metadata referring to
4494the loop, then the loop is considered not being trivially parallel. Additional
Sean Silvaa1190322015-08-06 22:56:48 +00004495memory dependence analysis is required to make that determination. As a fail
Mehdi Amini4a121fa2015-03-14 22:04:06 +00004496safe mechanism, this causes loops that were originally parallel to be considered
4497sequential (if optimization passes that are unaware of the parallel semantics
Pekka Jaaskelainen23b222cc2014-05-23 11:35:46 +00004498insert new memory instructions into the loop body).
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004499
4500Example of a loop that is considered parallel due to its correct use of
Paul Redmond5fdf8362013-05-28 20:00:34 +00004501both ``llvm.loop`` and ``llvm.mem.parallel_loop_access``
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004502metadata types that refer to the same loop identifier metadata.
4503
4504.. code-block:: llvm
4505
4506 for.body:
Paul Redmond5fdf8362013-05-28 20:00:34 +00004507 ...
David Blaikiec7aabbb2015-03-04 22:06:14 +00004508 %val0 = load i32, i32* %arrayidx, !llvm.mem.parallel_loop_access !0
Paul Redmond5fdf8362013-05-28 20:00:34 +00004509 ...
Tobias Grosserfbe95dc2014-03-05 13:36:04 +00004510 store i32 %val0, i32* %arrayidx1, !llvm.mem.parallel_loop_access !0
Paul Redmond5fdf8362013-05-28 20:00:34 +00004511 ...
4512 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004513
4514 for.end:
4515 ...
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004516 !0 = !{!0}
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004517
4518It is also possible to have nested parallel loops. In that case the
4519memory accesses refer to a list of loop identifier metadata nodes instead of
4520the loop identifier metadata node directly:
4521
4522.. code-block:: llvm
4523
4524 outer.for.body:
Tobias Grosserfbe95dc2014-03-05 13:36:04 +00004525 ...
David Blaikiec7aabbb2015-03-04 22:06:14 +00004526 %val1 = load i32, i32* %arrayidx3, !llvm.mem.parallel_loop_access !2
Tobias Grosserfbe95dc2014-03-05 13:36:04 +00004527 ...
4528 br label %inner.for.body
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004529
4530 inner.for.body:
Paul Redmond5fdf8362013-05-28 20:00:34 +00004531 ...
David Blaikiec7aabbb2015-03-04 22:06:14 +00004532 %val0 = load i32, i32* %arrayidx1, !llvm.mem.parallel_loop_access !0
Paul Redmond5fdf8362013-05-28 20:00:34 +00004533 ...
Tobias Grosserfbe95dc2014-03-05 13:36:04 +00004534 store i32 %val0, i32* %arrayidx2, !llvm.mem.parallel_loop_access !0
Paul Redmond5fdf8362013-05-28 20:00:34 +00004535 ...
4536 br i1 %exitcond, label %inner.for.end, label %inner.for.body, !llvm.loop !1
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004537
4538 inner.for.end:
Paul Redmond5fdf8362013-05-28 20:00:34 +00004539 ...
Tobias Grosserfbe95dc2014-03-05 13:36:04 +00004540 store i32 %val1, i32* %arrayidx4, !llvm.mem.parallel_loop_access !2
Paul Redmond5fdf8362013-05-28 20:00:34 +00004541 ...
4542 br i1 %exitcond, label %outer.for.end, label %outer.for.body, !llvm.loop !2
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004543
4544 outer.for.end: ; preds = %for.body
4545 ...
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004546 !0 = !{!1, !2} ; a list of loop identifiers
4547 !1 = !{!1} ; an identifier for the inner loop
4548 !2 = !{!2} ; an identifier for the outer loop
Pekka Jaaskelainen0d237252013-02-13 18:08:57 +00004549
Peter Collingbournee6909c82015-02-20 20:30:47 +00004550'``llvm.bitsets``'
4551^^^^^^^^^^^^^^^^^^
4552
4553The ``llvm.bitsets`` global metadata is used to implement
4554:doc:`bitsets <BitSets>`.
4555
Piotr Padlewski6c15ec42015-09-15 18:32:14 +00004556'``invariant.group``' Metadata
4557^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4558
4559The ``invariant.group`` metadata may be attached to ``load``/``store`` instructions.
4560The existence of the ``invariant.group`` metadata on the instruction tells
4561the optimizer that every ``load`` and ``store`` to the same pointer operand
4562within the same invariant group can be assumed to load or store the same
4563value (but see the ``llvm.invariant.group.barrier`` intrinsic which affects
4564when two pointers are considered the same).
4565
4566Examples:
4567
4568.. code-block:: llvm
4569
4570 @unknownPtr = external global i8
4571 ...
4572 %ptr = alloca i8
4573 store i8 42, i8* %ptr, !invariant.group !0
4574 call void @foo(i8* %ptr)
4575
4576 %a = load i8, i8* %ptr, !invariant.group !0 ; Can assume that value under %ptr didn't change
4577 call void @foo(i8* %ptr)
4578 %b = load i8, i8* %ptr, !invariant.group !1 ; Can't assume anything, because group changed
4579
4580 %newPtr = call i8* @getPointer(i8* %ptr)
4581 %c = load i8, i8* %newPtr, !invariant.group !0 ; Can't assume anything, because we only have information about %ptr
4582
4583 %unknownValue = load i8, i8* @unknownPtr
4584 store i8 %unknownValue, i8* %ptr, !invariant.group !0 ; Can assume that %unknownValue == 42
4585
4586 call void @foo(i8* %ptr)
4587 %newPtr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr)
4588 %d = load i8, i8* %newPtr2, !invariant.group !0 ; Can't step through invariant.group.barrier to get value of %ptr
4589
4590 ...
4591 declare void @foo(i8*)
4592 declare i8* @getPointer(i8*)
4593 declare i8* @llvm.invariant.group.barrier(i8*)
4594
4595 !0 = !{!"magic ptr"}
4596 !1 = !{!"other ptr"}
4597
4598
4599
Sean Silvab084af42012-12-07 10:36:55 +00004600Module Flags Metadata
4601=====================
4602
4603Information about the module as a whole is difficult to convey to LLVM's
4604subsystems. The LLVM IR isn't sufficient to transmit this information.
4605The ``llvm.module.flags`` named metadata exists in order to facilitate
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004606this. These flags are in the form of key / value pairs --- much like a
4607dictionary --- making it easy for any subsystem who cares about a flag to
Sean Silvab084af42012-12-07 10:36:55 +00004608look it up.
4609
4610The ``llvm.module.flags`` metadata contains a list of metadata triplets.
4611Each triplet has the following form:
4612
4613- The first element is a *behavior* flag, which specifies the behavior
4614 when two (or more) modules are merged together, and it encounters two
4615 (or more) metadata with the same ID. The supported behaviors are
4616 described below.
4617- The second element is a metadata string that is a unique ID for the
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004618 metadata. Each module may only have one flag entry for each unique ID (not
4619 including entries with the **Require** behavior).
Sean Silvab084af42012-12-07 10:36:55 +00004620- The third element is the value of the flag.
4621
4622When two (or more) modules are merged together, the resulting
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004623``llvm.module.flags`` metadata is the union of the modules' flags. That is, for
4624each unique metadata ID string, there will be exactly one entry in the merged
4625modules ``llvm.module.flags`` metadata table, and the value for that entry will
4626be determined by the merge behavior flag, as described below. The only exception
4627is that entries with the *Require* behavior are always preserved.
Sean Silvab084af42012-12-07 10:36:55 +00004628
4629The following behaviors are supported:
4630
4631.. list-table::
4632 :header-rows: 1
4633 :widths: 10 90
4634
4635 * - Value
4636 - Behavior
4637
4638 * - 1
4639 - **Error**
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004640 Emits an error if two values disagree, otherwise the resulting value
4641 is that of the operands.
Sean Silvab084af42012-12-07 10:36:55 +00004642
4643 * - 2
4644 - **Warning**
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004645 Emits a warning if two values disagree. The result value will be the
4646 operand for the flag from the first module being linked.
Sean Silvab084af42012-12-07 10:36:55 +00004647
4648 * - 3
4649 - **Require**
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004650 Adds a requirement that another module flag be present and have a
4651 specified value after linking is performed. The value must be a
4652 metadata pair, where the first element of the pair is the ID of the
4653 module flag to be restricted, and the second element of the pair is
4654 the value the module flag should be restricted to. This behavior can
4655 be used to restrict the allowable results (via triggering of an
4656 error) of linking IDs with the **Override** behavior.
Sean Silvab084af42012-12-07 10:36:55 +00004657
4658 * - 4
4659 - **Override**
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004660 Uses the specified value, regardless of the behavior or value of the
4661 other module. If both modules specify **Override**, but the values
4662 differ, an error will be emitted.
4663
Daniel Dunbard77d9fb2013-01-16 21:38:56 +00004664 * - 5
4665 - **Append**
4666 Appends the two values, which are required to be metadata nodes.
4667
4668 * - 6
4669 - **AppendUnique**
4670 Appends the two values, which are required to be metadata
4671 nodes. However, duplicate entries in the second list are dropped
4672 during the append operation.
4673
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004674It is an error for a particular unique flag ID to have multiple behaviors,
4675except in the case of **Require** (which adds restrictions on another metadata
4676value) or **Override**.
Sean Silvab084af42012-12-07 10:36:55 +00004677
4678An example of module flags:
4679
4680.. code-block:: llvm
4681
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004682 !0 = !{ i32 1, !"foo", i32 1 }
4683 !1 = !{ i32 4, !"bar", i32 37 }
4684 !2 = !{ i32 2, !"qux", i32 42 }
4685 !3 = !{ i32 3, !"qux",
4686 !{
4687 !"foo", i32 1
Sean Silvab084af42012-12-07 10:36:55 +00004688 }
4689 }
4690 !llvm.module.flags = !{ !0, !1, !2, !3 }
4691
4692- Metadata ``!0`` has the ID ``!"foo"`` and the value '1'. The behavior
4693 if two or more ``!"foo"`` flags are seen is to emit an error if their
4694 values are not equal.
4695
4696- Metadata ``!1`` has the ID ``!"bar"`` and the value '37'. The
4697 behavior if two or more ``!"bar"`` flags are seen is to use the value
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004698 '37'.
Sean Silvab084af42012-12-07 10:36:55 +00004699
4700- Metadata ``!2`` has the ID ``!"qux"`` and the value '42'. The
4701 behavior if two or more ``!"qux"`` flags are seen is to emit a
4702 warning if their values are not equal.
4703
4704- Metadata ``!3`` has the ID ``!"qux"`` and the value:
4705
4706 ::
4707
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004708 !{ !"foo", i32 1 }
Sean Silvab084af42012-12-07 10:36:55 +00004709
Daniel Dunbar25c4b572013-01-15 01:22:53 +00004710 The behavior is to emit an error if the ``llvm.module.flags`` does not
4711 contain a flag with the ID ``!"foo"`` that has the value '1' after linking is
4712 performed.
Sean Silvab084af42012-12-07 10:36:55 +00004713
4714Objective-C Garbage Collection Module Flags Metadata
4715----------------------------------------------------
4716
4717On the Mach-O platform, Objective-C stores metadata about garbage
4718collection in a special section called "image info". The metadata
4719consists of a version number and a bitmask specifying what types of
4720garbage collection are supported (if any) by the file. If two or more
4721modules are linked together their garbage collection metadata needs to
4722be merged rather than appended together.
4723
4724The Objective-C garbage collection module flags metadata consists of the
4725following key-value pairs:
4726
4727.. list-table::
4728 :header-rows: 1
4729 :widths: 30 70
4730
4731 * - Key
4732 - Value
4733
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004734 * - ``Objective-C Version``
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004735 - **[Required]** --- The Objective-C ABI version. Valid values are 1 and 2.
Sean Silvab084af42012-12-07 10:36:55 +00004736
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004737 * - ``Objective-C Image Info Version``
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004738 - **[Required]** --- The version of the image info section. Currently
Sean Silvab084af42012-12-07 10:36:55 +00004739 always 0.
4740
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004741 * - ``Objective-C Image Info Section``
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004742 - **[Required]** --- The section to place the metadata. Valid values are
Sean Silvab084af42012-12-07 10:36:55 +00004743 ``"__OBJC, __image_info, regular"`` for Objective-C ABI version 1, and
4744 ``"__DATA,__objc_imageinfo, regular, no_dead_strip"`` for
4745 Objective-C ABI version 2.
4746
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004747 * - ``Objective-C Garbage Collection``
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004748 - **[Required]** --- Specifies whether garbage collection is supported or
Sean Silvab084af42012-12-07 10:36:55 +00004749 not. Valid values are 0, for no garbage collection, and 2, for garbage
4750 collection supported.
4751
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004752 * - ``Objective-C GC Only``
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00004753 - **[Optional]** --- Specifies that only garbage collection is supported.
Sean Silvab084af42012-12-07 10:36:55 +00004754 If present, its value must be 6. This flag requires that the
4755 ``Objective-C Garbage Collection`` flag have the value 2.
4756
4757Some important flag interactions:
4758
4759- If a module with ``Objective-C Garbage Collection`` set to 0 is
4760 merged with a module with ``Objective-C Garbage Collection`` set to
4761 2, then the resulting module has the
4762 ``Objective-C Garbage Collection`` flag set to 0.
4763- A module with ``Objective-C Garbage Collection`` set to 0 cannot be
4764 merged with a module with ``Objective-C GC Only`` set to 6.
4765
Daniel Dunbar252bedc2013-01-17 00:16:27 +00004766Automatic Linker Flags Module Flags Metadata
4767--------------------------------------------
4768
4769Some targets support embedding flags to the linker inside individual object
4770files. Typically this is used in conjunction with language extensions which
4771allow source files to explicitly declare the libraries they depend on, and have
4772these automatically be transmitted to the linker via object files.
4773
4774These flags are encoded in the IR using metadata in the module flags section,
Daniel Dunbar1dc66ca2013-01-17 18:57:32 +00004775using the ``Linker Options`` key. The merge behavior for this flag is required
Daniel Dunbar252bedc2013-01-17 00:16:27 +00004776to be ``AppendUnique``, and the value for the key is expected to be a metadata
4777node which should be a list of other metadata nodes, each of which should be a
4778list of metadata strings defining linker options.
4779
4780For example, the following metadata section specifies two separate sets of
4781linker options, presumably to link against ``libz`` and the ``Cocoa``
4782framework::
4783
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004784 !0 = !{ i32 6, !"Linker Options",
4785 !{
4786 !{ !"-lz" },
4787 !{ !"-framework", !"Cocoa" } } }
Daniel Dunbar252bedc2013-01-17 00:16:27 +00004788 !llvm.module.flags = !{ !0 }
4789
4790The metadata encoding as lists of lists of options, as opposed to a collapsed
4791list of options, is chosen so that the IR encoding can use multiple option
4792strings to specify e.g., a single library, while still having that specifier be
4793preserved as an atomic element that can be recognized by a target specific
4794assembly writer or object file emitter.
4795
4796Each individual option is required to be either a valid option for the target's
4797linker, or an option that is reserved by the target specific assembly writer or
4798object file emitter. No other aspect of these options is defined by the IR.
4799
Oliver Stannard5dc29342014-06-20 10:08:11 +00004800C type width Module Flags Metadata
4801----------------------------------
4802
4803The ARM backend emits a section into each generated object file describing the
4804options that it was compiled with (in a compiler-independent way) to prevent
4805linking incompatible objects, and to allow automatic library selection. Some
4806of these options are not visible at the IR level, namely wchar_t width and enum
4807width.
4808
4809To pass this information to the backend, these options are encoded in module
4810flags metadata, using the following key-value pairs:
4811
4812.. list-table::
4813 :header-rows: 1
4814 :widths: 30 70
4815
4816 * - Key
4817 - Value
4818
4819 * - short_wchar
4820 - * 0 --- sizeof(wchar_t) == 4
4821 * 1 --- sizeof(wchar_t) == 2
4822
4823 * - short_enum
4824 - * 0 --- Enums are at least as large as an ``int``.
4825 * 1 --- Enums are stored in the smallest integer type which can
4826 represent all of its values.
4827
4828For example, the following metadata section specifies that the module was
4829compiled with a ``wchar_t`` width of 4 bytes, and the underlying type of an
4830enum is the smallest type which can represent all of its values::
4831
4832 !llvm.module.flags = !{!0, !1}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00004833 !0 = !{i32 1, !"short_wchar", i32 1}
4834 !1 = !{i32 1, !"short_enum", i32 0}
Oliver Stannard5dc29342014-06-20 10:08:11 +00004835
Eli Bendersky0220e6b2013-06-07 20:24:43 +00004836.. _intrinsicglobalvariables:
4837
Sean Silvab084af42012-12-07 10:36:55 +00004838Intrinsic Global Variables
4839==========================
4840
4841LLVM has a number of "magic" global variables that contain data that
4842affect code generation or other IR semantics. These are documented here.
4843All globals of this sort should have a section specified as
4844"``llvm.metadata``". This section and all globals that start with
4845"``llvm.``" are reserved for use by LLVM.
4846
Eli Bendersky0220e6b2013-06-07 20:24:43 +00004847.. _gv_llvmused:
4848
Sean Silvab084af42012-12-07 10:36:55 +00004849The '``llvm.used``' Global Variable
4850-----------------------------------
4851
Rafael Espindola74f2e462013-04-22 14:58:02 +00004852The ``@llvm.used`` global is an array which has
Paul Redmond219ef812013-05-30 17:24:32 +00004853:ref:`appending linkage <linkage_appending>`. This array contains a list of
Rafael Espindola70a729d2013-06-11 13:18:13 +00004854pointers to named global variables, functions and aliases which may optionally
4855have a pointer cast formed of bitcast or getelementptr. For example, a legal
Sean Silvab084af42012-12-07 10:36:55 +00004856use of it is:
4857
4858.. code-block:: llvm
4859
4860 @X = global i8 4
4861 @Y = global i32 123
4862
4863 @llvm.used = appending global [2 x i8*] [
4864 i8* @X,
4865 i8* bitcast (i32* @Y to i8*)
4866 ], section "llvm.metadata"
4867
Rafael Espindola74f2e462013-04-22 14:58:02 +00004868If a symbol appears in the ``@llvm.used`` list, then the compiler, assembler,
4869and linker are required to treat the symbol as if there is a reference to the
Rafael Espindola70a729d2013-06-11 13:18:13 +00004870symbol that it cannot see (which is why they have to be named). For example, if
4871a variable has internal linkage and no references other than that from the
4872``@llvm.used`` list, it cannot be deleted. This is commonly used to represent
4873references from inline asms and other things the compiler cannot "see", and
4874corresponds to "``attribute((used))``" in GNU C.
Sean Silvab084af42012-12-07 10:36:55 +00004875
4876On some targets, the code generator must emit a directive to the
4877assembler or object file to prevent the assembler and linker from
4878molesting the symbol.
4879
Eli Bendersky0220e6b2013-06-07 20:24:43 +00004880.. _gv_llvmcompilerused:
4881
Sean Silvab084af42012-12-07 10:36:55 +00004882The '``llvm.compiler.used``' Global Variable
4883--------------------------------------------
4884
4885The ``@llvm.compiler.used`` directive is the same as the ``@llvm.used``
4886directive, except that it only prevents the compiler from touching the
4887symbol. On targets that support it, this allows an intelligent linker to
4888optimize references to the symbol without being impeded as it would be
4889by ``@llvm.used``.
4890
4891This is a rare construct that should only be used in rare circumstances,
4892and should not be exposed to source languages.
4893
Eli Bendersky0220e6b2013-06-07 20:24:43 +00004894.. _gv_llvmglobalctors:
4895
Sean Silvab084af42012-12-07 10:36:55 +00004896The '``llvm.global_ctors``' Global Variable
4897-------------------------------------------
4898
4899.. code-block:: llvm
4900
Reid Klecknerfceb76f2014-05-16 20:39:27 +00004901 %0 = type { i32, void ()*, i8* }
4902 @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor, i8* @data }]
Sean Silvab084af42012-12-07 10:36:55 +00004903
4904The ``@llvm.global_ctors`` array contains a list of constructor
Reid Klecknerfceb76f2014-05-16 20:39:27 +00004905functions, priorities, and an optional associated global or function.
4906The functions referenced by this array will be called in ascending order
4907of priority (i.e. lowest first) when the module is loaded. The order of
4908functions with the same priority is not defined.
4909
4910If the third field is present, non-null, and points to a global variable
4911or function, the initializer function will only run if the associated
4912data from the current module is not discarded.
Sean Silvab084af42012-12-07 10:36:55 +00004913
Eli Bendersky0220e6b2013-06-07 20:24:43 +00004914.. _llvmglobaldtors:
4915
Sean Silvab084af42012-12-07 10:36:55 +00004916The '``llvm.global_dtors``' Global Variable
4917-------------------------------------------
4918
4919.. code-block:: llvm
4920
Reid Klecknerfceb76f2014-05-16 20:39:27 +00004921 %0 = type { i32, void ()*, i8* }
4922 @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor, i8* @data }]
Sean Silvab084af42012-12-07 10:36:55 +00004923
Reid Klecknerfceb76f2014-05-16 20:39:27 +00004924The ``@llvm.global_dtors`` array contains a list of destructor
4925functions, priorities, and an optional associated global or function.
4926The functions referenced by this array will be called in descending
Reid Klecknerbffbcc52014-05-27 21:35:17 +00004927order of priority (i.e. highest first) when the module is unloaded. The
Reid Klecknerfceb76f2014-05-16 20:39:27 +00004928order of functions with the same priority is not defined.
4929
4930If the third field is present, non-null, and points to a global variable
4931or function, the destructor function will only run if the associated
4932data from the current module is not discarded.
Sean Silvab084af42012-12-07 10:36:55 +00004933
4934Instruction Reference
4935=====================
4936
4937The LLVM instruction set consists of several different classifications
4938of instructions: :ref:`terminator instructions <terminators>`, :ref:`binary
4939instructions <binaryops>`, :ref:`bitwise binary
4940instructions <bitwiseops>`, :ref:`memory instructions <memoryops>`, and
4941:ref:`other instructions <otherops>`.
4942
4943.. _terminators:
4944
4945Terminator Instructions
4946-----------------------
4947
4948As mentioned :ref:`previously <functionstructure>`, every basic block in a
4949program ends with a "Terminator" instruction, which indicates which
4950block should be executed after the current block is finished. These
4951terminator instructions typically yield a '``void``' value: they produce
4952control flow, not values (the one exception being the
4953':ref:`invoke <i_invoke>`' instruction).
4954
4955The terminator instructions are: ':ref:`ret <i_ret>`',
4956':ref:`br <i_br>`', ':ref:`switch <i_switch>`',
4957':ref:`indirectbr <i_indirectbr>`', ':ref:`invoke <i_invoke>`',
David Majnemer654e1302015-07-31 17:58:14 +00004958':ref:`resume <i_resume>`', ':ref:`catchpad <i_catchpad>`',
4959':ref:`catchendpad <i_catchendpad>`',
4960':ref:`catchret <i_catchret>`',
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00004961':ref:`cleanupendpad <i_cleanupendpad>`',
David Majnemer654e1302015-07-31 17:58:14 +00004962':ref:`cleanupret <i_cleanupret>`',
4963':ref:`terminatepad <i_terminatepad>`',
4964and ':ref:`unreachable <i_unreachable>`'.
Sean Silvab084af42012-12-07 10:36:55 +00004965
4966.. _i_ret:
4967
4968'``ret``' Instruction
4969^^^^^^^^^^^^^^^^^^^^^
4970
4971Syntax:
4972"""""""
4973
4974::
4975
4976 ret <type> <value> ; Return a value from a non-void function
4977 ret void ; Return from void function
4978
4979Overview:
4980"""""""""
4981
4982The '``ret``' instruction is used to return control flow (and optionally
4983a value) from a function back to the caller.
4984
4985There are two forms of the '``ret``' instruction: one that returns a
4986value and then causes control flow, and one that just causes control
4987flow to occur.
4988
4989Arguments:
4990""""""""""
4991
4992The '``ret``' instruction optionally accepts a single argument, the
4993return value. The type of the return value must be a ':ref:`first
4994class <t_firstclass>`' type.
4995
4996A function is not :ref:`well formed <wellformed>` if it it has a non-void
4997return type and contains a '``ret``' instruction with no return value or
4998a return value with a type that does not match its type, or if it has a
4999void return type and contains a '``ret``' instruction with a return
5000value.
5001
5002Semantics:
5003""""""""""
5004
5005When the '``ret``' instruction is executed, control flow returns back to
5006the calling function's context. If the caller is a
5007":ref:`call <i_call>`" instruction, execution continues at the
5008instruction after the call. If the caller was an
5009":ref:`invoke <i_invoke>`" instruction, execution continues at the
5010beginning of the "normal" destination block. If the instruction returns
5011a value, that value shall set the call or invoke instruction's return
5012value.
5013
5014Example:
5015""""""""
5016
5017.. code-block:: llvm
5018
5019 ret i32 5 ; Return an integer value of 5
5020 ret void ; Return from a void function
5021 ret { i32, i8 } { i32 4, i8 2 } ; Return a struct of values 4 and 2
5022
5023.. _i_br:
5024
5025'``br``' Instruction
5026^^^^^^^^^^^^^^^^^^^^
5027
5028Syntax:
5029"""""""
5030
5031::
5032
5033 br i1 <cond>, label <iftrue>, label <iffalse>
5034 br label <dest> ; Unconditional branch
5035
5036Overview:
5037"""""""""
5038
5039The '``br``' instruction is used to cause control flow to transfer to a
5040different basic block in the current function. There are two forms of
5041this instruction, corresponding to a conditional branch and an
5042unconditional branch.
5043
5044Arguments:
5045""""""""""
5046
5047The conditional branch form of the '``br``' instruction takes a single
5048'``i1``' value and two '``label``' values. The unconditional form of the
5049'``br``' instruction takes a single '``label``' value as a target.
5050
5051Semantics:
5052""""""""""
5053
5054Upon execution of a conditional '``br``' instruction, the '``i1``'
5055argument is evaluated. If the value is ``true``, control flows to the
5056'``iftrue``' ``label`` argument. If "cond" is ``false``, control flows
5057to the '``iffalse``' ``label`` argument.
5058
5059Example:
5060""""""""
5061
5062.. code-block:: llvm
5063
5064 Test:
5065 %cond = icmp eq i32 %a, %b
5066 br i1 %cond, label %IfEqual, label %IfUnequal
5067 IfEqual:
5068 ret i32 1
5069 IfUnequal:
5070 ret i32 0
5071
5072.. _i_switch:
5073
5074'``switch``' Instruction
5075^^^^^^^^^^^^^^^^^^^^^^^^
5076
5077Syntax:
5078"""""""
5079
5080::
5081
5082 switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
5083
5084Overview:
5085"""""""""
5086
5087The '``switch``' instruction is used to transfer control flow to one of
5088several different places. It is a generalization of the '``br``'
5089instruction, allowing a branch to occur to one of many possible
5090destinations.
5091
5092Arguments:
5093""""""""""
5094
5095The '``switch``' instruction uses three parameters: an integer
5096comparison value '``value``', a default '``label``' destination, and an
5097array of pairs of comparison value constants and '``label``'s. The table
5098is not allowed to contain duplicate constant entries.
5099
5100Semantics:
5101""""""""""
5102
5103The ``switch`` instruction specifies a table of values and destinations.
5104When the '``switch``' instruction is executed, this table is searched
5105for the given value. If the value is found, control flow is transferred
5106to the corresponding destination; otherwise, control flow is transferred
5107to the default destination.
5108
5109Implementation:
5110"""""""""""""""
5111
5112Depending on properties of the target machine and the particular
5113``switch`` instruction, this instruction may be code generated in
5114different ways. For example, it could be generated as a series of
5115chained conditional branches or with a lookup table.
5116
5117Example:
5118""""""""
5119
5120.. code-block:: llvm
5121
5122 ; Emulate a conditional br instruction
5123 %Val = zext i1 %value to i32
5124 switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
5125
5126 ; Emulate an unconditional br instruction
5127 switch i32 0, label %dest [ ]
5128
5129 ; Implement a jump table:
5130 switch i32 %val, label %otherwise [ i32 0, label %onzero
5131 i32 1, label %onone
5132 i32 2, label %ontwo ]
5133
5134.. _i_indirectbr:
5135
5136'``indirectbr``' Instruction
5137^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5138
5139Syntax:
5140"""""""
5141
5142::
5143
5144 indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ]
5145
5146Overview:
5147"""""""""
5148
5149The '``indirectbr``' instruction implements an indirect branch to a
5150label within the current function, whose address is specified by
5151"``address``". Address must be derived from a
5152:ref:`blockaddress <blockaddress>` constant.
5153
5154Arguments:
5155""""""""""
5156
5157The '``address``' argument is the address of the label to jump to. The
5158rest of the arguments indicate the full set of possible destinations
5159that the address may point to. Blocks are allowed to occur multiple
5160times in the destination list, though this isn't particularly useful.
5161
5162This destination list is required so that dataflow analysis has an
5163accurate understanding of the CFG.
5164
5165Semantics:
5166""""""""""
5167
5168Control transfers to the block specified in the address argument. All
5169possible destination blocks must be listed in the label list, otherwise
5170this instruction has undefined behavior. This implies that jumps to
5171labels defined in other functions have undefined behavior as well.
5172
5173Implementation:
5174"""""""""""""""
5175
5176This is typically implemented with a jump through a register.
5177
5178Example:
5179""""""""
5180
5181.. code-block:: llvm
5182
5183 indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ]
5184
5185.. _i_invoke:
5186
5187'``invoke``' Instruction
5188^^^^^^^^^^^^^^^^^^^^^^^^
5189
5190Syntax:
5191"""""""
5192
5193::
5194
5195 <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00005196 [operand bundles] to label <normal label> unwind label <exception label>
Sean Silvab084af42012-12-07 10:36:55 +00005197
5198Overview:
5199"""""""""
5200
5201The '``invoke``' instruction causes control to transfer to a specified
5202function, with the possibility of control flow transfer to either the
5203'``normal``' label or the '``exception``' label. If the callee function
5204returns with the "``ret``" instruction, control flow will return to the
5205"normal" label. If the callee (or any indirect callees) returns via the
5206":ref:`resume <i_resume>`" instruction or other exception handling
5207mechanism, control is interrupted and continued at the dynamically
5208nearest "exception" label.
5209
5210The '``exception``' label is a `landing
5211pad <ExceptionHandling.html#overview>`_ for the exception. As such,
5212'``exception``' label is required to have the
5213":ref:`landingpad <i_landingpad>`" instruction, which contains the
5214information about the behavior of the program after unwinding happens,
5215as its first non-PHI instruction. The restrictions on the
5216"``landingpad``" instruction's tightly couples it to the "``invoke``"
5217instruction, so that the important information contained within the
5218"``landingpad``" instruction can't be lost through normal code motion.
5219
5220Arguments:
5221""""""""""
5222
5223This instruction requires several arguments:
5224
5225#. The optional "cconv" marker indicates which :ref:`calling
5226 convention <callingconv>` the call should use. If none is
5227 specified, the call defaults to using C calling conventions.
5228#. The optional :ref:`Parameter Attributes <paramattrs>` list for return
5229 values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
5230 are valid here.
5231#. '``ptr to function ty``': shall be the signature of the pointer to
5232 function value being invoked. In most cases, this is a direct
5233 function invocation, but indirect ``invoke``'s are just as possible,
5234 branching off an arbitrary pointer to function value.
5235#. '``function ptr val``': An LLVM value containing a pointer to a
5236 function to be invoked.
5237#. '``function args``': argument list whose types match the function
5238 signature argument types and parameter attributes. All arguments must
5239 be of :ref:`first class <t_firstclass>` type. If the function signature
5240 indicates the function accepts a variable number of arguments, the
5241 extra arguments can be specified.
5242#. '``normal label``': the label reached when the called function
5243 executes a '``ret``' instruction.
5244#. '``exception label``': the label reached when a callee returns via
5245 the :ref:`resume <i_resume>` instruction or other exception handling
5246 mechanism.
5247#. The optional :ref:`function attributes <fnattrs>` list. Only
5248 '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``'
5249 attributes are valid here.
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00005250#. The optional :ref:`operand bundles <opbundles>` list.
Sean Silvab084af42012-12-07 10:36:55 +00005251
5252Semantics:
5253""""""""""
5254
5255This instruction is designed to operate as a standard '``call``'
5256instruction in most regards. The primary difference is that it
5257establishes an association with a label, which is used by the runtime
5258library to unwind the stack.
5259
5260This instruction is used in languages with destructors to ensure that
5261proper cleanup is performed in the case of either a ``longjmp`` or a
5262thrown exception. Additionally, this is important for implementation of
5263'``catch``' clauses in high-level languages that support them.
5264
5265For the purposes of the SSA form, the definition of the value returned
5266by the '``invoke``' instruction is deemed to occur on the edge from the
5267current block to the "normal" label. If the callee unwinds then no
5268return value is available.
5269
5270Example:
5271""""""""
5272
5273.. code-block:: llvm
5274
5275 %retval = invoke i32 @Test(i32 15) to label %Continue
Tim Northover675a0962014-06-13 14:24:23 +00005276 unwind label %TestCleanup ; i32:retval set
Sean Silvab084af42012-12-07 10:36:55 +00005277 %retval = invoke coldcc i32 %Testfnptr(i32 15) to label %Continue
Tim Northover675a0962014-06-13 14:24:23 +00005278 unwind label %TestCleanup ; i32:retval set
Sean Silvab084af42012-12-07 10:36:55 +00005279
5280.. _i_resume:
5281
5282'``resume``' Instruction
5283^^^^^^^^^^^^^^^^^^^^^^^^
5284
5285Syntax:
5286"""""""
5287
5288::
5289
5290 resume <type> <value>
5291
5292Overview:
5293"""""""""
5294
5295The '``resume``' instruction is a terminator instruction that has no
5296successors.
5297
5298Arguments:
5299""""""""""
5300
5301The '``resume``' instruction requires one argument, which must have the
5302same type as the result of any '``landingpad``' instruction in the same
5303function.
5304
5305Semantics:
5306""""""""""
5307
5308The '``resume``' instruction resumes propagation of an existing
5309(in-flight) exception whose unwinding was interrupted with a
5310:ref:`landingpad <i_landingpad>` instruction.
5311
5312Example:
5313""""""""
5314
5315.. code-block:: llvm
5316
5317 resume { i8*, i32 } %exn
5318
David Majnemer654e1302015-07-31 17:58:14 +00005319.. _i_catchpad:
5320
5321'``catchpad``' Instruction
5322^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5323
5324Syntax:
5325"""""""
5326
5327::
5328
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005329 <resultval> = catchpad [<args>*]
David Majnemer654e1302015-07-31 17:58:14 +00005330 to label <normal label> unwind label <exception label>
5331
5332Overview:
5333"""""""""
5334
5335The '``catchpad``' instruction is used by `LLVM's exception handling
5336system <ExceptionHandling.html#overview>`_ to specify that a basic block
5337is a catch block --- one where a personality routine attempts to transfer
5338control to catch an exception.
5339The ``args`` correspond to whatever information the personality
5340routine requires to know if this is an appropriate place to catch the
Bruce Mitchenere9ffb452015-09-12 01:17:08 +00005341exception. Control is transfered to the ``exception`` label if the
David Majnemer654e1302015-07-31 17:58:14 +00005342``catchpad`` is not an appropriate handler for the in-flight exception.
5343The ``normal`` label should contain the code found in the ``catch``
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005344portion of a ``try``/``catch`` sequence. The ``resultval`` has the type
5345:ref:`token <t_token>` and is used to match the ``catchpad`` to
5346corresponding :ref:`catchrets <i_catchret>`.
David Majnemer654e1302015-07-31 17:58:14 +00005347
5348Arguments:
5349""""""""""
5350
5351The instruction takes a list of arbitrary values which are interpreted
5352by the :ref:`personality function <personalityfn>`.
5353
5354The ``catchpad`` must be provided a ``normal`` label to transfer control
5355to if the ``catchpad`` matches the exception and an ``exception``
5356label to transfer control to if it doesn't.
5357
5358Semantics:
5359""""""""""
5360
David Majnemer654e1302015-07-31 17:58:14 +00005361When the call stack is being unwound due to an exception being thrown,
5362the exception is compared against the ``args``. If it doesn't match,
5363then control is transfered to the ``exception`` basic block.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005364As with calling conventions, how the personality function results are
5365represented in LLVM IR is target specific.
David Majnemer654e1302015-07-31 17:58:14 +00005366
5367The ``catchpad`` instruction has several restrictions:
5368
5369- A catch block is a basic block which is the unwind destination of
5370 an exceptional instruction.
5371- A catch block must have a '``catchpad``' instruction as its
5372 first non-PHI instruction.
5373- A catch block's ``exception`` edge must refer to a catch block or a
5374 catch-end block.
5375- There can be only one '``catchpad``' instruction within the
5376 catch block.
5377- A basic block that is not a catch block may not include a
5378 '``catchpad``' instruction.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005379- A catch block which has another catch block as a predecessor may not have
5380 any other predecessors.
David Majnemer654e1302015-07-31 17:58:14 +00005381- It is undefined behavior for control to transfer from a ``catchpad`` to a
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005382 ``ret`` without first executing a ``catchret`` that consumes the
5383 ``catchpad`` or unwinding through its ``catchendpad``.
5384- It is undefined behavior for control to transfer from a ``catchpad`` to
5385 itself without first executing a ``catchret`` that consumes the
5386 ``catchpad`` or unwinding through its ``catchendpad``.
David Majnemer654e1302015-07-31 17:58:14 +00005387
5388Example:
5389""""""""
5390
5391.. code-block:: llvm
5392
5393 ;; A catch block which can catch an integer.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005394 %tok = catchpad [i8** @_ZTIi]
David Majnemer654e1302015-07-31 17:58:14 +00005395 to label %int.handler unwind label %terminate
5396
5397.. _i_catchendpad:
5398
5399'``catchendpad``' Instruction
5400^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5401
5402Syntax:
5403"""""""
5404
5405::
5406
5407 catchendpad unwind label <nextaction>
5408 catchendpad unwind to caller
5409
5410Overview:
5411"""""""""
5412
5413The '``catchendpad``' instruction is used by `LLVM's exception handling
5414system <ExceptionHandling.html#overview>`_ to communicate to the
5415:ref:`personality function <personalityfn>` which invokes are associated
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005416with a chain of :ref:`catchpad <i_catchpad>` instructions; propagating an
5417exception out of a catch handler is represented by unwinding through its
5418``catchendpad``. Unwinding to the outer scope when a chain of catch handlers
5419do not handle an exception is also represented by unwinding through their
5420``catchendpad``.
David Majnemer654e1302015-07-31 17:58:14 +00005421
5422The ``nextaction`` label indicates where control should transfer to if
5423none of the ``catchpad`` instructions are suitable for catching the
5424in-flight exception.
5425
5426If a ``nextaction`` label is not present, the instruction unwinds out of
Sean Silvaa1190322015-08-06 22:56:48 +00005427its parent function. The
David Majnemer654e1302015-07-31 17:58:14 +00005428:ref:`personality function <personalityfn>` will continue processing
5429exception handling actions in the caller.
5430
5431Arguments:
5432""""""""""
5433
5434The instruction optionally takes a label, ``nextaction``, indicating
5435where control should transfer to if none of the preceding
5436``catchpad`` instructions are suitable for the in-flight exception.
5437
5438Semantics:
5439""""""""""
5440
5441When the call stack is being unwound due to an exception being thrown
5442and none of the constituent ``catchpad`` instructions match, then
Sean Silvaa1190322015-08-06 22:56:48 +00005443control is transfered to ``nextaction`` if it is present. If it is not
David Majnemer654e1302015-07-31 17:58:14 +00005444present, control is transfered to the caller.
5445
5446The ``catchendpad`` instruction has several restrictions:
5447
5448- A catch-end block is a basic block which is the unwind destination of
5449 an exceptional instruction.
5450- A catch-end block must have a '``catchendpad``' instruction as its
5451 first non-PHI instruction.
5452- There can be only one '``catchendpad``' instruction within the
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005453 catch-end block.
David Majnemer654e1302015-07-31 17:58:14 +00005454- A basic block that is not a catch-end block may not include a
5455 '``catchendpad``' instruction.
5456- Exactly one catch block may unwind to a ``catchendpad``.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005457- It is undefined behavior to execute a ``catchendpad`` if none of the
5458 '``catchpad``'s chained to it have been executed.
5459- It is undefined behavior to execute a ``catchendpad`` twice without an
5460 intervening execution of one or more of the '``catchpad``'s chained to it.
5461- It is undefined behavior to execute a ``catchendpad`` if, after the most
5462 recent execution of the normal successor edge of any ``catchpad`` chained
5463 to it, some ``catchret`` consuming that ``catchpad`` has already been
5464 executed.
5465- It is undefined behavior to execute a ``catchendpad`` if, after the most
5466 recent execution of the normal successor edge of any ``catchpad`` chained
5467 to it, any other ``catchpad`` or ``cleanuppad`` has been executed but has
5468 not had a corresponding
5469 ``catchret``/``cleanupret``/``catchendpad``/``cleanupendpad`` executed.
David Majnemer654e1302015-07-31 17:58:14 +00005470
5471Example:
5472""""""""
5473
5474.. code-block:: llvm
5475
5476 catchendpad unwind label %terminate
5477 catchendpad unwind to caller
5478
5479.. _i_catchret:
5480
5481'``catchret``' Instruction
5482^^^^^^^^^^^^^^^^^^^^^^^^^^
5483
5484Syntax:
5485"""""""
5486
5487::
5488
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005489 catchret <value> to label <normal>
David Majnemer654e1302015-07-31 17:58:14 +00005490
5491Overview:
5492"""""""""
5493
5494The '``catchret``' instruction is a terminator instruction that has a
5495single successor.
5496
5497
5498Arguments:
5499""""""""""
5500
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005501The first argument to a '``catchret``' indicates which ``catchpad`` it
5502exits. It must be a :ref:`catchpad <i_catchpad>`.
5503The second argument to a '``catchret``' specifies where control will
5504transfer to next.
David Majnemer654e1302015-07-31 17:58:14 +00005505
5506Semantics:
5507""""""""""
5508
5509The '``catchret``' instruction ends the existing (in-flight) exception
5510whose unwinding was interrupted with a
5511:ref:`catchpad <i_catchpad>` instruction.
5512The :ref:`personality function <personalityfn>` gets a chance to execute
5513arbitrary code to, for example, run a C++ destructor.
5514Control then transfers to ``normal``.
David Majnemer0bc0eef2015-08-15 02:46:08 +00005515It may be passed an optional, personality specific, value.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005516
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005517It is undefined behavior to execute a ``catchret`` whose ``catchpad`` has
5518not been executed.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005519
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005520It is undefined behavior to execute a ``catchret`` if, after the most recent
5521execution of its ``catchpad``, some ``catchret`` or ``catchendpad`` linked
5522to the same ``catchpad`` has already been executed.
5523
5524It is undefined behavior to execute a ``catchret`` if, after the most recent
5525execution of its ``catchpad``, any other ``catchpad`` or ``cleanuppad`` has
5526been executed but has not had a corresponding
5527``catchret``/``cleanupret``/``catchendpad``/``cleanupendpad`` executed.
David Majnemer654e1302015-07-31 17:58:14 +00005528
5529Example:
5530""""""""
5531
5532.. code-block:: llvm
5533
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005534 catchret %catch label %continue
David Majnemer654e1302015-07-31 17:58:14 +00005535
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005536.. _i_cleanupendpad:
5537
5538'``cleanupendpad``' Instruction
5539^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5540
5541Syntax:
5542"""""""
5543
5544::
5545
5546 cleanupendpad <value> unwind label <nextaction>
5547 cleanupendpad <value> unwind to caller
5548
5549Overview:
5550"""""""""
5551
5552The '``cleanupendpad``' instruction is used by `LLVM's exception handling
5553system <ExceptionHandling.html#overview>`_ to communicate to the
5554:ref:`personality function <personalityfn>` which invokes are associated
5555with a :ref:`cleanuppad <i_cleanuppad>` instructions; propagating an exception
5556out of a cleanup is represented by unwinding through its ``cleanupendpad``.
5557
5558The ``nextaction`` label indicates where control should unwind to next, in the
5559event that a cleanup is exited by means of an(other) exception being raised.
5560
5561If a ``nextaction`` label is not present, the instruction unwinds out of
5562its parent function. The
5563:ref:`personality function <personalityfn>` will continue processing
5564exception handling actions in the caller.
5565
5566Arguments:
5567""""""""""
5568
5569The '``cleanupendpad``' instruction requires one argument, which indicates
5570which ``cleanuppad`` it exits, and must be a :ref:`cleanuppad <i_cleanuppad>`.
5571It also has an optional successor, ``nextaction``, indicating where control
5572should transfer to.
5573
5574Semantics:
5575""""""""""
5576
5577When and exception propagates to a ``cleanupendpad``, control is transfered to
5578``nextaction`` if it is present. If it is not present, control is transfered to
5579the caller.
5580
5581The ``cleanupendpad`` instruction has several restrictions:
5582
5583- A cleanup-end block is a basic block which is the unwind destination of
5584 an exceptional instruction.
5585- A cleanup-end block must have a '``cleanupendpad``' instruction as its
5586 first non-PHI instruction.
5587- There can be only one '``cleanupendpad``' instruction within the
5588 cleanup-end block.
5589- A basic block that is not a cleanup-end block may not include a
5590 '``cleanupendpad``' instruction.
5591- It is undefined behavior to execute a ``cleanupendpad`` whose ``cleanuppad``
5592 has not been executed.
5593- It is undefined behavior to execute a ``cleanupendpad`` if, after the most
5594 recent execution of its ``cleanuppad``, some ``cleanupret`` or ``cleanupendpad``
5595 consuming the same ``cleanuppad`` has already been executed.
5596- It is undefined behavior to execute a ``cleanupendpad`` if, after the most
5597 recent execution of its ``cleanuppad``, any other ``cleanuppad`` or
5598 ``catchpad`` has been executed but has not had a corresponding
5599 ``cleanupret``/``catchret``/``cleanupendpad``/``catchendpad`` executed.
5600
5601Example:
5602""""""""
5603
5604.. code-block:: llvm
5605
5606 cleanupendpad %cleanup unwind label %terminate
5607 cleanupendpad %cleanup unwind to caller
5608
David Majnemer654e1302015-07-31 17:58:14 +00005609.. _i_cleanupret:
5610
5611'``cleanupret``' Instruction
5612^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5613
5614Syntax:
5615"""""""
5616
5617::
5618
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005619 cleanupret <value> unwind label <continue>
5620 cleanupret <value> unwind to caller
David Majnemer654e1302015-07-31 17:58:14 +00005621
5622Overview:
5623"""""""""
5624
5625The '``cleanupret``' instruction is a terminator instruction that has
5626an optional successor.
5627
5628
5629Arguments:
5630""""""""""
5631
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005632The '``cleanupret``' instruction requires one argument, which indicates
5633which ``cleanuppad`` it exits, and must be a :ref:`cleanuppad <i_cleanuppad>`.
5634It also has an optional successor, ``continue``.
David Majnemer654e1302015-07-31 17:58:14 +00005635
5636Semantics:
5637""""""""""
5638
5639The '``cleanupret``' instruction indicates to the
5640:ref:`personality function <personalityfn>` that one
5641:ref:`cleanuppad <i_cleanuppad>` it transferred control to has ended.
5642It transfers control to ``continue`` or unwinds out of the function.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005643
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005644It is undefined behavior to execute a ``cleanupret`` whose ``cleanuppad`` has
5645not been executed.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00005646
5647It is undefined behavior to execute a ``cleanupret`` if, after the most recent
5648execution of its ``cleanuppad``, some ``cleanupret`` or ``cleanupendpad``
5649consuming the same ``cleanuppad`` has already been executed.
5650
5651It is undefined behavior to execute a ``cleanupret`` if, after the most recent
5652execution of its ``cleanuppad``, any other ``cleanuppad`` or ``catchpad`` has
5653been executed but has not had a corresponding
5654``cleanupret``/``catchret``/``cleanupendpad``/``catchendpad`` executed.
David Majnemer654e1302015-07-31 17:58:14 +00005655
5656Example:
5657""""""""
5658
5659.. code-block:: llvm
5660
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00005661 cleanupret %cleanup unwind to caller
5662 cleanupret %cleanup unwind label %continue
David Majnemer654e1302015-07-31 17:58:14 +00005663
5664.. _i_terminatepad:
5665
5666'``terminatepad``' Instruction
5667^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5668
5669Syntax:
5670"""""""
5671
5672::
5673
5674 terminatepad [<args>*] unwind label <exception label>
5675 terminatepad [<args>*] unwind to caller
5676
5677Overview:
5678"""""""""
5679
5680The '``terminatepad``' instruction is used by `LLVM's exception handling
5681system <ExceptionHandling.html#overview>`_ to specify that a basic block
5682is a terminate block --- one where a personality routine may decide to
5683terminate the program.
5684The ``args`` correspond to whatever information the personality
5685routine requires to know if this is an appropriate place to terminate the
Sean Silvaa1190322015-08-06 22:56:48 +00005686program. Control is transferred to the ``exception`` label if the
David Majnemer654e1302015-07-31 17:58:14 +00005687personality routine decides not to terminate the program for the
5688in-flight exception.
5689
5690Arguments:
5691""""""""""
5692
5693The instruction takes a list of arbitrary values which are interpreted
5694by the :ref:`personality function <personalityfn>`.
5695
5696The ``terminatepad`` may be given an ``exception`` label to
5697transfer control to if the in-flight exception matches the ``args``.
5698
5699Semantics:
5700""""""""""
5701
5702When the call stack is being unwound due to an exception being thrown,
5703the exception is compared against the ``args``. If it matches,
Sean Silvaa1190322015-08-06 22:56:48 +00005704then control is transfered to the ``exception`` basic block. Otherwise,
5705the program is terminated via personality-specific means. Typically,
David Majnemer654e1302015-07-31 17:58:14 +00005706the first argument to ``terminatepad`` specifies what function the
5707personality should defer to in order to terminate the program.
5708
5709The ``terminatepad`` instruction has several restrictions:
5710
5711- A terminate block is a basic block which is the unwind destination of
5712 an exceptional instruction.
5713- A terminate block must have a '``terminatepad``' instruction as its
5714 first non-PHI instruction.
5715- There can be only one '``terminatepad``' instruction within the
5716 terminate block.
5717- A basic block that is not a terminate block may not include a
5718 '``terminatepad``' instruction.
5719
5720Example:
5721""""""""
5722
5723.. code-block:: llvm
5724
5725 ;; A terminate block which only permits integers.
5726 terminatepad [i8** @_ZTIi] unwind label %continue
5727
Sean Silvab084af42012-12-07 10:36:55 +00005728.. _i_unreachable:
5729
5730'``unreachable``' Instruction
5731^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5732
5733Syntax:
5734"""""""
5735
5736::
5737
5738 unreachable
5739
5740Overview:
5741"""""""""
5742
5743The '``unreachable``' instruction has no defined semantics. This
5744instruction is used to inform the optimizer that a particular portion of
5745the code is not reachable. This can be used to indicate that the code
5746after a no-return function cannot be reached, and other facts.
5747
5748Semantics:
5749""""""""""
5750
5751The '``unreachable``' instruction has no defined semantics.
5752
5753.. _binaryops:
5754
5755Binary Operations
5756-----------------
5757
5758Binary operators are used to do most of the computation in a program.
5759They require two operands of the same type, execute an operation on
5760them, and produce a single value. The operands might represent multiple
5761data, as is the case with the :ref:`vector <t_vector>` data type. The
5762result value has the same type as its operands.
5763
5764There are several different binary operators:
5765
5766.. _i_add:
5767
5768'``add``' Instruction
5769^^^^^^^^^^^^^^^^^^^^^
5770
5771Syntax:
5772"""""""
5773
5774::
5775
Tim Northover675a0962014-06-13 14:24:23 +00005776 <result> = add <ty> <op1>, <op2> ; yields ty:result
5777 <result> = add nuw <ty> <op1>, <op2> ; yields ty:result
5778 <result> = add nsw <ty> <op1>, <op2> ; yields ty:result
5779 <result> = add nuw nsw <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00005780
5781Overview:
5782"""""""""
5783
5784The '``add``' instruction returns the sum of its two operands.
5785
5786Arguments:
5787""""""""""
5788
5789The two arguments to the '``add``' instruction must be
5790:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
5791arguments must have identical types.
5792
5793Semantics:
5794""""""""""
5795
5796The value produced is the integer sum of the two operands.
5797
5798If the sum has unsigned overflow, the result returned is the
5799mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
5800the result.
5801
5802Because LLVM integers use a two's complement representation, this
5803instruction is appropriate for both signed and unsigned integers.
5804
5805``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
5806respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
5807result value of the ``add`` is a :ref:`poison value <poisonvalues>` if
5808unsigned and/or signed overflow, respectively, occurs.
5809
5810Example:
5811""""""""
5812
5813.. code-block:: llvm
5814
Tim Northover675a0962014-06-13 14:24:23 +00005815 <result> = add i32 4, %var ; yields i32:result = 4 + %var
Sean Silvab084af42012-12-07 10:36:55 +00005816
5817.. _i_fadd:
5818
5819'``fadd``' Instruction
5820^^^^^^^^^^^^^^^^^^^^^^
5821
5822Syntax:
5823"""""""
5824
5825::
5826
Tim Northover675a0962014-06-13 14:24:23 +00005827 <result> = fadd [fast-math flags]* <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00005828
5829Overview:
5830"""""""""
5831
5832The '``fadd``' instruction returns the sum of its two operands.
5833
5834Arguments:
5835""""""""""
5836
5837The two arguments to the '``fadd``' instruction must be :ref:`floating
5838point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
5839Both arguments must have identical types.
5840
5841Semantics:
5842""""""""""
5843
5844The value produced is the floating point sum of the two operands. This
5845instruction can also take any number of :ref:`fast-math flags <fastmath>`,
5846which are optimization hints to enable otherwise unsafe floating point
5847optimizations:
5848
5849Example:
5850""""""""
5851
5852.. code-block:: llvm
5853
Tim Northover675a0962014-06-13 14:24:23 +00005854 <result> = fadd float 4.0, %var ; yields float:result = 4.0 + %var
Sean Silvab084af42012-12-07 10:36:55 +00005855
5856'``sub``' Instruction
5857^^^^^^^^^^^^^^^^^^^^^
5858
5859Syntax:
5860"""""""
5861
5862::
5863
Tim Northover675a0962014-06-13 14:24:23 +00005864 <result> = sub <ty> <op1>, <op2> ; yields ty:result
5865 <result> = sub nuw <ty> <op1>, <op2> ; yields ty:result
5866 <result> = sub nsw <ty> <op1>, <op2> ; yields ty:result
5867 <result> = sub nuw nsw <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00005868
5869Overview:
5870"""""""""
5871
5872The '``sub``' instruction returns the difference of its two operands.
5873
5874Note that the '``sub``' instruction is used to represent the '``neg``'
5875instruction present in most other intermediate representations.
5876
5877Arguments:
5878""""""""""
5879
5880The two arguments to the '``sub``' instruction must be
5881:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
5882arguments must have identical types.
5883
5884Semantics:
5885""""""""""
5886
5887The value produced is the integer difference of the two operands.
5888
5889If the difference has unsigned overflow, the result returned is the
5890mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of
5891the result.
5892
5893Because LLVM integers use a two's complement representation, this
5894instruction is appropriate for both signed and unsigned integers.
5895
5896``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
5897respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
5898result value of the ``sub`` is a :ref:`poison value <poisonvalues>` if
5899unsigned and/or signed overflow, respectively, occurs.
5900
5901Example:
5902""""""""
5903
5904.. code-block:: llvm
5905
Tim Northover675a0962014-06-13 14:24:23 +00005906 <result> = sub i32 4, %var ; yields i32:result = 4 - %var
5907 <result> = sub i32 0, %val ; yields i32:result = -%var
Sean Silvab084af42012-12-07 10:36:55 +00005908
5909.. _i_fsub:
5910
5911'``fsub``' Instruction
5912^^^^^^^^^^^^^^^^^^^^^^
5913
5914Syntax:
5915"""""""
5916
5917::
5918
Tim Northover675a0962014-06-13 14:24:23 +00005919 <result> = fsub [fast-math flags]* <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00005920
5921Overview:
5922"""""""""
5923
5924The '``fsub``' instruction returns the difference of its two operands.
5925
5926Note that the '``fsub``' instruction is used to represent the '``fneg``'
5927instruction present in most other intermediate representations.
5928
5929Arguments:
5930""""""""""
5931
5932The two arguments to the '``fsub``' instruction must be :ref:`floating
5933point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
5934Both arguments must have identical types.
5935
5936Semantics:
5937""""""""""
5938
5939The value produced is the floating point difference of the two operands.
5940This instruction can also take any number of :ref:`fast-math
5941flags <fastmath>`, which are optimization hints to enable otherwise
5942unsafe floating point optimizations:
5943
5944Example:
5945""""""""
5946
5947.. code-block:: llvm
5948
Tim Northover675a0962014-06-13 14:24:23 +00005949 <result> = fsub float 4.0, %var ; yields float:result = 4.0 - %var
5950 <result> = fsub float -0.0, %val ; yields float:result = -%var
Sean Silvab084af42012-12-07 10:36:55 +00005951
5952'``mul``' Instruction
5953^^^^^^^^^^^^^^^^^^^^^
5954
5955Syntax:
5956"""""""
5957
5958::
5959
Tim Northover675a0962014-06-13 14:24:23 +00005960 <result> = mul <ty> <op1>, <op2> ; yields ty:result
5961 <result> = mul nuw <ty> <op1>, <op2> ; yields ty:result
5962 <result> = mul nsw <ty> <op1>, <op2> ; yields ty:result
5963 <result> = mul nuw nsw <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00005964
5965Overview:
5966"""""""""
5967
5968The '``mul``' instruction returns the product of its two operands.
5969
5970Arguments:
5971""""""""""
5972
5973The two arguments to the '``mul``' instruction must be
5974:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
5975arguments must have identical types.
5976
5977Semantics:
5978""""""""""
5979
5980The value produced is the integer product of the two operands.
5981
5982If the result of the multiplication has unsigned overflow, the result
5983returned is the mathematical result modulo 2\ :sup:`n`\ , where n is the
5984bit width of the result.
5985
5986Because LLVM integers use a two's complement representation, and the
5987result is the same width as the operands, this instruction returns the
5988correct result for both signed and unsigned integers. If a full product
5989(e.g. ``i32`` * ``i32`` -> ``i64``) is needed, the operands should be
5990sign-extended or zero-extended as appropriate to the width of the full
5991product.
5992
5993``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap",
5994respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the
5995result value of the ``mul`` is a :ref:`poison value <poisonvalues>` if
5996unsigned and/or signed overflow, respectively, occurs.
5997
5998Example:
5999""""""""
6000
6001.. code-block:: llvm
6002
Tim Northover675a0962014-06-13 14:24:23 +00006003 <result> = mul i32 4, %var ; yields i32:result = 4 * %var
Sean Silvab084af42012-12-07 10:36:55 +00006004
6005.. _i_fmul:
6006
6007'``fmul``' Instruction
6008^^^^^^^^^^^^^^^^^^^^^^
6009
6010Syntax:
6011"""""""
6012
6013::
6014
Tim Northover675a0962014-06-13 14:24:23 +00006015 <result> = fmul [fast-math flags]* <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006016
6017Overview:
6018"""""""""
6019
6020The '``fmul``' instruction returns the product of its two operands.
6021
6022Arguments:
6023""""""""""
6024
6025The two arguments to the '``fmul``' instruction must be :ref:`floating
6026point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
6027Both arguments must have identical types.
6028
6029Semantics:
6030""""""""""
6031
6032The value produced is the floating point product of the two operands.
6033This instruction can also take any number of :ref:`fast-math
6034flags <fastmath>`, which are optimization hints to enable otherwise
6035unsafe floating point optimizations:
6036
6037Example:
6038""""""""
6039
6040.. code-block:: llvm
6041
Tim Northover675a0962014-06-13 14:24:23 +00006042 <result> = fmul float 4.0, %var ; yields float:result = 4.0 * %var
Sean Silvab084af42012-12-07 10:36:55 +00006043
6044'``udiv``' Instruction
6045^^^^^^^^^^^^^^^^^^^^^^
6046
6047Syntax:
6048"""""""
6049
6050::
6051
Tim Northover675a0962014-06-13 14:24:23 +00006052 <result> = udiv <ty> <op1>, <op2> ; yields ty:result
6053 <result> = udiv exact <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006054
6055Overview:
6056"""""""""
6057
6058The '``udiv``' instruction returns the quotient of its two operands.
6059
6060Arguments:
6061""""""""""
6062
6063The two arguments to the '``udiv``' instruction must be
6064:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6065arguments must have identical types.
6066
6067Semantics:
6068""""""""""
6069
6070The value produced is the unsigned integer quotient of the two operands.
6071
6072Note that unsigned integer division and signed integer division are
6073distinct operations; for signed integer division, use '``sdiv``'.
6074
6075Division by zero leads to undefined behavior.
6076
6077If the ``exact`` keyword is present, the result value of the ``udiv`` is
6078a :ref:`poison value <poisonvalues>` if %op1 is not a multiple of %op2 (as
6079such, "((a udiv exact b) mul b) == a").
6080
6081Example:
6082""""""""
6083
6084.. code-block:: llvm
6085
Tim Northover675a0962014-06-13 14:24:23 +00006086 <result> = udiv i32 4, %var ; yields i32:result = 4 / %var
Sean Silvab084af42012-12-07 10:36:55 +00006087
6088'``sdiv``' Instruction
6089^^^^^^^^^^^^^^^^^^^^^^
6090
6091Syntax:
6092"""""""
6093
6094::
6095
Tim Northover675a0962014-06-13 14:24:23 +00006096 <result> = sdiv <ty> <op1>, <op2> ; yields ty:result
6097 <result> = sdiv exact <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006098
6099Overview:
6100"""""""""
6101
6102The '``sdiv``' instruction returns the quotient of its two operands.
6103
6104Arguments:
6105""""""""""
6106
6107The two arguments to the '``sdiv``' instruction must be
6108:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6109arguments must have identical types.
6110
6111Semantics:
6112""""""""""
6113
6114The value produced is the signed integer quotient of the two operands
6115rounded towards zero.
6116
6117Note that signed integer division and unsigned integer division are
6118distinct operations; for unsigned integer division, use '``udiv``'.
6119
6120Division by zero leads to undefined behavior. Overflow also leads to
6121undefined behavior; this is a rare case, but can occur, for example, by
6122doing a 32-bit division of -2147483648 by -1.
6123
6124If the ``exact`` keyword is present, the result value of the ``sdiv`` is
6125a :ref:`poison value <poisonvalues>` if the result would be rounded.
6126
6127Example:
6128""""""""
6129
6130.. code-block:: llvm
6131
Tim Northover675a0962014-06-13 14:24:23 +00006132 <result> = sdiv i32 4, %var ; yields i32:result = 4 / %var
Sean Silvab084af42012-12-07 10:36:55 +00006133
6134.. _i_fdiv:
6135
6136'``fdiv``' Instruction
6137^^^^^^^^^^^^^^^^^^^^^^
6138
6139Syntax:
6140"""""""
6141
6142::
6143
Tim Northover675a0962014-06-13 14:24:23 +00006144 <result> = fdiv [fast-math flags]* <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006145
6146Overview:
6147"""""""""
6148
6149The '``fdiv``' instruction returns the quotient of its two operands.
6150
6151Arguments:
6152""""""""""
6153
6154The two arguments to the '``fdiv``' instruction must be :ref:`floating
6155point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
6156Both arguments must have identical types.
6157
6158Semantics:
6159""""""""""
6160
6161The value produced is the floating point quotient of the two operands.
6162This instruction can also take any number of :ref:`fast-math
6163flags <fastmath>`, which are optimization hints to enable otherwise
6164unsafe floating point optimizations:
6165
6166Example:
6167""""""""
6168
6169.. code-block:: llvm
6170
Tim Northover675a0962014-06-13 14:24:23 +00006171 <result> = fdiv float 4.0, %var ; yields float:result = 4.0 / %var
Sean Silvab084af42012-12-07 10:36:55 +00006172
6173'``urem``' Instruction
6174^^^^^^^^^^^^^^^^^^^^^^
6175
6176Syntax:
6177"""""""
6178
6179::
6180
Tim Northover675a0962014-06-13 14:24:23 +00006181 <result> = urem <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006182
6183Overview:
6184"""""""""
6185
6186The '``urem``' instruction returns the remainder from the unsigned
6187division of its two arguments.
6188
6189Arguments:
6190""""""""""
6191
6192The two arguments to the '``urem``' instruction must be
6193:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6194arguments must have identical types.
6195
6196Semantics:
6197""""""""""
6198
6199This instruction returns the unsigned integer *remainder* of a division.
6200This instruction always performs an unsigned division to get the
6201remainder.
6202
6203Note that unsigned integer remainder and signed integer remainder are
6204distinct operations; for signed integer remainder, use '``srem``'.
6205
6206Taking the remainder of a division by zero leads to undefined behavior.
6207
6208Example:
6209""""""""
6210
6211.. code-block:: llvm
6212
Tim Northover675a0962014-06-13 14:24:23 +00006213 <result> = urem i32 4, %var ; yields i32:result = 4 % %var
Sean Silvab084af42012-12-07 10:36:55 +00006214
6215'``srem``' Instruction
6216^^^^^^^^^^^^^^^^^^^^^^
6217
6218Syntax:
6219"""""""
6220
6221::
6222
Tim Northover675a0962014-06-13 14:24:23 +00006223 <result> = srem <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006224
6225Overview:
6226"""""""""
6227
6228The '``srem``' instruction returns the remainder from the signed
6229division of its two operands. This instruction can also take
6230:ref:`vector <t_vector>` versions of the values in which case the elements
6231must be integers.
6232
6233Arguments:
6234""""""""""
6235
6236The two arguments to the '``srem``' instruction must be
6237:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6238arguments must have identical types.
6239
6240Semantics:
6241""""""""""
6242
6243This instruction returns the *remainder* of a division (where the result
6244is either zero or has the same sign as the dividend, ``op1``), not the
6245*modulo* operator (where the result is either zero or has the same sign
6246as the divisor, ``op2``) of a value. For more information about the
6247difference, see `The Math
6248Forum <http://mathforum.org/dr.math/problems/anne.4.28.99.html>`_. For a
6249table of how this is implemented in various languages, please see
6250`Wikipedia: modulo
6251operation <http://en.wikipedia.org/wiki/Modulo_operation>`_.
6252
6253Note that signed integer remainder and unsigned integer remainder are
6254distinct operations; for unsigned integer remainder, use '``urem``'.
6255
6256Taking the remainder of a division by zero leads to undefined behavior.
6257Overflow also leads to undefined behavior; this is a rare case, but can
6258occur, for example, by taking the remainder of a 32-bit division of
6259-2147483648 by -1. (The remainder doesn't actually overflow, but this
6260rule lets srem be implemented using instructions that return both the
6261result of the division and the remainder.)
6262
6263Example:
6264""""""""
6265
6266.. code-block:: llvm
6267
Tim Northover675a0962014-06-13 14:24:23 +00006268 <result> = srem i32 4, %var ; yields i32:result = 4 % %var
Sean Silvab084af42012-12-07 10:36:55 +00006269
6270.. _i_frem:
6271
6272'``frem``' Instruction
6273^^^^^^^^^^^^^^^^^^^^^^
6274
6275Syntax:
6276"""""""
6277
6278::
6279
Tim Northover675a0962014-06-13 14:24:23 +00006280 <result> = frem [fast-math flags]* <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006281
6282Overview:
6283"""""""""
6284
6285The '``frem``' instruction returns the remainder from the division of
6286its two operands.
6287
6288Arguments:
6289""""""""""
6290
6291The two arguments to the '``frem``' instruction must be :ref:`floating
6292point <t_floating>` or :ref:`vector <t_vector>` of floating point values.
6293Both arguments must have identical types.
6294
6295Semantics:
6296""""""""""
6297
6298This instruction returns the *remainder* of a division. The remainder
6299has the same sign as the dividend. This instruction can also take any
6300number of :ref:`fast-math flags <fastmath>`, which are optimization hints
6301to enable otherwise unsafe floating point optimizations:
6302
6303Example:
6304""""""""
6305
6306.. code-block:: llvm
6307
Tim Northover675a0962014-06-13 14:24:23 +00006308 <result> = frem float 4.0, %var ; yields float:result = 4.0 % %var
Sean Silvab084af42012-12-07 10:36:55 +00006309
6310.. _bitwiseops:
6311
6312Bitwise Binary Operations
6313-------------------------
6314
6315Bitwise binary operators are used to do various forms of bit-twiddling
6316in a program. They are generally very efficient instructions and can
6317commonly be strength reduced from other instructions. They require two
6318operands of the same type, execute an operation on them, and produce a
6319single value. The resulting value is the same type as its operands.
6320
6321'``shl``' Instruction
6322^^^^^^^^^^^^^^^^^^^^^
6323
6324Syntax:
6325"""""""
6326
6327::
6328
Tim Northover675a0962014-06-13 14:24:23 +00006329 <result> = shl <ty> <op1>, <op2> ; yields ty:result
6330 <result> = shl nuw <ty> <op1>, <op2> ; yields ty:result
6331 <result> = shl nsw <ty> <op1>, <op2> ; yields ty:result
6332 <result> = shl nuw nsw <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006333
6334Overview:
6335"""""""""
6336
6337The '``shl``' instruction returns the first operand shifted to the left
6338a specified number of bits.
6339
6340Arguments:
6341""""""""""
6342
6343Both arguments to the '``shl``' instruction must be the same
6344:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
6345'``op2``' is treated as an unsigned value.
6346
6347Semantics:
6348""""""""""
6349
6350The value produced is ``op1`` \* 2\ :sup:`op2` mod 2\ :sup:`n`,
6351where ``n`` is the width of the result. If ``op2`` is (statically or
Sean Silvab8a108c2015-04-17 21:58:55 +00006352dynamically) equal to or larger than the number of bits in
Sean Silvab084af42012-12-07 10:36:55 +00006353``op1``, the result is undefined. If the arguments are vectors, each
6354vector element of ``op1`` is shifted by the corresponding shift amount
6355in ``op2``.
6356
6357If the ``nuw`` keyword is present, then the shift produces a :ref:`poison
6358value <poisonvalues>` if it shifts out any non-zero bits. If the
6359``nsw`` keyword is present, then the shift produces a :ref:`poison
6360value <poisonvalues>` if it shifts out any bits that disagree with the
6361resultant sign bit. As such, NUW/NSW have the same semantics as they
6362would if the shift were expressed as a mul instruction with the same
6363nsw/nuw bits in (mul %op1, (shl 1, %op2)).
6364
6365Example:
6366""""""""
6367
6368.. code-block:: llvm
6369
Tim Northover675a0962014-06-13 14:24:23 +00006370 <result> = shl i32 4, %var ; yields i32: 4 << %var
6371 <result> = shl i32 4, 2 ; yields i32: 16
6372 <result> = shl i32 1, 10 ; yields i32: 1024
Sean Silvab084af42012-12-07 10:36:55 +00006373 <result> = shl i32 1, 32 ; undefined
6374 <result> = shl <2 x i32> < i32 1, i32 1>, < i32 1, i32 2> ; yields: result=<2 x i32> < i32 2, i32 4>
6375
6376'``lshr``' Instruction
6377^^^^^^^^^^^^^^^^^^^^^^
6378
6379Syntax:
6380"""""""
6381
6382::
6383
Tim Northover675a0962014-06-13 14:24:23 +00006384 <result> = lshr <ty> <op1>, <op2> ; yields ty:result
6385 <result> = lshr exact <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006386
6387Overview:
6388"""""""""
6389
6390The '``lshr``' instruction (logical shift right) returns the first
6391operand shifted to the right a specified number of bits with zero fill.
6392
6393Arguments:
6394""""""""""
6395
6396Both arguments to the '``lshr``' instruction must be the same
6397:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
6398'``op2``' is treated as an unsigned value.
6399
6400Semantics:
6401""""""""""
6402
6403This instruction always performs a logical shift right operation. The
6404most significant bits of the result will be filled with zero bits after
6405the shift. If ``op2`` is (statically or dynamically) equal to or larger
6406than the number of bits in ``op1``, the result is undefined. If the
6407arguments are vectors, each vector element of ``op1`` is shifted by the
6408corresponding shift amount in ``op2``.
6409
6410If the ``exact`` keyword is present, the result value of the ``lshr`` is
6411a :ref:`poison value <poisonvalues>` if any of the bits shifted out are
6412non-zero.
6413
6414Example:
6415""""""""
6416
6417.. code-block:: llvm
6418
Tim Northover675a0962014-06-13 14:24:23 +00006419 <result> = lshr i32 4, 1 ; yields i32:result = 2
6420 <result> = lshr i32 4, 2 ; yields i32:result = 1
6421 <result> = lshr i8 4, 3 ; yields i8:result = 0
6422 <result> = lshr i8 -2, 1 ; yields i8:result = 0x7F
Sean Silvab084af42012-12-07 10:36:55 +00006423 <result> = lshr i32 1, 32 ; undefined
6424 <result> = lshr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 2> ; yields: result=<2 x i32> < i32 0x7FFFFFFF, i32 1>
6425
6426'``ashr``' Instruction
6427^^^^^^^^^^^^^^^^^^^^^^
6428
6429Syntax:
6430"""""""
6431
6432::
6433
Tim Northover675a0962014-06-13 14:24:23 +00006434 <result> = ashr <ty> <op1>, <op2> ; yields ty:result
6435 <result> = ashr exact <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006436
6437Overview:
6438"""""""""
6439
6440The '``ashr``' instruction (arithmetic shift right) returns the first
6441operand shifted to the right a specified number of bits with sign
6442extension.
6443
6444Arguments:
6445""""""""""
6446
6447Both arguments to the '``ashr``' instruction must be the same
6448:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type.
6449'``op2``' is treated as an unsigned value.
6450
6451Semantics:
6452""""""""""
6453
6454This instruction always performs an arithmetic shift right operation,
6455The most significant bits of the result will be filled with the sign bit
6456of ``op1``. If ``op2`` is (statically or dynamically) equal to or larger
6457than the number of bits in ``op1``, the result is undefined. If the
6458arguments are vectors, each vector element of ``op1`` is shifted by the
6459corresponding shift amount in ``op2``.
6460
6461If the ``exact`` keyword is present, the result value of the ``ashr`` is
6462a :ref:`poison value <poisonvalues>` if any of the bits shifted out are
6463non-zero.
6464
6465Example:
6466""""""""
6467
6468.. code-block:: llvm
6469
Tim Northover675a0962014-06-13 14:24:23 +00006470 <result> = ashr i32 4, 1 ; yields i32:result = 2
6471 <result> = ashr i32 4, 2 ; yields i32:result = 1
6472 <result> = ashr i8 4, 3 ; yields i8:result = 0
6473 <result> = ashr i8 -2, 1 ; yields i8:result = -1
Sean Silvab084af42012-12-07 10:36:55 +00006474 <result> = ashr i32 1, 32 ; undefined
6475 <result> = ashr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 3> ; yields: result=<2 x i32> < i32 -1, i32 0>
6476
6477'``and``' Instruction
6478^^^^^^^^^^^^^^^^^^^^^
6479
6480Syntax:
6481"""""""
6482
6483::
6484
Tim Northover675a0962014-06-13 14:24:23 +00006485 <result> = and <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006486
6487Overview:
6488"""""""""
6489
6490The '``and``' instruction returns the bitwise logical and of its two
6491operands.
6492
6493Arguments:
6494""""""""""
6495
6496The two arguments to the '``and``' instruction must be
6497:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6498arguments must have identical types.
6499
6500Semantics:
6501""""""""""
6502
6503The truth table used for the '``and``' instruction is:
6504
6505+-----+-----+-----+
6506| In0 | In1 | Out |
6507+-----+-----+-----+
6508| 0 | 0 | 0 |
6509+-----+-----+-----+
6510| 0 | 1 | 0 |
6511+-----+-----+-----+
6512| 1 | 0 | 0 |
6513+-----+-----+-----+
6514| 1 | 1 | 1 |
6515+-----+-----+-----+
6516
6517Example:
6518""""""""
6519
6520.. code-block:: llvm
6521
Tim Northover675a0962014-06-13 14:24:23 +00006522 <result> = and i32 4, %var ; yields i32:result = 4 & %var
6523 <result> = and i32 15, 40 ; yields i32:result = 8
6524 <result> = and i32 4, 8 ; yields i32:result = 0
Sean Silvab084af42012-12-07 10:36:55 +00006525
6526'``or``' Instruction
6527^^^^^^^^^^^^^^^^^^^^
6528
6529Syntax:
6530"""""""
6531
6532::
6533
Tim Northover675a0962014-06-13 14:24:23 +00006534 <result> = or <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006535
6536Overview:
6537"""""""""
6538
6539The '``or``' instruction returns the bitwise logical inclusive or of its
6540two operands.
6541
6542Arguments:
6543""""""""""
6544
6545The two arguments to the '``or``' instruction must be
6546:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6547arguments must have identical types.
6548
6549Semantics:
6550""""""""""
6551
6552The truth table used for the '``or``' instruction is:
6553
6554+-----+-----+-----+
6555| In0 | In1 | Out |
6556+-----+-----+-----+
6557| 0 | 0 | 0 |
6558+-----+-----+-----+
6559| 0 | 1 | 1 |
6560+-----+-----+-----+
6561| 1 | 0 | 1 |
6562+-----+-----+-----+
6563| 1 | 1 | 1 |
6564+-----+-----+-----+
6565
6566Example:
6567""""""""
6568
6569::
6570
Tim Northover675a0962014-06-13 14:24:23 +00006571 <result> = or i32 4, %var ; yields i32:result = 4 | %var
6572 <result> = or i32 15, 40 ; yields i32:result = 47
6573 <result> = or i32 4, 8 ; yields i32:result = 12
Sean Silvab084af42012-12-07 10:36:55 +00006574
6575'``xor``' Instruction
6576^^^^^^^^^^^^^^^^^^^^^
6577
6578Syntax:
6579"""""""
6580
6581::
6582
Tim Northover675a0962014-06-13 14:24:23 +00006583 <result> = xor <ty> <op1>, <op2> ; yields ty:result
Sean Silvab084af42012-12-07 10:36:55 +00006584
6585Overview:
6586"""""""""
6587
6588The '``xor``' instruction returns the bitwise logical exclusive or of
6589its two operands. The ``xor`` is used to implement the "one's
6590complement" operation, which is the "~" operator in C.
6591
6592Arguments:
6593""""""""""
6594
6595The two arguments to the '``xor``' instruction must be
6596:ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both
6597arguments must have identical types.
6598
6599Semantics:
6600""""""""""
6601
6602The truth table used for the '``xor``' instruction is:
6603
6604+-----+-----+-----+
6605| In0 | In1 | Out |
6606+-----+-----+-----+
6607| 0 | 0 | 0 |
6608+-----+-----+-----+
6609| 0 | 1 | 1 |
6610+-----+-----+-----+
6611| 1 | 0 | 1 |
6612+-----+-----+-----+
6613| 1 | 1 | 0 |
6614+-----+-----+-----+
6615
6616Example:
6617""""""""
6618
6619.. code-block:: llvm
6620
Tim Northover675a0962014-06-13 14:24:23 +00006621 <result> = xor i32 4, %var ; yields i32:result = 4 ^ %var
6622 <result> = xor i32 15, 40 ; yields i32:result = 39
6623 <result> = xor i32 4, 8 ; yields i32:result = 12
6624 <result> = xor i32 %V, -1 ; yields i32:result = ~%V
Sean Silvab084af42012-12-07 10:36:55 +00006625
6626Vector Operations
6627-----------------
6628
6629LLVM supports several instructions to represent vector operations in a
6630target-independent manner. These instructions cover the element-access
6631and vector-specific operations needed to process vectors effectively.
6632While LLVM does directly support these vector operations, many
6633sophisticated algorithms will want to use target-specific intrinsics to
6634take full advantage of a specific target.
6635
6636.. _i_extractelement:
6637
6638'``extractelement``' Instruction
6639^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6640
6641Syntax:
6642"""""""
6643
6644::
6645
Michael J. Spencer1f10c5ea2014-05-01 22:12:39 +00006646 <result> = extractelement <n x <ty>> <val>, <ty2> <idx> ; yields <ty>
Sean Silvab084af42012-12-07 10:36:55 +00006647
6648Overview:
6649"""""""""
6650
6651The '``extractelement``' instruction extracts a single scalar element
6652from a vector at a specified index.
6653
6654Arguments:
6655""""""""""
6656
6657The first operand of an '``extractelement``' instruction is a value of
6658:ref:`vector <t_vector>` type. The second operand is an index indicating
6659the position from which to extract the element. The index may be a
Michael J. Spencer1f10c5ea2014-05-01 22:12:39 +00006660variable of any integer type.
Sean Silvab084af42012-12-07 10:36:55 +00006661
6662Semantics:
6663""""""""""
6664
6665The result is a scalar of the same type as the element type of ``val``.
6666Its value is the value at position ``idx`` of ``val``. If ``idx``
6667exceeds the length of ``val``, the results are undefined.
6668
6669Example:
6670""""""""
6671
6672.. code-block:: llvm
6673
6674 <result> = extractelement <4 x i32> %vec, i32 0 ; yields i32
6675
6676.. _i_insertelement:
6677
6678'``insertelement``' Instruction
6679^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6680
6681Syntax:
6682"""""""
6683
6684::
6685
Michael J. Spencer1f10c5ea2014-05-01 22:12:39 +00006686 <result> = insertelement <n x <ty>> <val>, <ty> <elt>, <ty2> <idx> ; yields <n x <ty>>
Sean Silvab084af42012-12-07 10:36:55 +00006687
6688Overview:
6689"""""""""
6690
6691The '``insertelement``' instruction inserts a scalar element into a
6692vector at a specified index.
6693
6694Arguments:
6695""""""""""
6696
6697The first operand of an '``insertelement``' instruction is a value of
6698:ref:`vector <t_vector>` type. The second operand is a scalar value whose
6699type must equal the element type of the first operand. The third operand
6700is an index indicating the position at which to insert the value. The
Michael J. Spencer1f10c5ea2014-05-01 22:12:39 +00006701index may be a variable of any integer type.
Sean Silvab084af42012-12-07 10:36:55 +00006702
6703Semantics:
6704""""""""""
6705
6706The result is a vector of the same type as ``val``. Its element values
6707are those of ``val`` except at position ``idx``, where it gets the value
6708``elt``. If ``idx`` exceeds the length of ``val``, the results are
6709undefined.
6710
6711Example:
6712""""""""
6713
6714.. code-block:: llvm
6715
6716 <result> = insertelement <4 x i32> %vec, i32 1, i32 0 ; yields <4 x i32>
6717
6718.. _i_shufflevector:
6719
6720'``shufflevector``' Instruction
6721^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6722
6723Syntax:
6724"""""""
6725
6726::
6727
6728 <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask> ; yields <m x <ty>>
6729
6730Overview:
6731"""""""""
6732
6733The '``shufflevector``' instruction constructs a permutation of elements
6734from two input vectors, returning a vector with the same element type as
6735the input and length that is the same as the shuffle mask.
6736
6737Arguments:
6738""""""""""
6739
6740The first two operands of a '``shufflevector``' instruction are vectors
6741with the same type. The third argument is a shuffle mask whose element
6742type is always 'i32'. The result of the instruction is a vector whose
6743length is the same as the shuffle mask and whose element type is the
6744same as the element type of the first two operands.
6745
6746The shuffle mask operand is required to be a constant vector with either
6747constant integer or undef values.
6748
6749Semantics:
6750""""""""""
6751
6752The elements of the two input vectors are numbered from left to right
6753across both of the vectors. The shuffle mask operand specifies, for each
6754element of the result vector, which element of the two input vectors the
6755result element gets. The element selector may be undef (meaning "don't
6756care") and the second operand may be undef if performing a shuffle from
6757only one vector.
6758
6759Example:
6760""""""""
6761
6762.. code-block:: llvm
6763
6764 <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
6765 <4 x i32> <i32 0, i32 4, i32 1, i32 5> ; yields <4 x i32>
6766 <result> = shufflevector <4 x i32> %v1, <4 x i32> undef,
6767 <4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32> - Identity shuffle.
6768 <result> = shufflevector <8 x i32> %v1, <8 x i32> undef,
6769 <4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32>
6770 <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
6771 <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 > ; yields <8 x i32>
6772
6773Aggregate Operations
6774--------------------
6775
6776LLVM supports several instructions for working with
6777:ref:`aggregate <t_aggregate>` values.
6778
6779.. _i_extractvalue:
6780
6781'``extractvalue``' Instruction
6782^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6783
6784Syntax:
6785"""""""
6786
6787::
6788
6789 <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}*
6790
6791Overview:
6792"""""""""
6793
6794The '``extractvalue``' instruction extracts the value of a member field
6795from an :ref:`aggregate <t_aggregate>` value.
6796
6797Arguments:
6798""""""""""
6799
6800The first operand of an '``extractvalue``' instruction is a value of
Arch D. Robisona7f8f252015-10-14 19:10:45 +00006801:ref:`struct <t_struct>` or :ref:`array <t_array>` type. The other operands are
Sean Silvab084af42012-12-07 10:36:55 +00006802constant indices to specify which value to extract in a similar manner
6803as indices in a '``getelementptr``' instruction.
6804
6805The major differences to ``getelementptr`` indexing are:
6806
6807- Since the value being indexed is not a pointer, the first index is
6808 omitted and assumed to be zero.
6809- At least one index must be specified.
6810- Not only struct indices but also array indices must be in bounds.
6811
6812Semantics:
6813""""""""""
6814
6815The result is the value at the position in the aggregate specified by
6816the index operands.
6817
6818Example:
6819""""""""
6820
6821.. code-block:: llvm
6822
6823 <result> = extractvalue {i32, float} %agg, 0 ; yields i32
6824
6825.. _i_insertvalue:
6826
6827'``insertvalue``' Instruction
6828^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6829
6830Syntax:
6831"""""""
6832
6833::
6834
6835 <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}* ; yields <aggregate type>
6836
6837Overview:
6838"""""""""
6839
6840The '``insertvalue``' instruction inserts a value into a member field in
6841an :ref:`aggregate <t_aggregate>` value.
6842
6843Arguments:
6844""""""""""
6845
6846The first operand of an '``insertvalue``' instruction is a value of
6847:ref:`struct <t_struct>` or :ref:`array <t_array>` type. The second operand is
6848a first-class value to insert. The following operands are constant
6849indices indicating the position at which to insert the value in a
6850similar manner as indices in a '``extractvalue``' instruction. The value
6851to insert must have the same type as the value identified by the
6852indices.
6853
6854Semantics:
6855""""""""""
6856
6857The result is an aggregate of the same type as ``val``. Its value is
6858that of ``val`` except that the value at the position specified by the
6859indices is that of ``elt``.
6860
6861Example:
6862""""""""
6863
6864.. code-block:: llvm
6865
6866 %agg1 = insertvalue {i32, float} undef, i32 1, 0 ; yields {i32 1, float undef}
6867 %agg2 = insertvalue {i32, float} %agg1, float %val, 1 ; yields {i32 1, float %val}
Dan Liewffcfe7f2014-09-08 21:19:46 +00006868 %agg3 = insertvalue {i32, {float}} undef, float %val, 1, 0 ; yields {i32 undef, {float %val}}
Sean Silvab084af42012-12-07 10:36:55 +00006869
6870.. _memoryops:
6871
6872Memory Access and Addressing Operations
6873---------------------------------------
6874
6875A key design point of an SSA-based representation is how it represents
6876memory. In LLVM, no memory locations are in SSA form, which makes things
6877very simple. This section describes how to read, write, and allocate
6878memory in LLVM.
6879
6880.. _i_alloca:
6881
6882'``alloca``' Instruction
6883^^^^^^^^^^^^^^^^^^^^^^^^
6884
6885Syntax:
6886"""""""
6887
6888::
6889
Tim Northover675a0962014-06-13 14:24:23 +00006890 <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>] ; yields type*:result
Sean Silvab084af42012-12-07 10:36:55 +00006891
6892Overview:
6893"""""""""
6894
6895The '``alloca``' instruction allocates memory on the stack frame of the
6896currently executing function, to be automatically released when this
6897function returns to its caller. The object is always allocated in the
6898generic address space (address space zero).
6899
6900Arguments:
6901""""""""""
6902
6903The '``alloca``' instruction allocates ``sizeof(<type>)*NumElements``
6904bytes of memory on the runtime stack, returning a pointer of the
6905appropriate type to the program. If "NumElements" is specified, it is
6906the number of elements allocated, otherwise "NumElements" is defaulted
6907to be one. If a constant alignment is specified, the value result of the
Reid Kleckner15fe7a52014-07-15 01:16:09 +00006908allocation is guaranteed to be aligned to at least that boundary. The
6909alignment may not be greater than ``1 << 29``. If not specified, or if
6910zero, the target can choose to align the allocation on any convenient
6911boundary compatible with the type.
Sean Silvab084af42012-12-07 10:36:55 +00006912
6913'``type``' may be any sized type.
6914
6915Semantics:
6916""""""""""
6917
6918Memory is allocated; a pointer is returned. The operation is undefined
6919if there is insufficient stack space for the allocation. '``alloca``'d
6920memory is automatically released when the function returns. The
6921'``alloca``' instruction is commonly used to represent automatic
6922variables that must have an address available. When the function returns
6923(either with the ``ret`` or ``resume`` instructions), the memory is
6924reclaimed. Allocating zero bytes is legal, but the result is undefined.
6925The order in which memory is allocated (ie., which way the stack grows)
6926is not specified.
6927
6928Example:
6929""""""""
6930
6931.. code-block:: llvm
6932
Tim Northover675a0962014-06-13 14:24:23 +00006933 %ptr = alloca i32 ; yields i32*:ptr
6934 %ptr = alloca i32, i32 4 ; yields i32*:ptr
6935 %ptr = alloca i32, i32 4, align 1024 ; yields i32*:ptr
6936 %ptr = alloca i32, align 1024 ; yields i32*:ptr
Sean Silvab084af42012-12-07 10:36:55 +00006937
6938.. _i_load:
6939
6940'``load``' Instruction
6941^^^^^^^^^^^^^^^^^^^^^^
6942
6943Syntax:
6944"""""""
6945
6946::
6947
Artur Pilipenkob4d00902015-09-28 17:41:08 +00006948 <result> = load [volatile] <ty>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.load !<index>][, !invariant.group !<index>][, !nonnull !<index>][, !dereferenceable !<deref_bytes_node>][, !dereferenceable_or_null !<deref_bytes_node>][, !align !<align_node>]
Piotr Padlewski6c15ec42015-09-15 18:32:14 +00006949 <result> = load atomic [volatile] <ty>* <pointer> [singlethread] <ordering>, align <alignment> [, !invariant.group !<index>]
Sean Silvab084af42012-12-07 10:36:55 +00006950 !<index> = !{ i32 1 }
Artur Pilipenko253d71e2015-09-18 12:07:10 +00006951 !<deref_bytes_node> = !{i64 <dereferenceable_bytes>}
Artur Pilipenkob4d00902015-09-28 17:41:08 +00006952 !<align_node> = !{ i64 <value_alignment> }
Sean Silvab084af42012-12-07 10:36:55 +00006953
6954Overview:
6955"""""""""
6956
6957The '``load``' instruction is used to read from memory.
6958
6959Arguments:
6960""""""""""
6961
Eli Bendersky239a78b2013-04-17 20:17:08 +00006962The argument to the ``load`` instruction specifies the memory address
David Blaikiec7aabbb2015-03-04 22:06:14 +00006963from which to load. The type specified must be a :ref:`first
Sean Silvab084af42012-12-07 10:36:55 +00006964class <t_firstclass>` type. If the ``load`` is marked as ``volatile``,
6965then the optimizer is not allowed to modify the number or order of
6966execution of this ``load`` with other :ref:`volatile
6967operations <volatile>`.
6968
6969If the ``load`` is marked as ``atomic``, it takes an extra
6970:ref:`ordering <ordering>` and optional ``singlethread`` argument. The
6971``release`` and ``acq_rel`` orderings are not valid on ``load``
6972instructions. Atomic loads produce :ref:`defined <memmodel>` results
6973when they may see multiple atomic stores. The type of the pointee must
6974be an integer type whose bit width is a power of two greater than or
6975equal to eight and less than or equal to a target-specific size limit.
6976``align`` must be explicitly specified on atomic loads, and the load has
6977undefined behavior if the alignment is not set to a value which is at
6978least the size in bytes of the pointee. ``!nontemporal`` does not have
6979any defined semantics for atomic loads.
6980
6981The optional constant ``align`` argument specifies the alignment of the
6982operation (that is, the alignment of the memory address). A value of 0
Eli Bendersky239a78b2013-04-17 20:17:08 +00006983or an omitted ``align`` argument means that the operation has the ABI
Sean Silvab084af42012-12-07 10:36:55 +00006984alignment for the target. It is the responsibility of the code emitter
6985to ensure that the alignment information is correct. Overestimating the
6986alignment results in undefined behavior. Underestimating the alignment
Reid Kleckner15fe7a52014-07-15 01:16:09 +00006987may produce less efficient code. An alignment of 1 is always safe. The
6988maximum possible alignment is ``1 << 29``.
Sean Silvab084af42012-12-07 10:36:55 +00006989
6990The optional ``!nontemporal`` metadata must reference a single
Stefanus Du Toit736e2e22013-06-20 14:02:44 +00006991metadata name ``<index>`` corresponding to a metadata node with one
Sean Silvab084af42012-12-07 10:36:55 +00006992``i32`` entry of value 1. The existence of the ``!nontemporal``
Stefanus Du Toit736e2e22013-06-20 14:02:44 +00006993metadata on the instruction tells the optimizer and code generator
Sean Silvab084af42012-12-07 10:36:55 +00006994that this load is not expected to be reused in the cache. The code
6995generator may select special instructions to save cache bandwidth, such
6996as the ``MOVNT`` instruction on x86.
6997
6998The optional ``!invariant.load`` metadata must reference a single
Stefanus Du Toit736e2e22013-06-20 14:02:44 +00006999metadata name ``<index>`` corresponding to a metadata node with no
7000entries. The existence of the ``!invariant.load`` metadata on the
Philip Reamese1526fc2014-11-24 22:32:43 +00007001instruction tells the optimizer and code generator that the address
7002operand to this load points to memory which can be assumed unchanged.
Mehdi Amini4a121fa2015-03-14 22:04:06 +00007003Being invariant does not imply that a location is dereferenceable,
7004but it does imply that once the location is known dereferenceable
7005its value is henceforth unchanging.
Sean Silvab084af42012-12-07 10:36:55 +00007006
Piotr Padlewski6c15ec42015-09-15 18:32:14 +00007007The optional ``!invariant.group`` metadata must reference a single metadata name
7008 ``<index>`` corresponding to a metadata node. See ``invariant.group`` metadata.
7009
Philip Reamescdb72f32014-10-20 22:40:55 +00007010The optional ``!nonnull`` metadata must reference a single
7011metadata name ``<index>`` corresponding to a metadata node with no
7012entries. The existence of the ``!nonnull`` metadata on the
7013instruction tells the optimizer that the value loaded is known to
Piotr Padlewskid97846e2015-09-02 20:33:16 +00007014never be null. This is analogous to the ``nonnull`` attribute
Sean Silvaa1190322015-08-06 22:56:48 +00007015on parameters and return values. This metadata can only be applied
Mehdi Amini4a121fa2015-03-14 22:04:06 +00007016to loads of a pointer type.
Philip Reamescdb72f32014-10-20 22:40:55 +00007017
Artur Pilipenko253d71e2015-09-18 12:07:10 +00007018The optional ``!dereferenceable`` metadata must reference a single metadata
7019name ``<deref_bytes_node>`` corresponding to a metadata node with one ``i64``
Sean Silva706fba52015-08-06 22:56:24 +00007020entry. The existence of the ``!dereferenceable`` metadata on the instruction
Sanjoy Dasf9995472015-05-19 20:10:19 +00007021tells the optimizer that the value loaded is known to be dereferenceable.
Sean Silva706fba52015-08-06 22:56:24 +00007022The number of bytes known to be dereferenceable is specified by the integer
7023value in the metadata node. This is analogous to the ''dereferenceable''
7024attribute on parameters and return values. This metadata can only be applied
Sanjoy Dasf9995472015-05-19 20:10:19 +00007025to loads of a pointer type.
7026
7027The optional ``!dereferenceable_or_null`` metadata must reference a single
Artur Pilipenko253d71e2015-09-18 12:07:10 +00007028metadata name ``<deref_bytes_node>`` corresponding to a metadata node with one
7029``i64`` entry. The existence of the ``!dereferenceable_or_null`` metadata on the
Sanjoy Dasf9995472015-05-19 20:10:19 +00007030instruction tells the optimizer that the value loaded is known to be either
7031dereferenceable or null.
Sean Silva706fba52015-08-06 22:56:24 +00007032The number of bytes known to be dereferenceable is specified by the integer
7033value in the metadata node. This is analogous to the ''dereferenceable_or_null''
7034attribute on parameters and return values. This metadata can only be applied
Sanjoy Dasf9995472015-05-19 20:10:19 +00007035to loads of a pointer type.
7036
Artur Pilipenkob4d00902015-09-28 17:41:08 +00007037The optional ``!align`` metadata must reference a single metadata name
7038``<align_node>`` corresponding to a metadata node with one ``i64`` entry.
7039The existence of the ``!align`` metadata on the instruction tells the
7040optimizer that the value loaded is known to be aligned to a boundary specified
7041by the integer value in the metadata node. The alignment must be a power of 2.
7042This is analogous to the ''align'' attribute on parameters and return values.
7043This metadata can only be applied to loads of a pointer type.
7044
Sean Silvab084af42012-12-07 10:36:55 +00007045Semantics:
7046""""""""""
7047
7048The location of memory pointed to is loaded. If the value being loaded
7049is of scalar type then the number of bytes read does not exceed the
7050minimum number of bytes needed to hold all bits of the type. For
7051example, loading an ``i24`` reads at most three bytes. When loading a
7052value of a type like ``i20`` with a size that is not an integral number
7053of bytes, the result is undefined if the value was not originally
7054written using a store of the same type.
7055
7056Examples:
7057"""""""""
7058
7059.. code-block:: llvm
7060
Tim Northover675a0962014-06-13 14:24:23 +00007061 %ptr = alloca i32 ; yields i32*:ptr
7062 store i32 3, i32* %ptr ; yields void
David Blaikiec7aabbb2015-03-04 22:06:14 +00007063 %val = load i32, i32* %ptr ; yields i32:val = i32 3
Sean Silvab084af42012-12-07 10:36:55 +00007064
7065.. _i_store:
7066
7067'``store``' Instruction
7068^^^^^^^^^^^^^^^^^^^^^^^
7069
7070Syntax:
7071"""""""
7072
7073::
7074
Piotr Padlewski6c15ec42015-09-15 18:32:14 +00007075 store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.group !<index>] ; yields void
7076 store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment> [, !invariant.group !<index>] ; yields void
Sean Silvab084af42012-12-07 10:36:55 +00007077
7078Overview:
7079"""""""""
7080
7081The '``store``' instruction is used to write to memory.
7082
7083Arguments:
7084""""""""""
7085
Eli Benderskyca380842013-04-17 17:17:20 +00007086There are two arguments to the ``store`` instruction: a value to store
7087and an address at which to store it. The type of the ``<pointer>``
Sean Silvab084af42012-12-07 10:36:55 +00007088operand must be a pointer to the :ref:`first class <t_firstclass>` type of
Eli Benderskyca380842013-04-17 17:17:20 +00007089the ``<value>`` operand. If the ``store`` is marked as ``volatile``,
Sean Silvab084af42012-12-07 10:36:55 +00007090then the optimizer is not allowed to modify the number or order of
7091execution of this ``store`` with other :ref:`volatile
7092operations <volatile>`.
7093
7094If the ``store`` is marked as ``atomic``, it takes an extra
7095:ref:`ordering <ordering>` and optional ``singlethread`` argument. The
7096``acquire`` and ``acq_rel`` orderings aren't valid on ``store``
7097instructions. Atomic loads produce :ref:`defined <memmodel>` results
7098when they may see multiple atomic stores. The type of the pointee must
7099be an integer type whose bit width is a power of two greater than or
7100equal to eight and less than or equal to a target-specific size limit.
7101``align`` must be explicitly specified on atomic stores, and the store
7102has undefined behavior if the alignment is not set to a value which is
7103at least the size in bytes of the pointee. ``!nontemporal`` does not
7104have any defined semantics for atomic stores.
7105
Eli Benderskyca380842013-04-17 17:17:20 +00007106The optional constant ``align`` argument specifies the alignment of the
Sean Silvab084af42012-12-07 10:36:55 +00007107operation (that is, the alignment of the memory address). A value of 0
Eli Benderskyca380842013-04-17 17:17:20 +00007108or an omitted ``align`` argument means that the operation has the ABI
Sean Silvab084af42012-12-07 10:36:55 +00007109alignment for the target. It is the responsibility of the code emitter
7110to ensure that the alignment information is correct. Overestimating the
Eli Benderskyca380842013-04-17 17:17:20 +00007111alignment results in undefined behavior. Underestimating the
Sean Silvab084af42012-12-07 10:36:55 +00007112alignment may produce less efficient code. An alignment of 1 is always
Reid Kleckner15fe7a52014-07-15 01:16:09 +00007113safe. The maximum possible alignment is ``1 << 29``.
Sean Silvab084af42012-12-07 10:36:55 +00007114
Stefanus Du Toit736e2e22013-06-20 14:02:44 +00007115The optional ``!nontemporal`` metadata must reference a single metadata
Eli Benderskyca380842013-04-17 17:17:20 +00007116name ``<index>`` corresponding to a metadata node with one ``i32`` entry of
Stefanus Du Toit736e2e22013-06-20 14:02:44 +00007117value 1. The existence of the ``!nontemporal`` metadata on the instruction
Sean Silvab084af42012-12-07 10:36:55 +00007118tells the optimizer and code generator that this load is not expected to
7119be reused in the cache. The code generator may select special
7120instructions to save cache bandwidth, such as the MOVNT instruction on
7121x86.
7122
Piotr Padlewski6c15ec42015-09-15 18:32:14 +00007123The optional ``!invariant.group`` metadata must reference a
7124single metadata name ``<index>``. See ``invariant.group`` metadata.
7125
Sean Silvab084af42012-12-07 10:36:55 +00007126Semantics:
7127""""""""""
7128
Eli Benderskyca380842013-04-17 17:17:20 +00007129The contents of memory are updated to contain ``<value>`` at the
7130location specified by the ``<pointer>`` operand. If ``<value>`` is
Sean Silvab084af42012-12-07 10:36:55 +00007131of scalar type then the number of bytes written does not exceed the
7132minimum number of bytes needed to hold all bits of the type. For
7133example, storing an ``i24`` writes at most three bytes. When writing a
7134value of a type like ``i20`` with a size that is not an integral number
7135of bytes, it is unspecified what happens to the extra bits that do not
7136belong to the type, but they will typically be overwritten.
7137
7138Example:
7139""""""""
7140
7141.. code-block:: llvm
7142
Tim Northover675a0962014-06-13 14:24:23 +00007143 %ptr = alloca i32 ; yields i32*:ptr
7144 store i32 3, i32* %ptr ; yields void
Nick Lewycky149d04c2015-08-11 01:05:16 +00007145 %val = load i32, i32* %ptr ; yields i32:val = i32 3
Sean Silvab084af42012-12-07 10:36:55 +00007146
7147.. _i_fence:
7148
7149'``fence``' Instruction
7150^^^^^^^^^^^^^^^^^^^^^^^
7151
7152Syntax:
7153"""""""
7154
7155::
7156
Tim Northover675a0962014-06-13 14:24:23 +00007157 fence [singlethread] <ordering> ; yields void
Sean Silvab084af42012-12-07 10:36:55 +00007158
7159Overview:
7160"""""""""
7161
7162The '``fence``' instruction is used to introduce happens-before edges
7163between operations.
7164
7165Arguments:
7166""""""""""
7167
7168'``fence``' instructions take an :ref:`ordering <ordering>` argument which
7169defines what *synchronizes-with* edges they add. They can only be given
7170``acquire``, ``release``, ``acq_rel``, and ``seq_cst`` orderings.
7171
7172Semantics:
7173""""""""""
7174
7175A fence A which has (at least) ``release`` ordering semantics
7176*synchronizes with* a fence B with (at least) ``acquire`` ordering
7177semantics if and only if there exist atomic operations X and Y, both
7178operating on some atomic object M, such that A is sequenced before X, X
7179modifies M (either directly or through some side effect of a sequence
7180headed by X), Y is sequenced before B, and Y observes M. This provides a
7181*happens-before* dependency between A and B. Rather than an explicit
7182``fence``, one (but not both) of the atomic operations X or Y might
7183provide a ``release`` or ``acquire`` (resp.) ordering constraint and
7184still *synchronize-with* the explicit ``fence`` and establish the
7185*happens-before* edge.
7186
7187A ``fence`` which has ``seq_cst`` ordering, in addition to having both
7188``acquire`` and ``release`` semantics specified above, participates in
7189the global program order of other ``seq_cst`` operations and/or fences.
7190
7191The optional ":ref:`singlethread <singlethread>`" argument specifies
7192that the fence only synchronizes with other fences in the same thread.
7193(This is useful for interacting with signal handlers.)
7194
7195Example:
7196""""""""
7197
7198.. code-block:: llvm
7199
Tim Northover675a0962014-06-13 14:24:23 +00007200 fence acquire ; yields void
7201 fence singlethread seq_cst ; yields void
Sean Silvab084af42012-12-07 10:36:55 +00007202
7203.. _i_cmpxchg:
7204
7205'``cmpxchg``' Instruction
7206^^^^^^^^^^^^^^^^^^^^^^^^^
7207
7208Syntax:
7209"""""""
7210
7211::
7212
Tim Northover675a0962014-06-13 14:24:23 +00007213 cmpxchg [weak] [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <success ordering> <failure ordering> ; yields { ty, i1 }
Sean Silvab084af42012-12-07 10:36:55 +00007214
7215Overview:
7216"""""""""
7217
7218The '``cmpxchg``' instruction is used to atomically modify memory. It
7219loads a value in memory and compares it to a given value. If they are
Tim Northover420a2162014-06-13 14:24:07 +00007220equal, it tries to store a new value into the memory.
Sean Silvab084af42012-12-07 10:36:55 +00007221
7222Arguments:
7223""""""""""
7224
7225There are three arguments to the '``cmpxchg``' instruction: an address
7226to operate on, a value to compare to the value currently be at that
7227address, and a new value to place at that address if the compared values
7228are equal. The type of '<cmp>' must be an integer type whose bit width
7229is a power of two greater than or equal to eight and less than or equal
7230to a target-specific size limit. '<cmp>' and '<new>' must have the same
7231type, and the type of '<pointer>' must be a pointer to that type. If the
7232``cmpxchg`` is marked as ``volatile``, then the optimizer is not allowed
7233to modify the number or order of execution of this ``cmpxchg`` with
7234other :ref:`volatile operations <volatile>`.
7235
Tim Northovere94a5182014-03-11 10:48:52 +00007236The success and failure :ref:`ordering <ordering>` arguments specify how this
Tim Northover1dcc9f92014-06-13 14:24:16 +00007237``cmpxchg`` synchronizes with other atomic operations. Both ordering parameters
7238must be at least ``monotonic``, the ordering constraint on failure must be no
7239stronger than that on success, and the failure ordering cannot be either
7240``release`` or ``acq_rel``.
Sean Silvab084af42012-12-07 10:36:55 +00007241
7242The optional "``singlethread``" argument declares that the ``cmpxchg``
7243is only atomic with respect to code (usually signal handlers) running in
7244the same thread as the ``cmpxchg``. Otherwise the cmpxchg is atomic with
7245respect to all other code in the system.
7246
7247The pointer passed into cmpxchg must have alignment greater than or
7248equal to the size in memory of the operand.
7249
7250Semantics:
7251""""""""""
7252
Tim Northover420a2162014-06-13 14:24:07 +00007253The contents of memory at the location specified by the '``<pointer>``' operand
7254is read and compared to '``<cmp>``'; if the read value is the equal, the
7255'``<new>``' is written. The original value at the location is returned, together
7256with a flag indicating success (true) or failure (false).
7257
7258If the cmpxchg operation is marked as ``weak`` then a spurious failure is
7259permitted: the operation may not write ``<new>`` even if the comparison
7260matched.
7261
7262If the cmpxchg operation is strong (the default), the i1 value is 1 if and only
7263if the value loaded equals ``cmp``.
Sean Silvab084af42012-12-07 10:36:55 +00007264
Tim Northovere94a5182014-03-11 10:48:52 +00007265A successful ``cmpxchg`` is a read-modify-write instruction for the purpose of
7266identifying release sequences. A failed ``cmpxchg`` is equivalent to an atomic
7267load with an ordering parameter determined the second ordering parameter.
Sean Silvab084af42012-12-07 10:36:55 +00007268
7269Example:
7270""""""""
7271
7272.. code-block:: llvm
7273
7274 entry:
David Blaikiec7aabbb2015-03-04 22:06:14 +00007275 %orig = atomic load i32, i32* %ptr unordered ; yields i32
Sean Silvab084af42012-12-07 10:36:55 +00007276 br label %loop
7277
7278 loop:
7279 %cmp = phi i32 [ %orig, %entry ], [%old, %loop]
7280 %squared = mul i32 %cmp, %cmp
Tim Northover675a0962014-06-13 14:24:23 +00007281 %val_success = cmpxchg i32* %ptr, i32 %cmp, i32 %squared acq_rel monotonic ; yields { i32, i1 }
Tim Northover420a2162014-06-13 14:24:07 +00007282 %value_loaded = extractvalue { i32, i1 } %val_success, 0
7283 %success = extractvalue { i32, i1 } %val_success, 1
Sean Silvab084af42012-12-07 10:36:55 +00007284 br i1 %success, label %done, label %loop
7285
7286 done:
7287 ...
7288
7289.. _i_atomicrmw:
7290
7291'``atomicrmw``' Instruction
7292^^^^^^^^^^^^^^^^^^^^^^^^^^^
7293
7294Syntax:
7295"""""""
7296
7297::
7298
Tim Northover675a0962014-06-13 14:24:23 +00007299 atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering> ; yields ty
Sean Silvab084af42012-12-07 10:36:55 +00007300
7301Overview:
7302"""""""""
7303
7304The '``atomicrmw``' instruction is used to atomically modify memory.
7305
7306Arguments:
7307""""""""""
7308
7309There are three arguments to the '``atomicrmw``' instruction: an
7310operation to apply, an address whose value to modify, an argument to the
7311operation. The operation must be one of the following keywords:
7312
7313- xchg
7314- add
7315- sub
7316- and
7317- nand
7318- or
7319- xor
7320- max
7321- min
7322- umax
7323- umin
7324
7325The type of '<value>' must be an integer type whose bit width is a power
7326of two greater than or equal to eight and less than or equal to a
7327target-specific size limit. The type of the '``<pointer>``' operand must
7328be a pointer to that type. If the ``atomicrmw`` is marked as
7329``volatile``, then the optimizer is not allowed to modify the number or
7330order of execution of this ``atomicrmw`` with other :ref:`volatile
7331operations <volatile>`.
7332
7333Semantics:
7334""""""""""
7335
7336The contents of memory at the location specified by the '``<pointer>``'
7337operand are atomically read, modified, and written back. The original
7338value at the location is returned. The modification is specified by the
7339operation argument:
7340
7341- xchg: ``*ptr = val``
7342- add: ``*ptr = *ptr + val``
7343- sub: ``*ptr = *ptr - val``
7344- and: ``*ptr = *ptr & val``
7345- nand: ``*ptr = ~(*ptr & val)``
7346- or: ``*ptr = *ptr | val``
7347- xor: ``*ptr = *ptr ^ val``
7348- max: ``*ptr = *ptr > val ? *ptr : val`` (using a signed comparison)
7349- min: ``*ptr = *ptr < val ? *ptr : val`` (using a signed comparison)
7350- umax: ``*ptr = *ptr > val ? *ptr : val`` (using an unsigned
7351 comparison)
7352- umin: ``*ptr = *ptr < val ? *ptr : val`` (using an unsigned
7353 comparison)
7354
7355Example:
7356""""""""
7357
7358.. code-block:: llvm
7359
Tim Northover675a0962014-06-13 14:24:23 +00007360 %old = atomicrmw add i32* %ptr, i32 1 acquire ; yields i32
Sean Silvab084af42012-12-07 10:36:55 +00007361
7362.. _i_getelementptr:
7363
7364'``getelementptr``' Instruction
7365^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7366
7367Syntax:
7368"""""""
7369
7370::
7371
David Blaikie16a97eb2015-03-04 22:02:58 +00007372 <result> = getelementptr <ty>, <ty>* <ptrval>{, <ty> <idx>}*
7373 <result> = getelementptr inbounds <ty>, <ty>* <ptrval>{, <ty> <idx>}*
7374 <result> = getelementptr <ty>, <ptr vector> <ptrval>, <vector index type> <idx>
Sean Silvab084af42012-12-07 10:36:55 +00007375
7376Overview:
7377"""""""""
7378
7379The '``getelementptr``' instruction is used to get the address of a
7380subelement of an :ref:`aggregate <t_aggregate>` data structure. It performs
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007381address calculation only and does not access memory. The instruction can also
7382be used to calculate a vector of such addresses.
Sean Silvab084af42012-12-07 10:36:55 +00007383
7384Arguments:
7385""""""""""
7386
David Blaikie16a97eb2015-03-04 22:02:58 +00007387The first argument is always a type used as the basis for the calculations.
7388The second argument is always a pointer or a vector of pointers, and is the
7389base address to start from. The remaining arguments are indices
Sean Silvab084af42012-12-07 10:36:55 +00007390that indicate which of the elements of the aggregate object are indexed.
7391The interpretation of each index is dependent on the type being indexed
7392into. The first index always indexes the pointer value given as the
7393first argument, the second index indexes a value of the type pointed to
7394(not necessarily the value directly pointed to, since the first index
7395can be non-zero), etc. The first type indexed into must be a pointer
7396value, subsequent types can be arrays, vectors, and structs. Note that
7397subsequent types being indexed into can never be pointers, since that
7398would require loading the pointer before continuing calculation.
7399
7400The type of each index argument depends on the type it is indexing into.
7401When indexing into a (optionally packed) structure, only ``i32`` integer
7402**constants** are allowed (when using a vector of indices they must all
7403be the **same** ``i32`` integer constant). When indexing into an array,
7404pointer or vector, integers of any width are allowed, and they are not
7405required to be constant. These integers are treated as signed values
7406where relevant.
7407
7408For example, let's consider a C code fragment and how it gets compiled
7409to LLVM:
7410
7411.. code-block:: c
7412
7413 struct RT {
7414 char A;
7415 int B[10][20];
7416 char C;
7417 };
7418 struct ST {
7419 int X;
7420 double Y;
7421 struct RT Z;
7422 };
7423
7424 int *foo(struct ST *s) {
7425 return &s[1].Z.B[5][13];
7426 }
7427
7428The LLVM code generated by Clang is:
7429
7430.. code-block:: llvm
7431
7432 %struct.RT = type { i8, [10 x [20 x i32]], i8 }
7433 %struct.ST = type { i32, double, %struct.RT }
7434
7435 define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
7436 entry:
David Blaikie16a97eb2015-03-04 22:02:58 +00007437 %arrayidx = getelementptr inbounds %struct.ST, %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13
Sean Silvab084af42012-12-07 10:36:55 +00007438 ret i32* %arrayidx
7439 }
7440
7441Semantics:
7442""""""""""
7443
7444In the example above, the first index is indexing into the
7445'``%struct.ST*``' type, which is a pointer, yielding a '``%struct.ST``'
7446= '``{ i32, double, %struct.RT }``' type, a structure. The second index
7447indexes into the third element of the structure, yielding a
7448'``%struct.RT``' = '``{ i8 , [10 x [20 x i32]], i8 }``' type, another
7449structure. The third index indexes into the second element of the
7450structure, yielding a '``[10 x [20 x i32]]``' type, an array. The two
7451dimensions of the array are subscripted into, yielding an '``i32``'
7452type. The '``getelementptr``' instruction returns a pointer to this
7453element, thus computing a value of '``i32*``' type.
7454
7455Note that it is perfectly legal to index partially through a structure,
7456returning a pointer to an inner element. Because of this, the LLVM code
7457for the given testcase is equivalent to:
7458
7459.. code-block:: llvm
7460
7461 define i32* @foo(%struct.ST* %s) {
David Blaikie16a97eb2015-03-04 22:02:58 +00007462 %t1 = getelementptr %struct.ST, %struct.ST* %s, i32 1 ; yields %struct.ST*:%t1
7463 %t2 = getelementptr %struct.ST, %struct.ST* %t1, i32 0, i32 2 ; yields %struct.RT*:%t2
7464 %t3 = getelementptr %struct.RT, %struct.RT* %t2, i32 0, i32 1 ; yields [10 x [20 x i32]]*:%t3
7465 %t4 = getelementptr [10 x [20 x i32]], [10 x [20 x i32]]* %t3, i32 0, i32 5 ; yields [20 x i32]*:%t4
7466 %t5 = getelementptr [20 x i32], [20 x i32]* %t4, i32 0, i32 13 ; yields i32*:%t5
Sean Silvab084af42012-12-07 10:36:55 +00007467 ret i32* %t5
7468 }
7469
7470If the ``inbounds`` keyword is present, the result value of the
7471``getelementptr`` is a :ref:`poison value <poisonvalues>` if the base
7472pointer is not an *in bounds* address of an allocated object, or if any
7473of the addresses that would be formed by successive addition of the
7474offsets implied by the indices to the base address with infinitely
7475precise signed arithmetic are not an *in bounds* address of that
7476allocated object. The *in bounds* addresses for an allocated object are
7477all the addresses that point into the object, plus the address one byte
7478past the end. In cases where the base is a vector of pointers the
7479``inbounds`` keyword applies to each of the computations element-wise.
7480
7481If the ``inbounds`` keyword is not present, the offsets are added to the
7482base address with silently-wrapping two's complement arithmetic. If the
7483offsets have a different width from the pointer, they are sign-extended
7484or truncated to the width of the pointer. The result value of the
7485``getelementptr`` may be outside the object pointed to by the base
7486pointer. The result value may not necessarily be used to access memory
7487though, even if it happens to point into allocated storage. See the
7488:ref:`Pointer Aliasing Rules <pointeraliasing>` section for more
7489information.
7490
7491The getelementptr instruction is often confusing. For some more insight
7492into how it works, see :doc:`the getelementptr FAQ <GetElementPtr>`.
7493
7494Example:
7495""""""""
7496
7497.. code-block:: llvm
7498
7499 ; yields [12 x i8]*:aptr
David Blaikie16a97eb2015-03-04 22:02:58 +00007500 %aptr = getelementptr {i32, [12 x i8]}, {i32, [12 x i8]}* %saptr, i64 0, i32 1
Sean Silvab084af42012-12-07 10:36:55 +00007501 ; yields i8*:vptr
David Blaikie16a97eb2015-03-04 22:02:58 +00007502 %vptr = getelementptr {i32, <2 x i8>}, {i32, <2 x i8>}* %svptr, i64 0, i32 1, i32 1
Sean Silvab084af42012-12-07 10:36:55 +00007503 ; yields i8*:eptr
David Blaikie16a97eb2015-03-04 22:02:58 +00007504 %eptr = getelementptr [12 x i8], [12 x i8]* %aptr, i64 0, i32 1
Sean Silvab084af42012-12-07 10:36:55 +00007505 ; yields i32*:iptr
David Blaikie16a97eb2015-03-04 22:02:58 +00007506 %iptr = getelementptr [10 x i32], [10 x i32]* @arr, i16 0, i16 0
Sean Silvab084af42012-12-07 10:36:55 +00007507
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007508Vector of pointers:
7509"""""""""""""""""""
7510
7511The ``getelementptr`` returns a vector of pointers, instead of a single address,
7512when one or more of its arguments is a vector. In such cases, all vector
7513arguments should have the same number of elements, and every scalar argument
7514will be effectively broadcast into a vector during address calculation.
Sean Silvab084af42012-12-07 10:36:55 +00007515
7516.. code-block:: llvm
7517
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007518 ; All arguments are vectors:
7519 ; A[i] = ptrs[i] + offsets[i]*sizeof(i8)
7520 %A = getelementptr i8, <4 x i8*> %ptrs, <4 x i64> %offsets
Sean Silva706fba52015-08-06 22:56:24 +00007521
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007522 ; Add the same scalar offset to each pointer of a vector:
7523 ; A[i] = ptrs[i] + offset*sizeof(i8)
7524 %A = getelementptr i8, <4 x i8*> %ptrs, i64 %offset
Sean Silva706fba52015-08-06 22:56:24 +00007525
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007526 ; Add distinct offsets to the same pointer:
7527 ; A[i] = ptr + offsets[i]*sizeof(i8)
7528 %A = getelementptr i8, i8* %ptr, <4 x i64> %offsets
Sean Silva706fba52015-08-06 22:56:24 +00007529
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007530 ; In all cases described above the type of the result is <4 x i8*>
7531
7532The two following instructions are equivalent:
7533
7534.. code-block:: llvm
7535
7536 getelementptr %struct.ST, <4 x %struct.ST*> %s, <4 x i64> %ind1,
7537 <4 x i32> <i32 2, i32 2, i32 2, i32 2>,
7538 <4 x i32> <i32 1, i32 1, i32 1, i32 1>,
7539 <4 x i32> %ind4,
7540 <4 x i64> <i64 13, i64 13, i64 13, i64 13>
Sean Silva706fba52015-08-06 22:56:24 +00007541
Elena Demikhovsky37a4da82015-07-09 07:42:48 +00007542 getelementptr %struct.ST, <4 x %struct.ST*> %s, <4 x i64> %ind1,
7543 i32 2, i32 1, <4 x i32> %ind4, i64 13
7544
7545Let's look at the C code, where the vector version of ``getelementptr``
7546makes sense:
7547
7548.. code-block:: c
7549
7550 // Let's assume that we vectorize the following loop:
7551 double *A, B; int *C;
7552 for (int i = 0; i < size; ++i) {
7553 A[i] = B[C[i]];
7554 }
7555
7556.. code-block:: llvm
7557
7558 ; get pointers for 8 elements from array B
7559 %ptrs = getelementptr double, double* %B, <8 x i32> %C
7560 ; load 8 elements from array B into A
7561 %A = call <8 x double> @llvm.masked.gather.v8f64(<8 x double*> %ptrs,
7562 i32 8, <8 x i1> %mask, <8 x double> %passthru)
Sean Silvab084af42012-12-07 10:36:55 +00007563
7564Conversion Operations
7565---------------------
7566
7567The instructions in this category are the conversion instructions
7568(casting) which all take a single operand and a type. They perform
7569various bit conversions on the operand.
7570
7571'``trunc .. to``' Instruction
7572^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7573
7574Syntax:
7575"""""""
7576
7577::
7578
7579 <result> = trunc <ty> <value> to <ty2> ; yields ty2
7580
7581Overview:
7582"""""""""
7583
7584The '``trunc``' instruction truncates its operand to the type ``ty2``.
7585
7586Arguments:
7587""""""""""
7588
7589The '``trunc``' instruction takes a value to trunc, and a type to trunc
7590it to. Both types must be of :ref:`integer <t_integer>` types, or vectors
7591of the same number of integers. The bit size of the ``value`` must be
7592larger than the bit size of the destination type, ``ty2``. Equal sized
7593types are not allowed.
7594
7595Semantics:
7596""""""""""
7597
7598The '``trunc``' instruction truncates the high order bits in ``value``
7599and converts the remaining bits to ``ty2``. Since the source size must
7600be larger than the destination size, ``trunc`` cannot be a *no-op cast*.
7601It will always truncate bits.
7602
7603Example:
7604""""""""
7605
7606.. code-block:: llvm
7607
7608 %X = trunc i32 257 to i8 ; yields i8:1
7609 %Y = trunc i32 123 to i1 ; yields i1:true
7610 %Z = trunc i32 122 to i1 ; yields i1:false
7611 %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> ; yields <i8 8, i8 7>
7612
7613'``zext .. to``' Instruction
7614^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7615
7616Syntax:
7617"""""""
7618
7619::
7620
7621 <result> = zext <ty> <value> to <ty2> ; yields ty2
7622
7623Overview:
7624"""""""""
7625
7626The '``zext``' instruction zero extends its operand to type ``ty2``.
7627
7628Arguments:
7629""""""""""
7630
7631The '``zext``' instruction takes a value to cast, and a type to cast it
7632to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
7633the same number of integers. The bit size of the ``value`` must be
7634smaller than the bit size of the destination type, ``ty2``.
7635
7636Semantics:
7637""""""""""
7638
7639The ``zext`` fills the high order bits of the ``value`` with zero bits
7640until it reaches the size of the destination type, ``ty2``.
7641
7642When zero extending from i1, the result will always be either 0 or 1.
7643
7644Example:
7645""""""""
7646
7647.. code-block:: llvm
7648
7649 %X = zext i32 257 to i64 ; yields i64:257
7650 %Y = zext i1 true to i32 ; yields i32:1
7651 %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
7652
7653'``sext .. to``' Instruction
7654^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7655
7656Syntax:
7657"""""""
7658
7659::
7660
7661 <result> = sext <ty> <value> to <ty2> ; yields ty2
7662
7663Overview:
7664"""""""""
7665
7666The '``sext``' sign extends ``value`` to the type ``ty2``.
7667
7668Arguments:
7669""""""""""
7670
7671The '``sext``' instruction takes a value to cast, and a type to cast it
7672to. Both types must be of :ref:`integer <t_integer>` types, or vectors of
7673the same number of integers. The bit size of the ``value`` must be
7674smaller than the bit size of the destination type, ``ty2``.
7675
7676Semantics:
7677""""""""""
7678
7679The '``sext``' instruction performs a sign extension by copying the sign
7680bit (highest order bit) of the ``value`` until it reaches the bit size
7681of the type ``ty2``.
7682
7683When sign extending from i1, the extension always results in -1 or 0.
7684
7685Example:
7686""""""""
7687
7688.. code-block:: llvm
7689
7690 %X = sext i8 -1 to i16 ; yields i16 :65535
7691 %Y = sext i1 true to i32 ; yields i32:-1
7692 %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
7693
7694'``fptrunc .. to``' Instruction
7695^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7696
7697Syntax:
7698"""""""
7699
7700::
7701
7702 <result> = fptrunc <ty> <value> to <ty2> ; yields ty2
7703
7704Overview:
7705"""""""""
7706
7707The '``fptrunc``' instruction truncates ``value`` to type ``ty2``.
7708
7709Arguments:
7710""""""""""
7711
7712The '``fptrunc``' instruction takes a :ref:`floating point <t_floating>`
7713value to cast and a :ref:`floating point <t_floating>` type to cast it to.
7714The size of ``value`` must be larger than the size of ``ty2``. This
7715implies that ``fptrunc`` cannot be used to make a *no-op cast*.
7716
7717Semantics:
7718""""""""""
7719
Dan Liew50456fb2015-09-03 18:43:56 +00007720The '``fptrunc``' instruction casts a ``value`` from a larger
Sean Silvab084af42012-12-07 10:36:55 +00007721:ref:`floating point <t_floating>` type to a smaller :ref:`floating
Dan Liew50456fb2015-09-03 18:43:56 +00007722point <t_floating>` type. If the value cannot fit (i.e. overflows) within the
7723destination type, ``ty2``, then the results are undefined. If the cast produces
7724an inexact result, how rounding is performed (e.g. truncation, also known as
7725round to zero) is undefined.
Sean Silvab084af42012-12-07 10:36:55 +00007726
7727Example:
7728""""""""
7729
7730.. code-block:: llvm
7731
7732 %X = fptrunc double 123.0 to float ; yields float:123.0
7733 %Y = fptrunc double 1.0E+300 to float ; yields undefined
7734
7735'``fpext .. to``' Instruction
7736^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7737
7738Syntax:
7739"""""""
7740
7741::
7742
7743 <result> = fpext <ty> <value> to <ty2> ; yields ty2
7744
7745Overview:
7746"""""""""
7747
7748The '``fpext``' extends a floating point ``value`` to a larger floating
7749point value.
7750
7751Arguments:
7752""""""""""
7753
7754The '``fpext``' instruction takes a :ref:`floating point <t_floating>`
7755``value`` to cast, and a :ref:`floating point <t_floating>` type to cast it
7756to. The source type must be smaller than the destination type.
7757
7758Semantics:
7759""""""""""
7760
7761The '``fpext``' instruction extends the ``value`` from a smaller
7762:ref:`floating point <t_floating>` type to a larger :ref:`floating
7763point <t_floating>` type. The ``fpext`` cannot be used to make a
7764*no-op cast* because it always changes bits. Use ``bitcast`` to make a
7765*no-op cast* for a floating point cast.
7766
7767Example:
7768""""""""
7769
7770.. code-block:: llvm
7771
7772 %X = fpext float 3.125 to double ; yields double:3.125000e+00
7773 %Y = fpext double %X to fp128 ; yields fp128:0xL00000000000000004000900000000000
7774
7775'``fptoui .. to``' Instruction
7776^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7777
7778Syntax:
7779"""""""
7780
7781::
7782
7783 <result> = fptoui <ty> <value> to <ty2> ; yields ty2
7784
7785Overview:
7786"""""""""
7787
7788The '``fptoui``' converts a floating point ``value`` to its unsigned
7789integer equivalent of type ``ty2``.
7790
7791Arguments:
7792""""""""""
7793
7794The '``fptoui``' instruction takes a value to cast, which must be a
7795scalar or vector :ref:`floating point <t_floating>` value, and a type to
7796cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
7797``ty`` is a vector floating point type, ``ty2`` must be a vector integer
7798type with the same number of elements as ``ty``
7799
7800Semantics:
7801""""""""""
7802
7803The '``fptoui``' instruction converts its :ref:`floating
7804point <t_floating>` operand into the nearest (rounding towards zero)
7805unsigned integer value. If the value cannot fit in ``ty2``, the results
7806are undefined.
7807
7808Example:
7809""""""""
7810
7811.. code-block:: llvm
7812
7813 %X = fptoui double 123.0 to i32 ; yields i32:123
7814 %Y = fptoui float 1.0E+300 to i1 ; yields undefined:1
7815 %Z = fptoui float 1.04E+17 to i8 ; yields undefined:1
7816
7817'``fptosi .. to``' Instruction
7818^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7819
7820Syntax:
7821"""""""
7822
7823::
7824
7825 <result> = fptosi <ty> <value> to <ty2> ; yields ty2
7826
7827Overview:
7828"""""""""
7829
7830The '``fptosi``' instruction converts :ref:`floating point <t_floating>`
7831``value`` to type ``ty2``.
7832
7833Arguments:
7834""""""""""
7835
7836The '``fptosi``' instruction takes a value to cast, which must be a
7837scalar or vector :ref:`floating point <t_floating>` value, and a type to
7838cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If
7839``ty`` is a vector floating point type, ``ty2`` must be a vector integer
7840type with the same number of elements as ``ty``
7841
7842Semantics:
7843""""""""""
7844
7845The '``fptosi``' instruction converts its :ref:`floating
7846point <t_floating>` operand into the nearest (rounding towards zero)
7847signed integer value. If the value cannot fit in ``ty2``, the results
7848are undefined.
7849
7850Example:
7851""""""""
7852
7853.. code-block:: llvm
7854
7855 %X = fptosi double -123.0 to i32 ; yields i32:-123
7856 %Y = fptosi float 1.0E-247 to i1 ; yields undefined:1
7857 %Z = fptosi float 1.04E+17 to i8 ; yields undefined:1
7858
7859'``uitofp .. to``' Instruction
7860^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7861
7862Syntax:
7863"""""""
7864
7865::
7866
7867 <result> = uitofp <ty> <value> to <ty2> ; yields ty2
7868
7869Overview:
7870"""""""""
7871
7872The '``uitofp``' instruction regards ``value`` as an unsigned integer
7873and converts that value to the ``ty2`` type.
7874
7875Arguments:
7876""""""""""
7877
7878The '``uitofp``' instruction takes a value to cast, which must be a
7879scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
7880``ty2``, which must be an :ref:`floating point <t_floating>` type. If
7881``ty`` is a vector integer type, ``ty2`` must be a vector floating point
7882type with the same number of elements as ``ty``
7883
7884Semantics:
7885""""""""""
7886
7887The '``uitofp``' instruction interprets its operand as an unsigned
7888integer quantity and converts it to the corresponding floating point
7889value. If the value cannot fit in the floating point value, the results
7890are undefined.
7891
7892Example:
7893""""""""
7894
7895.. code-block:: llvm
7896
7897 %X = uitofp i32 257 to float ; yields float:257.0
7898 %Y = uitofp i8 -1 to double ; yields double:255.0
7899
7900'``sitofp .. to``' Instruction
7901^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7902
7903Syntax:
7904"""""""
7905
7906::
7907
7908 <result> = sitofp <ty> <value> to <ty2> ; yields ty2
7909
7910Overview:
7911"""""""""
7912
7913The '``sitofp``' instruction regards ``value`` as a signed integer and
7914converts that value to the ``ty2`` type.
7915
7916Arguments:
7917""""""""""
7918
7919The '``sitofp``' instruction takes a value to cast, which must be a
7920scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to
7921``ty2``, which must be an :ref:`floating point <t_floating>` type. If
7922``ty`` is a vector integer type, ``ty2`` must be a vector floating point
7923type with the same number of elements as ``ty``
7924
7925Semantics:
7926""""""""""
7927
7928The '``sitofp``' instruction interprets its operand as a signed integer
7929quantity and converts it to the corresponding floating point value. If
7930the value cannot fit in the floating point value, the results are
7931undefined.
7932
7933Example:
7934""""""""
7935
7936.. code-block:: llvm
7937
7938 %X = sitofp i32 257 to float ; yields float:257.0
7939 %Y = sitofp i8 -1 to double ; yields double:-1.0
7940
7941.. _i_ptrtoint:
7942
7943'``ptrtoint .. to``' Instruction
7944^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7945
7946Syntax:
7947"""""""
7948
7949::
7950
7951 <result> = ptrtoint <ty> <value> to <ty2> ; yields ty2
7952
7953Overview:
7954"""""""""
7955
7956The '``ptrtoint``' instruction converts the pointer or a vector of
7957pointers ``value`` to the integer (or vector of integers) type ``ty2``.
7958
7959Arguments:
7960""""""""""
7961
7962The '``ptrtoint``' instruction takes a ``value`` to cast, which must be
Ed Maste8ed40ce2015-04-14 20:52:58 +00007963a value of type :ref:`pointer <t_pointer>` or a vector of pointers, and a
Sean Silvab084af42012-12-07 10:36:55 +00007964type to cast it to ``ty2``, which must be an :ref:`integer <t_integer>` or
7965a vector of integers type.
7966
7967Semantics:
7968""""""""""
7969
7970The '``ptrtoint``' instruction converts ``value`` to integer type
7971``ty2`` by interpreting the pointer value as an integer and either
7972truncating or zero extending that value to the size of the integer type.
7973If ``value`` is smaller than ``ty2`` then a zero extension is done. If
7974``value`` is larger than ``ty2`` then a truncation is done. If they are
7975the same size, then nothing is done (*no-op cast*) other than a type
7976change.
7977
7978Example:
7979""""""""
7980
7981.. code-block:: llvm
7982
7983 %X = ptrtoint i32* %P to i8 ; yields truncation on 32-bit architecture
7984 %Y = ptrtoint i32* %P to i64 ; yields zero extension on 32-bit architecture
7985 %Z = ptrtoint <4 x i32*> %P to <4 x i64>; yields vector zero extension for a vector of addresses on 32-bit architecture
7986
7987.. _i_inttoptr:
7988
7989'``inttoptr .. to``' Instruction
7990^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7991
7992Syntax:
7993"""""""
7994
7995::
7996
7997 <result> = inttoptr <ty> <value> to <ty2> ; yields ty2
7998
7999Overview:
8000"""""""""
8001
8002The '``inttoptr``' instruction converts an integer ``value`` to a
8003pointer type, ``ty2``.
8004
8005Arguments:
8006""""""""""
8007
8008The '``inttoptr``' instruction takes an :ref:`integer <t_integer>` value to
8009cast, and a type to cast it to, which must be a :ref:`pointer <t_pointer>`
8010type.
8011
8012Semantics:
8013""""""""""
8014
8015The '``inttoptr``' instruction converts ``value`` to type ``ty2`` by
8016applying either a zero extension or a truncation depending on the size
8017of the integer ``value``. If ``value`` is larger than the size of a
8018pointer then a truncation is done. If ``value`` is smaller than the size
8019of a pointer then a zero extension is done. If they are the same size,
8020nothing is done (*no-op cast*).
8021
8022Example:
8023""""""""
8024
8025.. code-block:: llvm
8026
8027 %X = inttoptr i32 255 to i32* ; yields zero extension on 64-bit architecture
8028 %Y = inttoptr i32 255 to i32* ; yields no-op on 32-bit architecture
8029 %Z = inttoptr i64 0 to i32* ; yields truncation on 32-bit architecture
8030 %Z = inttoptr <4 x i32> %G to <4 x i8*>; yields truncation of vector G to four pointers
8031
8032.. _i_bitcast:
8033
8034'``bitcast .. to``' Instruction
8035^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8036
8037Syntax:
8038"""""""
8039
8040::
8041
8042 <result> = bitcast <ty> <value> to <ty2> ; yields ty2
8043
8044Overview:
8045"""""""""
8046
8047The '``bitcast``' instruction converts ``value`` to type ``ty2`` without
8048changing any bits.
8049
8050Arguments:
8051""""""""""
8052
8053The '``bitcast``' instruction takes a value to cast, which must be a
8054non-aggregate first class value, and a type to cast it to, which must
Matt Arsenault24b49c42013-07-31 17:49:08 +00008055also be a non-aggregate :ref:`first class <t_firstclass>` type. The
8056bit sizes of ``value`` and the destination type, ``ty2``, must be
Sean Silvaa1190322015-08-06 22:56:48 +00008057identical. If the source type is a pointer, the destination type must
Matt Arsenault24b49c42013-07-31 17:49:08 +00008058also be a pointer of the same size. This instruction supports bitwise
8059conversion of vectors to integers and to vectors of other types (as
8060long as they have the same size).
Sean Silvab084af42012-12-07 10:36:55 +00008061
8062Semantics:
8063""""""""""
8064
Matt Arsenault24b49c42013-07-31 17:49:08 +00008065The '``bitcast``' instruction converts ``value`` to type ``ty2``. It
8066is always a *no-op cast* because no bits change with this
8067conversion. The conversion is done as if the ``value`` had been stored
8068to memory and read back as type ``ty2``. Pointer (or vector of
8069pointers) types may only be converted to other pointer (or vector of
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00008070pointers) types with the same address space through this instruction.
8071To convert pointers to other types, use the :ref:`inttoptr <i_inttoptr>`
8072or :ref:`ptrtoint <i_ptrtoint>` instructions first.
Sean Silvab084af42012-12-07 10:36:55 +00008073
8074Example:
8075""""""""
8076
8077.. code-block:: llvm
8078
8079 %X = bitcast i8 255 to i8 ; yields i8 :-1
8080 %Y = bitcast i32* %x to sint* ; yields sint*:%x
8081 %Z = bitcast <2 x int> %V to i64; ; yields i64: %V
8082 %Z = bitcast <2 x i32*> %V to <2 x i64*> ; yields <2 x i64*>
8083
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00008084.. _i_addrspacecast:
8085
8086'``addrspacecast .. to``' Instruction
8087^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8088
8089Syntax:
8090"""""""
8091
8092::
8093
8094 <result> = addrspacecast <pty> <ptrval> to <pty2> ; yields pty2
8095
8096Overview:
8097"""""""""
8098
8099The '``addrspacecast``' instruction converts ``ptrval`` from ``pty`` in
8100address space ``n`` to type ``pty2`` in address space ``m``.
8101
8102Arguments:
8103""""""""""
8104
8105The '``addrspacecast``' instruction takes a pointer or vector of pointer value
8106to cast and a pointer type to cast it to, which must have a different
8107address space.
8108
8109Semantics:
8110""""""""""
8111
8112The '``addrspacecast``' instruction converts the pointer value
8113``ptrval`` to type ``pty2``. It can be a *no-op cast* or a complex
Matt Arsenault54a2a172013-11-15 05:44:56 +00008114value modification, depending on the target and the address space
8115pair. Pointer conversions within the same address space must be
8116performed with the ``bitcast`` instruction. Note that if the address space
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +00008117conversion is legal then both result and operand refer to the same memory
8118location.
8119
8120Example:
8121""""""""
8122
8123.. code-block:: llvm
8124
Matt Arsenault9c13dd02013-11-15 22:43:50 +00008125 %X = addrspacecast i32* %x to i32 addrspace(1)* ; yields i32 addrspace(1)*:%x
8126 %Y = addrspacecast i32 addrspace(1)* %y to i64 addrspace(2)* ; yields i64 addrspace(2)*:%y
8127 %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 +00008128
Sean Silvab084af42012-12-07 10:36:55 +00008129.. _otherops:
8130
8131Other Operations
8132----------------
8133
8134The instructions in this category are the "miscellaneous" instructions,
8135which defy better classification.
8136
8137.. _i_icmp:
8138
8139'``icmp``' Instruction
8140^^^^^^^^^^^^^^^^^^^^^^
8141
8142Syntax:
8143"""""""
8144
8145::
8146
Tim Northover675a0962014-06-13 14:24:23 +00008147 <result> = icmp <cond> <ty> <op1>, <op2> ; yields i1 or <N x i1>:result
Sean Silvab084af42012-12-07 10:36:55 +00008148
8149Overview:
8150"""""""""
8151
8152The '``icmp``' instruction returns a boolean value or a vector of
8153boolean values based on comparison of its two integer, integer vector,
8154pointer, or pointer vector operands.
8155
8156Arguments:
8157""""""""""
8158
8159The '``icmp``' instruction takes three operands. The first operand is
8160the condition code indicating the kind of comparison to perform. It is
8161not a value, just a keyword. The possible condition code are:
8162
8163#. ``eq``: equal
8164#. ``ne``: not equal
8165#. ``ugt``: unsigned greater than
8166#. ``uge``: unsigned greater or equal
8167#. ``ult``: unsigned less than
8168#. ``ule``: unsigned less or equal
8169#. ``sgt``: signed greater than
8170#. ``sge``: signed greater or equal
8171#. ``slt``: signed less than
8172#. ``sle``: signed less or equal
8173
8174The remaining two arguments must be :ref:`integer <t_integer>` or
8175:ref:`pointer <t_pointer>` or integer :ref:`vector <t_vector>` typed. They
8176must also be identical types.
8177
8178Semantics:
8179""""""""""
8180
8181The '``icmp``' compares ``op1`` and ``op2`` according to the condition
8182code given as ``cond``. The comparison performed always yields either an
8183:ref:`i1 <t_integer>` or vector of ``i1`` result, as follows:
8184
8185#. ``eq``: yields ``true`` if the operands are equal, ``false``
8186 otherwise. No sign interpretation is necessary or performed.
8187#. ``ne``: yields ``true`` if the operands are unequal, ``false``
8188 otherwise. No sign interpretation is necessary or performed.
8189#. ``ugt``: interprets the operands as unsigned values and yields
8190 ``true`` if ``op1`` is greater than ``op2``.
8191#. ``uge``: interprets the operands as unsigned values and yields
8192 ``true`` if ``op1`` is greater than or equal to ``op2``.
8193#. ``ult``: interprets the operands as unsigned values and yields
8194 ``true`` if ``op1`` is less than ``op2``.
8195#. ``ule``: interprets the operands as unsigned values and yields
8196 ``true`` if ``op1`` is less than or equal to ``op2``.
8197#. ``sgt``: interprets the operands as signed values and yields ``true``
8198 if ``op1`` is greater than ``op2``.
8199#. ``sge``: interprets the operands as signed values and yields ``true``
8200 if ``op1`` is greater than or equal to ``op2``.
8201#. ``slt``: interprets the operands as signed values and yields ``true``
8202 if ``op1`` is less than ``op2``.
8203#. ``sle``: interprets the operands as signed values and yields ``true``
8204 if ``op1`` is less than or equal to ``op2``.
8205
8206If the operands are :ref:`pointer <t_pointer>` typed, the pointer values
8207are compared as if they were integers.
8208
8209If the operands are integer vectors, then they are compared element by
8210element. The result is an ``i1`` vector with the same number of elements
8211as the values being compared. Otherwise, the result is an ``i1``.
8212
8213Example:
8214""""""""
8215
8216.. code-block:: llvm
8217
8218 <result> = icmp eq i32 4, 5 ; yields: result=false
8219 <result> = icmp ne float* %X, %X ; yields: result=false
8220 <result> = icmp ult i16 4, 5 ; yields: result=true
8221 <result> = icmp sgt i16 4, 5 ; yields: result=false
8222 <result> = icmp ule i16 -4, 5 ; yields: result=false
8223 <result> = icmp sge i16 4, 5 ; yields: result=false
8224
8225Note that the code generator does not yet support vector types with the
8226``icmp`` instruction.
8227
8228.. _i_fcmp:
8229
8230'``fcmp``' Instruction
8231^^^^^^^^^^^^^^^^^^^^^^
8232
8233Syntax:
8234"""""""
8235
8236::
8237
James Molloy88eb5352015-07-10 12:52:00 +00008238 <result> = fcmp [fast-math flags]* <cond> <ty> <op1>, <op2> ; yields i1 or <N x i1>:result
Sean Silvab084af42012-12-07 10:36:55 +00008239
8240Overview:
8241"""""""""
8242
8243The '``fcmp``' instruction returns a boolean value or vector of boolean
8244values based on comparison of its operands.
8245
8246If the operands are floating point scalars, then the result type is a
8247boolean (:ref:`i1 <t_integer>`).
8248
8249If the operands are floating point vectors, then the result type is a
8250vector of boolean with the same number of elements as the operands being
8251compared.
8252
8253Arguments:
8254""""""""""
8255
8256The '``fcmp``' instruction takes three operands. The first operand is
8257the condition code indicating the kind of comparison to perform. It is
8258not a value, just a keyword. The possible condition code are:
8259
8260#. ``false``: no comparison, always returns false
8261#. ``oeq``: ordered and equal
8262#. ``ogt``: ordered and greater than
8263#. ``oge``: ordered and greater than or equal
8264#. ``olt``: ordered and less than
8265#. ``ole``: ordered and less than or equal
8266#. ``one``: ordered and not equal
8267#. ``ord``: ordered (no nans)
8268#. ``ueq``: unordered or equal
8269#. ``ugt``: unordered or greater than
8270#. ``uge``: unordered or greater than or equal
8271#. ``ult``: unordered or less than
8272#. ``ule``: unordered or less than or equal
8273#. ``une``: unordered or not equal
8274#. ``uno``: unordered (either nans)
8275#. ``true``: no comparison, always returns true
8276
8277*Ordered* means that neither operand is a QNAN while *unordered* means
8278that either operand may be a QNAN.
8279
8280Each of ``val1`` and ``val2`` arguments must be either a :ref:`floating
8281point <t_floating>` type or a :ref:`vector <t_vector>` of floating point
8282type. They must have identical types.
8283
8284Semantics:
8285""""""""""
8286
8287The '``fcmp``' instruction compares ``op1`` and ``op2`` according to the
8288condition code given as ``cond``. If the operands are vectors, then the
8289vectors are compared element by element. Each comparison performed
8290always yields an :ref:`i1 <t_integer>` result, as follows:
8291
8292#. ``false``: always yields ``false``, regardless of operands.
8293#. ``oeq``: yields ``true`` if both operands are not a QNAN and ``op1``
8294 is equal to ``op2``.
8295#. ``ogt``: yields ``true`` if both operands are not a QNAN and ``op1``
8296 is greater than ``op2``.
8297#. ``oge``: yields ``true`` if both operands are not a QNAN and ``op1``
8298 is greater than or equal to ``op2``.
8299#. ``olt``: yields ``true`` if both operands are not a QNAN and ``op1``
8300 is less than ``op2``.
8301#. ``ole``: yields ``true`` if both operands are not a QNAN and ``op1``
8302 is less than or equal to ``op2``.
8303#. ``one``: yields ``true`` if both operands are not a QNAN and ``op1``
8304 is not equal to ``op2``.
8305#. ``ord``: yields ``true`` if both operands are not a QNAN.
8306#. ``ueq``: yields ``true`` if either operand is a QNAN or ``op1`` is
8307 equal to ``op2``.
8308#. ``ugt``: yields ``true`` if either operand is a QNAN or ``op1`` is
8309 greater than ``op2``.
8310#. ``uge``: yields ``true`` if either operand is a QNAN or ``op1`` is
8311 greater than or equal to ``op2``.
8312#. ``ult``: yields ``true`` if either operand is a QNAN or ``op1`` is
8313 less than ``op2``.
8314#. ``ule``: yields ``true`` if either operand is a QNAN or ``op1`` is
8315 less than or equal to ``op2``.
8316#. ``une``: yields ``true`` if either operand is a QNAN or ``op1`` is
8317 not equal to ``op2``.
8318#. ``uno``: yields ``true`` if either operand is a QNAN.
8319#. ``true``: always yields ``true``, regardless of operands.
8320
James Molloy88eb5352015-07-10 12:52:00 +00008321The ``fcmp`` instruction can also optionally take any number of
8322:ref:`fast-math flags <fastmath>`, which are optimization hints to enable
8323otherwise unsafe floating point optimizations.
8324
8325Any set of fast-math flags are legal on an ``fcmp`` instruction, but the
8326only flags that have any effect on its semantics are those that allow
8327assumptions to be made about the values of input arguments; namely
8328``nnan``, ``ninf``, and ``nsz``. See :ref:`fastmath` for more information.
8329
Sean Silvab084af42012-12-07 10:36:55 +00008330Example:
8331""""""""
8332
8333.. code-block:: llvm
8334
8335 <result> = fcmp oeq float 4.0, 5.0 ; yields: result=false
8336 <result> = fcmp one float 4.0, 5.0 ; yields: result=true
8337 <result> = fcmp olt float 4.0, 5.0 ; yields: result=true
8338 <result> = fcmp ueq double 1.0, 2.0 ; yields: result=false
8339
8340Note that the code generator does not yet support vector types with the
8341``fcmp`` instruction.
8342
8343.. _i_phi:
8344
8345'``phi``' Instruction
8346^^^^^^^^^^^^^^^^^^^^^
8347
8348Syntax:
8349"""""""
8350
8351::
8352
8353 <result> = phi <ty> [ <val0>, <label0>], ...
8354
8355Overview:
8356"""""""""
8357
8358The '``phi``' instruction is used to implement the φ node in the SSA
8359graph representing the function.
8360
8361Arguments:
8362""""""""""
8363
8364The type of the incoming values is specified with the first type field.
8365After this, the '``phi``' instruction takes a list of pairs as
8366arguments, with one pair for each predecessor basic block of the current
8367block. Only values of :ref:`first class <t_firstclass>` type may be used as
8368the value arguments to the PHI node. Only labels may be used as the
8369label arguments.
8370
8371There must be no non-phi instructions between the start of a basic block
8372and the PHI instructions: i.e. PHI instructions must be first in a basic
8373block.
8374
8375For the purposes of the SSA form, the use of each incoming value is
8376deemed to occur on the edge from the corresponding predecessor block to
8377the current block (but after any definition of an '``invoke``'
8378instruction's return value on the same edge).
8379
8380Semantics:
8381""""""""""
8382
8383At runtime, the '``phi``' instruction logically takes on the value
8384specified by the pair corresponding to the predecessor basic block that
8385executed just prior to the current block.
8386
8387Example:
8388""""""""
8389
8390.. code-block:: llvm
8391
8392 Loop: ; Infinite loop that counts from 0 on up...
8393 %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
8394 %nextindvar = add i32 %indvar, 1
8395 br label %Loop
8396
8397.. _i_select:
8398
8399'``select``' Instruction
8400^^^^^^^^^^^^^^^^^^^^^^^^
8401
8402Syntax:
8403"""""""
8404
8405::
8406
8407 <result> = select selty <cond>, <ty> <val1>, <ty> <val2> ; yields ty
8408
8409 selty is either i1 or {<N x i1>}
8410
8411Overview:
8412"""""""""
8413
8414The '``select``' instruction is used to choose one value based on a
Joerg Sonnenberger94321ec2014-03-26 15:30:21 +00008415condition, without IR-level branching.
Sean Silvab084af42012-12-07 10:36:55 +00008416
8417Arguments:
8418""""""""""
8419
8420The '``select``' instruction requires an 'i1' value or a vector of 'i1'
8421values indicating the condition, and two values of the same :ref:`first
David Majnemer40a0b592015-03-03 22:45:47 +00008422class <t_firstclass>` type.
Sean Silvab084af42012-12-07 10:36:55 +00008423
8424Semantics:
8425""""""""""
8426
8427If the condition is an i1 and it evaluates to 1, the instruction returns
8428the first value argument; otherwise, it returns the second value
8429argument.
8430
8431If the condition is a vector of i1, then the value arguments must be
8432vectors of the same size, and the selection is done element by element.
8433
David Majnemer40a0b592015-03-03 22:45:47 +00008434If the condition is an i1 and the value arguments are vectors of the
8435same size, then an entire vector is selected.
8436
Sean Silvab084af42012-12-07 10:36:55 +00008437Example:
8438""""""""
8439
8440.. code-block:: llvm
8441
8442 %X = select i1 true, i8 17, i8 42 ; yields i8:17
8443
8444.. _i_call:
8445
8446'``call``' Instruction
8447^^^^^^^^^^^^^^^^^^^^^^
8448
8449Syntax:
8450"""""""
8451
8452::
8453
Akira Hatanaka5cfcce122015-11-06 23:55:38 +00008454 <result> = [tail | musttail | notail ] call [cconv] [ret attrs] <ty> [<fnty>*] <fnptrval>(<function args>) [fn attrs]
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00008455 [ operand bundles ]
Sean Silvab084af42012-12-07 10:36:55 +00008456
8457Overview:
8458"""""""""
8459
8460The '``call``' instruction represents a simple function call.
8461
8462Arguments:
8463""""""""""
8464
8465This instruction requires several arguments:
8466
Reid Kleckner5772b772014-04-24 20:14:34 +00008467#. The optional ``tail`` and ``musttail`` markers indicate that the optimizers
Sean Silvaa1190322015-08-06 22:56:48 +00008468 should perform tail call optimization. The ``tail`` marker is a hint that
8469 `can be ignored <CodeGenerator.html#sibcallopt>`_. The ``musttail`` marker
Reid Kleckner5772b772014-04-24 20:14:34 +00008470 means that the call must be tail call optimized in order for the program to
Sean Silvaa1190322015-08-06 22:56:48 +00008471 be correct. The ``musttail`` marker provides these guarantees:
Reid Kleckner5772b772014-04-24 20:14:34 +00008472
8473 #. The call will not cause unbounded stack growth if it is part of a
8474 recursive cycle in the call graph.
8475 #. Arguments with the :ref:`inalloca <attr_inalloca>` attribute are
8476 forwarded in place.
8477
8478 Both markers imply that the callee does not access allocas or varargs from
Sean Silvaa1190322015-08-06 22:56:48 +00008479 the caller. Calls marked ``musttail`` must obey the following additional
Reid Kleckner5772b772014-04-24 20:14:34 +00008480 rules:
8481
8482 - The call must immediately precede a :ref:`ret <i_ret>` instruction,
8483 or a pointer bitcast followed by a ret instruction.
8484 - The ret instruction must return the (possibly bitcasted) value
8485 produced by the call or void.
Sean Silvaa1190322015-08-06 22:56:48 +00008486 - The caller and callee prototypes must match. Pointer types of
Reid Kleckner5772b772014-04-24 20:14:34 +00008487 parameters or return types may differ in pointee type, but not
8488 in address space.
8489 - The calling conventions of the caller and callee must match.
8490 - All ABI-impacting function attributes, such as sret, byval, inreg,
8491 returned, and inalloca, must match.
Reid Kleckner83498642014-08-26 00:33:28 +00008492 - The callee must be varargs iff the caller is varargs. Bitcasting a
8493 non-varargs function to the appropriate varargs type is legal so
8494 long as the non-varargs prefixes obey the other rules.
Reid Kleckner5772b772014-04-24 20:14:34 +00008495
8496 Tail call optimization for calls marked ``tail`` is guaranteed to occur if
8497 the following conditions are met:
Sean Silvab084af42012-12-07 10:36:55 +00008498
8499 - Caller and callee both have the calling convention ``fastcc``.
8500 - The call is in tail position (ret immediately follows call and ret
8501 uses value of call or is void).
8502 - Option ``-tailcallopt`` is enabled, or
8503 ``llvm::GuaranteedTailCallOpt`` is ``true``.
Alp Tokercf218752014-06-30 18:57:16 +00008504 - `Platform-specific constraints are
Sean Silvab084af42012-12-07 10:36:55 +00008505 met. <CodeGenerator.html#tailcallopt>`_
8506
Akira Hatanaka5cfcce122015-11-06 23:55:38 +00008507#. The optional ``notail`` marker indicates that the optimizers should not add
8508 ``tail`` or ``musttail`` markers to the call. It is used to prevent tail
8509 call optimization from being performed on the call.
8510
Sean Silvab084af42012-12-07 10:36:55 +00008511#. The optional "cconv" marker indicates which :ref:`calling
8512 convention <callingconv>` the call should use. If none is
8513 specified, the call defaults to using C calling conventions. The
8514 calling convention of the call must match the calling convention of
8515 the target function, or else the behavior is undefined.
8516#. The optional :ref:`Parameter Attributes <paramattrs>` list for return
8517 values. Only '``zeroext``', '``signext``', and '``inreg``' attributes
8518 are valid here.
8519#. '``ty``': the type of the call instruction itself which is also the
8520 type of the return value. Functions that return no value are marked
8521 ``void``.
8522#. '``fnty``': shall be the signature of the pointer to function value
8523 being invoked. The argument types must match the types implied by
8524 this signature. This type can be omitted if the function is not
8525 varargs and if the function type does not return a pointer to a
8526 function.
8527#. '``fnptrval``': An LLVM value containing a pointer to a function to
8528 be invoked. In most cases, this is a direct function invocation, but
8529 indirect ``call``'s are just as possible, calling an arbitrary pointer
8530 to function value.
8531#. '``function args``': argument list whose types match the function
8532 signature argument types and parameter attributes. All arguments must
8533 be of :ref:`first class <t_firstclass>` type. If the function signature
8534 indicates the function accepts a variable number of arguments, the
8535 extra arguments can be specified.
8536#. The optional :ref:`function attributes <fnattrs>` list. Only
8537 '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``'
8538 attributes are valid here.
Sanjoy Dasb513a9f2015-09-24 23:34:52 +00008539#. The optional :ref:`operand bundles <opbundles>` list.
Sean Silvab084af42012-12-07 10:36:55 +00008540
8541Semantics:
8542""""""""""
8543
8544The '``call``' instruction is used to cause control flow to transfer to
8545a specified function, with its incoming arguments bound to the specified
8546values. Upon a '``ret``' instruction in the called function, control
8547flow continues with the instruction after the function call, and the
8548return value of the function is bound to the result argument.
8549
8550Example:
8551""""""""
8552
8553.. code-block:: llvm
8554
8555 %retval = call i32 @test(i32 %argc)
8556 call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42) ; yields i32
8557 %X = tail call i32 @foo() ; yields i32
8558 %Y = tail call fastcc i32 @foo() ; yields i32
8559 call void %foo(i8 97 signext)
8560
8561 %struct.A = type { i32, i8 }
Tim Northover675a0962014-06-13 14:24:23 +00008562 %r = call %struct.A @foo() ; yields { i32, i8 }
Sean Silvab084af42012-12-07 10:36:55 +00008563 %gr = extractvalue %struct.A %r, 0 ; yields i32
8564 %gr1 = extractvalue %struct.A %r, 1 ; yields i8
8565 %Z = call void @foo() noreturn ; indicates that %foo never returns normally
8566 %ZZ = call zeroext i32 @bar() ; Return value is %zero extended
8567
8568llvm treats calls to some functions with names and arguments that match
8569the standard C99 library as being the C99 library functions, and may
8570perform optimizations or generate code for them under that assumption.
8571This is something we'd like to change in the future to provide better
8572support for freestanding environments and non-C-based languages.
8573
8574.. _i_va_arg:
8575
8576'``va_arg``' Instruction
8577^^^^^^^^^^^^^^^^^^^^^^^^
8578
8579Syntax:
8580"""""""
8581
8582::
8583
8584 <resultval> = va_arg <va_list*> <arglist>, <argty>
8585
8586Overview:
8587"""""""""
8588
8589The '``va_arg``' instruction is used to access arguments passed through
8590the "variable argument" area of a function call. It is used to implement
8591the ``va_arg`` macro in C.
8592
8593Arguments:
8594""""""""""
8595
8596This instruction takes a ``va_list*`` value and the type of the
8597argument. It returns a value of the specified argument type and
8598increments the ``va_list`` to point to the next argument. The actual
8599type of ``va_list`` is target specific.
8600
8601Semantics:
8602""""""""""
8603
8604The '``va_arg``' instruction loads an argument of the specified type
8605from the specified ``va_list`` and causes the ``va_list`` to point to
8606the next argument. For more information, see the variable argument
8607handling :ref:`Intrinsic Functions <int_varargs>`.
8608
8609It is legal for this instruction to be called in a function which does
8610not take a variable number of arguments, for example, the ``vfprintf``
8611function.
8612
8613``va_arg`` is an LLVM instruction instead of an :ref:`intrinsic
8614function <intrinsics>` because it takes a type as an argument.
8615
8616Example:
8617""""""""
8618
8619See the :ref:`variable argument processing <int_varargs>` section.
8620
8621Note that the code generator does not yet fully support va\_arg on many
8622targets. Also, it does not currently support va\_arg with aggregate
8623types on any target.
8624
8625.. _i_landingpad:
8626
8627'``landingpad``' Instruction
8628^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8629
8630Syntax:
8631"""""""
8632
8633::
8634
David Majnemer7fddecc2015-06-17 20:52:32 +00008635 <resultval> = landingpad <resultty> <clause>+
8636 <resultval> = landingpad <resultty> cleanup <clause>*
Sean Silvab084af42012-12-07 10:36:55 +00008637
8638 <clause> := catch <type> <value>
8639 <clause> := filter <array constant type> <array constant>
8640
8641Overview:
8642"""""""""
8643
8644The '``landingpad``' instruction is used by `LLVM's exception handling
8645system <ExceptionHandling.html#overview>`_ to specify that a basic block
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00008646is a landing pad --- one where the exception lands, and corresponds to the
Sean Silvab084af42012-12-07 10:36:55 +00008647code found in the ``catch`` portion of a ``try``/``catch`` sequence. It
David Majnemer7fddecc2015-06-17 20:52:32 +00008648defines values supplied by the :ref:`personality function <personalityfn>` upon
Sean Silvab084af42012-12-07 10:36:55 +00008649re-entry to the function. The ``resultval`` has the type ``resultty``.
8650
8651Arguments:
8652""""""""""
8653
David Majnemer7fddecc2015-06-17 20:52:32 +00008654The optional
Sean Silvab084af42012-12-07 10:36:55 +00008655``cleanup`` flag indicates that the landing pad block is a cleanup.
8656
Dmitri Gribenkoe8131122013-01-19 20:34:20 +00008657A ``clause`` begins with the clause type --- ``catch`` or ``filter`` --- and
Sean Silvab084af42012-12-07 10:36:55 +00008658contains the global variable representing the "type" that may be caught
8659or filtered respectively. Unlike the ``catch`` clause, the ``filter``
8660clause takes an array constant as its argument. Use
8661"``[0 x i8**] undef``" for a filter which cannot throw. The
8662'``landingpad``' instruction must contain *at least* one ``clause`` or
8663the ``cleanup`` flag.
8664
8665Semantics:
8666""""""""""
8667
8668The '``landingpad``' instruction defines the values which are set by the
David Majnemer7fddecc2015-06-17 20:52:32 +00008669:ref:`personality function <personalityfn>` upon re-entry to the function, and
Sean Silvab084af42012-12-07 10:36:55 +00008670therefore the "result type" of the ``landingpad`` instruction. As with
8671calling conventions, how the personality function results are
8672represented in LLVM IR is target specific.
8673
8674The clauses are applied in order from top to bottom. If two
8675``landingpad`` instructions are merged together through inlining, the
8676clauses from the calling function are appended to the list of clauses.
8677When the call stack is being unwound due to an exception being thrown,
8678the exception is compared against each ``clause`` in turn. If it doesn't
8679match any of the clauses, and the ``cleanup`` flag is not set, then
8680unwinding continues further up the call stack.
8681
8682The ``landingpad`` instruction has several restrictions:
8683
8684- A landing pad block is a basic block which is the unwind destination
8685 of an '``invoke``' instruction.
8686- A landing pad block must have a '``landingpad``' instruction as its
8687 first non-PHI instruction.
8688- There can be only one '``landingpad``' instruction within the landing
8689 pad block.
8690- A basic block that is not a landing pad block may not include a
8691 '``landingpad``' instruction.
Sean Silvab084af42012-12-07 10:36:55 +00008692
8693Example:
8694""""""""
8695
8696.. code-block:: llvm
8697
8698 ;; A landing pad which can catch an integer.
David Majnemer7fddecc2015-06-17 20:52:32 +00008699 %res = landingpad { i8*, i32 }
Sean Silvab084af42012-12-07 10:36:55 +00008700 catch i8** @_ZTIi
8701 ;; A landing pad that is a cleanup.
David Majnemer7fddecc2015-06-17 20:52:32 +00008702 %res = landingpad { i8*, i32 }
Sean Silvab084af42012-12-07 10:36:55 +00008703 cleanup
8704 ;; A landing pad which can catch an integer and can only throw a double.
David Majnemer7fddecc2015-06-17 20:52:32 +00008705 %res = landingpad { i8*, i32 }
Sean Silvab084af42012-12-07 10:36:55 +00008706 catch i8** @_ZTIi
8707 filter [1 x i8**] [@_ZTId]
8708
David Majnemer654e1302015-07-31 17:58:14 +00008709.. _i_cleanuppad:
8710
8711'``cleanuppad``' Instruction
8712^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8713
8714Syntax:
8715"""""""
8716
8717::
8718
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00008719 <resultval> = cleanuppad [<args>*]
David Majnemer654e1302015-07-31 17:58:14 +00008720
8721Overview:
8722"""""""""
8723
8724The '``cleanuppad``' instruction is used by `LLVM's exception handling
8725system <ExceptionHandling.html#overview>`_ to specify that a basic block
8726is a cleanup block --- one where a personality routine attempts to
8727transfer control to run cleanup actions.
8728The ``args`` correspond to whatever additional
8729information the :ref:`personality function <personalityfn>` requires to
8730execute the cleanup.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00008731The ``resultval`` has the type :ref:`token <t_token>` and is used to
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00008732match the ``cleanuppad`` to corresponding :ref:`cleanuprets <i_cleanupret>`
8733and :ref:`cleanupendpads <i_cleanupendpad>`.
David Majnemer654e1302015-07-31 17:58:14 +00008734
8735Arguments:
8736""""""""""
8737
8738The instruction takes a list of arbitrary values which are interpreted
8739by the :ref:`personality function <personalityfn>`.
8740
8741Semantics:
8742""""""""""
8743
David Majnemer654e1302015-07-31 17:58:14 +00008744When the call stack is being unwound due to an exception being thrown,
8745the :ref:`personality function <personalityfn>` transfers control to the
8746``cleanuppad`` with the aid of the personality-specific arguments.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00008747As with calling conventions, how the personality function results are
8748represented in LLVM IR is target specific.
David Majnemer654e1302015-07-31 17:58:14 +00008749
8750The ``cleanuppad`` instruction has several restrictions:
8751
8752- A cleanup block is a basic block which is the unwind destination of
8753 an exceptional instruction.
8754- A cleanup block must have a '``cleanuppad``' instruction as its
8755 first non-PHI instruction.
8756- There can be only one '``cleanuppad``' instruction within the
8757 cleanup block.
8758- A basic block that is not a cleanup block may not include a
8759 '``cleanuppad``' instruction.
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00008760- All '``cleanupret``'s and '``cleanupendpad``'s which consume a ``cleanuppad``
8761 must have the same exceptional successor.
David Majnemer654e1302015-07-31 17:58:14 +00008762- It is undefined behavior for control to transfer from a ``cleanuppad`` to a
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00008763 ``ret`` without first executing a ``cleanupret`` or ``cleanupendpad`` that
8764 consumes the ``cleanuppad``.
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00008765- It is undefined behavior for control to transfer from a ``cleanuppad`` to
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +00008766 itself without first executing a ``cleanupret`` or ``cleanupendpad`` that
8767 consumes the ``cleanuppad``.
David Majnemer654e1302015-07-31 17:58:14 +00008768
8769Example:
8770""""""""
8771
8772.. code-block:: llvm
8773
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +00008774 %tok = cleanuppad []
David Majnemer654e1302015-07-31 17:58:14 +00008775
Sean Silvab084af42012-12-07 10:36:55 +00008776.. _intrinsics:
8777
8778Intrinsic Functions
8779===================
8780
8781LLVM supports the notion of an "intrinsic function". These functions
8782have well known names and semantics and are required to follow certain
8783restrictions. Overall, these intrinsics represent an extension mechanism
8784for the LLVM language that does not require changing all of the
8785transformations in LLVM when adding to the language (or the bitcode
8786reader/writer, the parser, etc...).
8787
8788Intrinsic function names must all start with an "``llvm.``" prefix. This
8789prefix is reserved in LLVM for intrinsic names; thus, function names may
8790not begin with this prefix. Intrinsic functions must always be external
8791functions: you cannot define the body of intrinsic functions. Intrinsic
8792functions may only be used in call or invoke instructions: it is illegal
8793to take the address of an intrinsic function. Additionally, because
8794intrinsic functions are part of the LLVM language, it is required if any
8795are added that they be documented here.
8796
8797Some intrinsic functions can be overloaded, i.e., the intrinsic
8798represents a family of functions that perform the same operation but on
8799different data types. Because LLVM can represent over 8 million
8800different integer types, overloading is used commonly to allow an
8801intrinsic function to operate on any integer type. One or more of the
8802argument types or the result type can be overloaded to accept any
8803integer type. Argument types may also be defined as exactly matching a
8804previous argument's type or the result type. This allows an intrinsic
8805function which accepts multiple arguments, but needs all of them to be
8806of the same type, to only be overloaded with respect to a single
8807argument or the result.
8808
8809Overloaded intrinsics will have the names of its overloaded argument
8810types encoded into its function name, each preceded by a period. Only
8811those types which are overloaded result in a name suffix. Arguments
8812whose type is matched against another type do not. For example, the
8813``llvm.ctpop`` function can take an integer of any width and returns an
8814integer of exactly the same integer width. This leads to a family of
8815functions such as ``i8 @llvm.ctpop.i8(i8 %val)`` and
8816``i29 @llvm.ctpop.i29(i29 %val)``. Only one type, the return type, is
8817overloaded, and only one type suffix is required. Because the argument's
8818type is matched against the return type, it does not require its own
8819name suffix.
8820
8821To learn how to add an intrinsic function, please see the `Extending
8822LLVM Guide <ExtendingLLVM.html>`_.
8823
8824.. _int_varargs:
8825
8826Variable Argument Handling Intrinsics
8827-------------------------------------
8828
8829Variable argument support is defined in LLVM with the
8830:ref:`va_arg <i_va_arg>` instruction and these three intrinsic
8831functions. These functions are related to the similarly named macros
8832defined in the ``<stdarg.h>`` header file.
8833
8834All of these functions operate on arguments that use a target-specific
8835value type "``va_list``". The LLVM assembly language reference manual
8836does not define what this type is, so all transformations should be
8837prepared to handle these functions regardless of the type used.
8838
8839This example shows how the :ref:`va_arg <i_va_arg>` instruction and the
8840variable argument handling intrinsic functions are used.
8841
8842.. code-block:: llvm
8843
Tim Northoverab60bb92014-11-02 01:21:51 +00008844 ; This struct is different for every platform. For most platforms,
8845 ; it is merely an i8*.
8846 %struct.va_list = type { i8* }
8847
8848 ; For Unix x86_64 platforms, va_list is the following struct:
8849 ; %struct.va_list = type { i32, i32, i8*, i8* }
8850
Sean Silvab084af42012-12-07 10:36:55 +00008851 define i32 @test(i32 %X, ...) {
8852 ; Initialize variable argument processing
Tim Northoverab60bb92014-11-02 01:21:51 +00008853 %ap = alloca %struct.va_list
8854 %ap2 = bitcast %struct.va_list* %ap to i8*
Sean Silvab084af42012-12-07 10:36:55 +00008855 call void @llvm.va_start(i8* %ap2)
8856
8857 ; Read a single integer argument
Tim Northoverab60bb92014-11-02 01:21:51 +00008858 %tmp = va_arg i8* %ap2, i32
Sean Silvab084af42012-12-07 10:36:55 +00008859
8860 ; Demonstrate usage of llvm.va_copy and llvm.va_end
8861 %aq = alloca i8*
8862 %aq2 = bitcast i8** %aq to i8*
8863 call void @llvm.va_copy(i8* %aq2, i8* %ap2)
8864 call void @llvm.va_end(i8* %aq2)
8865
8866 ; Stop processing of arguments.
8867 call void @llvm.va_end(i8* %ap2)
8868 ret i32 %tmp
8869 }
8870
8871 declare void @llvm.va_start(i8*)
8872 declare void @llvm.va_copy(i8*, i8*)
8873 declare void @llvm.va_end(i8*)
8874
8875.. _int_va_start:
8876
8877'``llvm.va_start``' Intrinsic
8878^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8879
8880Syntax:
8881"""""""
8882
8883::
8884
Nick Lewycky04f6de02013-09-11 22:04:52 +00008885 declare void @llvm.va_start(i8* <arglist>)
Sean Silvab084af42012-12-07 10:36:55 +00008886
8887Overview:
8888"""""""""
8889
8890The '``llvm.va_start``' intrinsic initializes ``*<arglist>`` for
8891subsequent use by ``va_arg``.
8892
8893Arguments:
8894""""""""""
8895
8896The argument is a pointer to a ``va_list`` element to initialize.
8897
8898Semantics:
8899""""""""""
8900
8901The '``llvm.va_start``' intrinsic works just like the ``va_start`` macro
8902available in C. In a target-dependent way, it initializes the
8903``va_list`` element to which the argument points, so that the next call
8904to ``va_arg`` will produce the first variable argument passed to the
8905function. Unlike the C ``va_start`` macro, this intrinsic does not need
8906to know the last argument of the function as the compiler can figure
8907that out.
8908
8909'``llvm.va_end``' Intrinsic
8910^^^^^^^^^^^^^^^^^^^^^^^^^^^
8911
8912Syntax:
8913"""""""
8914
8915::
8916
8917 declare void @llvm.va_end(i8* <arglist>)
8918
8919Overview:
8920"""""""""
8921
8922The '``llvm.va_end``' intrinsic destroys ``*<arglist>``, which has been
8923initialized previously with ``llvm.va_start`` or ``llvm.va_copy``.
8924
8925Arguments:
8926""""""""""
8927
8928The argument is a pointer to a ``va_list`` to destroy.
8929
8930Semantics:
8931""""""""""
8932
8933The '``llvm.va_end``' intrinsic works just like the ``va_end`` macro
8934available in C. In a target-dependent way, it destroys the ``va_list``
8935element to which the argument points. Calls to
8936:ref:`llvm.va_start <int_va_start>` and
8937:ref:`llvm.va_copy <int_va_copy>` must be matched exactly with calls to
8938``llvm.va_end``.
8939
8940.. _int_va_copy:
8941
8942'``llvm.va_copy``' Intrinsic
8943^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8944
8945Syntax:
8946"""""""
8947
8948::
8949
8950 declare void @llvm.va_copy(i8* <destarglist>, i8* <srcarglist>)
8951
8952Overview:
8953"""""""""
8954
8955The '``llvm.va_copy``' intrinsic copies the current argument position
8956from the source argument list to the destination argument list.
8957
8958Arguments:
8959""""""""""
8960
8961The first argument is a pointer to a ``va_list`` element to initialize.
8962The second argument is a pointer to a ``va_list`` element to copy from.
8963
8964Semantics:
8965""""""""""
8966
8967The '``llvm.va_copy``' intrinsic works just like the ``va_copy`` macro
8968available in C. In a target-dependent way, it copies the source
8969``va_list`` element into the destination ``va_list`` element. This
8970intrinsic is necessary because the `` llvm.va_start`` intrinsic may be
8971arbitrarily complex and require, for example, memory allocation.
8972
8973Accurate Garbage Collection Intrinsics
8974--------------------------------------
8975
Philip Reamesc5b0f562015-02-25 23:52:06 +00008976LLVM's support for `Accurate Garbage Collection <GarbageCollection.html>`_
Mehdi Amini4a121fa2015-03-14 22:04:06 +00008977(GC) requires the frontend to generate code containing appropriate intrinsic
8978calls and select an appropriate GC strategy which knows how to lower these
Philip Reamesc5b0f562015-02-25 23:52:06 +00008979intrinsics in a manner which is appropriate for the target collector.
8980
Sean Silvab084af42012-12-07 10:36:55 +00008981These intrinsics allow identification of :ref:`GC roots on the
8982stack <int_gcroot>`, as well as garbage collector implementations that
8983require :ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers.
Philip Reamesc5b0f562015-02-25 23:52:06 +00008984Frontends for type-safe garbage collected languages should generate
Sean Silvab084af42012-12-07 10:36:55 +00008985these intrinsics to make use of the LLVM garbage collectors. For more
Philip Reamesf80bbff2015-02-25 23:45:20 +00008986details, see `Garbage Collection with LLVM <GarbageCollection.html>`_.
Sean Silvab084af42012-12-07 10:36:55 +00008987
Philip Reamesf80bbff2015-02-25 23:45:20 +00008988Experimental Statepoint Intrinsics
8989^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8990
8991LLVM provides an second experimental set of intrinsics for describing garbage
Sean Silvaa1190322015-08-06 22:56:48 +00008992collection safepoints in compiled code. These intrinsics are an alternative
Mehdi Amini4a121fa2015-03-14 22:04:06 +00008993to the ``llvm.gcroot`` intrinsics, but are compatible with the ones for
Sean Silvaa1190322015-08-06 22:56:48 +00008994:ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers. The
Mehdi Amini4a121fa2015-03-14 22:04:06 +00008995differences in approach are covered in the `Garbage Collection with LLVM
Sean Silvaa1190322015-08-06 22:56:48 +00008996<GarbageCollection.html>`_ documentation. The intrinsics themselves are
Philip Reamesf80bbff2015-02-25 23:45:20 +00008997described in :doc:`Statepoints`.
Sean Silvab084af42012-12-07 10:36:55 +00008998
8999.. _int_gcroot:
9000
9001'``llvm.gcroot``' Intrinsic
9002^^^^^^^^^^^^^^^^^^^^^^^^^^^
9003
9004Syntax:
9005"""""""
9006
9007::
9008
9009 declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
9010
9011Overview:
9012"""""""""
9013
9014The '``llvm.gcroot``' intrinsic declares the existence of a GC root to
9015the code generator, and allows some metadata to be associated with it.
9016
9017Arguments:
9018""""""""""
9019
9020The first argument specifies the address of a stack object that contains
9021the root pointer. The second pointer (which must be either a constant or
9022a global value address) contains the meta-data to be associated with the
9023root.
9024
9025Semantics:
9026""""""""""
9027
9028At runtime, a call to this intrinsic stores a null pointer into the
9029"ptrloc" location. At compile-time, the code generator generates
9030information to allow the runtime to find the pointer at GC safe points.
9031The '``llvm.gcroot``' intrinsic may only be used in a function which
9032:ref:`specifies a GC algorithm <gc>`.
9033
9034.. _int_gcread:
9035
9036'``llvm.gcread``' Intrinsic
9037^^^^^^^^^^^^^^^^^^^^^^^^^^^
9038
9039Syntax:
9040"""""""
9041
9042::
9043
9044 declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
9045
9046Overview:
9047"""""""""
9048
9049The '``llvm.gcread``' intrinsic identifies reads of references from heap
9050locations, allowing garbage collector implementations that require read
9051barriers.
9052
9053Arguments:
9054""""""""""
9055
9056The second argument is the address to read from, which should be an
9057address allocated from the garbage collector. The first object is a
9058pointer to the start of the referenced object, if needed by the language
9059runtime (otherwise null).
9060
9061Semantics:
9062""""""""""
9063
9064The '``llvm.gcread``' intrinsic has the same semantics as a load
9065instruction, but may be replaced with substantially more complex code by
9066the garbage collector runtime, as needed. The '``llvm.gcread``'
9067intrinsic may only be used in a function which :ref:`specifies a GC
9068algorithm <gc>`.
9069
9070.. _int_gcwrite:
9071
9072'``llvm.gcwrite``' Intrinsic
9073^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9074
9075Syntax:
9076"""""""
9077
9078::
9079
9080 declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
9081
9082Overview:
9083"""""""""
9084
9085The '``llvm.gcwrite``' intrinsic identifies writes of references to heap
9086locations, allowing garbage collector implementations that require write
9087barriers (such as generational or reference counting collectors).
9088
9089Arguments:
9090""""""""""
9091
9092The first argument is the reference to store, the second is the start of
9093the object to store it to, and the third is the address of the field of
9094Obj to store to. If the runtime does not require a pointer to the
9095object, Obj may be null.
9096
9097Semantics:
9098""""""""""
9099
9100The '``llvm.gcwrite``' intrinsic has the same semantics as a store
9101instruction, but may be replaced with substantially more complex code by
9102the garbage collector runtime, as needed. The '``llvm.gcwrite``'
9103intrinsic may only be used in a function which :ref:`specifies a GC
9104algorithm <gc>`.
9105
9106Code Generator Intrinsics
9107-------------------------
9108
9109These intrinsics are provided by LLVM to expose special features that
9110may only be implemented with code generator support.
9111
9112'``llvm.returnaddress``' Intrinsic
9113^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9114
9115Syntax:
9116"""""""
9117
9118::
9119
9120 declare i8 *@llvm.returnaddress(i32 <level>)
9121
9122Overview:
9123"""""""""
9124
9125The '``llvm.returnaddress``' intrinsic attempts to compute a
9126target-specific value indicating the return address of the current
9127function or one of its callers.
9128
9129Arguments:
9130""""""""""
9131
9132The argument to this intrinsic indicates which function to return the
9133address for. Zero indicates the calling function, one indicates its
9134caller, etc. The argument is **required** to be a constant integer
9135value.
9136
9137Semantics:
9138""""""""""
9139
9140The '``llvm.returnaddress``' intrinsic either returns a pointer
9141indicating the return address of the specified call frame, or zero if it
9142cannot be identified. The value returned by this intrinsic is likely to
9143be incorrect or 0 for arguments other than zero, so it should only be
9144used for debugging purposes.
9145
9146Note that calling this intrinsic does not prevent function inlining or
9147other aggressive transformations, so the value returned may not be that
9148of the obvious source-language caller.
9149
9150'``llvm.frameaddress``' Intrinsic
9151^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9152
9153Syntax:
9154"""""""
9155
9156::
9157
9158 declare i8* @llvm.frameaddress(i32 <level>)
9159
9160Overview:
9161"""""""""
9162
9163The '``llvm.frameaddress``' intrinsic attempts to return the
9164target-specific frame pointer value for the specified stack frame.
9165
9166Arguments:
9167""""""""""
9168
9169The argument to this intrinsic indicates which function to return the
9170frame pointer for. Zero indicates the calling function, one indicates
9171its caller, etc. The argument is **required** to be a constant integer
9172value.
9173
9174Semantics:
9175""""""""""
9176
9177The '``llvm.frameaddress``' intrinsic either returns a pointer
9178indicating the frame address of the specified call frame, or zero if it
9179cannot be identified. The value returned by this intrinsic is likely to
9180be incorrect or 0 for arguments other than zero, so it should only be
9181used for debugging purposes.
9182
9183Note that calling this intrinsic does not prevent function inlining or
9184other aggressive transformations, so the value returned may not be that
9185of the obvious source-language caller.
9186
Reid Kleckner60381792015-07-07 22:25:32 +00009187'``llvm.localescape``' and '``llvm.localrecover``' Intrinsics
Reid Klecknere9b89312015-01-13 00:48:10 +00009188^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9189
9190Syntax:
9191"""""""
9192
9193::
9194
Reid Kleckner60381792015-07-07 22:25:32 +00009195 declare void @llvm.localescape(...)
9196 declare i8* @llvm.localrecover(i8* %func, i8* %fp, i32 %idx)
Reid Klecknere9b89312015-01-13 00:48:10 +00009197
9198Overview:
9199"""""""""
9200
Reid Kleckner60381792015-07-07 22:25:32 +00009201The '``llvm.localescape``' intrinsic escapes offsets of a collection of static
9202allocas, and the '``llvm.localrecover``' intrinsic applies those offsets to a
Reid Klecknercfb9ce52015-03-05 18:26:34 +00009203live frame pointer to recover the address of the allocation. The offset is
Reid Kleckner60381792015-07-07 22:25:32 +00009204computed during frame layout of the caller of ``llvm.localescape``.
Reid Klecknere9b89312015-01-13 00:48:10 +00009205
9206Arguments:
9207""""""""""
9208
Reid Kleckner60381792015-07-07 22:25:32 +00009209All arguments to '``llvm.localescape``' must be pointers to static allocas or
9210casts of static allocas. Each function can only call '``llvm.localescape``'
Reid Klecknercfb9ce52015-03-05 18:26:34 +00009211once, and it can only do so from the entry block.
Reid Klecknere9b89312015-01-13 00:48:10 +00009212
Reid Kleckner60381792015-07-07 22:25:32 +00009213The ``func`` argument to '``llvm.localrecover``' must be a constant
Reid Klecknere9b89312015-01-13 00:48:10 +00009214bitcasted pointer to a function defined in the current module. The code
9215generator cannot determine the frame allocation offset of functions defined in
9216other modules.
9217
Reid Klecknerd5afc62f2015-07-07 23:23:03 +00009218The ``fp`` argument to '``llvm.localrecover``' must be a frame pointer of a
9219call frame that is currently live. The return value of '``llvm.localaddress``'
9220is one way to produce such a value, but various runtimes also expose a suitable
9221pointer in platform-specific ways.
Reid Klecknere9b89312015-01-13 00:48:10 +00009222
Reid Kleckner60381792015-07-07 22:25:32 +00009223The ``idx`` argument to '``llvm.localrecover``' indicates which alloca passed to
9224'``llvm.localescape``' to recover. It is zero-indexed.
Reid Klecknercfb9ce52015-03-05 18:26:34 +00009225
Reid Klecknere9b89312015-01-13 00:48:10 +00009226Semantics:
9227""""""""""
9228
Reid Kleckner60381792015-07-07 22:25:32 +00009229These intrinsics allow a group of functions to share access to a set of local
9230stack allocations of a one parent function. The parent function may call the
9231'``llvm.localescape``' intrinsic once from the function entry block, and the
9232child functions can use '``llvm.localrecover``' to access the escaped allocas.
9233The '``llvm.localescape``' intrinsic blocks inlining, as inlining changes where
9234the escaped allocas are allocated, which would break attempts to use
9235'``llvm.localrecover``'.
Reid Klecknere9b89312015-01-13 00:48:10 +00009236
Renato Golinc7aea402014-05-06 16:51:25 +00009237.. _int_read_register:
9238.. _int_write_register:
9239
9240'``llvm.read_register``' and '``llvm.write_register``' Intrinsics
9241^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9242
9243Syntax:
9244"""""""
9245
9246::
9247
9248 declare i32 @llvm.read_register.i32(metadata)
9249 declare i64 @llvm.read_register.i64(metadata)
9250 declare void @llvm.write_register.i32(metadata, i32 @value)
9251 declare void @llvm.write_register.i64(metadata, i64 @value)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00009252 !0 = !{!"sp\00"}
Renato Golinc7aea402014-05-06 16:51:25 +00009253
9254Overview:
9255"""""""""
9256
9257The '``llvm.read_register``' and '``llvm.write_register``' intrinsics
9258provides access to the named register. The register must be valid on
9259the architecture being compiled to. The type needs to be compatible
9260with the register being read.
9261
9262Semantics:
9263""""""""""
9264
9265The '``llvm.read_register``' intrinsic returns the current value of the
9266register, where possible. The '``llvm.write_register``' intrinsic sets
9267the current value of the register, where possible.
9268
9269This is useful to implement named register global variables that need
9270to always be mapped to a specific register, as is common practice on
9271bare-metal programs including OS kernels.
9272
9273The compiler doesn't check for register availability or use of the used
9274register in surrounding code, including inline assembly. Because of that,
9275allocatable registers are not supported.
9276
9277Warning: So far it only works with the stack pointer on selected
Tim Northover3b0846e2014-05-24 12:50:23 +00009278architectures (ARM, AArch64, PowerPC and x86_64). Significant amount of
Renato Golinc7aea402014-05-06 16:51:25 +00009279work is needed to support other registers and even more so, allocatable
9280registers.
9281
Sean Silvab084af42012-12-07 10:36:55 +00009282.. _int_stacksave:
9283
9284'``llvm.stacksave``' Intrinsic
9285^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9286
9287Syntax:
9288"""""""
9289
9290::
9291
9292 declare i8* @llvm.stacksave()
9293
9294Overview:
9295"""""""""
9296
9297The '``llvm.stacksave``' intrinsic is used to remember the current state
9298of the function stack, for use with
9299:ref:`llvm.stackrestore <int_stackrestore>`. This is useful for
9300implementing language features like scoped automatic variable sized
9301arrays in C99.
9302
9303Semantics:
9304""""""""""
9305
9306This intrinsic returns a opaque pointer value that can be passed to
9307:ref:`llvm.stackrestore <int_stackrestore>`. When an
9308``llvm.stackrestore`` intrinsic is executed with a value saved from
9309``llvm.stacksave``, it effectively restores the state of the stack to
9310the state it was in when the ``llvm.stacksave`` intrinsic executed. In
9311practice, this pops any :ref:`alloca <i_alloca>` blocks from the stack that
9312were allocated after the ``llvm.stacksave`` was executed.
9313
9314.. _int_stackrestore:
9315
9316'``llvm.stackrestore``' Intrinsic
9317^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9318
9319Syntax:
9320"""""""
9321
9322::
9323
9324 declare void @llvm.stackrestore(i8* %ptr)
9325
9326Overview:
9327"""""""""
9328
9329The '``llvm.stackrestore``' intrinsic is used to restore the state of
9330the function stack to the state it was in when the corresponding
9331:ref:`llvm.stacksave <int_stacksave>` intrinsic executed. This is
9332useful for implementing language features like scoped automatic variable
9333sized arrays in C99.
9334
9335Semantics:
9336""""""""""
9337
9338See the description for :ref:`llvm.stacksave <int_stacksave>`.
9339
Yury Gribovd7dbb662015-12-01 11:40:55 +00009340.. _int_get_dynamic_area_offset:
9341
9342'``llvm.get.dynamic.area.offset``' Intrinsic
Yury Gribov81f3f152015-12-01 13:24:48 +00009343^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Gribovd7dbb662015-12-01 11:40:55 +00009344
9345Syntax:
9346"""""""
9347
9348::
9349
9350 declare i32 @llvm.get.dynamic.area.offset.i32()
9351 declare i64 @llvm.get.dynamic.area.offset.i64()
9352
9353 Overview:
9354 """""""""
9355
9356 The '``llvm.get.dynamic.area.offset.*``' intrinsic family is used to
9357 get the offset from native stack pointer to the address of the most
9358 recent dynamic alloca on the caller's stack. These intrinsics are
9359 intendend for use in combination with
9360 :ref:`llvm.stacksave <int_stacksave>` to get a
9361 pointer to the most recent dynamic alloca. This is useful, for example,
9362 for AddressSanitizer's stack unpoisoning routines.
9363
9364Semantics:
9365""""""""""
9366
9367 These intrinsics return a non-negative integer value that can be used to
9368 get the address of the most recent dynamic alloca, allocated by :ref:`alloca <i_alloca>`
9369 on the caller's stack. In particular, for targets where stack grows downwards,
9370 adding this offset to the native stack pointer would get the address of the most
9371 recent dynamic alloca. For targets where stack grows upwards, the situation is a bit more
9372 complicated, because substracting this value from stack pointer would get the address
9373 one past the end of the most recent dynamic alloca.
9374
9375 Although for most targets `llvm.get.dynamic.area.offset <int_get_dynamic_area_offset>`
9376 returns just a zero, for others, such as PowerPC and PowerPC64, it returns a
9377 compile-time-known constant value.
9378
9379 The return value type of :ref:`llvm.get.dynamic.area.offset <int_get_dynamic_area_offset>`
9380 must match the target's generic address space's (address space 0) pointer type.
9381
Sean Silvab084af42012-12-07 10:36:55 +00009382'``llvm.prefetch``' Intrinsic
9383^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9384
9385Syntax:
9386"""""""
9387
9388::
9389
9390 declare void @llvm.prefetch(i8* <address>, i32 <rw>, i32 <locality>, i32 <cache type>)
9391
9392Overview:
9393"""""""""
9394
9395The '``llvm.prefetch``' intrinsic is a hint to the code generator to
9396insert a prefetch instruction if supported; otherwise, it is a noop.
9397Prefetches have no effect on the behavior of the program but can change
9398its performance characteristics.
9399
9400Arguments:
9401""""""""""
9402
9403``address`` is the address to be prefetched, ``rw`` is the specifier
9404determining if the fetch should be for a read (0) or write (1), and
9405``locality`` is a temporal locality specifier ranging from (0) - no
9406locality, to (3) - extremely local keep in cache. The ``cache type``
9407specifies whether the prefetch is performed on the data (1) or
9408instruction (0) cache. The ``rw``, ``locality`` and ``cache type``
9409arguments must be constant integers.
9410
9411Semantics:
9412""""""""""
9413
9414This intrinsic does not modify the behavior of the program. In
9415particular, prefetches cannot trap and do not produce a value. On
9416targets that support this intrinsic, the prefetch can provide hints to
9417the processor cache for better performance.
9418
9419'``llvm.pcmarker``' Intrinsic
9420^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9421
9422Syntax:
9423"""""""
9424
9425::
9426
9427 declare void @llvm.pcmarker(i32 <id>)
9428
9429Overview:
9430"""""""""
9431
9432The '``llvm.pcmarker``' intrinsic is a method to export a Program
9433Counter (PC) in a region of code to simulators and other tools. The
9434method is target specific, but it is expected that the marker will use
9435exported symbols to transmit the PC of the marker. The marker makes no
9436guarantees that it will remain with any specific instruction after
9437optimizations. It is possible that the presence of a marker will inhibit
9438optimizations. The intended use is to be inserted after optimizations to
9439allow correlations of simulation runs.
9440
9441Arguments:
9442""""""""""
9443
9444``id`` is a numerical id identifying the marker.
9445
9446Semantics:
9447""""""""""
9448
9449This intrinsic does not modify the behavior of the program. Backends
9450that do not support this intrinsic may ignore it.
9451
9452'``llvm.readcyclecounter``' Intrinsic
9453^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9454
9455Syntax:
9456"""""""
9457
9458::
9459
9460 declare i64 @llvm.readcyclecounter()
9461
9462Overview:
9463"""""""""
9464
9465The '``llvm.readcyclecounter``' intrinsic provides access to the cycle
9466counter register (or similar low latency, high accuracy clocks) on those
9467targets that support it. On X86, it should map to RDTSC. On Alpha, it
9468should map to RPCC. As the backing counters overflow quickly (on the
9469order of 9 seconds on alpha), this should only be used for small
9470timings.
9471
9472Semantics:
9473""""""""""
9474
9475When directly supported, reading the cycle counter should not modify any
9476memory. Implementations are allowed to either return a application
9477specific value or a system wide value. On backends without support, this
9478is lowered to a constant 0.
9479
Tim Northoverbc933082013-05-23 19:11:20 +00009480Note that runtime support may be conditional on the privilege-level code is
9481running at and the host platform.
9482
Renato Golinc0a3c1d2014-03-26 12:52:28 +00009483'``llvm.clear_cache``' Intrinsic
9484^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9485
9486Syntax:
9487"""""""
9488
9489::
9490
9491 declare void @llvm.clear_cache(i8*, i8*)
9492
9493Overview:
9494"""""""""
9495
Joerg Sonnenberger03014d62014-03-26 14:35:21 +00009496The '``llvm.clear_cache``' intrinsic ensures visibility of modifications
9497in the specified range to the execution unit of the processor. On
9498targets with non-unified instruction and data cache, the implementation
9499flushes the instruction cache.
Renato Golinc0a3c1d2014-03-26 12:52:28 +00009500
9501Semantics:
9502""""""""""
9503
Joerg Sonnenberger03014d62014-03-26 14:35:21 +00009504On platforms with coherent instruction and data caches (e.g. x86), this
9505intrinsic is a nop. On platforms with non-coherent instruction and data
Alp Toker16f98b22014-04-09 14:47:27 +00009506cache (e.g. ARM, MIPS), the intrinsic is lowered either to appropriate
Joerg Sonnenberger03014d62014-03-26 14:35:21 +00009507instructions or a system call, if cache flushing requires special
9508privileges.
Renato Golinc0a3c1d2014-03-26 12:52:28 +00009509
Sean Silvad02bf3e2014-04-07 22:29:53 +00009510The default behavior is to emit a call to ``__clear_cache`` from the run
Joerg Sonnenberger03014d62014-03-26 14:35:21 +00009511time library.
Renato Golin93010e62014-03-26 14:01:32 +00009512
Joerg Sonnenberger03014d62014-03-26 14:35:21 +00009513This instrinsic does *not* empty the instruction pipeline. Modifications
9514of the current function are outside the scope of the intrinsic.
Renato Golinc0a3c1d2014-03-26 12:52:28 +00009515
Justin Bogner61ba2e32014-12-08 18:02:35 +00009516'``llvm.instrprof_increment``' Intrinsic
9517^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9518
9519Syntax:
9520"""""""
9521
9522::
9523
9524 declare void @llvm.instrprof_increment(i8* <name>, i64 <hash>,
9525 i32 <num-counters>, i32 <index>)
9526
9527Overview:
9528"""""""""
9529
9530The '``llvm.instrprof_increment``' intrinsic can be emitted by a
9531frontend for use with instrumentation based profiling. These will be
9532lowered by the ``-instrprof`` pass to generate execution counts of a
9533program at runtime.
9534
9535Arguments:
9536""""""""""
9537
9538The first argument is a pointer to a global variable containing the
9539name of the entity being instrumented. This should generally be the
9540(mangled) function name for a set of counters.
9541
9542The second argument is a hash value that can be used by the consumer
9543of the profile data to detect changes to the instrumented source, and
9544the third is the number of counters associated with ``name``. It is an
9545error if ``hash`` or ``num-counters`` differ between two instances of
9546``instrprof_increment`` that refer to the same name.
9547
9548The last argument refers to which of the counters for ``name`` should
9549be incremented. It should be a value between 0 and ``num-counters``.
9550
9551Semantics:
9552""""""""""
9553
9554This intrinsic represents an increment of a profiling counter. It will
9555cause the ``-instrprof`` pass to generate the appropriate data
9556structures and the code to increment the appropriate value, in a
9557format that can be written out by a compiler runtime and consumed via
9558the ``llvm-profdata`` tool.
9559
Betul Buyukkurt6fac1742015-11-18 18:14:55 +00009560'``llvm.instrprof_value_profile``' Intrinsic
9561^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9562
9563Syntax:
9564"""""""
9565
9566::
9567
9568 declare void @llvm.instrprof_value_profile(i8* <name>, i64 <hash>,
9569 i64 <value>, i32 <value_kind>,
9570 i32 <index>)
9571
9572Overview:
9573"""""""""
9574
9575The '``llvm.instrprof_value_profile``' intrinsic can be emitted by a
9576frontend for use with instrumentation based profiling. This will be
9577lowered by the ``-instrprof`` pass to find out the target values,
9578instrumented expressions take in a program at runtime.
9579
9580Arguments:
9581""""""""""
9582
9583The first argument is a pointer to a global variable containing the
9584name of the entity being instrumented. ``name`` should generally be the
9585(mangled) function name for a set of counters.
9586
9587The second argument is a hash value that can be used by the consumer
9588of the profile data to detect changes to the instrumented source. It
9589is an error if ``hash`` differs between two instances of
9590``llvm.instrprof_*`` that refer to the same name.
9591
9592The third argument is the value of the expression being profiled. The profiled
9593expression's value should be representable as an unsigned 64-bit value. The
9594fourth argument represents the kind of value profiling that is being done. The
9595supported value profiling kinds are enumerated through the
9596``InstrProfValueKind`` type declared in the
9597``<include/llvm/ProfileData/InstrProf.h>`` header file. The last argument is the
9598index of the instrumented expression within ``name``. It should be >= 0.
9599
9600Semantics:
9601""""""""""
9602
9603This intrinsic represents the point where a call to a runtime routine
9604should be inserted for value profiling of target expressions. ``-instrprof``
9605pass will generate the appropriate data structures and replace the
9606``llvm.instrprof_value_profile`` intrinsic with the call to the profile
9607runtime library with proper arguments.
9608
Sean Silvab084af42012-12-07 10:36:55 +00009609Standard C Library Intrinsics
9610-----------------------------
9611
9612LLVM provides intrinsics for a few important standard C library
9613functions. These intrinsics allow source-language front-ends to pass
9614information about the alignment of the pointer arguments to the code
9615generator, providing opportunity for more efficient code generation.
9616
9617.. _int_memcpy:
9618
9619'``llvm.memcpy``' Intrinsic
9620^^^^^^^^^^^^^^^^^^^^^^^^^^^
9621
9622Syntax:
9623"""""""
9624
9625This is an overloaded intrinsic. You can use ``llvm.memcpy`` on any
9626integer bit width and for different address spaces. Not all targets
9627support all bit widths however.
9628
9629::
9630
9631 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* <dest>, i8* <src>,
9632 i32 <len>, i32 <align>, i1 <isvolatile>)
9633 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* <dest>, i8* <src>,
9634 i64 <len>, i32 <align>, i1 <isvolatile>)
9635
9636Overview:
9637"""""""""
9638
9639The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
9640source location to the destination location.
9641
9642Note that, unlike the standard libc function, the ``llvm.memcpy.*``
9643intrinsics do not return a value, takes extra alignment/isvolatile
9644arguments and the pointers can be in specified address spaces.
9645
9646Arguments:
9647""""""""""
9648
9649The first argument is a pointer to the destination, the second is a
9650pointer to the source. The third argument is an integer argument
9651specifying the number of bytes to copy, the fourth argument is the
9652alignment of the source and destination locations, and the fifth is a
9653boolean indicating a volatile access.
9654
9655If the call to this intrinsic has an alignment value that is not 0 or 1,
9656then the caller guarantees that both the source and destination pointers
9657are aligned to that boundary.
9658
9659If the ``isvolatile`` parameter is ``true``, the ``llvm.memcpy`` call is
9660a :ref:`volatile operation <volatile>`. The detailed access behavior is not
9661very cleanly specified and it is unwise to depend on it.
9662
9663Semantics:
9664""""""""""
9665
9666The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
9667source location to the destination location, which are not allowed to
9668overlap. It copies "len" bytes of memory over. If the argument is known
9669to be aligned to some boundary, this can be specified as the fourth
Bill Wendling61163152013-10-18 23:26:55 +00009670argument, otherwise it should be set to 0 or 1 (both meaning no alignment).
Sean Silvab084af42012-12-07 10:36:55 +00009671
9672'``llvm.memmove``' Intrinsic
9673^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9674
9675Syntax:
9676"""""""
9677
9678This is an overloaded intrinsic. You can use llvm.memmove on any integer
9679bit width and for different address space. Not all targets support all
9680bit widths however.
9681
9682::
9683
9684 declare void @llvm.memmove.p0i8.p0i8.i32(i8* <dest>, i8* <src>,
9685 i32 <len>, i32 <align>, i1 <isvolatile>)
9686 declare void @llvm.memmove.p0i8.p0i8.i64(i8* <dest>, i8* <src>,
9687 i64 <len>, i32 <align>, i1 <isvolatile>)
9688
9689Overview:
9690"""""""""
9691
9692The '``llvm.memmove.*``' intrinsics move a block of memory from the
9693source location to the destination location. It is similar to the
9694'``llvm.memcpy``' intrinsic but allows the two memory locations to
9695overlap.
9696
9697Note that, unlike the standard libc function, the ``llvm.memmove.*``
9698intrinsics do not return a value, takes extra alignment/isvolatile
9699arguments and the pointers can be in specified address spaces.
9700
9701Arguments:
9702""""""""""
9703
9704The first argument is a pointer to the destination, the second is a
9705pointer to the source. The third argument is an integer argument
9706specifying the number of bytes to copy, the fourth argument is the
9707alignment of the source and destination locations, and the fifth is a
9708boolean indicating a volatile access.
9709
9710If the call to this intrinsic has an alignment value that is not 0 or 1,
9711then the caller guarantees that the source and destination pointers are
9712aligned to that boundary.
9713
9714If the ``isvolatile`` parameter is ``true``, the ``llvm.memmove`` call
9715is a :ref:`volatile operation <volatile>`. The detailed access behavior is
9716not very cleanly specified and it is unwise to depend on it.
9717
9718Semantics:
9719""""""""""
9720
9721The '``llvm.memmove.*``' intrinsics copy a block of memory from the
9722source location to the destination location, which may overlap. It
9723copies "len" bytes of memory over. If the argument is known to be
9724aligned to some boundary, this can be specified as the fourth argument,
Bill Wendling61163152013-10-18 23:26:55 +00009725otherwise it should be set to 0 or 1 (both meaning no alignment).
Sean Silvab084af42012-12-07 10:36:55 +00009726
9727'``llvm.memset.*``' Intrinsics
9728^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9729
9730Syntax:
9731"""""""
9732
9733This is an overloaded intrinsic. You can use llvm.memset on any integer
9734bit width and for different address spaces. However, not all targets
9735support all bit widths.
9736
9737::
9738
9739 declare void @llvm.memset.p0i8.i32(i8* <dest>, i8 <val>,
9740 i32 <len>, i32 <align>, i1 <isvolatile>)
9741 declare void @llvm.memset.p0i8.i64(i8* <dest>, i8 <val>,
9742 i64 <len>, i32 <align>, i1 <isvolatile>)
9743
9744Overview:
9745"""""""""
9746
9747The '``llvm.memset.*``' intrinsics fill a block of memory with a
9748particular byte value.
9749
9750Note that, unlike the standard libc function, the ``llvm.memset``
9751intrinsic does not return a value and takes extra alignment/volatile
9752arguments. Also, the destination can be in an arbitrary address space.
9753
9754Arguments:
9755""""""""""
9756
9757The first argument is a pointer to the destination to fill, the second
9758is the byte value with which to fill it, the third argument is an
9759integer argument specifying the number of bytes to fill, and the fourth
9760argument is the known alignment of the destination location.
9761
9762If the call to this intrinsic has an alignment value that is not 0 or 1,
9763then the caller guarantees that the destination pointer is aligned to
9764that boundary.
9765
9766If the ``isvolatile`` parameter is ``true``, the ``llvm.memset`` call is
9767a :ref:`volatile operation <volatile>`. The detailed access behavior is not
9768very cleanly specified and it is unwise to depend on it.
9769
9770Semantics:
9771""""""""""
9772
9773The '``llvm.memset.*``' intrinsics fill "len" bytes of memory starting
9774at the destination location. If the argument is known to be aligned to
9775some boundary, this can be specified as the fourth argument, otherwise
Bill Wendling61163152013-10-18 23:26:55 +00009776it should be set to 0 or 1 (both meaning no alignment).
Sean Silvab084af42012-12-07 10:36:55 +00009777
9778'``llvm.sqrt.*``' Intrinsic
9779^^^^^^^^^^^^^^^^^^^^^^^^^^^
9780
9781Syntax:
9782"""""""
9783
9784This is an overloaded intrinsic. You can use ``llvm.sqrt`` on any
9785floating point or vector of floating point type. Not all targets support
9786all types however.
9787
9788::
9789
9790 declare float @llvm.sqrt.f32(float %Val)
9791 declare double @llvm.sqrt.f64(double %Val)
9792 declare x86_fp80 @llvm.sqrt.f80(x86_fp80 %Val)
9793 declare fp128 @llvm.sqrt.f128(fp128 %Val)
9794 declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
9795
9796Overview:
9797"""""""""
9798
9799The '``llvm.sqrt``' intrinsics return the sqrt of the specified operand,
9800returning the same value as the libm '``sqrt``' functions would. Unlike
9801``sqrt`` in libm, however, ``llvm.sqrt`` has undefined behavior for
9802negative numbers other than -0.0 (which allows for better optimization,
9803because there is no need to worry about errno being set).
9804``llvm.sqrt(-0.0)`` is defined to return -0.0 like IEEE sqrt.
9805
9806Arguments:
9807""""""""""
9808
9809The argument and return value are floating point numbers of the same
9810type.
9811
9812Semantics:
9813""""""""""
9814
9815This function returns the sqrt of the specified operand if it is a
9816nonnegative floating point number.
9817
9818'``llvm.powi.*``' Intrinsic
9819^^^^^^^^^^^^^^^^^^^^^^^^^^^
9820
9821Syntax:
9822"""""""
9823
9824This is an overloaded intrinsic. You can use ``llvm.powi`` on any
9825floating point or vector of floating point type. Not all targets support
9826all types however.
9827
9828::
9829
9830 declare float @llvm.powi.f32(float %Val, i32 %power)
9831 declare double @llvm.powi.f64(double %Val, i32 %power)
9832 declare x86_fp80 @llvm.powi.f80(x86_fp80 %Val, i32 %power)
9833 declare fp128 @llvm.powi.f128(fp128 %Val, i32 %power)
9834 declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128 %Val, i32 %power)
9835
9836Overview:
9837"""""""""
9838
9839The '``llvm.powi.*``' intrinsics return the first operand raised to the
9840specified (positive or negative) power. The order of evaluation of
9841multiplications is not defined. When a vector of floating point type is
9842used, the second argument remains a scalar integer value.
9843
9844Arguments:
9845""""""""""
9846
9847The second argument is an integer power, and the first is a value to
9848raise to that power.
9849
9850Semantics:
9851""""""""""
9852
9853This function returns the first value raised to the second power with an
9854unspecified sequence of rounding operations.
9855
9856'``llvm.sin.*``' Intrinsic
9857^^^^^^^^^^^^^^^^^^^^^^^^^^
9858
9859Syntax:
9860"""""""
9861
9862This is an overloaded intrinsic. You can use ``llvm.sin`` on any
9863floating point or vector of floating point type. Not all targets support
9864all types however.
9865
9866::
9867
9868 declare float @llvm.sin.f32(float %Val)
9869 declare double @llvm.sin.f64(double %Val)
9870 declare x86_fp80 @llvm.sin.f80(x86_fp80 %Val)
9871 declare fp128 @llvm.sin.f128(fp128 %Val)
9872 declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128 %Val)
9873
9874Overview:
9875"""""""""
9876
9877The '``llvm.sin.*``' intrinsics return the sine of the operand.
9878
9879Arguments:
9880""""""""""
9881
9882The argument and return value are floating point numbers of the same
9883type.
9884
9885Semantics:
9886""""""""""
9887
9888This function returns the sine of the specified operand, returning the
9889same values as the libm ``sin`` functions would, and handles error
9890conditions in the same way.
9891
9892'``llvm.cos.*``' Intrinsic
9893^^^^^^^^^^^^^^^^^^^^^^^^^^
9894
9895Syntax:
9896"""""""
9897
9898This is an overloaded intrinsic. You can use ``llvm.cos`` on any
9899floating point or vector of floating point type. Not all targets support
9900all types however.
9901
9902::
9903
9904 declare float @llvm.cos.f32(float %Val)
9905 declare double @llvm.cos.f64(double %Val)
9906 declare x86_fp80 @llvm.cos.f80(x86_fp80 %Val)
9907 declare fp128 @llvm.cos.f128(fp128 %Val)
9908 declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128 %Val)
9909
9910Overview:
9911"""""""""
9912
9913The '``llvm.cos.*``' intrinsics return the cosine of the operand.
9914
9915Arguments:
9916""""""""""
9917
9918The argument and return value are floating point numbers of the same
9919type.
9920
9921Semantics:
9922""""""""""
9923
9924This function returns the cosine of the specified operand, returning the
9925same values as the libm ``cos`` functions would, and handles error
9926conditions in the same way.
9927
9928'``llvm.pow.*``' Intrinsic
9929^^^^^^^^^^^^^^^^^^^^^^^^^^
9930
9931Syntax:
9932"""""""
9933
9934This is an overloaded intrinsic. You can use ``llvm.pow`` on any
9935floating point or vector of floating point type. Not all targets support
9936all types however.
9937
9938::
9939
9940 declare float @llvm.pow.f32(float %Val, float %Power)
9941 declare double @llvm.pow.f64(double %Val, double %Power)
9942 declare x86_fp80 @llvm.pow.f80(x86_fp80 %Val, x86_fp80 %Power)
9943 declare fp128 @llvm.pow.f128(fp128 %Val, fp128 %Power)
9944 declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128 %Val, ppc_fp128 Power)
9945
9946Overview:
9947"""""""""
9948
9949The '``llvm.pow.*``' intrinsics return the first operand raised to the
9950specified (positive or negative) power.
9951
9952Arguments:
9953""""""""""
9954
9955The second argument is a floating point power, and the first is a value
9956to raise to that power.
9957
9958Semantics:
9959""""""""""
9960
9961This function returns the first value raised to the second power,
9962returning the same values as the libm ``pow`` functions would, and
9963handles error conditions in the same way.
9964
9965'``llvm.exp.*``' Intrinsic
9966^^^^^^^^^^^^^^^^^^^^^^^^^^
9967
9968Syntax:
9969"""""""
9970
9971This is an overloaded intrinsic. You can use ``llvm.exp`` on any
9972floating point or vector of floating point type. Not all targets support
9973all types however.
9974
9975::
9976
9977 declare float @llvm.exp.f32(float %Val)
9978 declare double @llvm.exp.f64(double %Val)
9979 declare x86_fp80 @llvm.exp.f80(x86_fp80 %Val)
9980 declare fp128 @llvm.exp.f128(fp128 %Val)
9981 declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128 %Val)
9982
9983Overview:
9984"""""""""
9985
9986The '``llvm.exp.*``' intrinsics perform the exp function.
9987
9988Arguments:
9989""""""""""
9990
9991The argument and return value are floating point numbers of the same
9992type.
9993
9994Semantics:
9995""""""""""
9996
9997This function returns the same values as the libm ``exp`` functions
9998would, and handles error conditions in the same way.
9999
10000'``llvm.exp2.*``' Intrinsic
10001^^^^^^^^^^^^^^^^^^^^^^^^^^^
10002
10003Syntax:
10004"""""""
10005
10006This is an overloaded intrinsic. You can use ``llvm.exp2`` on any
10007floating point or vector of floating point type. Not all targets support
10008all types however.
10009
10010::
10011
10012 declare float @llvm.exp2.f32(float %Val)
10013 declare double @llvm.exp2.f64(double %Val)
10014 declare x86_fp80 @llvm.exp2.f80(x86_fp80 %Val)
10015 declare fp128 @llvm.exp2.f128(fp128 %Val)
10016 declare ppc_fp128 @llvm.exp2.ppcf128(ppc_fp128 %Val)
10017
10018Overview:
10019"""""""""
10020
10021The '``llvm.exp2.*``' intrinsics perform the exp2 function.
10022
10023Arguments:
10024""""""""""
10025
10026The argument and return value are floating point numbers of the same
10027type.
10028
10029Semantics:
10030""""""""""
10031
10032This function returns the same values as the libm ``exp2`` functions
10033would, and handles error conditions in the same way.
10034
10035'``llvm.log.*``' Intrinsic
10036^^^^^^^^^^^^^^^^^^^^^^^^^^
10037
10038Syntax:
10039"""""""
10040
10041This is an overloaded intrinsic. You can use ``llvm.log`` on any
10042floating point or vector of floating point type. Not all targets support
10043all types however.
10044
10045::
10046
10047 declare float @llvm.log.f32(float %Val)
10048 declare double @llvm.log.f64(double %Val)
10049 declare x86_fp80 @llvm.log.f80(x86_fp80 %Val)
10050 declare fp128 @llvm.log.f128(fp128 %Val)
10051 declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128 %Val)
10052
10053Overview:
10054"""""""""
10055
10056The '``llvm.log.*``' intrinsics perform the log function.
10057
10058Arguments:
10059""""""""""
10060
10061The argument and return value are floating point numbers of the same
10062type.
10063
10064Semantics:
10065""""""""""
10066
10067This function returns the same values as the libm ``log`` functions
10068would, and handles error conditions in the same way.
10069
10070'``llvm.log10.*``' Intrinsic
10071^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10072
10073Syntax:
10074"""""""
10075
10076This is an overloaded intrinsic. You can use ``llvm.log10`` on any
10077floating point or vector of floating point type. Not all targets support
10078all types however.
10079
10080::
10081
10082 declare float @llvm.log10.f32(float %Val)
10083 declare double @llvm.log10.f64(double %Val)
10084 declare x86_fp80 @llvm.log10.f80(x86_fp80 %Val)
10085 declare fp128 @llvm.log10.f128(fp128 %Val)
10086 declare ppc_fp128 @llvm.log10.ppcf128(ppc_fp128 %Val)
10087
10088Overview:
10089"""""""""
10090
10091The '``llvm.log10.*``' intrinsics perform the log10 function.
10092
10093Arguments:
10094""""""""""
10095
10096The argument and return value are floating point numbers of the same
10097type.
10098
10099Semantics:
10100""""""""""
10101
10102This function returns the same values as the libm ``log10`` functions
10103would, and handles error conditions in the same way.
10104
10105'``llvm.log2.*``' Intrinsic
10106^^^^^^^^^^^^^^^^^^^^^^^^^^^
10107
10108Syntax:
10109"""""""
10110
10111This is an overloaded intrinsic. You can use ``llvm.log2`` on any
10112floating point or vector of floating point type. Not all targets support
10113all types however.
10114
10115::
10116
10117 declare float @llvm.log2.f32(float %Val)
10118 declare double @llvm.log2.f64(double %Val)
10119 declare x86_fp80 @llvm.log2.f80(x86_fp80 %Val)
10120 declare fp128 @llvm.log2.f128(fp128 %Val)
10121 declare ppc_fp128 @llvm.log2.ppcf128(ppc_fp128 %Val)
10122
10123Overview:
10124"""""""""
10125
10126The '``llvm.log2.*``' intrinsics perform the log2 function.
10127
10128Arguments:
10129""""""""""
10130
10131The argument and return value are floating point numbers of the same
10132type.
10133
10134Semantics:
10135""""""""""
10136
10137This function returns the same values as the libm ``log2`` functions
10138would, and handles error conditions in the same way.
10139
10140'``llvm.fma.*``' Intrinsic
10141^^^^^^^^^^^^^^^^^^^^^^^^^^
10142
10143Syntax:
10144"""""""
10145
10146This is an overloaded intrinsic. You can use ``llvm.fma`` on any
10147floating point or vector of floating point type. Not all targets support
10148all types however.
10149
10150::
10151
10152 declare float @llvm.fma.f32(float %a, float %b, float %c)
10153 declare double @llvm.fma.f64(double %a, double %b, double %c)
10154 declare x86_fp80 @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
10155 declare fp128 @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
10156 declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
10157
10158Overview:
10159"""""""""
10160
10161The '``llvm.fma.*``' intrinsics perform the fused multiply-add
10162operation.
10163
10164Arguments:
10165""""""""""
10166
10167The argument and return value are floating point numbers of the same
10168type.
10169
10170Semantics:
10171""""""""""
10172
10173This function returns the same values as the libm ``fma`` functions
Matt Arsenaultee364ee2014-01-31 00:09:00 +000010174would, and does not set errno.
Sean Silvab084af42012-12-07 10:36:55 +000010175
10176'``llvm.fabs.*``' Intrinsic
10177^^^^^^^^^^^^^^^^^^^^^^^^^^^
10178
10179Syntax:
10180"""""""
10181
10182This is an overloaded intrinsic. You can use ``llvm.fabs`` on any
10183floating point or vector of floating point type. Not all targets support
10184all types however.
10185
10186::
10187
10188 declare float @llvm.fabs.f32(float %Val)
10189 declare double @llvm.fabs.f64(double %Val)
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010190 declare x86_fp80 @llvm.fabs.f80(x86_fp80 %Val)
Sean Silvab084af42012-12-07 10:36:55 +000010191 declare fp128 @llvm.fabs.f128(fp128 %Val)
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010192 declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128 %Val)
Sean Silvab084af42012-12-07 10:36:55 +000010193
10194Overview:
10195"""""""""
10196
10197The '``llvm.fabs.*``' intrinsics return the absolute value of the
10198operand.
10199
10200Arguments:
10201""""""""""
10202
10203The argument and return value are floating point numbers of the same
10204type.
10205
10206Semantics:
10207""""""""""
10208
10209This function returns the same values as the libm ``fabs`` functions
10210would, and handles error conditions in the same way.
10211
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010212'``llvm.minnum.*``' Intrinsic
Matt Arsenault9886b0d2014-10-22 00:15:53 +000010213^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010214
10215Syntax:
10216"""""""
10217
10218This is an overloaded intrinsic. You can use ``llvm.minnum`` on any
10219floating point or vector of floating point type. Not all targets support
10220all types however.
10221
10222::
10223
Matt Arsenault64313c92014-10-22 18:25:02 +000010224 declare float @llvm.minnum.f32(float %Val0, float %Val1)
10225 declare double @llvm.minnum.f64(double %Val0, double %Val1)
10226 declare x86_fp80 @llvm.minnum.f80(x86_fp80 %Val0, x86_fp80 %Val1)
10227 declare fp128 @llvm.minnum.f128(fp128 %Val0, fp128 %Val1)
10228 declare ppc_fp128 @llvm.minnum.ppcf128(ppc_fp128 %Val0, ppc_fp128 %Val1)
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010229
10230Overview:
10231"""""""""
10232
10233The '``llvm.minnum.*``' intrinsics return the minimum of the two
10234arguments.
10235
10236
10237Arguments:
10238""""""""""
10239
10240The arguments and return value are floating point numbers of the same
10241type.
10242
10243Semantics:
10244""""""""""
10245
10246Follows the IEEE-754 semantics for minNum, which also match for libm's
10247fmin.
10248
10249If either operand is a NaN, returns the other non-NaN operand. Returns
10250NaN only if both operands are NaN. If the operands compare equal,
10251returns a value that compares equal to both operands. This means that
10252fmin(+/-0.0, +/-0.0) could return either -0.0 or 0.0.
10253
10254'``llvm.maxnum.*``' Intrinsic
Matt Arsenault9886b0d2014-10-22 00:15:53 +000010255^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010256
10257Syntax:
10258"""""""
10259
10260This is an overloaded intrinsic. You can use ``llvm.maxnum`` on any
10261floating point or vector of floating point type. Not all targets support
10262all types however.
10263
10264::
10265
Matt Arsenault64313c92014-10-22 18:25:02 +000010266 declare float @llvm.maxnum.f32(float %Val0, float %Val1l)
10267 declare double @llvm.maxnum.f64(double %Val0, double %Val1)
10268 declare x86_fp80 @llvm.maxnum.f80(x86_fp80 %Val0, x86_fp80 %Val1)
10269 declare fp128 @llvm.maxnum.f128(fp128 %Val0, fp128 %Val1)
10270 declare ppc_fp128 @llvm.maxnum.ppcf128(ppc_fp128 %Val0, ppc_fp128 %Val1)
Matt Arsenaultd6511b42014-10-21 23:00:20 +000010271
10272Overview:
10273"""""""""
10274
10275The '``llvm.maxnum.*``' intrinsics return the maximum of the two
10276arguments.
10277
10278
10279Arguments:
10280""""""""""
10281
10282The arguments and return value are floating point numbers of the same
10283type.
10284
10285Semantics:
10286""""""""""
10287Follows the IEEE-754 semantics for maxNum, which also match for libm's
10288fmax.
10289
10290If either operand is a NaN, returns the other non-NaN operand. Returns
10291NaN only if both operands are NaN. If the operands compare equal,
10292returns a value that compares equal to both operands. This means that
10293fmax(+/-0.0, +/-0.0) could return either -0.0 or 0.0.
10294
Hal Finkel0c5c01aa2013-08-19 23:35:46 +000010295'``llvm.copysign.*``' Intrinsic
10296^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10297
10298Syntax:
10299"""""""
10300
10301This is an overloaded intrinsic. You can use ``llvm.copysign`` on any
10302floating point or vector of floating point type. Not all targets support
10303all types however.
10304
10305::
10306
10307 declare float @llvm.copysign.f32(float %Mag, float %Sgn)
10308 declare double @llvm.copysign.f64(double %Mag, double %Sgn)
10309 declare x86_fp80 @llvm.copysign.f80(x86_fp80 %Mag, x86_fp80 %Sgn)
10310 declare fp128 @llvm.copysign.f128(fp128 %Mag, fp128 %Sgn)
10311 declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 %Mag, ppc_fp128 %Sgn)
10312
10313Overview:
10314"""""""""
10315
10316The '``llvm.copysign.*``' intrinsics return a value with the magnitude of the
10317first operand and the sign of the second operand.
10318
10319Arguments:
10320""""""""""
10321
10322The arguments and return value are floating point numbers of the same
10323type.
10324
10325Semantics:
10326""""""""""
10327
10328This function returns the same values as the libm ``copysign``
10329functions would, and handles error conditions in the same way.
10330
Sean Silvab084af42012-12-07 10:36:55 +000010331'``llvm.floor.*``' Intrinsic
10332^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10333
10334Syntax:
10335"""""""
10336
10337This is an overloaded intrinsic. You can use ``llvm.floor`` on any
10338floating point or vector of floating point type. Not all targets support
10339all types however.
10340
10341::
10342
10343 declare float @llvm.floor.f32(float %Val)
10344 declare double @llvm.floor.f64(double %Val)
10345 declare x86_fp80 @llvm.floor.f80(x86_fp80 %Val)
10346 declare fp128 @llvm.floor.f128(fp128 %Val)
10347 declare ppc_fp128 @llvm.floor.ppcf128(ppc_fp128 %Val)
10348
10349Overview:
10350"""""""""
10351
10352The '``llvm.floor.*``' intrinsics return the floor of the operand.
10353
10354Arguments:
10355""""""""""
10356
10357The argument and return value are floating point numbers of the same
10358type.
10359
10360Semantics:
10361""""""""""
10362
10363This function returns the same values as the libm ``floor`` functions
10364would, and handles error conditions in the same way.
10365
10366'``llvm.ceil.*``' Intrinsic
10367^^^^^^^^^^^^^^^^^^^^^^^^^^^
10368
10369Syntax:
10370"""""""
10371
10372This is an overloaded intrinsic. You can use ``llvm.ceil`` on any
10373floating point or vector of floating point type. Not all targets support
10374all types however.
10375
10376::
10377
10378 declare float @llvm.ceil.f32(float %Val)
10379 declare double @llvm.ceil.f64(double %Val)
10380 declare x86_fp80 @llvm.ceil.f80(x86_fp80 %Val)
10381 declare fp128 @llvm.ceil.f128(fp128 %Val)
10382 declare ppc_fp128 @llvm.ceil.ppcf128(ppc_fp128 %Val)
10383
10384Overview:
10385"""""""""
10386
10387The '``llvm.ceil.*``' intrinsics return the ceiling of the operand.
10388
10389Arguments:
10390""""""""""
10391
10392The argument and return value are floating point numbers of the same
10393type.
10394
10395Semantics:
10396""""""""""
10397
10398This function returns the same values as the libm ``ceil`` functions
10399would, and handles error conditions in the same way.
10400
10401'``llvm.trunc.*``' Intrinsic
10402^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10403
10404Syntax:
10405"""""""
10406
10407This is an overloaded intrinsic. You can use ``llvm.trunc`` on any
10408floating point or vector of floating point type. Not all targets support
10409all types however.
10410
10411::
10412
10413 declare float @llvm.trunc.f32(float %Val)
10414 declare double @llvm.trunc.f64(double %Val)
10415 declare x86_fp80 @llvm.trunc.f80(x86_fp80 %Val)
10416 declare fp128 @llvm.trunc.f128(fp128 %Val)
10417 declare ppc_fp128 @llvm.trunc.ppcf128(ppc_fp128 %Val)
10418
10419Overview:
10420"""""""""
10421
10422The '``llvm.trunc.*``' intrinsics returns the operand rounded to the
10423nearest integer not larger in magnitude than the operand.
10424
10425Arguments:
10426""""""""""
10427
10428The argument and return value are floating point numbers of the same
10429type.
10430
10431Semantics:
10432""""""""""
10433
10434This function returns the same values as the libm ``trunc`` functions
10435would, and handles error conditions in the same way.
10436
10437'``llvm.rint.*``' Intrinsic
10438^^^^^^^^^^^^^^^^^^^^^^^^^^^
10439
10440Syntax:
10441"""""""
10442
10443This is an overloaded intrinsic. You can use ``llvm.rint`` on any
10444floating point or vector of floating point type. Not all targets support
10445all types however.
10446
10447::
10448
10449 declare float @llvm.rint.f32(float %Val)
10450 declare double @llvm.rint.f64(double %Val)
10451 declare x86_fp80 @llvm.rint.f80(x86_fp80 %Val)
10452 declare fp128 @llvm.rint.f128(fp128 %Val)
10453 declare ppc_fp128 @llvm.rint.ppcf128(ppc_fp128 %Val)
10454
10455Overview:
10456"""""""""
10457
10458The '``llvm.rint.*``' intrinsics returns the operand rounded to the
10459nearest integer. It may raise an inexact floating-point exception if the
10460operand isn't an integer.
10461
10462Arguments:
10463""""""""""
10464
10465The argument and return value are floating point numbers of the same
10466type.
10467
10468Semantics:
10469""""""""""
10470
10471This function returns the same values as the libm ``rint`` functions
10472would, and handles error conditions in the same way.
10473
10474'``llvm.nearbyint.*``' Intrinsic
10475^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10476
10477Syntax:
10478"""""""
10479
10480This is an overloaded intrinsic. You can use ``llvm.nearbyint`` on any
10481floating point or vector of floating point type. Not all targets support
10482all types however.
10483
10484::
10485
10486 declare float @llvm.nearbyint.f32(float %Val)
10487 declare double @llvm.nearbyint.f64(double %Val)
10488 declare x86_fp80 @llvm.nearbyint.f80(x86_fp80 %Val)
10489 declare fp128 @llvm.nearbyint.f128(fp128 %Val)
10490 declare ppc_fp128 @llvm.nearbyint.ppcf128(ppc_fp128 %Val)
10491
10492Overview:
10493"""""""""
10494
10495The '``llvm.nearbyint.*``' intrinsics returns the operand rounded to the
10496nearest integer.
10497
10498Arguments:
10499""""""""""
10500
10501The argument and return value are floating point numbers of the same
10502type.
10503
10504Semantics:
10505""""""""""
10506
10507This function returns the same values as the libm ``nearbyint``
10508functions would, and handles error conditions in the same way.
10509
Hal Finkel171817e2013-08-07 22:49:12 +000010510'``llvm.round.*``' Intrinsic
10511^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10512
10513Syntax:
10514"""""""
10515
10516This is an overloaded intrinsic. You can use ``llvm.round`` on any
10517floating point or vector of floating point type. Not all targets support
10518all types however.
10519
10520::
10521
10522 declare float @llvm.round.f32(float %Val)
10523 declare double @llvm.round.f64(double %Val)
10524 declare x86_fp80 @llvm.round.f80(x86_fp80 %Val)
10525 declare fp128 @llvm.round.f128(fp128 %Val)
10526 declare ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %Val)
10527
10528Overview:
10529"""""""""
10530
10531The '``llvm.round.*``' intrinsics returns the operand rounded to the
10532nearest integer.
10533
10534Arguments:
10535""""""""""
10536
10537The argument and return value are floating point numbers of the same
10538type.
10539
10540Semantics:
10541""""""""""
10542
10543This function returns the same values as the libm ``round``
10544functions would, and handles error conditions in the same way.
10545
Sean Silvab084af42012-12-07 10:36:55 +000010546Bit Manipulation Intrinsics
10547---------------------------
10548
10549LLVM provides intrinsics for a few important bit manipulation
10550operations. These allow efficient code generation for some algorithms.
10551
James Molloy90111f72015-11-12 12:29:09 +000010552'``llvm.bitreverse.*``' Intrinsics
Akira Hatanaka7f5562b2015-11-13 21:09:57 +000010553^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
James Molloy90111f72015-11-12 12:29:09 +000010554
10555Syntax:
10556"""""""
10557
10558This is an overloaded intrinsic function. You can use bitreverse on any
10559integer type.
10560
10561::
10562
10563 declare i16 @llvm.bitreverse.i16(i16 <id>)
10564 declare i32 @llvm.bitreverse.i32(i32 <id>)
10565 declare i64 @llvm.bitreverse.i64(i64 <id>)
10566
10567Overview:
10568"""""""""
10569
10570The '``llvm.bitreverse``' family of intrinsics is used to reverse the
10571bitpattern of an integer value; for example ``0b1234567`` becomes
10572``0b7654321``.
10573
10574Semantics:
10575""""""""""
10576
10577The ``llvm.bitreverse.iN`` intrinsic returns an i16 value that has bit
10578``M`` in the input moved to bit ``N-M`` in the output.
10579
Sean Silvab084af42012-12-07 10:36:55 +000010580'``llvm.bswap.*``' Intrinsics
10581^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10582
10583Syntax:
10584"""""""
10585
10586This is an overloaded intrinsic function. You can use bswap on any
10587integer type that is an even number of bytes (i.e. BitWidth % 16 == 0).
10588
10589::
10590
10591 declare i16 @llvm.bswap.i16(i16 <id>)
10592 declare i32 @llvm.bswap.i32(i32 <id>)
10593 declare i64 @llvm.bswap.i64(i64 <id>)
10594
10595Overview:
10596"""""""""
10597
10598The '``llvm.bswap``' family of intrinsics is used to byte swap integer
10599values with an even number of bytes (positive multiple of 16 bits).
10600These are useful for performing operations on data that is not in the
10601target's native byte order.
10602
10603Semantics:
10604""""""""""
10605
10606The ``llvm.bswap.i16`` intrinsic returns an i16 value that has the high
10607and low byte of the input i16 swapped. Similarly, the ``llvm.bswap.i32``
10608intrinsic returns an i32 value that has the four bytes of the input i32
10609swapped, so that if the input bytes are numbered 0, 1, 2, 3 then the
10610returned i32 will have its bytes in 3, 2, 1, 0 order. The
10611``llvm.bswap.i48``, ``llvm.bswap.i64`` and other intrinsics extend this
10612concept to additional even-byte lengths (6 bytes, 8 bytes and more,
10613respectively).
10614
10615'``llvm.ctpop.*``' Intrinsic
10616^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10617
10618Syntax:
10619"""""""
10620
10621This is an overloaded intrinsic. You can use llvm.ctpop on any integer
10622bit width, or on any vector with integer elements. Not all targets
10623support all bit widths or vector types, however.
10624
10625::
10626
10627 declare i8 @llvm.ctpop.i8(i8 <src>)
10628 declare i16 @llvm.ctpop.i16(i16 <src>)
10629 declare i32 @llvm.ctpop.i32(i32 <src>)
10630 declare i64 @llvm.ctpop.i64(i64 <src>)
10631 declare i256 @llvm.ctpop.i256(i256 <src>)
10632 declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32> <src>)
10633
10634Overview:
10635"""""""""
10636
10637The '``llvm.ctpop``' family of intrinsics counts the number of bits set
10638in a value.
10639
10640Arguments:
10641""""""""""
10642
10643The only argument is the value to be counted. The argument may be of any
10644integer type, or a vector with integer elements. The return type must
10645match the argument type.
10646
10647Semantics:
10648""""""""""
10649
10650The '``llvm.ctpop``' intrinsic counts the 1's in a variable, or within
10651each element of a vector.
10652
10653'``llvm.ctlz.*``' Intrinsic
10654^^^^^^^^^^^^^^^^^^^^^^^^^^^
10655
10656Syntax:
10657"""""""
10658
10659This is an overloaded intrinsic. You can use ``llvm.ctlz`` on any
10660integer bit width, or any vector whose elements are integers. Not all
10661targets support all bit widths or vector types, however.
10662
10663::
10664
10665 declare i8 @llvm.ctlz.i8 (i8 <src>, i1 <is_zero_undef>)
10666 declare i16 @llvm.ctlz.i16 (i16 <src>, i1 <is_zero_undef>)
10667 declare i32 @llvm.ctlz.i32 (i32 <src>, i1 <is_zero_undef>)
10668 declare i64 @llvm.ctlz.i64 (i64 <src>, i1 <is_zero_undef>)
10669 declare i256 @llvm.ctlz.i256(i256 <src>, i1 <is_zero_undef>)
10670 declase <2 x i32> @llvm.ctlz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>)
10671
10672Overview:
10673"""""""""
10674
10675The '``llvm.ctlz``' family of intrinsic functions counts the number of
10676leading zeros in a variable.
10677
10678Arguments:
10679""""""""""
10680
10681The first argument is the value to be counted. This argument may be of
Hal Finkel5dd82782015-01-05 04:05:21 +000010682any integer type, or a vector with integer element type. The return
Sean Silvab084af42012-12-07 10:36:55 +000010683type must match the first argument type.
10684
10685The second argument must be a constant and is a flag to indicate whether
10686the intrinsic should ensure that a zero as the first argument produces a
10687defined result. Historically some architectures did not provide a
10688defined result for zero values as efficiently, and many algorithms are
10689now predicated on avoiding zero-value inputs.
10690
10691Semantics:
10692""""""""""
10693
10694The '``llvm.ctlz``' intrinsic counts the leading (most significant)
10695zeros in a variable, or within each element of the vector. If
10696``src == 0`` then the result is the size in bits of the type of ``src``
10697if ``is_zero_undef == 0`` and ``undef`` otherwise. For example,
10698``llvm.ctlz(i32 2) = 30``.
10699
10700'``llvm.cttz.*``' Intrinsic
10701^^^^^^^^^^^^^^^^^^^^^^^^^^^
10702
10703Syntax:
10704"""""""
10705
10706This is an overloaded intrinsic. You can use ``llvm.cttz`` on any
10707integer bit width, or any vector of integer elements. Not all targets
10708support all bit widths or vector types, however.
10709
10710::
10711
10712 declare i8 @llvm.cttz.i8 (i8 <src>, i1 <is_zero_undef>)
10713 declare i16 @llvm.cttz.i16 (i16 <src>, i1 <is_zero_undef>)
10714 declare i32 @llvm.cttz.i32 (i32 <src>, i1 <is_zero_undef>)
10715 declare i64 @llvm.cttz.i64 (i64 <src>, i1 <is_zero_undef>)
10716 declare i256 @llvm.cttz.i256(i256 <src>, i1 <is_zero_undef>)
10717 declase <2 x i32> @llvm.cttz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>)
10718
10719Overview:
10720"""""""""
10721
10722The '``llvm.cttz``' family of intrinsic functions counts the number of
10723trailing zeros.
10724
10725Arguments:
10726""""""""""
10727
10728The first argument is the value to be counted. This argument may be of
Hal Finkel5dd82782015-01-05 04:05:21 +000010729any integer type, or a vector with integer element type. The return
Sean Silvab084af42012-12-07 10:36:55 +000010730type must match the first argument type.
10731
10732The second argument must be a constant and is a flag to indicate whether
10733the intrinsic should ensure that a zero as the first argument produces a
10734defined result. Historically some architectures did not provide a
10735defined result for zero values as efficiently, and many algorithms are
10736now predicated on avoiding zero-value inputs.
10737
10738Semantics:
10739""""""""""
10740
10741The '``llvm.cttz``' intrinsic counts the trailing (least significant)
10742zeros in a variable, or within each element of a vector. If ``src == 0``
10743then the result is the size in bits of the type of ``src`` if
10744``is_zero_undef == 0`` and ``undef`` otherwise. For example,
10745``llvm.cttz(2) = 1``.
10746
Philip Reames34843ae2015-03-05 05:55:55 +000010747.. _int_overflow:
10748
Sean Silvab084af42012-12-07 10:36:55 +000010749Arithmetic with Overflow Intrinsics
10750-----------------------------------
10751
10752LLVM provides intrinsics for some arithmetic with overflow operations.
10753
10754'``llvm.sadd.with.overflow.*``' Intrinsics
10755^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10756
10757Syntax:
10758"""""""
10759
10760This is an overloaded intrinsic. You can use ``llvm.sadd.with.overflow``
10761on any integer bit width.
10762
10763::
10764
10765 declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
10766 declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
10767 declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
10768
10769Overview:
10770"""""""""
10771
10772The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
10773a signed addition of the two arguments, and indicate whether an overflow
10774occurred during the signed summation.
10775
10776Arguments:
10777""""""""""
10778
10779The arguments (%a and %b) and the first element of the result structure
10780may be of integer types of any bit width, but they must have the same
10781bit width. The second element of the result structure must be of type
10782``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
10783addition.
10784
10785Semantics:
10786""""""""""
10787
10788The '``llvm.sadd.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000010789a signed addition of the two variables. They return a structure --- the
Sean Silvab084af42012-12-07 10:36:55 +000010790first element of which is the signed summation, and the second element
10791of which is a bit specifying if the signed summation resulted in an
10792overflow.
10793
10794Examples:
10795"""""""""
10796
10797.. code-block:: llvm
10798
10799 %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
10800 %sum = extractvalue {i32, i1} %res, 0
10801 %obit = extractvalue {i32, i1} %res, 1
10802 br i1 %obit, label %overflow, label %normal
10803
10804'``llvm.uadd.with.overflow.*``' Intrinsics
10805^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10806
10807Syntax:
10808"""""""
10809
10810This is an overloaded intrinsic. You can use ``llvm.uadd.with.overflow``
10811on any integer bit width.
10812
10813::
10814
10815 declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
10816 declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
10817 declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
10818
10819Overview:
10820"""""""""
10821
10822The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
10823an unsigned addition of the two arguments, and indicate whether a carry
10824occurred during the unsigned summation.
10825
10826Arguments:
10827""""""""""
10828
10829The arguments (%a and %b) and the first element of the result structure
10830may be of integer types of any bit width, but they must have the same
10831bit width. The second element of the result structure must be of type
10832``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
10833addition.
10834
10835Semantics:
10836""""""""""
10837
10838The '``llvm.uadd.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000010839an unsigned addition of the two arguments. They return a structure --- the
Sean Silvab084af42012-12-07 10:36:55 +000010840first element of which is the sum, and the second element of which is a
10841bit specifying if the unsigned summation resulted in a carry.
10842
10843Examples:
10844"""""""""
10845
10846.. code-block:: llvm
10847
10848 %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
10849 %sum = extractvalue {i32, i1} %res, 0
10850 %obit = extractvalue {i32, i1} %res, 1
10851 br i1 %obit, label %carry, label %normal
10852
10853'``llvm.ssub.with.overflow.*``' Intrinsics
10854^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10855
10856Syntax:
10857"""""""
10858
10859This is an overloaded intrinsic. You can use ``llvm.ssub.with.overflow``
10860on any integer bit width.
10861
10862::
10863
10864 declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
10865 declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
10866 declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
10867
10868Overview:
10869"""""""""
10870
10871The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
10872a signed subtraction of the two arguments, and indicate whether an
10873overflow occurred during the signed subtraction.
10874
10875Arguments:
10876""""""""""
10877
10878The arguments (%a and %b) and the first element of the result structure
10879may be of integer types of any bit width, but they must have the same
10880bit width. The second element of the result structure must be of type
10881``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
10882subtraction.
10883
10884Semantics:
10885""""""""""
10886
10887The '``llvm.ssub.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000010888a signed subtraction of the two arguments. They return a structure --- the
Sean Silvab084af42012-12-07 10:36:55 +000010889first element of which is the subtraction, and the second element of
10890which is a bit specifying if the signed subtraction resulted in an
10891overflow.
10892
10893Examples:
10894"""""""""
10895
10896.. code-block:: llvm
10897
10898 %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
10899 %sum = extractvalue {i32, i1} %res, 0
10900 %obit = extractvalue {i32, i1} %res, 1
10901 br i1 %obit, label %overflow, label %normal
10902
10903'``llvm.usub.with.overflow.*``' Intrinsics
10904^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10905
10906Syntax:
10907"""""""
10908
10909This is an overloaded intrinsic. You can use ``llvm.usub.with.overflow``
10910on any integer bit width.
10911
10912::
10913
10914 declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
10915 declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
10916 declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
10917
10918Overview:
10919"""""""""
10920
10921The '``llvm.usub.with.overflow``' family of intrinsic functions perform
10922an unsigned subtraction of the two arguments, and indicate whether an
10923overflow occurred during the unsigned subtraction.
10924
10925Arguments:
10926""""""""""
10927
10928The arguments (%a and %b) and the first element of the result structure
10929may be of integer types of any bit width, but they must have the same
10930bit width. The second element of the result structure must be of type
10931``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
10932subtraction.
10933
10934Semantics:
10935""""""""""
10936
10937The '``llvm.usub.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000010938an unsigned subtraction of the two arguments. They return a structure ---
Sean Silvab084af42012-12-07 10:36:55 +000010939the first element of which is the subtraction, and the second element of
10940which is a bit specifying if the unsigned subtraction resulted in an
10941overflow.
10942
10943Examples:
10944"""""""""
10945
10946.. code-block:: llvm
10947
10948 %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
10949 %sum = extractvalue {i32, i1} %res, 0
10950 %obit = extractvalue {i32, i1} %res, 1
10951 br i1 %obit, label %overflow, label %normal
10952
10953'``llvm.smul.with.overflow.*``' Intrinsics
10954^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10955
10956Syntax:
10957"""""""
10958
10959This is an overloaded intrinsic. You can use ``llvm.smul.with.overflow``
10960on any integer bit width.
10961
10962::
10963
10964 declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
10965 declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
10966 declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
10967
10968Overview:
10969"""""""""
10970
10971The '``llvm.smul.with.overflow``' family of intrinsic functions perform
10972a signed multiplication of the two arguments, and indicate whether an
10973overflow occurred during the signed multiplication.
10974
10975Arguments:
10976""""""""""
10977
10978The arguments (%a and %b) and the first element of the result structure
10979may be of integer types of any bit width, but they must have the same
10980bit width. The second element of the result structure must be of type
10981``i1``. ``%a`` and ``%b`` are the two values that will undergo signed
10982multiplication.
10983
10984Semantics:
10985""""""""""
10986
10987The '``llvm.smul.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000010988a signed multiplication of the two arguments. They return a structure ---
Sean Silvab084af42012-12-07 10:36:55 +000010989the first element of which is the multiplication, and the second element
10990of which is a bit specifying if the signed multiplication resulted in an
10991overflow.
10992
10993Examples:
10994"""""""""
10995
10996.. code-block:: llvm
10997
10998 %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
10999 %sum = extractvalue {i32, i1} %res, 0
11000 %obit = extractvalue {i32, i1} %res, 1
11001 br i1 %obit, label %overflow, label %normal
11002
11003'``llvm.umul.with.overflow.*``' Intrinsics
11004^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11005
11006Syntax:
11007"""""""
11008
11009This is an overloaded intrinsic. You can use ``llvm.umul.with.overflow``
11010on any integer bit width.
11011
11012::
11013
11014 declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
11015 declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
11016 declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
11017
11018Overview:
11019"""""""""
11020
11021The '``llvm.umul.with.overflow``' family of intrinsic functions perform
11022a unsigned multiplication of the two arguments, and indicate whether an
11023overflow occurred during the unsigned multiplication.
11024
11025Arguments:
11026""""""""""
11027
11028The arguments (%a and %b) and the first element of the result structure
11029may be of integer types of any bit width, but they must have the same
11030bit width. The second element of the result structure must be of type
11031``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned
11032multiplication.
11033
11034Semantics:
11035""""""""""
11036
11037The '``llvm.umul.with.overflow``' family of intrinsic functions perform
Dmitri Gribenkoe8131122013-01-19 20:34:20 +000011038an unsigned multiplication of the two arguments. They return a structure ---
11039the first element of which is the multiplication, and the second
Sean Silvab084af42012-12-07 10:36:55 +000011040element of which is a bit specifying if the unsigned multiplication
11041resulted in an overflow.
11042
11043Examples:
11044"""""""""
11045
11046.. code-block:: llvm
11047
11048 %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
11049 %sum = extractvalue {i32, i1} %res, 0
11050 %obit = extractvalue {i32, i1} %res, 1
11051 br i1 %obit, label %overflow, label %normal
11052
11053Specialised Arithmetic Intrinsics
11054---------------------------------
11055
Owen Anderson1056a922015-07-11 07:01:27 +000011056'``llvm.canonicalize.*``' Intrinsic
11057^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11058
11059Syntax:
11060"""""""
11061
11062::
11063
11064 declare float @llvm.canonicalize.f32(float %a)
11065 declare double @llvm.canonicalize.f64(double %b)
11066
11067Overview:
11068"""""""""
11069
11070The '``llvm.canonicalize.*``' intrinsic returns the platform specific canonical
Sean Silvaa1190322015-08-06 22:56:48 +000011071encoding of a floating point number. This canonicalization is useful for
Owen Anderson1056a922015-07-11 07:01:27 +000011072implementing certain numeric primitives such as frexp. The canonical encoding is
11073defined by IEEE-754-2008 to be:
11074
11075::
11076
11077 2.1.8 canonical encoding: The preferred encoding of a floating-point
Sean Silvaa1190322015-08-06 22:56:48 +000011078 representation in a format. Applied to declets, significands of finite
Owen Anderson1056a922015-07-11 07:01:27 +000011079 numbers, infinities, and NaNs, especially in decimal formats.
11080
11081This operation can also be considered equivalent to the IEEE-754-2008
Sean Silvaa1190322015-08-06 22:56:48 +000011082conversion of a floating-point value to the same format. NaNs are handled
Owen Anderson1056a922015-07-11 07:01:27 +000011083according to section 6.2.
11084
11085Examples of non-canonical encodings:
11086
Sean Silvaa1190322015-08-06 22:56:48 +000011087- x87 pseudo denormals, pseudo NaNs, pseudo Infinity, Unnormals. These are
Owen Anderson1056a922015-07-11 07:01:27 +000011088 converted to a canonical representation per hardware-specific protocol.
11089- Many normal decimal floating point numbers have non-canonical alternative
11090 encodings.
11091- Some machines, like GPUs or ARMv7 NEON, do not support subnormal values.
11092 These are treated as non-canonical encodings of zero and with be flushed to
11093 a zero of the same sign by this operation.
11094
11095Note that per IEEE-754-2008 6.2, systems that support signaling NaNs with
11096default exception handling must signal an invalid exception, and produce a
11097quiet NaN result.
11098
11099This function should always be implementable as multiplication by 1.0, provided
Sean Silvaa1190322015-08-06 22:56:48 +000011100that the compiler does not constant fold the operation. Likewise, division by
111011.0 and ``llvm.minnum(x, x)`` are possible implementations. Addition with
Owen Anderson1056a922015-07-11 07:01:27 +000011102-0.0 is also sufficient provided that the rounding mode is not -Infinity.
11103
Sean Silvaa1190322015-08-06 22:56:48 +000011104``@llvm.canonicalize`` must preserve the equality relation. That is:
Owen Anderson1056a922015-07-11 07:01:27 +000011105
11106- ``(@llvm.canonicalize(x) == x)`` is equivalent to ``(x == x)``
11107- ``(@llvm.canonicalize(x) == @llvm.canonicalize(y))`` is equivalent to
11108 to ``(x == y)``
11109
11110Additionally, the sign of zero must be conserved:
11111``@llvm.canonicalize(-0.0) = -0.0`` and ``@llvm.canonicalize(+0.0) = +0.0``
11112
11113The payload bits of a NaN must be conserved, with two exceptions.
11114First, environments which use only a single canonical representation of NaN
Sean Silvaa1190322015-08-06 22:56:48 +000011115must perform said canonicalization. Second, SNaNs must be quieted per the
Owen Anderson1056a922015-07-11 07:01:27 +000011116usual methods.
11117
11118The canonicalization operation may be optimized away if:
11119
Sean Silvaa1190322015-08-06 22:56:48 +000011120- The input is known to be canonical. For example, it was produced by a
Owen Anderson1056a922015-07-11 07:01:27 +000011121 floating-point operation that is required by the standard to be canonical.
11122- The result is consumed only by (or fused with) other floating-point
Sean Silvaa1190322015-08-06 22:56:48 +000011123 operations. That is, the bits of the floating point value are not examined.
Owen Anderson1056a922015-07-11 07:01:27 +000011124
Sean Silvab084af42012-12-07 10:36:55 +000011125'``llvm.fmuladd.*``' Intrinsic
11126^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11127
11128Syntax:
11129"""""""
11130
11131::
11132
11133 declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
11134 declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
11135
11136Overview:
11137"""""""""
11138
11139The '``llvm.fmuladd.*``' intrinsic functions represent multiply-add
Lang Hames045f4392013-01-17 00:00:49 +000011140expressions that can be fused if the code generator determines that (a) the
11141target instruction set has support for a fused operation, and (b) that the
11142fused operation is more efficient than the equivalent, separate pair of mul
11143and add instructions.
Sean Silvab084af42012-12-07 10:36:55 +000011144
11145Arguments:
11146""""""""""
11147
11148The '``llvm.fmuladd.*``' intrinsics each take three arguments: two
11149multiplicands, a and b, and an addend c.
11150
11151Semantics:
11152""""""""""
11153
11154The expression:
11155
11156::
11157
11158 %0 = call float @llvm.fmuladd.f32(%a, %b, %c)
11159
11160is equivalent to the expression a \* b + c, except that rounding will
11161not be performed between the multiplication and addition steps if the
11162code generator fuses the operations. Fusion is not guaranteed, even if
11163the target platform supports it. If a fused multiply-add is required the
Matt Arsenaultee364ee2014-01-31 00:09:00 +000011164corresponding llvm.fma.\* intrinsic function should be used
11165instead. This never sets errno, just as '``llvm.fma.*``'.
Sean Silvab084af42012-12-07 10:36:55 +000011166
11167Examples:
11168"""""""""
11169
11170.. code-block:: llvm
11171
Tim Northover675a0962014-06-13 14:24:23 +000011172 %r2 = call float @llvm.fmuladd.f32(float %a, float %b, float %c) ; yields float:r2 = (a * b) + c
Sean Silvab084af42012-12-07 10:36:55 +000011173
James Molloy7395a812015-07-16 15:22:46 +000011174
11175'``llvm.uabsdiff.*``' and '``llvm.sabsdiff.*``' Intrinsics
11176^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11177
11178Syntax:
11179"""""""
11180This is an overloaded intrinsic. The loaded data is a vector of any integer bit width.
11181
11182.. code-block:: llvm
11183
11184 declare <4 x integer> @llvm.uabsdiff.v4i32(<4 x integer> %a, <4 x integer> %b)
11185
11186
11187Overview:
11188"""""""""
11189
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011190The ``llvm.uabsdiff`` intrinsic returns a vector result of the absolute difference
11191of the two operands, treating them both as unsigned integers. The intermediate
11192calculations are computed using infinitely precise unsigned arithmetic. The final
11193result will be truncated to the given type.
James Molloy7395a812015-07-16 15:22:46 +000011194
Mohammad Shahid18715532015-08-21 05:31:07 +000011195The ``llvm.sabsdiff`` intrinsic returns a vector result of the absolute difference of
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011196the two operands, treating them both as signed integers. If the result overflows, the
11197behavior is undefined.
James Molloy7395a812015-07-16 15:22:46 +000011198
11199.. note::
11200
11201 These intrinsics are primarily used during the code generation stage of compilation.
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011202 They are generated by compiler passes such as the Loop and SLP vectorizers. It is not
James Molloy7395a812015-07-16 15:22:46 +000011203 recommended for users to create them manually.
11204
11205Arguments:
11206""""""""""
11207
11208Both intrinsics take two integer of the same bitwidth.
11209
11210Semantics:
11211""""""""""
11212
11213The expression::
11214
11215 call <4 x i32> @llvm.uabsdiff.v4i32(<4 x i32> %a, <4 x i32> %b)
11216
11217is equivalent to::
11218
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011219 %1 = zext <4 x i32> %a to <4 x i64>
11220 %2 = zext <4 x i32> %b to <4 x i64>
11221 %sub = sub <4 x i64> %1, %2
11222 %trunc = trunc <4 x i64> to <4 x i32>
James Molloy7395a812015-07-16 15:22:46 +000011223
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011224and the expression::
James Molloy7395a812015-07-16 15:22:46 +000011225
11226 call <4 x i32> @llvm.sabsdiff.v4i32(<4 x i32> %a, <4 x i32> %b)
11227
11228is equivalent to::
11229
11230 %sub = sub nsw <4 x i32> %a, %b
Mohammad Shahid13f1dfd2015-09-24 10:35:03 +000011231 %ispos = icmp sge <4 x i32> %sub, zeroinitializer
James Molloy7395a812015-07-16 15:22:46 +000011232 %neg = sub nsw <4 x i32> zeroinitializer, %sub
11233 %1 = select <4 x i1> %ispos, <4 x i32> %sub, <4 x i32> %neg
11234
11235
Sean Silvab084af42012-12-07 10:36:55 +000011236Half Precision Floating Point Intrinsics
11237----------------------------------------
11238
11239For most target platforms, half precision floating point is a
11240storage-only format. This means that it is a dense encoding (in memory)
11241but does not support computation in the format.
11242
11243This means that code must first load the half-precision floating point
11244value as an i16, then convert it to float with
11245:ref:`llvm.convert.from.fp16 <int_convert_from_fp16>`. Computation can
11246then be performed on the float value (including extending to double
11247etc). To store the value back to memory, it is first converted to float
11248if needed, then converted to i16 with
11249:ref:`llvm.convert.to.fp16 <int_convert_to_fp16>`, then storing as an
11250i16 value.
11251
11252.. _int_convert_to_fp16:
11253
11254'``llvm.convert.to.fp16``' Intrinsic
11255^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11256
11257Syntax:
11258"""""""
11259
11260::
11261
Tim Northoverfd7e4242014-07-17 10:51:23 +000011262 declare i16 @llvm.convert.to.fp16.f32(float %a)
11263 declare i16 @llvm.convert.to.fp16.f64(double %a)
Sean Silvab084af42012-12-07 10:36:55 +000011264
11265Overview:
11266"""""""""
11267
Tim Northoverfd7e4242014-07-17 10:51:23 +000011268The '``llvm.convert.to.fp16``' intrinsic function performs a conversion from a
11269conventional floating point type to half precision floating point format.
Sean Silvab084af42012-12-07 10:36:55 +000011270
11271Arguments:
11272""""""""""
11273
11274The intrinsic function contains single argument - the value to be
11275converted.
11276
11277Semantics:
11278""""""""""
11279
Tim Northoverfd7e4242014-07-17 10:51:23 +000011280The '``llvm.convert.to.fp16``' intrinsic function performs a conversion from a
11281conventional floating point format to half precision floating point format. The
11282return value is an ``i16`` which contains the converted number.
Sean Silvab084af42012-12-07 10:36:55 +000011283
11284Examples:
11285"""""""""
11286
11287.. code-block:: llvm
11288
Tim Northoverfd7e4242014-07-17 10:51:23 +000011289 %res = call i16 @llvm.convert.to.fp16.f32(float %a)
Sean Silvab084af42012-12-07 10:36:55 +000011290 store i16 %res, i16* @x, align 2
11291
11292.. _int_convert_from_fp16:
11293
11294'``llvm.convert.from.fp16``' Intrinsic
11295^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11296
11297Syntax:
11298"""""""
11299
11300::
11301
Tim Northoverfd7e4242014-07-17 10:51:23 +000011302 declare float @llvm.convert.from.fp16.f32(i16 %a)
11303 declare double @llvm.convert.from.fp16.f64(i16 %a)
Sean Silvab084af42012-12-07 10:36:55 +000011304
11305Overview:
11306"""""""""
11307
11308The '``llvm.convert.from.fp16``' intrinsic function performs a
11309conversion from half precision floating point format to single precision
11310floating point format.
11311
11312Arguments:
11313""""""""""
11314
11315The intrinsic function contains single argument - the value to be
11316converted.
11317
11318Semantics:
11319""""""""""
11320
11321The '``llvm.convert.from.fp16``' intrinsic function performs a
11322conversion from half single precision floating point format to single
11323precision floating point format. The input half-float value is
11324represented by an ``i16`` value.
11325
11326Examples:
11327"""""""""
11328
11329.. code-block:: llvm
11330
David Blaikiec7aabbb2015-03-04 22:06:14 +000011331 %a = load i16, i16* @x, align 2
Matt Arsenault3e3ddda2014-07-10 03:22:16 +000011332 %res = call float @llvm.convert.from.fp16(i16 %a)
Sean Silvab084af42012-12-07 10:36:55 +000011333
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +000011334.. _dbg_intrinsics:
11335
Sean Silvab084af42012-12-07 10:36:55 +000011336Debugger Intrinsics
11337-------------------
11338
11339The LLVM debugger intrinsics (which all start with ``llvm.dbg.``
11340prefix), are described in the `LLVM Source Level
11341Debugging <SourceLevelDebugging.html#format_common_intrinsics>`_
11342document.
11343
11344Exception Handling Intrinsics
11345-----------------------------
11346
11347The LLVM exception handling intrinsics (which all start with
11348``llvm.eh.`` prefix), are described in the `LLVM Exception
11349Handling <ExceptionHandling.html#format_common_intrinsics>`_ document.
11350
11351.. _int_trampoline:
11352
11353Trampoline Intrinsics
11354---------------------
11355
11356These intrinsics make it possible to excise one parameter, marked with
11357the :ref:`nest <nest>` attribute, from a function. The result is a
11358callable function pointer lacking the nest parameter - the caller does
11359not need to provide a value for it. Instead, the value to use is stored
11360in advance in a "trampoline", a block of memory usually allocated on the
11361stack, which also contains code to splice the nest value into the
11362argument list. This is used to implement the GCC nested function address
11363extension.
11364
11365For example, if the function is ``i32 f(i8* nest %c, i32 %x, i32 %y)``
11366then the resulting function pointer has signature ``i32 (i32, i32)*``.
11367It can be created as follows:
11368
11369.. code-block:: llvm
11370
11371 %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
David Blaikie16a97eb2015-03-04 22:02:58 +000011372 %tramp1 = getelementptr [10 x i8], [10 x i8]* %tramp, i32 0, i32 0
Sean Silvab084af42012-12-07 10:36:55 +000011373 call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8*, i32, i32)* @f to i8*), i8* %nval)
11374 %p = call i8* @llvm.adjust.trampoline(i8* %tramp1)
11375 %fp = bitcast i8* %p to i32 (i32, i32)*
11376
11377The call ``%val = call i32 %fp(i32 %x, i32 %y)`` is then equivalent to
11378``%val = call i32 %f(i8* %nval, i32 %x, i32 %y)``.
11379
11380.. _int_it:
11381
11382'``llvm.init.trampoline``' Intrinsic
11383^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11384
11385Syntax:
11386"""""""
11387
11388::
11389
11390 declare void @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <nval>)
11391
11392Overview:
11393"""""""""
11394
11395This fills the memory pointed to by ``tramp`` with executable code,
11396turning it into a trampoline.
11397
11398Arguments:
11399""""""""""
11400
11401The ``llvm.init.trampoline`` intrinsic takes three arguments, all
11402pointers. The ``tramp`` argument must point to a sufficiently large and
11403sufficiently aligned block of memory; this memory is written to by the
11404intrinsic. Note that the size and the alignment are target-specific -
11405LLVM currently provides no portable way of determining them, so a
11406front-end that generates this intrinsic needs to have some
11407target-specific knowledge. The ``func`` argument must hold a function
11408bitcast to an ``i8*``.
11409
11410Semantics:
11411""""""""""
11412
11413The block of memory pointed to by ``tramp`` is filled with target
11414dependent code, turning it into a function. Then ``tramp`` needs to be
11415passed to :ref:`llvm.adjust.trampoline <int_at>` to get a pointer which can
11416be :ref:`bitcast (to a new function) and called <int_trampoline>`. The new
11417function's signature is the same as that of ``func`` with any arguments
11418marked with the ``nest`` attribute removed. At most one such ``nest``
11419argument is allowed, and it must be of pointer type. Calling the new
11420function is equivalent to calling ``func`` with the same argument list,
11421but with ``nval`` used for the missing ``nest`` argument. If, after
11422calling ``llvm.init.trampoline``, the memory pointed to by ``tramp`` is
11423modified, then the effect of any later call to the returned function
11424pointer is undefined.
11425
11426.. _int_at:
11427
11428'``llvm.adjust.trampoline``' Intrinsic
11429^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11430
11431Syntax:
11432"""""""
11433
11434::
11435
11436 declare i8* @llvm.adjust.trampoline(i8* <tramp>)
11437
11438Overview:
11439"""""""""
11440
11441This performs any required machine-specific adjustment to the address of
11442a trampoline (passed as ``tramp``).
11443
11444Arguments:
11445""""""""""
11446
11447``tramp`` must point to a block of memory which already has trampoline
11448code filled in by a previous call to
11449:ref:`llvm.init.trampoline <int_it>`.
11450
11451Semantics:
11452""""""""""
11453
11454On some architectures the address of the code to be executed needs to be
Sanjay Patel69bf48e2014-07-04 19:40:43 +000011455different than the address where the trampoline is actually stored. This
Sean Silvab084af42012-12-07 10:36:55 +000011456intrinsic returns the executable address corresponding to ``tramp``
11457after performing the required machine specific adjustments. The pointer
11458returned can then be :ref:`bitcast and executed <int_trampoline>`.
11459
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011460.. _int_mload_mstore:
11461
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011462Masked Vector Load and Store Intrinsics
11463---------------------------------------
11464
11465LLVM provides intrinsics for predicated vector load and store operations. The predicate is specified by a mask operand, which holds one bit per vector element, switching the associated vector lane on or off. The memory addresses corresponding to the "off" lanes are not accessed. When all bits of the mask are on, the intrinsic is identical to a regular vector load or store. When all bits are off, no memory is accessed.
11466
11467.. _int_mload:
11468
11469'``llvm.masked.load.*``' Intrinsics
11470^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11471
11472Syntax:
11473"""""""
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011474This is an overloaded intrinsic. The loaded data is a vector of any integer, floating point or pointer data type.
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011475
11476::
11477
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011478 declare <16 x float> @llvm.masked.load.v16f32 (<16 x float>* <ptr>, i32 <alignment>, <16 x i1> <mask>, <16 x float> <passthru>)
11479 declare <2 x double> @llvm.masked.load.v2f64 (<2 x double>* <ptr>, i32 <alignment>, <2 x i1> <mask>, <2 x double> <passthru>)
11480 ;; The data is a vector of pointers to double
11481 declare <8 x double*> @llvm.masked.load.v8p0f64 (<8 x double*>* <ptr>, i32 <alignment>, <8 x i1> <mask>, <8 x double*> <passthru>)
11482 ;; The data is a vector of function pointers
11483 declare <8 x i32 ()*> @llvm.masked.load.v8p0f_i32f (<8 x i32 ()*>* <ptr>, i32 <alignment>, <8 x i1> <mask>, <8 x i32 ()*> <passthru>)
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011484
11485Overview:
11486"""""""""
11487
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011488Reads a vector from memory according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes. The masked-off lanes in the result vector are taken from the corresponding lanes of the '``passthru``' operand.
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011489
11490
11491Arguments:
11492""""""""""
11493
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011494The first operand is the base pointer for the load. The second operand is the alignment of the source location. It must be a constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the base pointer and the type of the '``passthru``' operand are the same vector types.
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011495
11496
11497Semantics:
11498""""""""""
11499
11500The '``llvm.masked.load``' intrinsic is designed for conditional reading of selected vector elements in a single IR operation. It is useful for targets that support vector masked loads and allows vectorizing predicated basic blocks on these targets. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar load operations.
11501The result of this operation is equivalent to a regular vector load instruction followed by a 'select' between the loaded and the passthru values, predicated on the same mask. However, using this intrinsic prevents exceptions on memory access to masked-off lanes.
11502
11503
11504::
11505
11506 %res = call <16 x float> @llvm.masked.load.v16f32 (<16 x float>* %ptr, i32 4, <16 x i1>%mask, <16 x float> %passthru)
Mehdi Amini4a121fa2015-03-14 22:04:06 +000011507
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011508 ;; The result of the two following instructions is identical aside from potential memory access exception
David Blaikiec7aabbb2015-03-04 22:06:14 +000011509 %loadlal = load <16 x float>, <16 x float>* %ptr, align 4
Elena Demikhovskye86c8c82014-12-29 09:47:51 +000011510 %res = select <16 x i1> %mask, <16 x float> %loadlal, <16 x float> %passthru
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011511
11512.. _int_mstore:
11513
11514'``llvm.masked.store.*``' Intrinsics
11515^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11516
11517Syntax:
11518"""""""
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011519This is an overloaded intrinsic. The data stored in memory is a vector of any integer, floating point or pointer data type.
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011520
11521::
11522
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011523 declare void @llvm.masked.store.v8i32 (<8 x i32> <value>, <8 x i32>* <ptr>, i32 <alignment>, <8 x i1> <mask>)
11524 declare void @llvm.masked.store.v16f32 (<16 x float> <value>, <16 x float>* <ptr>, i32 <alignment>, <16 x i1> <mask>)
11525 ;; The data is a vector of pointers to double
11526 declare void @llvm.masked.store.v8p0f64 (<8 x double*> <value>, <8 x double*>* <ptr>, i32 <alignment>, <8 x i1> <mask>)
11527 ;; The data is a vector of function pointers
11528 declare void @llvm.masked.store.v4p0f_i32f (<4 x i32 ()*> <value>, <4 x i32 ()*>* <ptr>, i32 <alignment>, <4 x i1> <mask>)
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011529
11530Overview:
11531"""""""""
11532
11533Writes a vector to memory according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes.
11534
11535Arguments:
11536""""""""""
11537
11538The first operand is the vector value to be written to memory. The second operand is the base pointer for the store, it has the same underlying type as the value operand. The third operand is the alignment of the destination location. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements.
11539
11540
11541Semantics:
11542""""""""""
11543
11544The '``llvm.masked.store``' intrinsics is designed for conditional writing of selected vector elements in a single IR operation. It is useful for targets that support vector masked store and allows vectorizing predicated basic blocks on these targets. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar store operations.
11545The result of this operation is equivalent to a load-modify-store sequence. However, using this intrinsic prevents exceptions and data races on memory access to masked-off lanes.
11546
11547::
11548
11549 call void @llvm.masked.store.v16f32(<16 x float> %value, <16 x float>* %ptr, i32 4, <16 x i1> %mask)
Mehdi Amini4a121fa2015-03-14 22:04:06 +000011550
Elena Demikhovskye86c8c82014-12-29 09:47:51 +000011551 ;; The result of the following instructions is identical aside from potential data races and memory access exceptions
David Blaikiec7aabbb2015-03-04 22:06:14 +000011552 %oldval = load <16 x float>, <16 x float>* %ptr, align 4
Elena Demikhovsky3d13f1c2014-12-25 09:29:13 +000011553 %res = select <16 x i1> %mask, <16 x float> %value, <16 x float> %oldval
11554 store <16 x float> %res, <16 x float>* %ptr, align 4
11555
11556
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011557Masked Vector Gather and Scatter Intrinsics
11558-------------------------------------------
11559
11560LLVM provides intrinsics for vector gather and scatter operations. They are similar to :ref:`Masked Vector Load and Store <int_mload_mstore>`, except they are designed for arbitrary memory accesses, rather than sequential memory accesses. Gather and scatter also employ a mask operand, which holds one bit per vector element, switching the associated vector lane on or off. The memory addresses corresponding to the "off" lanes are not accessed. When all bits are off, no memory is accessed.
11561
11562.. _int_mgather:
11563
11564'``llvm.masked.gather.*``' Intrinsics
11565^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11566
11567Syntax:
11568"""""""
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011569This is an overloaded intrinsic. The loaded data are multiple scalar values of any integer, floating point or pointer data type gathered together into one vector.
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011570
11571::
11572
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011573 declare <16 x float> @llvm.masked.gather.v16f32 (<16 x float*> <ptrs>, i32 <alignment>, <16 x i1> <mask>, <16 x float> <passthru>)
11574 declare <2 x double> @llvm.masked.gather.v2f64 (<2 x double*> <ptrs>, i32 <alignment>, <2 x i1> <mask>, <2 x double> <passthru>)
11575 declare <8 x float*> @llvm.masked.gather.v8p0f32 (<8 x float**> <ptrs>, i32 <alignment>, <8 x i1> <mask>, <8 x float*> <passthru>)
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011576
11577Overview:
11578"""""""""
11579
11580Reads scalar values from arbitrary memory locations and gathers them into one vector. The memory locations are provided in the vector of pointers '``ptrs``'. The memory is accessed according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes. The masked-off lanes in the result vector are taken from the corresponding lanes of the '``passthru``' operand.
11581
11582
11583Arguments:
11584""""""""""
11585
11586The first operand is a vector of pointers which holds all memory addresses to read. The second operand is an alignment of the source addresses. It must be a constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the vector of pointers and the type of the '``passthru``' operand are the same vector types.
11587
11588
11589Semantics:
11590""""""""""
11591
11592The '``llvm.masked.gather``' intrinsic is designed for conditional reading of multiple scalar values from arbitrary memory locations in a single IR operation. It is useful for targets that support vector masked gathers and allows vectorizing basic blocks with data and control divergence. Other targets may support this intrinsic differently, for example by lowering it into a sequence of scalar load operations.
11593The semantics of this operation are equivalent to a sequence of conditional scalar loads with subsequent gathering all loaded values into a single vector. The mask restricts memory access to certain lanes and facilitates vectorization of predicated basic blocks.
11594
11595
11596::
11597
11598 %res = call <4 x double> @llvm.masked.gather.v4f64 (<4 x double*> %ptrs, i32 8, <4 x i1>%mask, <4 x double> <true, true, true, true>)
11599
11600 ;; The gather with all-true mask is equivalent to the following instruction sequence
11601 %ptr0 = extractelement <4 x double*> %ptrs, i32 0
11602 %ptr1 = extractelement <4 x double*> %ptrs, i32 1
11603 %ptr2 = extractelement <4 x double*> %ptrs, i32 2
11604 %ptr3 = extractelement <4 x double*> %ptrs, i32 3
11605
11606 %val0 = load double, double* %ptr0, align 8
11607 %val1 = load double, double* %ptr1, align 8
11608 %val2 = load double, double* %ptr2, align 8
11609 %val3 = load double, double* %ptr3, align 8
11610
11611 %vec0 = insertelement <4 x double>undef, %val0, 0
11612 %vec01 = insertelement <4 x double>%vec0, %val1, 1
11613 %vec012 = insertelement <4 x double>%vec01, %val2, 2
11614 %vec0123 = insertelement <4 x double>%vec012, %val3, 3
11615
11616.. _int_mscatter:
11617
11618'``llvm.masked.scatter.*``' Intrinsics
11619^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11620
11621Syntax:
11622"""""""
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011623This is an overloaded intrinsic. The data stored in memory is a vector of any integer, floating point or pointer data type. Each vector element is stored in an arbitrary memory address. Scatter with overlapping addresses is guaranteed to be ordered from least-significant to most-significant element.
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011624
11625::
11626
Elena Demikhovsky1ca72e12015-11-19 07:17:16 +000011627 declare void @llvm.masked.scatter.v8i32 (<8 x i32> <value>, <8 x i32*> <ptrs>, i32 <alignment>, <8 x i1> <mask>)
11628 declare void @llvm.masked.scatter.v16f32 (<16 x float> <value>, <16 x float*> <ptrs>, i32 <alignment>, <16 x i1> <mask>)
11629 declare void @llvm.masked.scatter.v4p0f64 (<4 x double*> <value>, <4 x double**> <ptrs>, i32 <alignment>, <4 x i1> <mask>)
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011630
11631Overview:
11632"""""""""
11633
11634Writes each element from the value vector to the corresponding memory address. The memory addresses are represented as a vector of pointers. Writing is done according to the provided mask. The mask holds a bit for each vector lane, and is used to prevent memory accesses to the masked-off lanes.
11635
11636Arguments:
11637""""""""""
11638
11639The first operand is a vector value to be written to memory. The second operand is a vector of pointers, pointing to where the value elements should be stored. It has the same underlying type as the value operand. The third operand is an alignment of the destination addresses. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements.
11640
11641
11642Semantics:
11643""""""""""
11644
Bruce Mitchenere9ffb452015-09-12 01:17:08 +000011645The '``llvm.masked.scatter``' intrinsics is designed for writing selected vector elements to arbitrary memory addresses in a single IR operation. The operation may be conditional, when not all bits in the mask are switched on. It is useful for targets that support vector masked scatter and allows vectorizing basic blocks with data and control divergence. Other targets may support this intrinsic differently, for example by lowering it into a sequence of branches that guard scalar store operations.
Elena Demikhovsky82cdd652015-05-07 12:25:11 +000011646
11647::
11648
11649 ;; This instruction unconditionaly stores data vector in multiple addresses
11650 call @llvm.masked.scatter.v8i32 (<8 x i32> %value, <8 x i32*> %ptrs, i32 4, <8 x i1> <true, true, .. true>)
11651
11652 ;; It is equivalent to a list of scalar stores
11653 %val0 = extractelement <8 x i32> %value, i32 0
11654 %val1 = extractelement <8 x i32> %value, i32 1
11655 ..
11656 %val7 = extractelement <8 x i32> %value, i32 7
11657 %ptr0 = extractelement <8 x i32*> %ptrs, i32 0
11658 %ptr1 = extractelement <8 x i32*> %ptrs, i32 1
11659 ..
11660 %ptr7 = extractelement <8 x i32*> %ptrs, i32 7
11661 ;; Note: the order of the following stores is important when they overlap:
11662 store i32 %val0, i32* %ptr0, align 4
11663 store i32 %val1, i32* %ptr1, align 4
11664 ..
11665 store i32 %val7, i32* %ptr7, align 4
11666
11667
Sean Silvab084af42012-12-07 10:36:55 +000011668Memory Use Markers
11669------------------
11670
Sanjay Patel69bf48e2014-07-04 19:40:43 +000011671This class of intrinsics provides information about the lifetime of
Sean Silvab084af42012-12-07 10:36:55 +000011672memory objects and ranges where variables are immutable.
11673
Reid Klecknera534a382013-12-19 02:14:12 +000011674.. _int_lifestart:
11675
Sean Silvab084af42012-12-07 10:36:55 +000011676'``llvm.lifetime.start``' Intrinsic
11677^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11678
11679Syntax:
11680"""""""
11681
11682::
11683
11684 declare void @llvm.lifetime.start(i64 <size>, i8* nocapture <ptr>)
11685
11686Overview:
11687"""""""""
11688
11689The '``llvm.lifetime.start``' intrinsic specifies the start of a memory
11690object's lifetime.
11691
11692Arguments:
11693""""""""""
11694
11695The first argument is a constant integer representing the size of the
11696object, or -1 if it is variable sized. The second argument is a pointer
11697to the object.
11698
11699Semantics:
11700""""""""""
11701
11702This intrinsic indicates that before this point in the code, the value
11703of the memory pointed to by ``ptr`` is dead. This means that it is known
11704to never be used and has an undefined value. A load from the pointer
11705that precedes this intrinsic can be replaced with ``'undef'``.
11706
Reid Klecknera534a382013-12-19 02:14:12 +000011707.. _int_lifeend:
11708
Sean Silvab084af42012-12-07 10:36:55 +000011709'``llvm.lifetime.end``' Intrinsic
11710^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11711
11712Syntax:
11713"""""""
11714
11715::
11716
11717 declare void @llvm.lifetime.end(i64 <size>, i8* nocapture <ptr>)
11718
11719Overview:
11720"""""""""
11721
11722The '``llvm.lifetime.end``' intrinsic specifies the end of a memory
11723object's lifetime.
11724
11725Arguments:
11726""""""""""
11727
11728The first argument is a constant integer representing the size of the
11729object, or -1 if it is variable sized. The second argument is a pointer
11730to the object.
11731
11732Semantics:
11733""""""""""
11734
11735This intrinsic indicates that after this point in the code, the value of
11736the memory pointed to by ``ptr`` is dead. This means that it is known to
11737never be used and has an undefined value. Any stores into the memory
11738object following this intrinsic may be removed as dead.
11739
11740'``llvm.invariant.start``' Intrinsic
11741^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11742
11743Syntax:
11744"""""""
11745
11746::
11747
11748 declare {}* @llvm.invariant.start(i64 <size>, i8* nocapture <ptr>)
11749
11750Overview:
11751"""""""""
11752
11753The '``llvm.invariant.start``' intrinsic specifies that the contents of
11754a memory object will not change.
11755
11756Arguments:
11757""""""""""
11758
11759The first argument is a constant integer representing the size of the
11760object, or -1 if it is variable sized. The second argument is a pointer
11761to the object.
11762
11763Semantics:
11764""""""""""
11765
11766This intrinsic indicates that until an ``llvm.invariant.end`` that uses
11767the return value, the referenced memory location is constant and
11768unchanging.
11769
11770'``llvm.invariant.end``' Intrinsic
11771^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11772
11773Syntax:
11774"""""""
11775
11776::
11777
11778 declare void @llvm.invariant.end({}* <start>, i64 <size>, i8* nocapture <ptr>)
11779
11780Overview:
11781"""""""""
11782
11783The '``llvm.invariant.end``' intrinsic specifies that the contents of a
11784memory object are mutable.
11785
11786Arguments:
11787""""""""""
11788
11789The first argument is the matching ``llvm.invariant.start`` intrinsic.
11790The second argument is a constant integer representing the size of the
11791object, or -1 if it is variable sized and the third argument is a
11792pointer to the object.
11793
11794Semantics:
11795""""""""""
11796
11797This intrinsic indicates that the memory is mutable again.
11798
Piotr Padlewski6c15ec42015-09-15 18:32:14 +000011799'``llvm.invariant.group.barrier``' Intrinsic
11800^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11801
11802Syntax:
11803"""""""
11804
11805::
11806
11807 declare i8* @llvm.invariant.group.barrier(i8* <ptr>)
11808
11809Overview:
11810"""""""""
11811
11812The '``llvm.invariant.group.barrier``' intrinsic can be used when an invariant
11813established by invariant.group metadata no longer holds, to obtain a new pointer
11814value that does not carry the invariant information.
11815
11816
11817Arguments:
11818""""""""""
11819
11820The ``llvm.invariant.group.barrier`` takes only one argument, which is
11821the pointer to the memory for which the ``invariant.group`` no longer holds.
11822
11823Semantics:
11824""""""""""
11825
11826Returns another pointer that aliases its argument but which is considered different
11827for the purposes of ``load``/``store`` ``invariant.group`` metadata.
11828
Sean Silvab084af42012-12-07 10:36:55 +000011829General Intrinsics
11830------------------
11831
11832This class of intrinsics is designed to be generic and has no specific
11833purpose.
11834
11835'``llvm.var.annotation``' Intrinsic
11836^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11837
11838Syntax:
11839"""""""
11840
11841::
11842
11843 declare void @llvm.var.annotation(i8* <val>, i8* <str>, i8* <str>, i32 <int>)
11844
11845Overview:
11846"""""""""
11847
11848The '``llvm.var.annotation``' intrinsic.
11849
11850Arguments:
11851""""""""""
11852
11853The first argument is a pointer to a value, the second is a pointer to a
11854global string, the third is a pointer to a global string which is the
11855source file name, and the last argument is the line number.
11856
11857Semantics:
11858""""""""""
11859
11860This intrinsic allows annotation of local variables with arbitrary
11861strings. This can be useful for special purpose optimizations that want
11862to look for these annotations. These have no other defined use; they are
11863ignored by code generation and optimization.
11864
Michael Gottesman88d18832013-03-26 00:34:27 +000011865'``llvm.ptr.annotation.*``' Intrinsic
11866^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11867
11868Syntax:
11869"""""""
11870
11871This is an overloaded intrinsic. You can use '``llvm.ptr.annotation``' on a
11872pointer to an integer of any width. *NOTE* you must specify an address space for
11873the pointer. The identifier for the default address space is the integer
11874'``0``'.
11875
11876::
11877
11878 declare i8* @llvm.ptr.annotation.p<address space>i8(i8* <val>, i8* <str>, i8* <str>, i32 <int>)
11879 declare i16* @llvm.ptr.annotation.p<address space>i16(i16* <val>, i8* <str>, i8* <str>, i32 <int>)
11880 declare i32* @llvm.ptr.annotation.p<address space>i32(i32* <val>, i8* <str>, i8* <str>, i32 <int>)
11881 declare i64* @llvm.ptr.annotation.p<address space>i64(i64* <val>, i8* <str>, i8* <str>, i32 <int>)
11882 declare i256* @llvm.ptr.annotation.p<address space>i256(i256* <val>, i8* <str>, i8* <str>, i32 <int>)
11883
11884Overview:
11885"""""""""
11886
11887The '``llvm.ptr.annotation``' intrinsic.
11888
11889Arguments:
11890""""""""""
11891
11892The first argument is a pointer to an integer value of arbitrary bitwidth
11893(result of some expression), the second is a pointer to a global string, the
11894third is a pointer to a global string which is the source file name, and the
11895last argument is the line number. It returns the value of the first argument.
11896
11897Semantics:
11898""""""""""
11899
11900This intrinsic allows annotation of a pointer to an integer with arbitrary
11901strings. This can be useful for special purpose optimizations that want to look
11902for these annotations. These have no other defined use; they are ignored by code
11903generation and optimization.
11904
Sean Silvab084af42012-12-07 10:36:55 +000011905'``llvm.annotation.*``' Intrinsic
11906^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11907
11908Syntax:
11909"""""""
11910
11911This is an overloaded intrinsic. You can use '``llvm.annotation``' on
11912any integer bit width.
11913
11914::
11915
11916 declare i8 @llvm.annotation.i8(i8 <val>, i8* <str>, i8* <str>, i32 <int>)
11917 declare i16 @llvm.annotation.i16(i16 <val>, i8* <str>, i8* <str>, i32 <int>)
11918 declare i32 @llvm.annotation.i32(i32 <val>, i8* <str>, i8* <str>, i32 <int>)
11919 declare i64 @llvm.annotation.i64(i64 <val>, i8* <str>, i8* <str>, i32 <int>)
11920 declare i256 @llvm.annotation.i256(i256 <val>, i8* <str>, i8* <str>, i32 <int>)
11921
11922Overview:
11923"""""""""
11924
11925The '``llvm.annotation``' intrinsic.
11926
11927Arguments:
11928""""""""""
11929
11930The first argument is an integer value (result of some expression), the
11931second is a pointer to a global string, the third is a pointer to a
11932global string which is the source file name, and the last argument is
11933the line number. It returns the value of the first argument.
11934
11935Semantics:
11936""""""""""
11937
11938This intrinsic allows annotations to be put on arbitrary expressions
11939with arbitrary strings. This can be useful for special purpose
11940optimizations that want to look for these annotations. These have no
11941other defined use; they are ignored by code generation and optimization.
11942
11943'``llvm.trap``' Intrinsic
11944^^^^^^^^^^^^^^^^^^^^^^^^^
11945
11946Syntax:
11947"""""""
11948
11949::
11950
11951 declare void @llvm.trap() noreturn nounwind
11952
11953Overview:
11954"""""""""
11955
11956The '``llvm.trap``' intrinsic.
11957
11958Arguments:
11959""""""""""
11960
11961None.
11962
11963Semantics:
11964""""""""""
11965
11966This intrinsic is lowered to the target dependent trap instruction. If
11967the target does not have a trap instruction, this intrinsic will be
11968lowered to a call of the ``abort()`` function.
11969
11970'``llvm.debugtrap``' Intrinsic
11971^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11972
11973Syntax:
11974"""""""
11975
11976::
11977
11978 declare void @llvm.debugtrap() nounwind
11979
11980Overview:
11981"""""""""
11982
11983The '``llvm.debugtrap``' intrinsic.
11984
11985Arguments:
11986""""""""""
11987
11988None.
11989
11990Semantics:
11991""""""""""
11992
11993This intrinsic is lowered to code which is intended to cause an
11994execution trap with the intention of requesting the attention of a
11995debugger.
11996
11997'``llvm.stackprotector``' Intrinsic
11998^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11999
12000Syntax:
12001"""""""
12002
12003::
12004
12005 declare void @llvm.stackprotector(i8* <guard>, i8** <slot>)
12006
12007Overview:
12008"""""""""
12009
12010The ``llvm.stackprotector`` intrinsic takes the ``guard`` and stores it
12011onto the stack at ``slot``. The stack slot is adjusted to ensure that it
12012is placed on the stack before local variables.
12013
12014Arguments:
12015""""""""""
12016
12017The ``llvm.stackprotector`` intrinsic requires two pointer arguments.
12018The first argument is the value loaded from the stack guard
12019``@__stack_chk_guard``. The second variable is an ``alloca`` that has
12020enough space to hold the value of the guard.
12021
12022Semantics:
12023""""""""""
12024
Michael Gottesmandafc7d92013-08-12 18:35:32 +000012025This intrinsic causes the prologue/epilogue inserter to force the position of
12026the ``AllocaInst`` stack slot to be before local variables on the stack. This is
12027to ensure that if a local variable on the stack is overwritten, it will destroy
12028the value of the guard. When the function exits, the guard on the stack is
12029checked against the original guard by ``llvm.stackprotectorcheck``. If they are
12030different, then ``llvm.stackprotectorcheck`` causes the program to abort by
12031calling the ``__stack_chk_fail()`` function.
12032
12033'``llvm.stackprotectorcheck``' Intrinsic
Sean Silva9d1e1a32013-09-09 19:13:28 +000012034^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Michael Gottesmandafc7d92013-08-12 18:35:32 +000012035
12036Syntax:
12037"""""""
12038
12039::
12040
12041 declare void @llvm.stackprotectorcheck(i8** <guard>)
12042
12043Overview:
12044"""""""""
12045
12046The ``llvm.stackprotectorcheck`` intrinsic compares ``guard`` against an already
Michael Gottesman98850bd2013-08-12 19:44:09 +000012047created stack protector and if they are not equal calls the
Sean Silvab084af42012-12-07 10:36:55 +000012048``__stack_chk_fail()`` function.
12049
Michael Gottesmandafc7d92013-08-12 18:35:32 +000012050Arguments:
12051""""""""""
12052
12053The ``llvm.stackprotectorcheck`` intrinsic requires one pointer argument, the
12054the variable ``@__stack_chk_guard``.
12055
12056Semantics:
12057""""""""""
12058
12059This intrinsic is provided to perform the stack protector check by comparing
12060``guard`` with the stack slot created by ``llvm.stackprotector`` and if the
12061values do not match call the ``__stack_chk_fail()`` function.
12062
12063The reason to provide this as an IR level intrinsic instead of implementing it
12064via other IR operations is that in order to perform this operation at the IR
12065level without an intrinsic, one would need to create additional basic blocks to
12066handle the success/failure cases. This makes it difficult to stop the stack
12067protector check from disrupting sibling tail calls in Codegen. With this
12068intrinsic, we are able to generate the stack protector basic blocks late in
Benjamin Kramer3b32b2f2013-10-29 17:53:27 +000012069codegen after the tail call decision has occurred.
Michael Gottesmandafc7d92013-08-12 18:35:32 +000012070
Sean Silvab084af42012-12-07 10:36:55 +000012071'``llvm.objectsize``' Intrinsic
12072^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12073
12074Syntax:
12075"""""""
12076
12077::
12078
12079 declare i32 @llvm.objectsize.i32(i8* <object>, i1 <min>)
12080 declare i64 @llvm.objectsize.i64(i8* <object>, i1 <min>)
12081
12082Overview:
12083"""""""""
12084
12085The ``llvm.objectsize`` intrinsic is designed to provide information to
12086the optimizers to determine at compile time whether a) an operation
12087(like memcpy) will overflow a buffer that corresponds to an object, or
12088b) that a runtime check for overflow isn't necessary. An object in this
12089context means an allocation of a specific class, structure, array, or
12090other object.
12091
12092Arguments:
12093""""""""""
12094
12095The ``llvm.objectsize`` intrinsic takes two arguments. The first
12096argument is a pointer to or into the ``object``. The second argument is
12097a boolean and determines whether ``llvm.objectsize`` returns 0 (if true)
12098or -1 (if false) when the object size is unknown. The second argument
12099only accepts constants.
12100
12101Semantics:
12102""""""""""
12103
12104The ``llvm.objectsize`` intrinsic is lowered to a constant representing
12105the size of the object concerned. If the size cannot be determined at
12106compile time, ``llvm.objectsize`` returns ``i32/i64 -1 or 0`` (depending
12107on the ``min`` argument).
12108
12109'``llvm.expect``' Intrinsic
12110^^^^^^^^^^^^^^^^^^^^^^^^^^^
12111
12112Syntax:
12113"""""""
12114
Duncan P. N. Exon Smith1ff08e32014-02-02 22:43:55 +000012115This is an overloaded intrinsic. You can use ``llvm.expect`` on any
12116integer bit width.
12117
Sean Silvab084af42012-12-07 10:36:55 +000012118::
12119
Duncan P. N. Exon Smith1ff08e32014-02-02 22:43:55 +000012120 declare i1 @llvm.expect.i1(i1 <val>, i1 <expected_val>)
Sean Silvab084af42012-12-07 10:36:55 +000012121 declare i32 @llvm.expect.i32(i32 <val>, i32 <expected_val>)
12122 declare i64 @llvm.expect.i64(i64 <val>, i64 <expected_val>)
12123
12124Overview:
12125"""""""""
12126
12127The ``llvm.expect`` intrinsic provides information about expected (the
12128most probable) value of ``val``, which can be used by optimizers.
12129
12130Arguments:
12131""""""""""
12132
12133The ``llvm.expect`` intrinsic takes two arguments. The first argument is
12134a value. The second argument is an expected value, this needs to be a
12135constant value, variables are not allowed.
12136
12137Semantics:
12138""""""""""
12139
12140This intrinsic is lowered to the ``val``.
12141
Philip Reamese0e90832015-04-26 22:23:12 +000012142.. _int_assume:
12143
Hal Finkel93046912014-07-25 21:13:35 +000012144'``llvm.assume``' Intrinsic
12145^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12146
12147Syntax:
12148"""""""
12149
12150::
12151
12152 declare void @llvm.assume(i1 %cond)
12153
12154Overview:
12155"""""""""
12156
12157The ``llvm.assume`` allows the optimizer to assume that the provided
12158condition is true. This information can then be used in simplifying other parts
12159of the code.
12160
12161Arguments:
12162""""""""""
12163
12164The condition which the optimizer may assume is always true.
12165
12166Semantics:
12167""""""""""
12168
12169The intrinsic allows the optimizer to assume that the provided condition is
12170always true whenever the control flow reaches the intrinsic call. No code is
12171generated for this intrinsic, and instructions that contribute only to the
12172provided condition are not used for code generation. If the condition is
12173violated during execution, the behavior is undefined.
12174
Sanjay Patel1ed2bb52015-01-14 16:03:58 +000012175Note that the optimizer might limit the transformations performed on values
Hal Finkel93046912014-07-25 21:13:35 +000012176used by the ``llvm.assume`` intrinsic in order to preserve the instructions
12177only used to form the intrinsic's input argument. This might prove undesirable
Sanjay Patel1ed2bb52015-01-14 16:03:58 +000012178if the extra information provided by the ``llvm.assume`` intrinsic does not cause
Hal Finkel93046912014-07-25 21:13:35 +000012179sufficient overall improvement in code quality. For this reason,
12180``llvm.assume`` should not be used to document basic mathematical invariants
12181that the optimizer can otherwise deduce or facts that are of little use to the
12182optimizer.
12183
Peter Collingbournee6909c82015-02-20 20:30:47 +000012184.. _bitset.test:
12185
12186'``llvm.bitset.test``' Intrinsic
12187^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12188
12189Syntax:
12190"""""""
12191
12192::
12193
12194 declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone
12195
12196
12197Arguments:
12198""""""""""
12199
12200The first argument is a pointer to be tested. The second argument is a
Peter Collingbourne8d24ae92015-09-08 22:49:35 +000012201metadata object representing an identifier for a :doc:`bitset <BitSets>`.
Peter Collingbournee6909c82015-02-20 20:30:47 +000012202
12203Overview:
12204"""""""""
12205
12206The ``llvm.bitset.test`` intrinsic tests whether the given pointer is a
12207member of the given bitset.
12208
Sean Silvab084af42012-12-07 10:36:55 +000012209'``llvm.donothing``' Intrinsic
12210^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12211
12212Syntax:
12213"""""""
12214
12215::
12216
12217 declare void @llvm.donothing() nounwind readnone
12218
12219Overview:
12220"""""""""
12221
Juergen Ributzkac9161192014-10-23 22:36:13 +000012222The ``llvm.donothing`` intrinsic doesn't perform any operation. It's one of only
12223two intrinsics (besides ``llvm.experimental.patchpoint``) that can be called
12224with an invoke instruction.
Sean Silvab084af42012-12-07 10:36:55 +000012225
12226Arguments:
12227""""""""""
12228
12229None.
12230
12231Semantics:
12232""""""""""
12233
12234This intrinsic does nothing, and it's removed by optimizers and ignored
12235by codegen.
Andrew Trick5e029ce2013-12-24 02:57:25 +000012236
12237Stack Map Intrinsics
12238--------------------
12239
12240LLVM provides experimental intrinsics to support runtime patching
12241mechanisms commonly desired in dynamic language JITs. These intrinsics
12242are described in :doc:`StackMaps`.