Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 1 | ============================== |
| 2 | LLVM Language Reference Manual |
| 3 | ============================== |
| 4 | |
| 5 | .. contents:: |
| 6 | :local: |
| 7 | :depth: 3 |
| 8 | |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 9 | Abstract |
| 10 | ======== |
| 11 | |
| 12 | This document is a reference manual for the LLVM assembly language. LLVM |
| 13 | is a Static Single Assignment (SSA) based representation that provides |
| 14 | type safety, low-level operations, flexibility, and the capability of |
| 15 | representing 'all' high-level languages cleanly. It is the common code |
| 16 | representation used throughout all phases of the LLVM compilation |
| 17 | strategy. |
| 18 | |
| 19 | Introduction |
| 20 | ============ |
| 21 | |
| 22 | The LLVM code representation is designed to be used in three different |
| 23 | forms: as an in-memory compiler IR, as an on-disk bitcode representation |
| 24 | (suitable for fast loading by a Just-In-Time compiler), and as a human |
| 25 | readable assembly language representation. This allows LLVM to provide a |
| 26 | powerful intermediate representation for efficient compiler |
| 27 | transformations and analysis, while providing a natural means to debug |
| 28 | and visualize the transformations. The three different forms of LLVM are |
| 29 | all equivalent. This document describes the human readable |
| 30 | representation and notation. |
| 31 | |
| 32 | The LLVM representation aims to be light-weight and low-level while |
| 33 | being expressive, typed, and extensible at the same time. It aims to be |
| 34 | a "universal IR" of sorts, by being at a low enough level that |
| 35 | high-level ideas may be cleanly mapped to it (similar to how |
| 36 | microprocessors are "universal IR's", allowing many source languages to |
| 37 | be mapped to them). By providing type information, LLVM can be used as |
| 38 | the target of optimizations: for example, through pointer analysis, it |
| 39 | can be proven that a C automatic variable is never accessed outside of |
| 40 | the current function, allowing it to be promoted to a simple SSA value |
| 41 | instead of a memory location. |
| 42 | |
| 43 | .. _wellformed: |
| 44 | |
| 45 | Well-Formedness |
| 46 | --------------- |
| 47 | |
| 48 | It is important to note that this document describes 'well formed' LLVM |
| 49 | assembly language. There is a difference between what the parser accepts |
| 50 | and what is considered 'well formed'. For example, the following |
| 51 | instruction is syntactically okay, but not well formed: |
| 52 | |
| 53 | .. code-block:: llvm |
| 54 | |
| 55 | %x = add i32 1, %x |
| 56 | |
| 57 | because the definition of ``%x`` does not dominate all of its uses. The |
| 58 | LLVM infrastructure provides a verification pass that may be used to |
| 59 | verify that an LLVM module is well formed. This pass is automatically |
| 60 | run by the parser after parsing input assembly and by the optimizer |
| 61 | before it outputs bitcode. The violations pointed out by the verifier |
| 62 | pass indicate bugs in transformation passes or input to the parser. |
| 63 | |
| 64 | .. _identifiers: |
| 65 | |
| 66 | Identifiers |
| 67 | =========== |
| 68 | |
| 69 | LLVM identifiers come in two basic types: global and local. Global |
| 70 | identifiers (functions, global variables) begin with the ``'@'`` |
| 71 | character. Local identifiers (register names, types) begin with the |
| 72 | ``'%'`` character. Additionally, there are three different formats for |
| 73 | identifiers, for different purposes: |
| 74 | |
| 75 | #. Named values are represented as a string of characters with their |
| 76 | prefix. For example, ``%foo``, ``@DivisionByZero``, |
| 77 | ``%a.really.long.identifier``. The actual regular expression used is |
| 78 | '``[%@][a-zA-Z$._][a-zA-Z$._0-9]*``'. Identifiers which require other |
| 79 | characters in their names can be surrounded with quotes. Special |
| 80 | characters may be escaped using ``"\xx"`` where ``xx`` is the ASCII |
| 81 | code for the character in hexadecimal. In this way, any character can |
| 82 | be used in a name value, even quotes themselves. |
| 83 | #. Unnamed values are represented as an unsigned numeric value with |
| 84 | their prefix. For example, ``%12``, ``@2``, ``%44``. |
| 85 | #. Constants, which are described in the section Constants_ below. |
| 86 | |
| 87 | LLVM requires that values start with a prefix for two reasons: Compilers |
| 88 | don't need to worry about name clashes with reserved words, and the set |
| 89 | of reserved words may be expanded in the future without penalty. |
| 90 | Additionally, unnamed identifiers allow a compiler to quickly come up |
| 91 | with a temporary variable without having to avoid symbol table |
| 92 | conflicts. |
| 93 | |
| 94 | Reserved words in LLVM are very similar to reserved words in other |
| 95 | languages. There are keywords for different opcodes ('``add``', |
| 96 | '``bitcast``', '``ret``', etc...), for primitive type names ('``void``', |
| 97 | '``i32``', etc...), and others. These reserved words cannot conflict |
| 98 | with variable names, because none of them start with a prefix character |
| 99 | (``'%'`` or ``'@'``). |
| 100 | |
| 101 | Here is an example of LLVM code to multiply the integer variable |
| 102 | '``%X``' by 8: |
| 103 | |
| 104 | The easy way: |
| 105 | |
| 106 | .. code-block:: llvm |
| 107 | |
| 108 | %result = mul i32 %X, 8 |
| 109 | |
| 110 | After strength reduction: |
| 111 | |
| 112 | .. code-block:: llvm |
| 113 | |
| 114 | %result = shl i32 %X, i8 3 |
| 115 | |
| 116 | And the hard way: |
| 117 | |
| 118 | .. code-block:: llvm |
| 119 | |
| 120 | %0 = add i32 %X, %X ; yields {i32}:%0 |
| 121 | %1 = add i32 %0, %0 ; yields {i32}:%1 |
| 122 | %result = add i32 %1, %1 |
| 123 | |
| 124 | This last way of multiplying ``%X`` by 8 illustrates several important |
| 125 | lexical features of LLVM: |
| 126 | |
| 127 | #. Comments are delimited with a '``;``' and go until the end of line. |
| 128 | #. Unnamed temporaries are created when the result of a computation is |
| 129 | not assigned to a named value. |
| 130 | #. Unnamed temporaries are numbered sequentially |
| 131 | |
| 132 | It also shows a convention that we follow in this document. When |
| 133 | demonstrating instructions, we will follow an instruction with a comment |
| 134 | that defines the type and name of value produced. |
| 135 | |
| 136 | High Level Structure |
| 137 | ==================== |
| 138 | |
| 139 | Module Structure |
| 140 | ---------------- |
| 141 | |
| 142 | LLVM programs are composed of ``Module``'s, each of which is a |
| 143 | translation unit of the input programs. Each module consists of |
| 144 | functions, global variables, and symbol table entries. Modules may be |
| 145 | combined together with the LLVM linker, which merges function (and |
| 146 | global variable) definitions, resolves forward declarations, and merges |
| 147 | symbol table entries. Here is an example of the "hello world" module: |
| 148 | |
| 149 | .. code-block:: llvm |
| 150 | |
| 151 | ; Declare the string constant as a global constant. |
| 152 | @.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00" |
| 153 | |
| 154 | ; External declaration of the puts function |
| 155 | declare i32 @puts(i8* nocapture) nounwind |
| 156 | |
| 157 | ; Definition of main function |
| 158 | define i32 @main() { ; i32()* |
| 159 | ; Convert [13 x i8]* to i8 *... |
| 160 | %cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0 |
| 161 | |
| 162 | ; Call puts function to write out the string to stdout. |
| 163 | call i32 @puts(i8* %cast210) |
| 164 | ret i32 0 |
| 165 | } |
| 166 | |
| 167 | ; Named metadata |
| 168 | !1 = metadata !{i32 42} |
| 169 | !foo = !{!1, null} |
| 170 | |
| 171 | This example is made up of a :ref:`global variable <globalvars>` named |
| 172 | "``.str``", an external declaration of the "``puts``" function, a |
| 173 | :ref:`function definition <functionstructure>` for "``main``" and |
| 174 | :ref:`named metadata <namedmetadatastructure>` "``foo``". |
| 175 | |
| 176 | In general, a module is made up of a list of global values (where both |
| 177 | functions and global variables are global values). Global values are |
| 178 | represented by a pointer to a memory location (in this case, a pointer |
| 179 | to an array of char, and a pointer to a function), and have one of the |
| 180 | following :ref:`linkage types <linkage>`. |
| 181 | |
| 182 | .. _linkage: |
| 183 | |
| 184 | Linkage Types |
| 185 | ------------- |
| 186 | |
| 187 | All Global Variables and Functions have one of the following types of |
| 188 | linkage: |
| 189 | |
| 190 | ``private`` |
| 191 | Global values with "``private``" linkage are only directly |
| 192 | accessible by objects in the current module. In particular, linking |
| 193 | code into a module with an private global value may cause the |
| 194 | private to be renamed as necessary to avoid collisions. Because the |
| 195 | symbol is private to the module, all references can be updated. This |
| 196 | doesn't show up in any symbol table in the object file. |
| 197 | ``linker_private`` |
| 198 | Similar to ``private``, but the symbol is passed through the |
| 199 | assembler and evaluated by the linker. Unlike normal strong symbols, |
| 200 | they are removed by the linker from the final linked image |
| 201 | (executable or dynamic library). |
| 202 | ``linker_private_weak`` |
| 203 | Similar to "``linker_private``", but the symbol is weak. Note that |
| 204 | ``linker_private_weak`` symbols are subject to coalescing by the |
| 205 | linker. The symbols are removed by the linker from the final linked |
| 206 | image (executable or dynamic library). |
| 207 | ``internal`` |
| 208 | Similar to private, but the value shows as a local symbol |
| 209 | (``STB_LOCAL`` in the case of ELF) in the object file. This |
| 210 | corresponds to the notion of the '``static``' keyword in C. |
| 211 | ``available_externally`` |
| 212 | Globals with "``available_externally``" linkage are never emitted |
| 213 | into the object file corresponding to the LLVM module. They exist to |
| 214 | allow inlining and other optimizations to take place given knowledge |
| 215 | of the definition of the global, which is known to be somewhere |
| 216 | outside the module. Globals with ``available_externally`` linkage |
| 217 | are allowed to be discarded at will, and are otherwise the same as |
| 218 | ``linkonce_odr``. This linkage type is only allowed on definitions, |
| 219 | not declarations. |
| 220 | ``linkonce`` |
| 221 | Globals with "``linkonce``" linkage are merged with other globals of |
| 222 | the same name when linkage occurs. This can be used to implement |
| 223 | some forms of inline functions, templates, or other code which must |
| 224 | be generated in each translation unit that uses it, but where the |
| 225 | body may be overridden with a more definitive definition later. |
| 226 | Unreferenced ``linkonce`` globals are allowed to be discarded. Note |
| 227 | that ``linkonce`` linkage does not actually allow the optimizer to |
| 228 | inline the body of this function into callers because it doesn't |
| 229 | know if this definition of the function is the definitive definition |
| 230 | within the program or whether it will be overridden by a stronger |
| 231 | definition. To enable inlining and other optimizations, use |
| 232 | "``linkonce_odr``" linkage. |
| 233 | ``weak`` |
| 234 | "``weak``" linkage has the same merging semantics as ``linkonce`` |
| 235 | linkage, except that unreferenced globals with ``weak`` linkage may |
| 236 | not be discarded. This is used for globals that are declared "weak" |
| 237 | in C source code. |
| 238 | ``common`` |
| 239 | "``common``" linkage is most similar to "``weak``" linkage, but they |
| 240 | are used for tentative definitions in C, such as "``int X;``" at |
| 241 | global scope. Symbols with "``common``" linkage are merged in the |
| 242 | same way as ``weak symbols``, and they may not be deleted if |
| 243 | unreferenced. ``common`` symbols may not have an explicit section, |
| 244 | must have a zero initializer, and may not be marked |
| 245 | ':ref:`constant <globalvars>`'. Functions and aliases may not have |
| 246 | common linkage. |
| 247 | |
| 248 | .. _linkage_appending: |
| 249 | |
| 250 | ``appending`` |
| 251 | "``appending``" linkage may only be applied to global variables of |
| 252 | pointer to array type. When two global variables with appending |
| 253 | linkage are linked together, the two global arrays are appended |
| 254 | together. This is the LLVM, typesafe, equivalent of having the |
| 255 | system linker append together "sections" with identical names when |
| 256 | .o files are linked. |
| 257 | ``extern_weak`` |
| 258 | The semantics of this linkage follow the ELF object file model: the |
| 259 | symbol is weak until linked, if not linked, the symbol becomes null |
| 260 | instead of being an undefined reference. |
| 261 | ``linkonce_odr``, ``weak_odr`` |
| 262 | Some languages allow differing globals to be merged, such as two |
| 263 | functions with different semantics. Other languages, such as |
| 264 | ``C++``, ensure that only equivalent globals are ever merged (the |
| 265 | "one definition rule" — "ODR"). Such languages can use the |
| 266 | ``linkonce_odr`` and ``weak_odr`` linkage types to indicate that the |
| 267 | global will only be merged with equivalent globals. These linkage |
| 268 | types are otherwise the same as their non-``odr`` versions. |
| 269 | ``linkonce_odr_auto_hide`` |
| 270 | Similar to "``linkonce_odr``", but nothing in the translation unit |
| 271 | takes the address of this definition. For instance, functions that |
| 272 | had an inline definition, but the compiler decided not to inline it. |
| 273 | ``linkonce_odr_auto_hide`` may have only ``default`` visibility. The |
| 274 | symbols are removed by the linker from the final linked image |
| 275 | (executable or dynamic library). |
| 276 | ``external`` |
| 277 | If none of the above identifiers are used, the global is externally |
| 278 | visible, meaning that it participates in linkage and can be used to |
| 279 | resolve external symbol references. |
| 280 | |
| 281 | The next two types of linkage are targeted for Microsoft Windows |
| 282 | platform only. They are designed to support importing (exporting) |
| 283 | symbols from (to) DLLs (Dynamic Link Libraries). |
| 284 | |
| 285 | ``dllimport`` |
| 286 | "``dllimport``" linkage causes the compiler to reference a function |
| 287 | or variable via a global pointer to a pointer that is set up by the |
| 288 | DLL exporting the symbol. On Microsoft Windows targets, the pointer |
| 289 | name is formed by combining ``__imp_`` and the function or variable |
| 290 | name. |
| 291 | ``dllexport`` |
| 292 | "``dllexport``" linkage causes the compiler to provide a global |
| 293 | pointer to a pointer in a DLL, so that it can be referenced with the |
| 294 | ``dllimport`` attribute. On Microsoft Windows targets, the pointer |
| 295 | name is formed by combining ``__imp_`` and the function or variable |
| 296 | name. |
| 297 | |
| 298 | For example, since the "``.LC0``" variable is defined to be internal, if |
| 299 | another module defined a "``.LC0``" variable and was linked with this |
| 300 | one, one of the two would be renamed, preventing a collision. Since |
| 301 | "``main``" and "``puts``" are external (i.e., lacking any linkage |
| 302 | declarations), they are accessible outside of the current module. |
| 303 | |
| 304 | It is illegal for a function *declaration* to have any linkage type |
| 305 | other than ``external``, ``dllimport`` or ``extern_weak``. |
| 306 | |
| 307 | Aliases can have only ``external``, ``internal``, ``weak`` or |
| 308 | ``weak_odr`` linkages. |
| 309 | |
| 310 | .. _callingconv: |
| 311 | |
| 312 | Calling Conventions |
| 313 | ------------------- |
| 314 | |
| 315 | LLVM :ref:`functions <functionstructure>`, :ref:`calls <i_call>` and |
| 316 | :ref:`invokes <i_invoke>` can all have an optional calling convention |
| 317 | specified for the call. The calling convention of any pair of dynamic |
| 318 | caller/callee must match, or the behavior of the program is undefined. |
| 319 | The following calling conventions are supported by LLVM, and more may be |
| 320 | added in the future: |
| 321 | |
| 322 | "``ccc``" - The C calling convention |
| 323 | This calling convention (the default if no other calling convention |
| 324 | is specified) matches the target C calling conventions. This calling |
| 325 | convention supports varargs function calls and tolerates some |
| 326 | mismatch in the declared prototype and implemented declaration of |
| 327 | the function (as does normal C). |
| 328 | "``fastcc``" - The fast calling convention |
| 329 | This calling convention attempts to make calls as fast as possible |
| 330 | (e.g. by passing things in registers). This calling convention |
| 331 | allows the target to use whatever tricks it wants to produce fast |
| 332 | code for the target, without having to conform to an externally |
| 333 | specified ABI (Application Binary Interface). `Tail calls can only |
| 334 | be optimized when this, the GHC or the HiPE convention is |
| 335 | used. <CodeGenerator.html#id80>`_ This calling convention does not |
| 336 | support varargs and requires the prototype of all callees to exactly |
| 337 | match the prototype of the function definition. |
| 338 | "``coldcc``" - The cold calling convention |
| 339 | This calling convention attempts to make code in the caller as |
| 340 | efficient as possible under the assumption that the call is not |
| 341 | commonly executed. As such, these calls often preserve all registers |
| 342 | so that the call does not break any live ranges in the caller side. |
| 343 | This calling convention does not support varargs and requires the |
| 344 | prototype of all callees to exactly match the prototype of the |
| 345 | function definition. |
| 346 | "``cc 10``" - GHC convention |
| 347 | This calling convention has been implemented specifically for use by |
| 348 | the `Glasgow Haskell Compiler (GHC) <http://www.haskell.org/ghc>`_. |
| 349 | It passes everything in registers, going to extremes to achieve this |
| 350 | by disabling callee save registers. This calling convention should |
| 351 | not be used lightly but only for specific situations such as an |
| 352 | alternative to the *register pinning* performance technique often |
| 353 | used when implementing functional programming languages. At the |
| 354 | moment only X86 supports this convention and it has the following |
| 355 | limitations: |
| 356 | |
| 357 | - On *X86-32* only supports up to 4 bit type parameters. No |
| 358 | floating point types are supported. |
| 359 | - On *X86-64* only supports up to 10 bit type parameters and 6 |
| 360 | floating point parameters. |
| 361 | |
| 362 | This calling convention supports `tail call |
| 363 | optimization <CodeGenerator.html#id80>`_ but requires both the |
| 364 | caller and callee are using it. |
| 365 | "``cc 11``" - The HiPE calling convention |
| 366 | This calling convention has been implemented specifically for use by |
| 367 | the `High-Performance Erlang |
| 368 | (HiPE) <http://www.it.uu.se/research/group/hipe/>`_ compiler, *the* |
| 369 | native code compiler of the `Ericsson's Open Source Erlang/OTP |
| 370 | system <http://www.erlang.org/download.shtml>`_. It uses more |
| 371 | registers for argument passing than the ordinary C calling |
| 372 | convention and defines no callee-saved registers. The calling |
| 373 | convention properly supports `tail call |
| 374 | optimization <CodeGenerator.html#id80>`_ but requires that both the |
| 375 | caller and the callee use it. It uses a *register pinning* |
| 376 | mechanism, similar to GHC's convention, for keeping frequently |
| 377 | accessed runtime components pinned to specific hardware registers. |
| 378 | At the moment only X86 supports this convention (both 32 and 64 |
| 379 | bit). |
| 380 | "``cc <n>``" - Numbered convention |
| 381 | Any calling convention may be specified by number, allowing |
| 382 | target-specific calling conventions to be used. Target specific |
| 383 | calling conventions start at 64. |
| 384 | |
| 385 | More calling conventions can be added/defined on an as-needed basis, to |
| 386 | support Pascal conventions or any other well-known target-independent |
| 387 | convention. |
| 388 | |
| 389 | Visibility Styles |
| 390 | ----------------- |
| 391 | |
| 392 | All Global Variables and Functions have one of the following visibility |
| 393 | styles: |
| 394 | |
| 395 | "``default``" - Default style |
| 396 | On targets that use the ELF object file format, default visibility |
| 397 | means that the declaration is visible to other modules and, in |
| 398 | shared libraries, means that the declared entity may be overridden. |
| 399 | On Darwin, default visibility means that the declaration is visible |
| 400 | to other modules. Default visibility corresponds to "external |
| 401 | linkage" in the language. |
| 402 | "``hidden``" - Hidden style |
| 403 | Two declarations of an object with hidden visibility refer to the |
| 404 | same object if they are in the same shared object. Usually, hidden |
| 405 | visibility indicates that the symbol will not be placed into the |
| 406 | dynamic symbol table, so no other module (executable or shared |
| 407 | library) can reference it directly. |
| 408 | "``protected``" - Protected style |
| 409 | On ELF, protected visibility indicates that the symbol will be |
| 410 | placed in the dynamic symbol table, but that references within the |
| 411 | defining module will bind to the local symbol. That is, the symbol |
| 412 | cannot be overridden by another module. |
| 413 | |
| 414 | Named Types |
| 415 | ----------- |
| 416 | |
| 417 | LLVM IR allows you to specify name aliases for certain types. This can |
| 418 | make it easier to read the IR and make the IR more condensed |
| 419 | (particularly when recursive types are involved). An example of a name |
| 420 | specification is: |
| 421 | |
| 422 | .. code-block:: llvm |
| 423 | |
| 424 | %mytype = type { %mytype*, i32 } |
| 425 | |
| 426 | You may give a name to any :ref:`type <typesystem>` except |
| 427 | ":ref:`void <t_void>`". Type name aliases may be used anywhere a type is |
| 428 | expected with the syntax "%mytype". |
| 429 | |
| 430 | Note that type names are aliases for the structural type that they |
| 431 | indicate, and that you can therefore specify multiple names for the same |
| 432 | type. This often leads to confusing behavior when dumping out a .ll |
| 433 | file. Since LLVM IR uses structural typing, the name is not part of the |
| 434 | type. When printing out LLVM IR, the printer will pick *one name* to |
| 435 | render all types of a particular shape. This means that if you have code |
| 436 | where two different source types end up having the same LLVM type, that |
| 437 | the dumper will sometimes print the "wrong" or unexpected type. This is |
| 438 | an important design point and isn't going to change. |
| 439 | |
| 440 | .. _globalvars: |
| 441 | |
| 442 | Global Variables |
| 443 | ---------------- |
| 444 | |
| 445 | Global variables define regions of memory allocated at compilation time |
| 446 | instead of run-time. Global variables may optionally be initialized, may |
| 447 | have an explicit section to be placed in, and may have an optional |
| 448 | explicit alignment specified. |
| 449 | |
| 450 | A variable may be defined as ``thread_local``, which means that it will |
| 451 | not be shared by threads (each thread will have a separated copy of the |
| 452 | variable). Not all targets support thread-local variables. Optionally, a |
| 453 | TLS model may be specified: |
| 454 | |
| 455 | ``localdynamic`` |
| 456 | For variables that are only used within the current shared library. |
| 457 | ``initialexec`` |
| 458 | For variables in modules that will not be loaded dynamically. |
| 459 | ``localexec`` |
| 460 | For variables defined in the executable and only used within it. |
| 461 | |
| 462 | The models correspond to the ELF TLS models; see `ELF Handling For |
| 463 | Thread-Local Storage <http://people.redhat.com/drepper/tls.pdf>`_ for |
| 464 | more information on under which circumstances the different models may |
| 465 | be used. The target may choose a different TLS model if the specified |
| 466 | model is not supported, or if a better choice of model can be made. |
| 467 | |
| 468 | A variable may be defined as a global "constant," which indicates that |
| 469 | the contents of the variable will **never** be modified (enabling better |
| 470 | optimization, allowing the global data to be placed in the read-only |
| 471 | section of an executable, etc). Note that variables that need runtime |
| 472 | initialization cannot be marked "constant" as there is a store to the |
| 473 | variable. |
| 474 | |
| 475 | LLVM explicitly allows *declarations* of global variables to be marked |
| 476 | constant, even if the final definition of the global is not. This |
| 477 | capability can be used to enable slightly better optimization of the |
| 478 | program, but requires the language definition to guarantee that |
| 479 | optimizations based on the 'constantness' are valid for the translation |
| 480 | units that do not include the definition. |
| 481 | |
| 482 | As SSA values, global variables define pointer values that are in scope |
| 483 | (i.e. they dominate) all basic blocks in the program. Global variables |
| 484 | always define a pointer to their "content" type because they describe a |
| 485 | region of memory, and all memory objects in LLVM are accessed through |
| 486 | pointers. |
| 487 | |
| 488 | Global variables can be marked with ``unnamed_addr`` which indicates |
| 489 | that the address is not significant, only the content. Constants marked |
| 490 | like this can be merged with other constants if they have the same |
| 491 | initializer. Note that a constant with significant address *can* be |
| 492 | merged with a ``unnamed_addr`` constant, the result being a constant |
| 493 | whose address is significant. |
| 494 | |
| 495 | A global variable may be declared to reside in a target-specific |
| 496 | numbered address space. For targets that support them, address spaces |
| 497 | may affect how optimizations are performed and/or what target |
| 498 | instructions are used to access the variable. The default address space |
| 499 | is zero. The address space qualifier must precede any other attributes. |
| 500 | |
| 501 | LLVM allows an explicit section to be specified for globals. If the |
| 502 | target supports it, it will emit globals to the section specified. |
| 503 | |
| 504 | An explicit alignment may be specified for a global, which must be a |
| 505 | power of 2. If not present, or if the alignment is set to zero, the |
| 506 | alignment of the global is set by the target to whatever it feels |
| 507 | convenient. If an explicit alignment is specified, the global is forced |
| 508 | to have exactly that alignment. Targets and optimizers are not allowed |
| 509 | to over-align the global if the global has an assigned section. In this |
| 510 | case, the extra alignment could be observable: for example, code could |
| 511 | assume that the globals are densely packed in their section and try to |
| 512 | iterate over them as an array, alignment padding would break this |
| 513 | iteration. |
| 514 | |
| 515 | For example, the following defines a global in a numbered address space |
| 516 | with an initializer, section, and alignment: |
| 517 | |
| 518 | .. code-block:: llvm |
| 519 | |
| 520 | @G = addrspace(5) constant float 1.0, section "foo", align 4 |
| 521 | |
| 522 | The following example defines a thread-local global with the |
| 523 | ``initialexec`` TLS model: |
| 524 | |
| 525 | .. code-block:: llvm |
| 526 | |
| 527 | @G = thread_local(initialexec) global i32 0, align 4 |
| 528 | |
| 529 | .. _functionstructure: |
| 530 | |
| 531 | Functions |
| 532 | --------- |
| 533 | |
| 534 | LLVM function definitions consist of the "``define``" keyword, an |
| 535 | optional :ref:`linkage type <linkage>`, an optional :ref:`visibility |
| 536 | style <visibility>`, an optional :ref:`calling convention <callingconv>`, |
| 537 | an optional ``unnamed_addr`` attribute, a return type, an optional |
| 538 | :ref:`parameter attribute <paramattrs>` for the return type, a function |
| 539 | name, a (possibly empty) argument list (each with optional :ref:`parameter |
| 540 | attributes <paramattrs>`), optional :ref:`function attributes <fnattrs>`, |
| 541 | an optional section, an optional alignment, an optional :ref:`garbage |
| 542 | collector name <gc>`, an opening curly brace, a list of basic blocks, |
| 543 | and a closing curly brace. |
| 544 | |
| 545 | LLVM function declarations consist of the "``declare``" keyword, an |
| 546 | optional :ref:`linkage type <linkage>`, an optional :ref:`visibility |
| 547 | style <visibility>`, an optional :ref:`calling convention <callingconv>`, |
| 548 | an optional ``unnamed_addr`` attribute, a return type, an optional |
| 549 | :ref:`parameter attribute <paramattrs>` for the return type, a function |
| 550 | name, a possibly empty list of arguments, an optional alignment, and an |
| 551 | optional :ref:`garbage collector name <gc>`. |
| 552 | |
| 553 | A function definition contains a list of basic blocks, forming the CFG |
| 554 | (Control Flow Graph) for the function. Each basic block may optionally |
| 555 | start with a label (giving the basic block a symbol table entry), |
| 556 | contains a list of instructions, and ends with a |
| 557 | :ref:`terminator <terminators>` instruction (such as a branch or function |
| 558 | return). |
| 559 | |
| 560 | The first basic block in a function is special in two ways: it is |
| 561 | immediately executed on entrance to the function, and it is not allowed |
| 562 | to have predecessor basic blocks (i.e. there can not be any branches to |
| 563 | the entry block of a function). Because the block can have no |
| 564 | predecessors, it also cannot have any :ref:`PHI nodes <i_phi>`. |
| 565 | |
| 566 | LLVM allows an explicit section to be specified for functions. If the |
| 567 | target supports it, it will emit functions to the section specified. |
| 568 | |
| 569 | An explicit alignment may be specified for a function. If not present, |
| 570 | or if the alignment is set to zero, the alignment of the function is set |
| 571 | by the target to whatever it feels convenient. If an explicit alignment |
| 572 | is specified, the function is forced to have at least that much |
| 573 | alignment. All alignments must be a power of 2. |
| 574 | |
| 575 | If the ``unnamed_addr`` attribute is given, the address is know to not |
| 576 | be significant and two identical functions can be merged. |
| 577 | |
| 578 | Syntax:: |
| 579 | |
| 580 | define [linkage] [visibility] |
| 581 | [cconv] [ret attrs] |
| 582 | <ResultType> @<FunctionName> ([argument list]) |
| 583 | [fn Attrs] [section "name"] [align N] |
| 584 | [gc] { ... } |
| 585 | |
| 586 | Aliases |
| 587 | ------- |
| 588 | |
| 589 | Aliases act as "second name" for the aliasee value (which can be either |
| 590 | function, global variable, another alias or bitcast of global value). |
| 591 | Aliases may have an optional :ref:`linkage type <linkage>`, and an optional |
| 592 | :ref:`visibility style <visibility>`. |
| 593 | |
| 594 | Syntax:: |
| 595 | |
| 596 | @<Name> = alias [Linkage] [Visibility] <AliaseeTy> @<Aliasee> |
| 597 | |
| 598 | .. _namedmetadatastructure: |
| 599 | |
| 600 | Named Metadata |
| 601 | -------------- |
| 602 | |
| 603 | Named metadata is a collection of metadata. :ref:`Metadata |
| 604 | nodes <metadata>` (but not metadata strings) are the only valid |
| 605 | operands for a named metadata. |
| 606 | |
| 607 | Syntax:: |
| 608 | |
| 609 | ; Some unnamed metadata nodes, which are referenced by the named metadata. |
| 610 | !0 = metadata !{metadata !"zero"} |
| 611 | !1 = metadata !{metadata !"one"} |
| 612 | !2 = metadata !{metadata !"two"} |
| 613 | ; A named metadata. |
| 614 | !name = !{!0, !1, !2} |
| 615 | |
| 616 | .. _paramattrs: |
| 617 | |
| 618 | Parameter Attributes |
| 619 | -------------------- |
| 620 | |
| 621 | The return type and each parameter of a function type may have a set of |
| 622 | *parameter attributes* associated with them. Parameter attributes are |
| 623 | used to communicate additional information about the result or |
| 624 | parameters of a function. Parameter attributes are considered to be part |
| 625 | of the function, not of the function type, so functions with different |
| 626 | parameter attributes can have the same function type. |
| 627 | |
| 628 | Parameter attributes are simple keywords that follow the type specified. |
| 629 | If multiple parameter attributes are needed, they are space separated. |
| 630 | For example: |
| 631 | |
| 632 | .. code-block:: llvm |
| 633 | |
| 634 | declare i32 @printf(i8* noalias nocapture, ...) |
| 635 | declare i32 @atoi(i8 zeroext) |
| 636 | declare signext i8 @returns_signed_char() |
| 637 | |
| 638 | Note that any attributes for the function result (``nounwind``, |
| 639 | ``readonly``) come immediately after the argument list. |
| 640 | |
| 641 | Currently, only the following parameter attributes are defined: |
| 642 | |
| 643 | ``zeroext`` |
| 644 | This indicates to the code generator that the parameter or return |
| 645 | value should be zero-extended to the extent required by the target's |
| 646 | ABI (which is usually 32-bits, but is 8-bits for a i1 on x86-64) by |
| 647 | the caller (for a parameter) or the callee (for a return value). |
| 648 | ``signext`` |
| 649 | This indicates to the code generator that the parameter or return |
| 650 | value should be sign-extended to the extent required by the target's |
| 651 | ABI (which is usually 32-bits) by the caller (for a parameter) or |
| 652 | the callee (for a return value). |
| 653 | ``inreg`` |
| 654 | This indicates that this parameter or return value should be treated |
| 655 | in a special target-dependent fashion during while emitting code for |
| 656 | a function call or return (usually, by putting it in a register as |
| 657 | opposed to memory, though some targets use it to distinguish between |
| 658 | two different kinds of registers). Use of this attribute is |
| 659 | target-specific. |
| 660 | ``byval`` |
| 661 | This indicates that the pointer parameter should really be passed by |
| 662 | value to the function. The attribute implies that a hidden copy of |
| 663 | the pointee is made between the caller and the callee, so the callee |
| 664 | is unable to modify the value in the caller. This attribute is only |
| 665 | valid on LLVM pointer arguments. It is generally used to pass |
| 666 | structs and arrays by value, but is also valid on pointers to |
| 667 | scalars. The copy is considered to belong to the caller not the |
| 668 | callee (for example, ``readonly`` functions should not write to |
| 669 | ``byval`` parameters). This is not a valid attribute for return |
| 670 | values. |
| 671 | |
| 672 | The byval attribute also supports specifying an alignment with the |
| 673 | align attribute. It indicates the alignment of the stack slot to |
| 674 | form and the known alignment of the pointer specified to the call |
| 675 | site. If the alignment is not specified, then the code generator |
| 676 | makes a target-specific assumption. |
| 677 | |
| 678 | ``sret`` |
| 679 | This indicates that the pointer parameter specifies the address of a |
| 680 | structure that is the return value of the function in the source |
| 681 | program. This pointer must be guaranteed by the caller to be valid: |
| 682 | loads and stores to the structure may be assumed by the callee to |
| 683 | not to trap and to be properly aligned. This may only be applied to |
| 684 | the first parameter. This is not a valid attribute for return |
| 685 | values. |
| 686 | ``noalias`` |
| 687 | This indicates that pointer values `*based* <pointeraliasing>` on |
| 688 | the argument or return value do not alias pointer values which are |
| 689 | not *based* on it, ignoring certain "irrelevant" dependencies. For a |
| 690 | call to the parent function, dependencies between memory references |
| 691 | from before or after the call and from those during the call are |
| 692 | "irrelevant" to the ``noalias`` keyword for the arguments and return |
| 693 | value used in that call. The caller shares the responsibility with |
| 694 | the callee for ensuring that these requirements are met. For further |
| 695 | details, please see the discussion of the NoAlias response in `alias |
| 696 | analysis <AliasAnalysis.html#MustMayNo>`_. |
| 697 | |
| 698 | Note that this definition of ``noalias`` is intentionally similar |
| 699 | to the definition of ``restrict`` in C99 for function arguments, |
| 700 | though it is slightly weaker. |
| 701 | |
| 702 | For function return values, C99's ``restrict`` is not meaningful, |
| 703 | while LLVM's ``noalias`` is. |
| 704 | ``nocapture`` |
| 705 | This indicates that the callee does not make any copies of the |
| 706 | pointer that outlive the callee itself. This is not a valid |
| 707 | attribute for return values. |
| 708 | |
| 709 | .. _nest: |
| 710 | |
| 711 | ``nest`` |
| 712 | This indicates that the pointer parameter can be excised using the |
| 713 | :ref:`trampoline intrinsics <int_trampoline>`. This is not a valid |
| 714 | attribute for return values. |
| 715 | |
| 716 | .. _gc: |
| 717 | |
| 718 | Garbage Collector Names |
| 719 | ----------------------- |
| 720 | |
| 721 | Each function may specify a garbage collector name, which is simply a |
| 722 | string: |
| 723 | |
| 724 | .. code-block:: llvm |
| 725 | |
| 726 | define void @f() gc "name" { ... } |
| 727 | |
| 728 | The compiler declares the supported values of *name*. Specifying a |
| 729 | collector which will cause the compiler to alter its output in order to |
| 730 | support the named garbage collection algorithm. |
| 731 | |
| 732 | .. _fnattrs: |
| 733 | |
| 734 | Function Attributes |
| 735 | ------------------- |
| 736 | |
| 737 | Function attributes are set to communicate additional information about |
| 738 | a function. Function attributes are considered to be part of the |
| 739 | function, not of the function type, so functions with different function |
| 740 | attributes can have the same function type. |
| 741 | |
| 742 | Function attributes are simple keywords that follow the type specified. |
| 743 | If multiple attributes are needed, they are space separated. For |
| 744 | example: |
| 745 | |
| 746 | .. code-block:: llvm |
| 747 | |
| 748 | define void @f() noinline { ... } |
| 749 | define void @f() alwaysinline { ... } |
| 750 | define void @f() alwaysinline optsize { ... } |
| 751 | define void @f() optsize { ... } |
| 752 | |
| 753 | ``address_safety`` |
| 754 | This attribute indicates that the address safety analysis is enabled |
| 755 | for this function. |
| 756 | ``alignstack(<n>)`` |
| 757 | This attribute indicates that, when emitting the prologue and |
| 758 | epilogue, the backend should forcibly align the stack pointer. |
| 759 | Specify the desired alignment, which must be a power of two, in |
| 760 | parentheses. |
| 761 | ``alwaysinline`` |
| 762 | This attribute indicates that the inliner should attempt to inline |
| 763 | this function into callers whenever possible, ignoring any active |
| 764 | inlining size threshold for this caller. |
| 765 | ``nonlazybind`` |
| 766 | This attribute suppresses lazy symbol binding for the function. This |
| 767 | may make calls to the function faster, at the cost of extra program |
| 768 | startup time if the function is not called during program startup. |
| 769 | ``inlinehint`` |
| 770 | This attribute indicates that the source code contained a hint that |
| 771 | inlining this function is desirable (such as the "inline" keyword in |
| 772 | C/C++). It is just a hint; it imposes no requirements on the |
| 773 | inliner. |
| 774 | ``naked`` |
| 775 | This attribute disables prologue / epilogue emission for the |
| 776 | function. This can have very system-specific consequences. |
| 777 | ``noimplicitfloat`` |
| 778 | This attributes disables implicit floating point instructions. |
| 779 | ``noinline`` |
| 780 | This attribute indicates that the inliner should never inline this |
| 781 | function in any situation. This attribute may not be used together |
| 782 | with the ``alwaysinline`` attribute. |
| 783 | ``noredzone`` |
| 784 | This attribute indicates that the code generator should not use a |
| 785 | red zone, even if the target-specific ABI normally permits it. |
| 786 | ``noreturn`` |
| 787 | This function attribute indicates that the function never returns |
| 788 | normally. This produces undefined behavior at runtime if the |
| 789 | function ever does dynamically return. |
| 790 | ``nounwind`` |
| 791 | This function attribute indicates that the function never returns |
| 792 | with an unwind or exceptional control flow. If the function does |
| 793 | unwind, its runtime behavior is undefined. |
| 794 | ``optsize`` |
| 795 | This attribute suggests that optimization passes and code generator |
| 796 | passes make choices that keep the code size of this function low, |
| 797 | and otherwise do optimizations specifically to reduce code size. |
| 798 | ``readnone`` |
| 799 | This attribute indicates that the function computes its result (or |
| 800 | decides to unwind an exception) based strictly on its arguments, |
| 801 | without dereferencing any pointer arguments or otherwise accessing |
| 802 | any mutable state (e.g. memory, control registers, etc) visible to |
| 803 | caller functions. It does not write through any pointer arguments |
| 804 | (including ``byval`` arguments) and never changes any state visible |
| 805 | to callers. This means that it cannot unwind exceptions by calling |
| 806 | the ``C++`` exception throwing methods. |
| 807 | ``readonly`` |
| 808 | This attribute indicates that the function does not write through |
| 809 | any pointer arguments (including ``byval`` arguments) or otherwise |
| 810 | modify any state (e.g. memory, control registers, etc) visible to |
| 811 | caller functions. It may dereference pointer arguments and read |
| 812 | state that may be set in the caller. A readonly function always |
| 813 | returns the same value (or unwinds an exception identically) when |
| 814 | called with the same set of arguments and global state. It cannot |
| 815 | unwind an exception by calling the ``C++`` exception throwing |
| 816 | methods. |
| 817 | ``returns_twice`` |
| 818 | This attribute indicates that this function can return twice. The C |
| 819 | ``setjmp`` is an example of such a function. The compiler disables |
| 820 | some optimizations (like tail calls) in the caller of these |
| 821 | functions. |
| 822 | ``ssp`` |
| 823 | This attribute indicates that the function should emit a stack |
| 824 | smashing protector. It is in the form of a "canary"—a random value |
| 825 | placed on the stack before the local variables that's checked upon |
| 826 | return from the function to see if it has been overwritten. A |
| 827 | heuristic is used to determine if a function needs stack protectors |
| 828 | or not. |
| 829 | |
| 830 | If a function that has an ``ssp`` attribute is inlined into a |
| 831 | function that doesn't have an ``ssp`` attribute, then the resulting |
| 832 | function will have an ``ssp`` attribute. |
| 833 | ``sspreq`` |
| 834 | This attribute indicates that the function should *always* emit a |
| 835 | stack smashing protector. This overrides the ``ssp`` function |
| 836 | attribute. |
| 837 | |
| 838 | If a function that has an ``sspreq`` attribute is inlined into a |
| 839 | function that doesn't have an ``sspreq`` attribute or which has an |
| 840 | ``ssp`` attribute, then the resulting function will have an |
| 841 | ``sspreq`` attribute. |
| 842 | ``uwtable`` |
| 843 | This attribute indicates that the ABI being targeted requires that |
| 844 | an unwind table entry be produce for this function even if we can |
| 845 | show that no exceptions passes by it. This is normally the case for |
| 846 | the ELF x86-64 abi, but it can be disabled for some compilation |
| 847 | units. |
James Molloy | 67ae135 | 2012-12-20 16:04:27 +0000 | [diff] [blame] | 848 | ``noduplicate`` |
| 849 | This attribute indicates that calls to the function cannot be |
| 850 | duplicated. A call to a ``noduplicate`` function may be moved |
| 851 | within its parent function, but may not be duplicated within |
| 852 | its parent function. |
| 853 | |
| 854 | A function containing a ``noduplicate`` call may still |
| 855 | be an inlining candidate, provided that the call is not |
| 856 | duplicated by inlining. That implies that the function has |
| 857 | internal linkage and only has one call site, so the original |
| 858 | call is dead after inlining. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 859 | |
| 860 | .. _moduleasm: |
| 861 | |
| 862 | Module-Level Inline Assembly |
| 863 | ---------------------------- |
| 864 | |
| 865 | Modules may contain "module-level inline asm" blocks, which corresponds |
| 866 | to the GCC "file scope inline asm" blocks. These blocks are internally |
| 867 | concatenated by LLVM and treated as a single unit, but may be separated |
| 868 | in the ``.ll`` file if desired. The syntax is very simple: |
| 869 | |
| 870 | .. code-block:: llvm |
| 871 | |
| 872 | module asm "inline asm code goes here" |
| 873 | module asm "more can go here" |
| 874 | |
| 875 | The strings can contain any character by escaping non-printable |
| 876 | characters. The escape sequence used is simply "\\xx" where "xx" is the |
| 877 | two digit hex code for the number. |
| 878 | |
| 879 | The inline asm code is simply printed to the machine code .s file when |
| 880 | assembly code is generated. |
| 881 | |
| 882 | Data Layout |
| 883 | ----------- |
| 884 | |
| 885 | A module may specify a target specific data layout string that specifies |
| 886 | how data is to be laid out in memory. The syntax for the data layout is |
| 887 | simply: |
| 888 | |
| 889 | .. code-block:: llvm |
| 890 | |
| 891 | target datalayout = "layout specification" |
| 892 | |
| 893 | The *layout specification* consists of a list of specifications |
| 894 | separated by the minus sign character ('-'). Each specification starts |
| 895 | with a letter and may include other information after the letter to |
| 896 | define some aspect of the data layout. The specifications accepted are |
| 897 | as follows: |
| 898 | |
| 899 | ``E`` |
| 900 | Specifies that the target lays out data in big-endian form. That is, |
| 901 | the bits with the most significance have the lowest address |
| 902 | location. |
| 903 | ``e`` |
| 904 | Specifies that the target lays out data in little-endian form. That |
| 905 | is, the bits with the least significance have the lowest address |
| 906 | location. |
| 907 | ``S<size>`` |
| 908 | Specifies the natural alignment of the stack in bits. Alignment |
| 909 | promotion of stack variables is limited to the natural stack |
| 910 | alignment to avoid dynamic stack realignment. The stack alignment |
| 911 | must be a multiple of 8-bits. If omitted, the natural stack |
| 912 | alignment defaults to "unspecified", which does not prevent any |
| 913 | alignment promotions. |
| 914 | ``p[n]:<size>:<abi>:<pref>`` |
| 915 | This specifies the *size* of a pointer and its ``<abi>`` and |
| 916 | ``<pref>``\erred alignments for address space ``n``. All sizes are in |
| 917 | bits. Specifying the ``<pref>`` alignment is optional. If omitted, the |
| 918 | preceding ``:`` should be omitted too. The address space, ``n`` is |
| 919 | optional, and if not specified, denotes the default address space 0. |
| 920 | The value of ``n`` must be in the range [1,2^23). |
| 921 | ``i<size>:<abi>:<pref>`` |
| 922 | This specifies the alignment for an integer type of a given bit |
| 923 | ``<size>``. The value of ``<size>`` must be in the range [1,2^23). |
| 924 | ``v<size>:<abi>:<pref>`` |
| 925 | This specifies the alignment for a vector type of a given bit |
| 926 | ``<size>``. |
| 927 | ``f<size>:<abi>:<pref>`` |
| 928 | This specifies the alignment for a floating point type of a given bit |
| 929 | ``<size>``. Only values of ``<size>`` that are supported by the target |
| 930 | will work. 32 (float) and 64 (double) are supported on all targets; 80 |
| 931 | or 128 (different flavors of long double) are also supported on some |
| 932 | targets. |
| 933 | ``a<size>:<abi>:<pref>`` |
| 934 | This specifies the alignment for an aggregate type of a given bit |
| 935 | ``<size>``. |
| 936 | ``s<size>:<abi>:<pref>`` |
| 937 | This specifies the alignment for a stack object of a given bit |
| 938 | ``<size>``. |
| 939 | ``n<size1>:<size2>:<size3>...`` |
| 940 | This specifies a set of native integer widths for the target CPU in |
| 941 | bits. For example, it might contain ``n32`` for 32-bit PowerPC, |
| 942 | ``n32:64`` for PowerPC 64, or ``n8:16:32:64`` for X86-64. Elements of |
| 943 | this set are considered to support most general arithmetic operations |
| 944 | efficiently. |
| 945 | |
| 946 | When constructing the data layout for a given target, LLVM starts with a |
| 947 | default set of specifications which are then (possibly) overridden by |
| 948 | the specifications in the ``datalayout`` keyword. The default |
| 949 | specifications are given in this list: |
| 950 | |
| 951 | - ``E`` - big endian |
| 952 | - ``p:64:64:64`` - 64-bit pointers with 64-bit alignment |
| 953 | - ``p1:32:32:32`` - 32-bit pointers with 32-bit alignment for address |
| 954 | space 1 |
| 955 | - ``p2:16:32:32`` - 16-bit pointers with 32-bit alignment for address |
| 956 | space 2 |
| 957 | - ``i1:8:8`` - i1 is 8-bit (byte) aligned |
| 958 | - ``i8:8:8`` - i8 is 8-bit (byte) aligned |
| 959 | - ``i16:16:16`` - i16 is 16-bit aligned |
| 960 | - ``i32:32:32`` - i32 is 32-bit aligned |
| 961 | - ``i64:32:64`` - i64 has ABI alignment of 32-bits but preferred |
| 962 | alignment of 64-bits |
| 963 | - ``f32:32:32`` - float is 32-bit aligned |
| 964 | - ``f64:64:64`` - double is 64-bit aligned |
| 965 | - ``v64:64:64`` - 64-bit vector is 64-bit aligned |
| 966 | - ``v128:128:128`` - 128-bit vector is 128-bit aligned |
| 967 | - ``a0:0:1`` - aggregates are 8-bit aligned |
| 968 | - ``s0:64:64`` - stack objects are 64-bit aligned |
| 969 | |
| 970 | When LLVM is determining the alignment for a given type, it uses the |
| 971 | following rules: |
| 972 | |
| 973 | #. If the type sought is an exact match for one of the specifications, |
| 974 | that specification is used. |
| 975 | #. If no match is found, and the type sought is an integer type, then |
| 976 | the smallest integer type that is larger than the bitwidth of the |
| 977 | sought type is used. If none of the specifications are larger than |
| 978 | the bitwidth then the largest integer type is used. For example, |
| 979 | given the default specifications above, the i7 type will use the |
| 980 | alignment of i8 (next largest) while both i65 and i256 will use the |
| 981 | alignment of i64 (largest specified). |
| 982 | #. If no match is found, and the type sought is a vector type, then the |
| 983 | largest vector type that is smaller than the sought vector type will |
| 984 | be used as a fall back. This happens because <128 x double> can be |
| 985 | implemented in terms of 64 <2 x double>, for example. |
| 986 | |
| 987 | The function of the data layout string may not be what you expect. |
| 988 | Notably, this is not a specification from the frontend of what alignment |
| 989 | the code generator should use. |
| 990 | |
| 991 | Instead, if specified, the target data layout is required to match what |
| 992 | the ultimate *code generator* expects. This string is used by the |
| 993 | mid-level optimizers to improve code, and this only works if it matches |
| 994 | what the ultimate code generator uses. If you would like to generate IR |
| 995 | that does not embed this target-specific detail into the IR, then you |
| 996 | don't have to specify the string. This will disable some optimizations |
| 997 | that require precise layout information, but this also prevents those |
| 998 | optimizations from introducing target specificity into the IR. |
| 999 | |
| 1000 | .. _pointeraliasing: |
| 1001 | |
| 1002 | Pointer Aliasing Rules |
| 1003 | ---------------------- |
| 1004 | |
| 1005 | Any memory access must be done through a pointer value associated with |
| 1006 | an address range of the memory access, otherwise the behavior is |
| 1007 | undefined. Pointer values are associated with address ranges according |
| 1008 | to the following rules: |
| 1009 | |
| 1010 | - A pointer value is associated with the addresses associated with any |
| 1011 | value it is *based* on. |
| 1012 | - An address of a global variable is associated with the address range |
| 1013 | of the variable's storage. |
| 1014 | - The result value of an allocation instruction is associated with the |
| 1015 | address range of the allocated storage. |
| 1016 | - A null pointer in the default address-space is associated with no |
| 1017 | address. |
| 1018 | - An integer constant other than zero or a pointer value returned from |
| 1019 | a function not defined within LLVM may be associated with address |
| 1020 | ranges allocated through mechanisms other than those provided by |
| 1021 | LLVM. Such ranges shall not overlap with any ranges of addresses |
| 1022 | allocated by mechanisms provided by LLVM. |
| 1023 | |
| 1024 | A pointer value is *based* on another pointer value according to the |
| 1025 | following rules: |
| 1026 | |
| 1027 | - A pointer value formed from a ``getelementptr`` operation is *based* |
| 1028 | on the first operand of the ``getelementptr``. |
| 1029 | - The result value of a ``bitcast`` is *based* on the operand of the |
| 1030 | ``bitcast``. |
| 1031 | - A pointer value formed by an ``inttoptr`` is *based* on all pointer |
| 1032 | values that contribute (directly or indirectly) to the computation of |
| 1033 | the pointer's value. |
| 1034 | - The "*based* on" relationship is transitive. |
| 1035 | |
| 1036 | Note that this definition of *"based"* is intentionally similar to the |
| 1037 | definition of *"based"* in C99, though it is slightly weaker. |
| 1038 | |
| 1039 | LLVM IR does not associate types with memory. The result type of a |
| 1040 | ``load`` merely indicates the size and alignment of the memory from |
| 1041 | which to load, as well as the interpretation of the value. The first |
| 1042 | operand type of a ``store`` similarly only indicates the size and |
| 1043 | alignment of the store. |
| 1044 | |
| 1045 | Consequently, type-based alias analysis, aka TBAA, aka |
| 1046 | ``-fstrict-aliasing``, is not applicable to general unadorned LLVM IR. |
| 1047 | :ref:`Metadata <metadata>` may be used to encode additional information |
| 1048 | which specialized optimization passes may use to implement type-based |
| 1049 | alias analysis. |
| 1050 | |
| 1051 | .. _volatile: |
| 1052 | |
| 1053 | Volatile Memory Accesses |
| 1054 | ------------------------ |
| 1055 | |
| 1056 | Certain memory accesses, such as :ref:`load <i_load>`'s, |
| 1057 | :ref:`store <i_store>`'s, and :ref:`llvm.memcpy <int_memcpy>`'s may be |
| 1058 | marked ``volatile``. The optimizers must not change the number of |
| 1059 | volatile operations or change their order of execution relative to other |
| 1060 | volatile operations. The optimizers *may* change the order of volatile |
| 1061 | operations relative to non-volatile operations. This is not Java's |
| 1062 | "volatile" and has no cross-thread synchronization behavior. |
| 1063 | |
| 1064 | .. _memmodel: |
| 1065 | |
| 1066 | Memory Model for Concurrent Operations |
| 1067 | -------------------------------------- |
| 1068 | |
| 1069 | The LLVM IR does not define any way to start parallel threads of |
| 1070 | execution or to register signal handlers. Nonetheless, there are |
| 1071 | platform-specific ways to create them, and we define LLVM IR's behavior |
| 1072 | in their presence. This model is inspired by the C++0x memory model. |
| 1073 | |
| 1074 | For a more informal introduction to this model, see the :doc:`Atomics`. |
| 1075 | |
| 1076 | We define a *happens-before* partial order as the least partial order |
| 1077 | that |
| 1078 | |
| 1079 | - Is a superset of single-thread program order, and |
| 1080 | - When a *synchronizes-with* ``b``, includes an edge from ``a`` to |
| 1081 | ``b``. *Synchronizes-with* pairs are introduced by platform-specific |
| 1082 | techniques, like pthread locks, thread creation, thread joining, |
| 1083 | etc., and by atomic instructions. (See also :ref:`Atomic Memory Ordering |
| 1084 | Constraints <ordering>`). |
| 1085 | |
| 1086 | Note that program order does not introduce *happens-before* edges |
| 1087 | between a thread and signals executing inside that thread. |
| 1088 | |
| 1089 | Every (defined) read operation (load instructions, memcpy, atomic |
| 1090 | loads/read-modify-writes, etc.) R reads a series of bytes written by |
| 1091 | (defined) write operations (store instructions, atomic |
| 1092 | stores/read-modify-writes, memcpy, etc.). For the purposes of this |
| 1093 | section, initialized globals are considered to have a write of the |
| 1094 | initializer which is atomic and happens before any other read or write |
| 1095 | of the memory in question. For each byte of a read R, R\ :sub:`byte` |
| 1096 | may see any write to the same byte, except: |
| 1097 | |
| 1098 | - If write\ :sub:`1` happens before write\ :sub:`2`, and |
| 1099 | write\ :sub:`2` happens before R\ :sub:`byte`, then |
| 1100 | R\ :sub:`byte` does not see write\ :sub:`1`. |
| 1101 | - If R\ :sub:`byte` happens before write\ :sub:`3`, then |
| 1102 | R\ :sub:`byte` does not see write\ :sub:`3`. |
| 1103 | |
| 1104 | Given that definition, R\ :sub:`byte` is defined as follows: |
| 1105 | |
| 1106 | - If R is volatile, the result is target-dependent. (Volatile is |
| 1107 | supposed to give guarantees which can support ``sig_atomic_t`` in |
| 1108 | C/C++, and may be used for accesses to addresses which do not behave |
| 1109 | like normal memory. It does not generally provide cross-thread |
| 1110 | synchronization.) |
| 1111 | - Otherwise, if there is no write to the same byte that happens before |
| 1112 | R\ :sub:`byte`, R\ :sub:`byte` returns ``undef`` for that byte. |
| 1113 | - Otherwise, if R\ :sub:`byte` may see exactly one write, |
| 1114 | R\ :sub:`byte` returns the value written by that write. |
| 1115 | - Otherwise, if R is atomic, and all the writes R\ :sub:`byte` may |
| 1116 | see are atomic, it chooses one of the values written. See the :ref:`Atomic |
| 1117 | Memory Ordering Constraints <ordering>` section for additional |
| 1118 | constraints on how the choice is made. |
| 1119 | - Otherwise R\ :sub:`byte` returns ``undef``. |
| 1120 | |
| 1121 | R returns the value composed of the series of bytes it read. This |
| 1122 | implies that some bytes within the value may be ``undef`` **without** |
| 1123 | the entire value being ``undef``. Note that this only defines the |
| 1124 | semantics of the operation; it doesn't mean that targets will emit more |
| 1125 | than one instruction to read the series of bytes. |
| 1126 | |
| 1127 | Note that in cases where none of the atomic intrinsics are used, this |
| 1128 | model places only one restriction on IR transformations on top of what |
| 1129 | is required for single-threaded execution: introducing a store to a byte |
| 1130 | which might not otherwise be stored is not allowed in general. |
| 1131 | (Specifically, in the case where another thread might write to and read |
| 1132 | from an address, introducing a store can change a load that may see |
| 1133 | exactly one write into a load that may see multiple writes.) |
| 1134 | |
| 1135 | .. _ordering: |
| 1136 | |
| 1137 | Atomic Memory Ordering Constraints |
| 1138 | ---------------------------------- |
| 1139 | |
| 1140 | Atomic instructions (:ref:`cmpxchg <i_cmpxchg>`, |
| 1141 | :ref:`atomicrmw <i_atomicrmw>`, :ref:`fence <i_fence>`, |
| 1142 | :ref:`atomic load <i_load>`, and :ref:`atomic store <i_store>`) take |
| 1143 | an ordering parameter that determines which other atomic instructions on |
| 1144 | the same address they *synchronize with*. These semantics are borrowed |
| 1145 | from Java and C++0x, but are somewhat more colloquial. If these |
| 1146 | descriptions aren't precise enough, check those specs (see spec |
| 1147 | references in the :doc:`atomics guide <Atomics>`). |
| 1148 | :ref:`fence <i_fence>` instructions treat these orderings somewhat |
| 1149 | differently since they don't take an address. See that instruction's |
| 1150 | documentation for details. |
| 1151 | |
| 1152 | For a simpler introduction to the ordering constraints, see the |
| 1153 | :doc:`Atomics`. |
| 1154 | |
| 1155 | ``unordered`` |
| 1156 | The set of values that can be read is governed by the happens-before |
| 1157 | partial order. A value cannot be read unless some operation wrote |
| 1158 | it. This is intended to provide a guarantee strong enough to model |
| 1159 | Java's non-volatile shared variables. This ordering cannot be |
| 1160 | specified for read-modify-write operations; it is not strong enough |
| 1161 | to make them atomic in any interesting way. |
| 1162 | ``monotonic`` |
| 1163 | In addition to the guarantees of ``unordered``, there is a single |
| 1164 | total order for modifications by ``monotonic`` operations on each |
| 1165 | address. All modification orders must be compatible with the |
| 1166 | happens-before order. There is no guarantee that the modification |
| 1167 | orders can be combined to a global total order for the whole program |
| 1168 | (and this often will not be possible). The read in an atomic |
| 1169 | read-modify-write operation (:ref:`cmpxchg <i_cmpxchg>` and |
| 1170 | :ref:`atomicrmw <i_atomicrmw>`) reads the value in the modification |
| 1171 | order immediately before the value it writes. If one atomic read |
| 1172 | happens before another atomic read of the same address, the later |
| 1173 | read must see the same value or a later value in the address's |
| 1174 | modification order. This disallows reordering of ``monotonic`` (or |
| 1175 | stronger) operations on the same address. If an address is written |
| 1176 | ``monotonic``-ally by one thread, and other threads ``monotonic``-ally |
| 1177 | read that address repeatedly, the other threads must eventually see |
| 1178 | the write. This corresponds to the C++0x/C1x |
| 1179 | ``memory_order_relaxed``. |
| 1180 | ``acquire`` |
| 1181 | In addition to the guarantees of ``monotonic``, a |
| 1182 | *synchronizes-with* edge may be formed with a ``release`` operation. |
| 1183 | This is intended to model C++'s ``memory_order_acquire``. |
| 1184 | ``release`` |
| 1185 | In addition to the guarantees of ``monotonic``, if this operation |
| 1186 | writes a value which is subsequently read by an ``acquire`` |
| 1187 | operation, it *synchronizes-with* that operation. (This isn't a |
| 1188 | complete description; see the C++0x definition of a release |
| 1189 | sequence.) This corresponds to the C++0x/C1x |
| 1190 | ``memory_order_release``. |
| 1191 | ``acq_rel`` (acquire+release) |
| 1192 | Acts as both an ``acquire`` and ``release`` operation on its |
| 1193 | address. This corresponds to the C++0x/C1x ``memory_order_acq_rel``. |
| 1194 | ``seq_cst`` (sequentially consistent) |
| 1195 | In addition to the guarantees of ``acq_rel`` (``acquire`` for an |
| 1196 | operation which only reads, ``release`` for an operation which only |
| 1197 | writes), there is a global total order on all |
| 1198 | sequentially-consistent operations on all addresses, which is |
| 1199 | consistent with the *happens-before* partial order and with the |
| 1200 | modification orders of all the affected addresses. Each |
| 1201 | sequentially-consistent read sees the last preceding write to the |
| 1202 | same address in this global order. This corresponds to the C++0x/C1x |
| 1203 | ``memory_order_seq_cst`` and Java volatile. |
| 1204 | |
| 1205 | .. _singlethread: |
| 1206 | |
| 1207 | If an atomic operation is marked ``singlethread``, it only *synchronizes |
| 1208 | with* or participates in modification and seq\_cst total orderings with |
| 1209 | other operations running in the same thread (for example, in signal |
| 1210 | handlers). |
| 1211 | |
| 1212 | .. _fastmath: |
| 1213 | |
| 1214 | Fast-Math Flags |
| 1215 | --------------- |
| 1216 | |
| 1217 | LLVM IR floating-point binary ops (:ref:`fadd <i_fadd>`, |
| 1218 | :ref:`fsub <i_fsub>`, :ref:`fmul <i_fmul>`, :ref:`fdiv <i_fdiv>`, |
| 1219 | :ref:`frem <i_frem>`) have the following flags that can set to enable |
| 1220 | otherwise unsafe floating point operations |
| 1221 | |
| 1222 | ``nnan`` |
| 1223 | No NaNs - Allow optimizations to assume the arguments and result are not |
| 1224 | NaN. Such optimizations are required to retain defined behavior over |
| 1225 | NaNs, but the value of the result is undefined. |
| 1226 | |
| 1227 | ``ninf`` |
| 1228 | No Infs - Allow optimizations to assume the arguments and result are not |
| 1229 | +/-Inf. Such optimizations are required to retain defined behavior over |
| 1230 | +/-Inf, but the value of the result is undefined. |
| 1231 | |
| 1232 | ``nsz`` |
| 1233 | No Signed Zeros - Allow optimizations to treat the sign of a zero |
| 1234 | argument or result as insignificant. |
| 1235 | |
| 1236 | ``arcp`` |
| 1237 | Allow Reciprocal - Allow optimizations to use the reciprocal of an |
| 1238 | argument rather than perform division. |
| 1239 | |
| 1240 | ``fast`` |
| 1241 | Fast - Allow algebraically equivalent transformations that may |
| 1242 | dramatically change results in floating point (e.g. reassociate). This |
| 1243 | flag implies all the others. |
| 1244 | |
| 1245 | .. _typesystem: |
| 1246 | |
| 1247 | Type System |
| 1248 | =========== |
| 1249 | |
| 1250 | The LLVM type system is one of the most important features of the |
| 1251 | intermediate representation. Being typed enables a number of |
| 1252 | optimizations to be performed on the intermediate representation |
| 1253 | directly, without having to do extra analyses on the side before the |
| 1254 | transformation. A strong type system makes it easier to read the |
| 1255 | generated code and enables novel analyses and transformations that are |
| 1256 | not feasible to perform on normal three address code representations. |
| 1257 | |
| 1258 | Type Classifications |
| 1259 | -------------------- |
| 1260 | |
| 1261 | The types fall into a few useful classifications: |
| 1262 | |
| 1263 | |
| 1264 | .. list-table:: |
| 1265 | :header-rows: 1 |
| 1266 | |
| 1267 | * - Classification |
| 1268 | - Types |
| 1269 | |
| 1270 | * - :ref:`integer <t_integer>` |
| 1271 | - ``i1``, ``i2``, ``i3``, ... ``i8``, ... ``i16``, ... ``i32``, ... |
| 1272 | ``i64``, ... |
| 1273 | |
| 1274 | * - :ref:`floating point <t_floating>` |
| 1275 | - ``half``, ``float``, ``double``, ``x86_fp80``, ``fp128``, |
| 1276 | ``ppc_fp128`` |
| 1277 | |
| 1278 | |
| 1279 | * - first class |
| 1280 | |
| 1281 | .. _t_firstclass: |
| 1282 | |
| 1283 | - :ref:`integer <t_integer>`, :ref:`floating point <t_floating>`, |
| 1284 | :ref:`pointer <t_pointer>`, :ref:`vector <t_vector>`, |
| 1285 | :ref:`structure <t_struct>`, :ref:`array <t_array>`, |
| 1286 | :ref:`label <t_label>`, :ref:`metadata <t_metadata>`. |
| 1287 | |
| 1288 | * - :ref:`primitive <t_primitive>` |
| 1289 | - :ref:`label <t_label>`, |
| 1290 | :ref:`void <t_void>`, |
| 1291 | :ref:`integer <t_integer>`, |
| 1292 | :ref:`floating point <t_floating>`, |
| 1293 | :ref:`x86mmx <t_x86mmx>`, |
| 1294 | :ref:`metadata <t_metadata>`. |
| 1295 | |
| 1296 | * - :ref:`derived <t_derived>` |
| 1297 | - :ref:`array <t_array>`, |
| 1298 | :ref:`function <t_function>`, |
| 1299 | :ref:`pointer <t_pointer>`, |
| 1300 | :ref:`structure <t_struct>`, |
| 1301 | :ref:`vector <t_vector>`, |
| 1302 | :ref:`opaque <t_opaque>`. |
| 1303 | |
| 1304 | The :ref:`first class <t_firstclass>` types are perhaps the most important. |
| 1305 | Values of these types are the only ones which can be produced by |
| 1306 | instructions. |
| 1307 | |
| 1308 | .. _t_primitive: |
| 1309 | |
| 1310 | Primitive Types |
| 1311 | --------------- |
| 1312 | |
| 1313 | The primitive types are the fundamental building blocks of the LLVM |
| 1314 | system. |
| 1315 | |
| 1316 | .. _t_integer: |
| 1317 | |
| 1318 | Integer Type |
| 1319 | ^^^^^^^^^^^^ |
| 1320 | |
| 1321 | Overview: |
| 1322 | """"""""" |
| 1323 | |
| 1324 | The integer type is a very simple type that simply specifies an |
| 1325 | arbitrary bit width for the integer type desired. Any bit width from 1 |
| 1326 | bit to 2\ :sup:`23`\ -1 (about 8 million) can be specified. |
| 1327 | |
| 1328 | Syntax: |
| 1329 | """"""" |
| 1330 | |
| 1331 | :: |
| 1332 | |
| 1333 | iN |
| 1334 | |
| 1335 | The number of bits the integer will occupy is specified by the ``N`` |
| 1336 | value. |
| 1337 | |
| 1338 | Examples: |
| 1339 | """"""""" |
| 1340 | |
| 1341 | +----------------+------------------------------------------------+ |
| 1342 | | ``i1`` | a single-bit integer. | |
| 1343 | +----------------+------------------------------------------------+ |
| 1344 | | ``i32`` | a 32-bit integer. | |
| 1345 | +----------------+------------------------------------------------+ |
| 1346 | | ``i1942652`` | a really big integer of over 1 million bits. | |
| 1347 | +----------------+------------------------------------------------+ |
| 1348 | |
| 1349 | .. _t_floating: |
| 1350 | |
| 1351 | Floating Point Types |
| 1352 | ^^^^^^^^^^^^^^^^^^^^ |
| 1353 | |
| 1354 | .. list-table:: |
| 1355 | :header-rows: 1 |
| 1356 | |
| 1357 | * - Type |
| 1358 | - Description |
| 1359 | |
| 1360 | * - ``half`` |
| 1361 | - 16-bit floating point value |
| 1362 | |
| 1363 | * - ``float`` |
| 1364 | - 32-bit floating point value |
| 1365 | |
| 1366 | * - ``double`` |
| 1367 | - 64-bit floating point value |
| 1368 | |
| 1369 | * - ``fp128`` |
| 1370 | - 128-bit floating point value (112-bit mantissa) |
| 1371 | |
| 1372 | * - ``x86_fp80`` |
| 1373 | - 80-bit floating point value (X87) |
| 1374 | |
| 1375 | * - ``ppc_fp128`` |
| 1376 | - 128-bit floating point value (two 64-bits) |
| 1377 | |
| 1378 | .. _t_x86mmx: |
| 1379 | |
| 1380 | X86mmx Type |
| 1381 | ^^^^^^^^^^^ |
| 1382 | |
| 1383 | Overview: |
| 1384 | """"""""" |
| 1385 | |
| 1386 | The x86mmx type represents a value held in an MMX register on an x86 |
| 1387 | machine. The operations allowed on it are quite limited: parameters and |
| 1388 | return values, load and store, and bitcast. User-specified MMX |
| 1389 | instructions are represented as intrinsic or asm calls with arguments |
| 1390 | and/or results of this type. There are no arrays, vectors or constants |
| 1391 | of this type. |
| 1392 | |
| 1393 | Syntax: |
| 1394 | """"""" |
| 1395 | |
| 1396 | :: |
| 1397 | |
| 1398 | x86mmx |
| 1399 | |
| 1400 | .. _t_void: |
| 1401 | |
| 1402 | Void Type |
| 1403 | ^^^^^^^^^ |
| 1404 | |
| 1405 | Overview: |
| 1406 | """"""""" |
| 1407 | |
| 1408 | The void type does not represent any value and has no size. |
| 1409 | |
| 1410 | Syntax: |
| 1411 | """"""" |
| 1412 | |
| 1413 | :: |
| 1414 | |
| 1415 | void |
| 1416 | |
| 1417 | .. _t_label: |
| 1418 | |
| 1419 | Label Type |
| 1420 | ^^^^^^^^^^ |
| 1421 | |
| 1422 | Overview: |
| 1423 | """"""""" |
| 1424 | |
| 1425 | The label type represents code labels. |
| 1426 | |
| 1427 | Syntax: |
| 1428 | """"""" |
| 1429 | |
| 1430 | :: |
| 1431 | |
| 1432 | label |
| 1433 | |
| 1434 | .. _t_metadata: |
| 1435 | |
| 1436 | Metadata Type |
| 1437 | ^^^^^^^^^^^^^ |
| 1438 | |
| 1439 | Overview: |
| 1440 | """"""""" |
| 1441 | |
| 1442 | The metadata type represents embedded metadata. No derived types may be |
| 1443 | created from metadata except for :ref:`function <t_function>` arguments. |
| 1444 | |
| 1445 | Syntax: |
| 1446 | """"""" |
| 1447 | |
| 1448 | :: |
| 1449 | |
| 1450 | metadata |
| 1451 | |
| 1452 | .. _t_derived: |
| 1453 | |
| 1454 | Derived Types |
| 1455 | ------------- |
| 1456 | |
| 1457 | The real power in LLVM comes from the derived types in the system. This |
| 1458 | is what allows a programmer to represent arrays, functions, pointers, |
| 1459 | and other useful types. Each of these types contain one or more element |
| 1460 | types which may be a primitive type, or another derived type. For |
| 1461 | example, it is possible to have a two dimensional array, using an array |
| 1462 | as the element type of another array. |
| 1463 | |
| 1464 | .. _t_aggregate: |
| 1465 | |
| 1466 | Aggregate Types |
| 1467 | ^^^^^^^^^^^^^^^ |
| 1468 | |
| 1469 | Aggregate Types are a subset of derived types that can contain multiple |
| 1470 | member types. :ref:`Arrays <t_array>` and :ref:`structs <t_struct>` are |
| 1471 | aggregate types. :ref:`Vectors <t_vector>` are not considered to be |
| 1472 | aggregate types. |
| 1473 | |
| 1474 | .. _t_array: |
| 1475 | |
| 1476 | Array Type |
| 1477 | ^^^^^^^^^^ |
| 1478 | |
| 1479 | Overview: |
| 1480 | """"""""" |
| 1481 | |
| 1482 | The array type is a very simple derived type that arranges elements |
| 1483 | sequentially in memory. The array type requires a size (number of |
| 1484 | elements) and an underlying data type. |
| 1485 | |
| 1486 | Syntax: |
| 1487 | """"""" |
| 1488 | |
| 1489 | :: |
| 1490 | |
| 1491 | [<# elements> x <elementtype>] |
| 1492 | |
| 1493 | The number of elements is a constant integer value; ``elementtype`` may |
| 1494 | be any type with a size. |
| 1495 | |
| 1496 | Examples: |
| 1497 | """"""""" |
| 1498 | |
| 1499 | +------------------+--------------------------------------+ |
| 1500 | | ``[40 x i32]`` | Array of 40 32-bit integer values. | |
| 1501 | +------------------+--------------------------------------+ |
| 1502 | | ``[41 x i32]`` | Array of 41 32-bit integer values. | |
| 1503 | +------------------+--------------------------------------+ |
| 1504 | | ``[4 x i8]`` | Array of 4 8-bit integer values. | |
| 1505 | +------------------+--------------------------------------+ |
| 1506 | |
| 1507 | Here are some examples of multidimensional arrays: |
| 1508 | |
| 1509 | +-----------------------------+----------------------------------------------------------+ |
| 1510 | | ``[3 x [4 x i32]]`` | 3x4 array of 32-bit integer values. | |
| 1511 | +-----------------------------+----------------------------------------------------------+ |
| 1512 | | ``[12 x [10 x float]]`` | 12x10 array of single precision floating point values. | |
| 1513 | +-----------------------------+----------------------------------------------------------+ |
| 1514 | | ``[2 x [3 x [4 x i16]]]`` | 2x3x4 array of 16-bit integer values. | |
| 1515 | +-----------------------------+----------------------------------------------------------+ |
| 1516 | |
| 1517 | There is no restriction on indexing beyond the end of the array implied |
| 1518 | by a static type (though there are restrictions on indexing beyond the |
| 1519 | bounds of an allocated object in some cases). This means that |
| 1520 | single-dimension 'variable sized array' addressing can be implemented in |
| 1521 | LLVM with a zero length array type. An implementation of 'pascal style |
| 1522 | arrays' in LLVM could use the type "``{ i32, [0 x float]}``", for |
| 1523 | example. |
| 1524 | |
| 1525 | .. _t_function: |
| 1526 | |
| 1527 | Function Type |
| 1528 | ^^^^^^^^^^^^^ |
| 1529 | |
| 1530 | Overview: |
| 1531 | """"""""" |
| 1532 | |
| 1533 | The function type can be thought of as a function signature. It consists |
| 1534 | of a return type and a list of formal parameter types. The return type |
| 1535 | of a function type is a first class type or a void type. |
| 1536 | |
| 1537 | Syntax: |
| 1538 | """"""" |
| 1539 | |
| 1540 | :: |
| 1541 | |
| 1542 | <returntype> (<parameter list>) |
| 1543 | |
| 1544 | ...where '``<parameter list>``' is a comma-separated list of type |
| 1545 | specifiers. Optionally, the parameter list may include a type ``...``, |
| 1546 | which indicates that the function takes a variable number of arguments. |
| 1547 | Variable argument functions can access their arguments with the |
| 1548 | :ref:`variable argument handling intrinsic <int_varargs>` functions. |
| 1549 | '``<returntype>``' is any type except :ref:`label <t_label>`. |
| 1550 | |
| 1551 | Examples: |
| 1552 | """"""""" |
| 1553 | |
| 1554 | +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1555 | | ``i32 (i32)`` | function taking an ``i32``, returning an ``i32`` | |
| 1556 | +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1557 | | ``float (i16, i32 *) *`` | :ref:`Pointer <t_pointer>` to a function that takes an ``i16`` and a :ref:`pointer <t_pointer>` to ``i32``, returning ``float``. | |
| 1558 | +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1559 | | ``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. | |
| 1560 | +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1561 | | ``{i32, i32} (i32)`` | A function taking an ``i32``, returning a :ref:`structure <t_struct>` containing two ``i32`` values | |
| 1562 | +---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1563 | |
| 1564 | .. _t_struct: |
| 1565 | |
| 1566 | Structure Type |
| 1567 | ^^^^^^^^^^^^^^ |
| 1568 | |
| 1569 | Overview: |
| 1570 | """"""""" |
| 1571 | |
| 1572 | The structure type is used to represent a collection of data members |
| 1573 | together in memory. The elements of a structure may be any type that has |
| 1574 | a size. |
| 1575 | |
| 1576 | Structures in memory are accessed using '``load``' and '``store``' by |
| 1577 | getting a pointer to a field with the '``getelementptr``' instruction. |
| 1578 | Structures in registers are accessed using the '``extractvalue``' and |
| 1579 | '``insertvalue``' instructions. |
| 1580 | |
| 1581 | Structures may optionally be "packed" structures, which indicate that |
| 1582 | the alignment of the struct is one byte, and that there is no padding |
| 1583 | between the elements. In non-packed structs, padding between field types |
| 1584 | is inserted as defined by the DataLayout string in the module, which is |
| 1585 | required to match what the underlying code generator expects. |
| 1586 | |
| 1587 | Structures can either be "literal" or "identified". A literal structure |
| 1588 | is defined inline with other types (e.g. ``{i32, i32}*``) whereas |
| 1589 | identified types are always defined at the top level with a name. |
| 1590 | Literal types are uniqued by their contents and can never be recursive |
| 1591 | or opaque since there is no way to write one. Identified types can be |
| 1592 | recursive, can be opaqued, and are never uniqued. |
| 1593 | |
| 1594 | Syntax: |
| 1595 | """"""" |
| 1596 | |
| 1597 | :: |
| 1598 | |
| 1599 | %T1 = type { <type list> } ; Identified normal struct type |
| 1600 | %T2 = type <{ <type list> }> ; Identified packed struct type |
| 1601 | |
| 1602 | Examples: |
| 1603 | """"""""" |
| 1604 | |
| 1605 | +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1606 | | ``{ i32, i32, i32 }`` | A triple of three ``i32`` values | |
| 1607 | +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1608 | | ``{ 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``. | |
| 1609 | +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1610 | | ``<{ i8, i32 }>`` | A packed struct known to be 5 bytes in size. | |
| 1611 | +------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| 1612 | |
| 1613 | .. _t_opaque: |
| 1614 | |
| 1615 | Opaque Structure Types |
| 1616 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 1617 | |
| 1618 | Overview: |
| 1619 | """"""""" |
| 1620 | |
| 1621 | Opaque structure types are used to represent named structure types that |
| 1622 | do not have a body specified. This corresponds (for example) to the C |
| 1623 | notion of a forward declared structure. |
| 1624 | |
| 1625 | Syntax: |
| 1626 | """"""" |
| 1627 | |
| 1628 | :: |
| 1629 | |
| 1630 | %X = type opaque |
| 1631 | %52 = type opaque |
| 1632 | |
| 1633 | Examples: |
| 1634 | """"""""" |
| 1635 | |
| 1636 | +--------------+-------------------+ |
| 1637 | | ``opaque`` | An opaque type. | |
| 1638 | +--------------+-------------------+ |
| 1639 | |
| 1640 | .. _t_pointer: |
| 1641 | |
| 1642 | Pointer Type |
| 1643 | ^^^^^^^^^^^^ |
| 1644 | |
| 1645 | Overview: |
| 1646 | """"""""" |
| 1647 | |
| 1648 | The pointer type is used to specify memory locations. Pointers are |
| 1649 | commonly used to reference objects in memory. |
| 1650 | |
| 1651 | Pointer types may have an optional address space attribute defining the |
| 1652 | numbered address space where the pointed-to object resides. The default |
| 1653 | address space is number zero. The semantics of non-zero address spaces |
| 1654 | are target-specific. |
| 1655 | |
| 1656 | Note that LLVM does not permit pointers to void (``void*``) nor does it |
| 1657 | permit pointers to labels (``label*``). Use ``i8*`` instead. |
| 1658 | |
| 1659 | Syntax: |
| 1660 | """"""" |
| 1661 | |
| 1662 | :: |
| 1663 | |
| 1664 | <type> * |
| 1665 | |
| 1666 | Examples: |
| 1667 | """"""""" |
| 1668 | |
| 1669 | +-------------------------+--------------------------------------------------------------------------------------------------------------+ |
| 1670 | | ``[4 x i32]*`` | A :ref:`pointer <t_pointer>` to :ref:`array <t_array>` of four ``i32`` values. | |
| 1671 | +-------------------------+--------------------------------------------------------------------------------------------------------------+ |
| 1672 | | ``i32 (i32*) *`` | A :ref:`pointer <t_pointer>` to a :ref:`function <t_function>` that takes an ``i32*``, returning an ``i32``. | |
| 1673 | +-------------------------+--------------------------------------------------------------------------------------------------------------+ |
| 1674 | | ``i32 addrspace(5)*`` | A :ref:`pointer <t_pointer>` to an ``i32`` value that resides in address space #5. | |
| 1675 | +-------------------------+--------------------------------------------------------------------------------------------------------------+ |
| 1676 | |
| 1677 | .. _t_vector: |
| 1678 | |
| 1679 | Vector Type |
| 1680 | ^^^^^^^^^^^ |
| 1681 | |
| 1682 | Overview: |
| 1683 | """"""""" |
| 1684 | |
| 1685 | A vector type is a simple derived type that represents a vector of |
| 1686 | elements. Vector types are used when multiple primitive data are |
| 1687 | operated in parallel using a single instruction (SIMD). A vector type |
| 1688 | requires a size (number of elements) and an underlying primitive data |
| 1689 | type. Vector types are considered :ref:`first class <t_firstclass>`. |
| 1690 | |
| 1691 | Syntax: |
| 1692 | """"""" |
| 1693 | |
| 1694 | :: |
| 1695 | |
| 1696 | < <# elements> x <elementtype> > |
| 1697 | |
| 1698 | The number of elements is a constant integer value larger than 0; |
| 1699 | elementtype may be any integer or floating point type, or a pointer to |
| 1700 | these types. Vectors of size zero are not allowed. |
| 1701 | |
| 1702 | Examples: |
| 1703 | """"""""" |
| 1704 | |
| 1705 | +-------------------+--------------------------------------------------+ |
| 1706 | | ``<4 x i32>`` | Vector of 4 32-bit integer values. | |
| 1707 | +-------------------+--------------------------------------------------+ |
| 1708 | | ``<8 x float>`` | Vector of 8 32-bit floating-point values. | |
| 1709 | +-------------------+--------------------------------------------------+ |
| 1710 | | ``<2 x i64>`` | Vector of 2 64-bit integer values. | |
| 1711 | +-------------------+--------------------------------------------------+ |
| 1712 | | ``<4 x i64*>`` | Vector of 4 pointers to 64-bit integer values. | |
| 1713 | +-------------------+--------------------------------------------------+ |
| 1714 | |
| 1715 | Constants |
| 1716 | ========= |
| 1717 | |
| 1718 | LLVM has several different basic types of constants. This section |
| 1719 | describes them all and their syntax. |
| 1720 | |
| 1721 | Simple Constants |
| 1722 | ---------------- |
| 1723 | |
| 1724 | **Boolean constants** |
| 1725 | The two strings '``true``' and '``false``' are both valid constants |
| 1726 | of the ``i1`` type. |
| 1727 | **Integer constants** |
| 1728 | Standard integers (such as '4') are constants of the |
| 1729 | :ref:`integer <t_integer>` type. Negative numbers may be used with |
| 1730 | integer types. |
| 1731 | **Floating point constants** |
| 1732 | Floating point constants use standard decimal notation (e.g. |
| 1733 | 123.421), exponential notation (e.g. 1.23421e+2), or a more precise |
| 1734 | hexadecimal notation (see below). The assembler requires the exact |
| 1735 | decimal value of a floating-point constant. For example, the |
| 1736 | assembler accepts 1.25 but rejects 1.3 because 1.3 is a repeating |
| 1737 | decimal in binary. Floating point constants must have a :ref:`floating |
| 1738 | point <t_floating>` type. |
| 1739 | **Null pointer constants** |
| 1740 | The identifier '``null``' is recognized as a null pointer constant |
| 1741 | and must be of :ref:`pointer type <t_pointer>`. |
| 1742 | |
| 1743 | The one non-intuitive notation for constants is the hexadecimal form of |
| 1744 | floating point constants. For example, the form |
| 1745 | '``double 0x432ff973cafa8000``' is equivalent to (but harder to read |
| 1746 | than) '``double 4.5e+15``'. The only time hexadecimal floating point |
| 1747 | constants are required (and the only time that they are generated by the |
| 1748 | disassembler) is when a floating point constant must be emitted but it |
| 1749 | cannot be represented as a decimal floating point number in a reasonable |
| 1750 | number of digits. For example, NaN's, infinities, and other special |
| 1751 | values are represented in their IEEE hexadecimal format so that assembly |
| 1752 | and disassembly do not cause any bits to change in the constants. |
| 1753 | |
| 1754 | When using the hexadecimal form, constants of types half, float, and |
| 1755 | double are represented using the 16-digit form shown above (which |
| 1756 | matches the IEEE754 representation for double); half and float values |
Dmitri Gribenko | c3c8d2a | 2013-01-16 23:40:37 +0000 | [diff] [blame^] | 1757 | must, however, be exactly representable as IEEE 754 half and single |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 1758 | precision, respectively. Hexadecimal format is always used for long |
| 1759 | double, and there are three forms of long double. The 80-bit format used |
| 1760 | by x86 is represented as ``0xK`` followed by 20 hexadecimal digits. The |
| 1761 | 128-bit format used by PowerPC (two adjacent doubles) is represented by |
| 1762 | ``0xM`` followed by 32 hexadecimal digits. The IEEE 128-bit format is |
| 1763 | represented by ``0xL`` followed by 32 hexadecimal digits; no currently |
| 1764 | supported target uses this format. Long doubles will only work if they |
| 1765 | match the long double format on your target. The IEEE 16-bit format |
| 1766 | (half precision) is represented by ``0xH`` followed by 4 hexadecimal |
| 1767 | digits. All hexadecimal formats are big-endian (sign bit at the left). |
| 1768 | |
| 1769 | There are no constants of type x86mmx. |
| 1770 | |
| 1771 | Complex Constants |
| 1772 | ----------------- |
| 1773 | |
| 1774 | Complex constants are a (potentially recursive) combination of simple |
| 1775 | constants and smaller complex constants. |
| 1776 | |
| 1777 | **Structure constants** |
| 1778 | Structure constants are represented with notation similar to |
| 1779 | structure type definitions (a comma separated list of elements, |
| 1780 | surrounded by braces (``{}``)). For example: |
| 1781 | "``{ i32 4, float 17.0, i32* @G }``", where "``@G``" is declared as |
| 1782 | "``@G = external global i32``". Structure constants must have |
| 1783 | :ref:`structure type <t_struct>`, and the number and types of elements |
| 1784 | must match those specified by the type. |
| 1785 | **Array constants** |
| 1786 | Array constants are represented with notation similar to array type |
| 1787 | definitions (a comma separated list of elements, surrounded by |
| 1788 | square brackets (``[]``)). For example: |
| 1789 | "``[ i32 42, i32 11, i32 74 ]``". Array constants must have |
| 1790 | :ref:`array type <t_array>`, and the number and types of elements must |
| 1791 | match those specified by the type. |
| 1792 | **Vector constants** |
| 1793 | Vector constants are represented with notation similar to vector |
| 1794 | type definitions (a comma separated list of elements, surrounded by |
| 1795 | less-than/greater-than's (``<>``)). For example: |
| 1796 | "``< i32 42, i32 11, i32 74, i32 100 >``". Vector constants |
| 1797 | must have :ref:`vector type <t_vector>`, and the number and types of |
| 1798 | elements must match those specified by the type. |
| 1799 | **Zero initialization** |
| 1800 | The string '``zeroinitializer``' can be used to zero initialize a |
| 1801 | value to zero of *any* type, including scalar and |
| 1802 | :ref:`aggregate <t_aggregate>` types. This is often used to avoid |
| 1803 | having to print large zero initializers (e.g. for large arrays) and |
| 1804 | is always exactly equivalent to using explicit zero initializers. |
| 1805 | **Metadata node** |
| 1806 | A metadata node is a structure-like constant with :ref:`metadata |
| 1807 | type <t_metadata>`. For example: |
| 1808 | "``metadata !{ i32 0, metadata !"test" }``". Unlike other |
| 1809 | constants that are meant to be interpreted as part of the |
| 1810 | instruction stream, metadata is a place to attach additional |
| 1811 | information such as debug info. |
| 1812 | |
| 1813 | Global Variable and Function Addresses |
| 1814 | -------------------------------------- |
| 1815 | |
| 1816 | The addresses of :ref:`global variables <globalvars>` and |
| 1817 | :ref:`functions <functionstructure>` are always implicitly valid |
| 1818 | (link-time) constants. These constants are explicitly referenced when |
| 1819 | the :ref:`identifier for the global <identifiers>` is used and always have |
| 1820 | :ref:`pointer <t_pointer>` type. For example, the following is a legal LLVM |
| 1821 | file: |
| 1822 | |
| 1823 | .. code-block:: llvm |
| 1824 | |
| 1825 | @X = global i32 17 |
| 1826 | @Y = global i32 42 |
| 1827 | @Z = global [2 x i32*] [ i32* @X, i32* @Y ] |
| 1828 | |
| 1829 | .. _undefvalues: |
| 1830 | |
| 1831 | Undefined Values |
| 1832 | ---------------- |
| 1833 | |
| 1834 | The string '``undef``' can be used anywhere a constant is expected, and |
| 1835 | indicates that the user of the value may receive an unspecified |
| 1836 | bit-pattern. Undefined values may be of any type (other than '``label``' |
| 1837 | or '``void``') and be used anywhere a constant is permitted. |
| 1838 | |
| 1839 | Undefined values are useful because they indicate to the compiler that |
| 1840 | the program is well defined no matter what value is used. This gives the |
| 1841 | compiler more freedom to optimize. Here are some examples of |
| 1842 | (potentially surprising) transformations that are valid (in pseudo IR): |
| 1843 | |
| 1844 | .. code-block:: llvm |
| 1845 | |
| 1846 | %A = add %X, undef |
| 1847 | %B = sub %X, undef |
| 1848 | %C = xor %X, undef |
| 1849 | Safe: |
| 1850 | %A = undef |
| 1851 | %B = undef |
| 1852 | %C = undef |
| 1853 | |
| 1854 | This is safe because all of the output bits are affected by the undef |
| 1855 | bits. Any output bit can have a zero or one depending on the input bits. |
| 1856 | |
| 1857 | .. code-block:: llvm |
| 1858 | |
| 1859 | %A = or %X, undef |
| 1860 | %B = and %X, undef |
| 1861 | Safe: |
| 1862 | %A = -1 |
| 1863 | %B = 0 |
| 1864 | Unsafe: |
| 1865 | %A = undef |
| 1866 | %B = undef |
| 1867 | |
| 1868 | These logical operations have bits that are not always affected by the |
| 1869 | input. For example, if ``%X`` has a zero bit, then the output of the |
| 1870 | '``and``' operation will always be a zero for that bit, no matter what |
| 1871 | the corresponding bit from the '``undef``' is. As such, it is unsafe to |
| 1872 | optimize or assume that the result of the '``and``' is '``undef``'. |
| 1873 | However, it is safe to assume that all bits of the '``undef``' could be |
| 1874 | 0, and optimize the '``and``' to 0. Likewise, it is safe to assume that |
| 1875 | all the bits of the '``undef``' operand to the '``or``' could be set, |
| 1876 | allowing the '``or``' to be folded to -1. |
| 1877 | |
| 1878 | .. code-block:: llvm |
| 1879 | |
| 1880 | %A = select undef, %X, %Y |
| 1881 | %B = select undef, 42, %Y |
| 1882 | %C = select %X, %Y, undef |
| 1883 | Safe: |
| 1884 | %A = %X (or %Y) |
| 1885 | %B = 42 (or %Y) |
| 1886 | %C = %Y |
| 1887 | Unsafe: |
| 1888 | %A = undef |
| 1889 | %B = undef |
| 1890 | %C = undef |
| 1891 | |
| 1892 | This set of examples shows that undefined '``select``' (and conditional |
| 1893 | branch) conditions can go *either way*, but they have to come from one |
| 1894 | of the two operands. In the ``%A`` example, if ``%X`` and ``%Y`` were |
| 1895 | both known to have a clear low bit, then ``%A`` would have to have a |
| 1896 | cleared low bit. However, in the ``%C`` example, the optimizer is |
| 1897 | allowed to assume that the '``undef``' operand could be the same as |
| 1898 | ``%Y``, allowing the whole '``select``' to be eliminated. |
| 1899 | |
| 1900 | .. code-block:: llvm |
| 1901 | |
| 1902 | %A = xor undef, undef |
| 1903 | |
| 1904 | %B = undef |
| 1905 | %C = xor %B, %B |
| 1906 | |
| 1907 | %D = undef |
| 1908 | %E = icmp lt %D, 4 |
| 1909 | %F = icmp gte %D, 4 |
| 1910 | |
| 1911 | Safe: |
| 1912 | %A = undef |
| 1913 | %B = undef |
| 1914 | %C = undef |
| 1915 | %D = undef |
| 1916 | %E = undef |
| 1917 | %F = undef |
| 1918 | |
| 1919 | This example points out that two '``undef``' operands are not |
| 1920 | necessarily the same. This can be surprising to people (and also matches |
| 1921 | C semantics) where they assume that "``X^X``" is always zero, even if |
| 1922 | ``X`` is undefined. This isn't true for a number of reasons, but the |
| 1923 | short answer is that an '``undef``' "variable" can arbitrarily change |
| 1924 | its value over its "live range". This is true because the variable |
| 1925 | doesn't actually *have a live range*. Instead, the value is logically |
| 1926 | read from arbitrary registers that happen to be around when needed, so |
| 1927 | the value is not necessarily consistent over time. In fact, ``%A`` and |
| 1928 | ``%C`` need to have the same semantics or the core LLVM "replace all |
| 1929 | uses with" concept would not hold. |
| 1930 | |
| 1931 | .. code-block:: llvm |
| 1932 | |
| 1933 | %A = fdiv undef, %X |
| 1934 | %B = fdiv %X, undef |
| 1935 | Safe: |
| 1936 | %A = undef |
| 1937 | b: unreachable |
| 1938 | |
| 1939 | These examples show the crucial difference between an *undefined value* |
| 1940 | and *undefined behavior*. An undefined value (like '``undef``') is |
| 1941 | allowed to have an arbitrary bit-pattern. This means that the ``%A`` |
| 1942 | operation can be constant folded to '``undef``', because the '``undef``' |
| 1943 | could be an SNaN, and ``fdiv`` is not (currently) defined on SNaN's. |
| 1944 | However, in the second example, we can make a more aggressive |
| 1945 | assumption: because the ``undef`` is allowed to be an arbitrary value, |
| 1946 | we are allowed to assume that it could be zero. Since a divide by zero |
| 1947 | has *undefined behavior*, we are allowed to assume that the operation |
| 1948 | does not execute at all. This allows us to delete the divide and all |
| 1949 | code after it. Because the undefined operation "can't happen", the |
| 1950 | optimizer can assume that it occurs in dead code. |
| 1951 | |
| 1952 | .. code-block:: llvm |
| 1953 | |
| 1954 | a: store undef -> %X |
| 1955 | b: store %X -> undef |
| 1956 | Safe: |
| 1957 | a: <deleted> |
| 1958 | b: unreachable |
| 1959 | |
| 1960 | These examples reiterate the ``fdiv`` example: a store *of* an undefined |
| 1961 | value can be assumed to not have any effect; we can assume that the |
| 1962 | value is overwritten with bits that happen to match what was already |
| 1963 | there. However, a store *to* an undefined location could clobber |
| 1964 | arbitrary memory, therefore, it has undefined behavior. |
| 1965 | |
| 1966 | .. _poisonvalues: |
| 1967 | |
| 1968 | Poison Values |
| 1969 | ------------- |
| 1970 | |
| 1971 | Poison values are similar to :ref:`undef values <undefvalues>`, however |
| 1972 | they also represent the fact that an instruction or constant expression |
| 1973 | which cannot evoke side effects has nevertheless detected a condition |
| 1974 | which results in undefined behavior. |
| 1975 | |
| 1976 | There is currently no way of representing a poison value in the IR; they |
| 1977 | only exist when produced by operations such as :ref:`add <i_add>` with |
| 1978 | the ``nsw`` flag. |
| 1979 | |
| 1980 | Poison value behavior is defined in terms of value *dependence*: |
| 1981 | |
| 1982 | - Values other than :ref:`phi <i_phi>` nodes depend on their operands. |
| 1983 | - :ref:`Phi <i_phi>` nodes depend on the operand corresponding to |
| 1984 | their dynamic predecessor basic block. |
| 1985 | - Function arguments depend on the corresponding actual argument values |
| 1986 | in the dynamic callers of their functions. |
| 1987 | - :ref:`Call <i_call>` instructions depend on the :ref:`ret <i_ret>` |
| 1988 | instructions that dynamically transfer control back to them. |
| 1989 | - :ref:`Invoke <i_invoke>` instructions depend on the |
| 1990 | :ref:`ret <i_ret>`, :ref:`resume <i_resume>`, or exception-throwing |
| 1991 | call instructions that dynamically transfer control back to them. |
| 1992 | - Non-volatile loads and stores depend on the most recent stores to all |
| 1993 | of the referenced memory addresses, following the order in the IR |
| 1994 | (including loads and stores implied by intrinsics such as |
| 1995 | :ref:`@llvm.memcpy <int_memcpy>`.) |
| 1996 | - An instruction with externally visible side effects depends on the |
| 1997 | most recent preceding instruction with externally visible side |
| 1998 | effects, following the order in the IR. (This includes :ref:`volatile |
| 1999 | operations <volatile>`.) |
| 2000 | - An instruction *control-depends* on a :ref:`terminator |
| 2001 | instruction <terminators>` if the terminator instruction has |
| 2002 | multiple successors and the instruction is always executed when |
| 2003 | control transfers to one of the successors, and may not be executed |
| 2004 | when control is transferred to another. |
| 2005 | - Additionally, an instruction also *control-depends* on a terminator |
| 2006 | instruction if the set of instructions it otherwise depends on would |
| 2007 | be different if the terminator had transferred control to a different |
| 2008 | successor. |
| 2009 | - Dependence is transitive. |
| 2010 | |
| 2011 | Poison Values have the same behavior as :ref:`undef values <undefvalues>`, |
| 2012 | with the additional affect that any instruction which has a *dependence* |
| 2013 | on a poison value has undefined behavior. |
| 2014 | |
| 2015 | Here are some examples: |
| 2016 | |
| 2017 | .. code-block:: llvm |
| 2018 | |
| 2019 | entry: |
| 2020 | %poison = sub nuw i32 0, 1 ; Results in a poison value. |
| 2021 | %still_poison = and i32 %poison, 0 ; 0, but also poison. |
| 2022 | %poison_yet_again = getelementptr i32* @h, i32 %still_poison |
| 2023 | store i32 0, i32* %poison_yet_again ; memory at @h[0] is poisoned |
| 2024 | |
| 2025 | store i32 %poison, i32* @g ; Poison value stored to memory. |
| 2026 | %poison2 = load i32* @g ; Poison value loaded back from memory. |
| 2027 | |
| 2028 | store volatile i32 %poison, i32* @g ; External observation; undefined behavior. |
| 2029 | |
| 2030 | %narrowaddr = bitcast i32* @g to i16* |
| 2031 | %wideaddr = bitcast i32* @g to i64* |
| 2032 | %poison3 = load i16* %narrowaddr ; Returns a poison value. |
| 2033 | %poison4 = load i64* %wideaddr ; Returns a poison value. |
| 2034 | |
| 2035 | %cmp = icmp slt i32 %poison, 0 ; Returns a poison value. |
| 2036 | br i1 %cmp, label %true, label %end ; Branch to either destination. |
| 2037 | |
| 2038 | true: |
| 2039 | store volatile i32 0, i32* @g ; This is control-dependent on %cmp, so |
| 2040 | ; it has undefined behavior. |
| 2041 | br label %end |
| 2042 | |
| 2043 | end: |
| 2044 | %p = phi i32 [ 0, %entry ], [ 1, %true ] |
| 2045 | ; Both edges into this PHI are |
| 2046 | ; control-dependent on %cmp, so this |
| 2047 | ; always results in a poison value. |
| 2048 | |
| 2049 | store volatile i32 0, i32* @g ; This would depend on the store in %true |
| 2050 | ; if %cmp is true, or the store in %entry |
| 2051 | ; otherwise, so this is undefined behavior. |
| 2052 | |
| 2053 | br i1 %cmp, label %second_true, label %second_end |
| 2054 | ; The same branch again, but this time the |
| 2055 | ; true block doesn't have side effects. |
| 2056 | |
| 2057 | second_true: |
| 2058 | ; No side effects! |
| 2059 | ret void |
| 2060 | |
| 2061 | second_end: |
| 2062 | store volatile i32 0, i32* @g ; This time, the instruction always depends |
| 2063 | ; on the store in %end. Also, it is |
| 2064 | ; control-equivalent to %end, so this is |
| 2065 | ; well-defined (ignoring earlier undefined |
| 2066 | ; behavior in this example). |
| 2067 | |
| 2068 | .. _blockaddress: |
| 2069 | |
| 2070 | Addresses of Basic Blocks |
| 2071 | ------------------------- |
| 2072 | |
| 2073 | ``blockaddress(@function, %block)`` |
| 2074 | |
| 2075 | The '``blockaddress``' constant computes the address of the specified |
| 2076 | basic block in the specified function, and always has an ``i8*`` type. |
| 2077 | Taking the address of the entry block is illegal. |
| 2078 | |
| 2079 | This value only has defined behavior when used as an operand to the |
| 2080 | ':ref:`indirectbr <i_indirectbr>`' instruction, or for comparisons |
| 2081 | against null. Pointer equality tests between labels addresses results in |
| 2082 | undefined behavior — though, again, comparison against null is ok, and |
| 2083 | no label is equal to the null pointer. This may be passed around as an |
| 2084 | opaque pointer sized value as long as the bits are not inspected. This |
| 2085 | allows ``ptrtoint`` and arithmetic to be performed on these values so |
| 2086 | long as the original value is reconstituted before the ``indirectbr`` |
| 2087 | instruction. |
| 2088 | |
| 2089 | Finally, some targets may provide defined semantics when using the value |
| 2090 | as the operand to an inline assembly, but that is target specific. |
| 2091 | |
| 2092 | Constant Expressions |
| 2093 | -------------------- |
| 2094 | |
| 2095 | Constant expressions are used to allow expressions involving other |
| 2096 | constants to be used as constants. Constant expressions may be of any |
| 2097 | :ref:`first class <t_firstclass>` type and may involve any LLVM operation |
| 2098 | that does not have side effects (e.g. load and call are not supported). |
| 2099 | The following is the syntax for constant expressions: |
| 2100 | |
| 2101 | ``trunc (CST to TYPE)`` |
| 2102 | Truncate a constant to another type. The bit size of CST must be |
| 2103 | larger than the bit size of TYPE. Both types must be integers. |
| 2104 | ``zext (CST to TYPE)`` |
| 2105 | Zero extend a constant to another type. The bit size of CST must be |
| 2106 | smaller than the bit size of TYPE. Both types must be integers. |
| 2107 | ``sext (CST to TYPE)`` |
| 2108 | Sign extend a constant to another type. The bit size of CST must be |
| 2109 | smaller than the bit size of TYPE. Both types must be integers. |
| 2110 | ``fptrunc (CST to TYPE)`` |
| 2111 | Truncate a floating point constant to another floating point type. |
| 2112 | The size of CST must be larger than the size of TYPE. Both types |
| 2113 | must be floating point. |
| 2114 | ``fpext (CST to TYPE)`` |
| 2115 | Floating point extend a constant to another type. The size of CST |
| 2116 | must be smaller or equal to the size of TYPE. Both types must be |
| 2117 | floating point. |
| 2118 | ``fptoui (CST to TYPE)`` |
| 2119 | Convert a floating point constant to the corresponding unsigned |
| 2120 | integer constant. TYPE must be a scalar or vector integer type. CST |
| 2121 | must be of scalar or vector floating point type. Both CST and TYPE |
| 2122 | must be scalars, or vectors of the same number of elements. If the |
| 2123 | value won't fit in the integer type, the results are undefined. |
| 2124 | ``fptosi (CST to TYPE)`` |
| 2125 | Convert a floating point constant to the corresponding signed |
| 2126 | integer constant. TYPE must be a scalar or vector integer type. CST |
| 2127 | must be of scalar or vector floating point type. Both CST and TYPE |
| 2128 | must be scalars, or vectors of the same number of elements. If the |
| 2129 | value won't fit in the integer type, the results are undefined. |
| 2130 | ``uitofp (CST to TYPE)`` |
| 2131 | Convert an unsigned integer constant to the corresponding floating |
| 2132 | point constant. TYPE must be a scalar or vector floating point type. |
| 2133 | CST must be of scalar or vector integer type. Both CST and TYPE must |
| 2134 | be scalars, or vectors of the same number of elements. If the value |
| 2135 | won't fit in the floating point type, the results are undefined. |
| 2136 | ``sitofp (CST to TYPE)`` |
| 2137 | Convert a signed integer constant to the corresponding floating |
| 2138 | point constant. TYPE must be a scalar or vector floating point type. |
| 2139 | CST must be of scalar or vector integer type. Both CST and TYPE must |
| 2140 | be scalars, or vectors of the same number of elements. If the value |
| 2141 | won't fit in the floating point type, the results are undefined. |
| 2142 | ``ptrtoint (CST to TYPE)`` |
| 2143 | Convert a pointer typed constant to the corresponding integer |
| 2144 | constant ``TYPE`` must be an integer type. ``CST`` must be of |
| 2145 | pointer type. The ``CST`` value is zero extended, truncated, or |
| 2146 | unchanged to make it fit in ``TYPE``. |
| 2147 | ``inttoptr (CST to TYPE)`` |
| 2148 | Convert an integer constant to a pointer constant. TYPE must be a |
| 2149 | pointer type. CST must be of integer type. The CST value is zero |
| 2150 | extended, truncated, or unchanged to make it fit in a pointer size. |
| 2151 | This one is *really* dangerous! |
| 2152 | ``bitcast (CST to TYPE)`` |
| 2153 | Convert a constant, CST, to another TYPE. The constraints of the |
| 2154 | operands are the same as those for the :ref:`bitcast |
| 2155 | instruction <i_bitcast>`. |
| 2156 | ``getelementptr (CSTPTR, IDX0, IDX1, ...)``, ``getelementptr inbounds (CSTPTR, IDX0, IDX1, ...)`` |
| 2157 | Perform the :ref:`getelementptr operation <i_getelementptr>` on |
| 2158 | constants. As with the :ref:`getelementptr <i_getelementptr>` |
| 2159 | instruction, the index list may have zero or more indexes, which are |
| 2160 | required to make sense for the type of "CSTPTR". |
| 2161 | ``select (COND, VAL1, VAL2)`` |
| 2162 | Perform the :ref:`select operation <i_select>` on constants. |
| 2163 | ``icmp COND (VAL1, VAL2)`` |
| 2164 | Performs the :ref:`icmp operation <i_icmp>` on constants. |
| 2165 | ``fcmp COND (VAL1, VAL2)`` |
| 2166 | Performs the :ref:`fcmp operation <i_fcmp>` on constants. |
| 2167 | ``extractelement (VAL, IDX)`` |
| 2168 | Perform the :ref:`extractelement operation <i_extractelement>` on |
| 2169 | constants. |
| 2170 | ``insertelement (VAL, ELT, IDX)`` |
| 2171 | Perform the :ref:`insertelement operation <i_insertelement>` on |
| 2172 | constants. |
| 2173 | ``shufflevector (VEC1, VEC2, IDXMASK)`` |
| 2174 | Perform the :ref:`shufflevector operation <i_shufflevector>` on |
| 2175 | constants. |
| 2176 | ``extractvalue (VAL, IDX0, IDX1, ...)`` |
| 2177 | Perform the :ref:`extractvalue operation <i_extractvalue>` on |
| 2178 | constants. The index list is interpreted in a similar manner as |
| 2179 | indices in a ':ref:`getelementptr <i_getelementptr>`' operation. At |
| 2180 | least one index value must be specified. |
| 2181 | ``insertvalue (VAL, ELT, IDX0, IDX1, ...)`` |
| 2182 | Perform the :ref:`insertvalue operation <i_insertvalue>` on constants. |
| 2183 | The index list is interpreted in a similar manner as indices in a |
| 2184 | ':ref:`getelementptr <i_getelementptr>`' operation. At least one index |
| 2185 | value must be specified. |
| 2186 | ``OPCODE (LHS, RHS)`` |
| 2187 | Perform the specified operation of the LHS and RHS constants. OPCODE |
| 2188 | may be any of the :ref:`binary <binaryops>` or :ref:`bitwise |
| 2189 | binary <bitwiseops>` operations. The constraints on operands are |
| 2190 | the same as those for the corresponding instruction (e.g. no bitwise |
| 2191 | operations on floating point values are allowed). |
| 2192 | |
| 2193 | Other Values |
| 2194 | ============ |
| 2195 | |
| 2196 | Inline Assembler Expressions |
| 2197 | ---------------------------- |
| 2198 | |
| 2199 | LLVM supports inline assembler expressions (as opposed to :ref:`Module-Level |
| 2200 | Inline Assembly <moduleasm>`) through the use of a special value. This |
| 2201 | value represents the inline assembler as a string (containing the |
| 2202 | instructions to emit), a list of operand constraints (stored as a |
| 2203 | string), a flag that indicates whether or not the inline asm expression |
| 2204 | has side effects, and a flag indicating whether the function containing |
| 2205 | the asm needs to align its stack conservatively. An example inline |
| 2206 | assembler expression is: |
| 2207 | |
| 2208 | .. code-block:: llvm |
| 2209 | |
| 2210 | i32 (i32) asm "bswap $0", "=r,r" |
| 2211 | |
| 2212 | Inline assembler expressions may **only** be used as the callee operand |
| 2213 | of a :ref:`call <i_call>` or an :ref:`invoke <i_invoke>` instruction. |
| 2214 | Thus, typically we have: |
| 2215 | |
| 2216 | .. code-block:: llvm |
| 2217 | |
| 2218 | %X = call i32 asm "bswap $0", "=r,r"(i32 %Y) |
| 2219 | |
| 2220 | Inline asms with side effects not visible in the constraint list must be |
| 2221 | marked as having side effects. This is done through the use of the |
| 2222 | '``sideeffect``' keyword, like so: |
| 2223 | |
| 2224 | .. code-block:: llvm |
| 2225 | |
| 2226 | call void asm sideeffect "eieio", ""() |
| 2227 | |
| 2228 | In some cases inline asms will contain code that will not work unless |
| 2229 | the stack is aligned in some way, such as calls or SSE instructions on |
| 2230 | x86, yet will not contain code that does that alignment within the asm. |
| 2231 | The compiler should make conservative assumptions about what the asm |
| 2232 | might contain and should generate its usual stack alignment code in the |
| 2233 | prologue if the '``alignstack``' keyword is present: |
| 2234 | |
| 2235 | .. code-block:: llvm |
| 2236 | |
| 2237 | call void asm alignstack "eieio", ""() |
| 2238 | |
| 2239 | Inline asms also support using non-standard assembly dialects. The |
| 2240 | assumed dialect is ATT. When the '``inteldialect``' keyword is present, |
| 2241 | the inline asm is using the Intel dialect. Currently, ATT and Intel are |
| 2242 | the only supported dialects. An example is: |
| 2243 | |
| 2244 | .. code-block:: llvm |
| 2245 | |
| 2246 | call void asm inteldialect "eieio", ""() |
| 2247 | |
| 2248 | If multiple keywords appear the '``sideeffect``' keyword must come |
| 2249 | first, the '``alignstack``' keyword second and the '``inteldialect``' |
| 2250 | keyword last. |
| 2251 | |
| 2252 | Inline Asm Metadata |
| 2253 | ^^^^^^^^^^^^^^^^^^^ |
| 2254 | |
| 2255 | The call instructions that wrap inline asm nodes may have a |
| 2256 | "``!srcloc``" MDNode attached to it that contains a list of constant |
| 2257 | integers. If present, the code generator will use the integer as the |
| 2258 | location cookie value when report errors through the ``LLVMContext`` |
| 2259 | error reporting mechanisms. This allows a front-end to correlate backend |
| 2260 | errors that occur with inline asm back to the source code that produced |
| 2261 | it. For example: |
| 2262 | |
| 2263 | .. code-block:: llvm |
| 2264 | |
| 2265 | call void asm sideeffect "something bad", ""(), !srcloc !42 |
| 2266 | ... |
| 2267 | !42 = !{ i32 1234567 } |
| 2268 | |
| 2269 | It is up to the front-end to make sense of the magic numbers it places |
| 2270 | in the IR. If the MDNode contains multiple constants, the code generator |
| 2271 | will use the one that corresponds to the line of the asm that the error |
| 2272 | occurs on. |
| 2273 | |
| 2274 | .. _metadata: |
| 2275 | |
| 2276 | Metadata Nodes and Metadata Strings |
| 2277 | ----------------------------------- |
| 2278 | |
| 2279 | LLVM IR allows metadata to be attached to instructions in the program |
| 2280 | that can convey extra information about the code to the optimizers and |
| 2281 | code generator. One example application of metadata is source-level |
| 2282 | debug information. There are two metadata primitives: strings and nodes. |
| 2283 | All metadata has the ``metadata`` type and is identified in syntax by a |
| 2284 | preceding exclamation point ('``!``'). |
| 2285 | |
| 2286 | A metadata string is a string surrounded by double quotes. It can |
| 2287 | contain any character by escaping non-printable characters with |
| 2288 | "``\xx``" where "``xx``" is the two digit hex code. For example: |
| 2289 | "``!"test\00"``". |
| 2290 | |
| 2291 | Metadata nodes are represented with notation similar to structure |
| 2292 | constants (a comma separated list of elements, surrounded by braces and |
| 2293 | preceded by an exclamation point). Metadata nodes can have any values as |
| 2294 | their operand. For example: |
| 2295 | |
| 2296 | .. code-block:: llvm |
| 2297 | |
| 2298 | !{ metadata !"test\00", i32 10} |
| 2299 | |
| 2300 | A :ref:`named metadata <namedmetadatastructure>` is a collection of |
| 2301 | metadata nodes, which can be looked up in the module symbol table. For |
| 2302 | example: |
| 2303 | |
| 2304 | .. code-block:: llvm |
| 2305 | |
| 2306 | !foo = metadata !{!4, !3} |
| 2307 | |
| 2308 | Metadata can be used as function arguments. Here ``llvm.dbg.value`` |
| 2309 | function is using two metadata arguments: |
| 2310 | |
| 2311 | .. code-block:: llvm |
| 2312 | |
| 2313 | call void @llvm.dbg.value(metadata !24, i64 0, metadata !25) |
| 2314 | |
| 2315 | Metadata can be attached with an instruction. Here metadata ``!21`` is |
| 2316 | attached to the ``add`` instruction using the ``!dbg`` identifier: |
| 2317 | |
| 2318 | .. code-block:: llvm |
| 2319 | |
| 2320 | %indvar.next = add i64 %indvar, 1, !dbg !21 |
| 2321 | |
| 2322 | More information about specific metadata nodes recognized by the |
| 2323 | optimizers and code generator is found below. |
| 2324 | |
| 2325 | '``tbaa``' Metadata |
| 2326 | ^^^^^^^^^^^^^^^^^^^ |
| 2327 | |
| 2328 | In LLVM IR, memory does not have types, so LLVM's own type system is not |
| 2329 | suitable for doing TBAA. Instead, metadata is added to the IR to |
| 2330 | describe a type system of a higher level language. This can be used to |
| 2331 | implement typical C/C++ TBAA, but it can also be used to implement |
| 2332 | custom alias analysis behavior for other languages. |
| 2333 | |
| 2334 | The current metadata format is very simple. TBAA metadata nodes have up |
| 2335 | to three fields, e.g.: |
| 2336 | |
| 2337 | .. code-block:: llvm |
| 2338 | |
| 2339 | !0 = metadata !{ metadata !"an example type tree" } |
| 2340 | !1 = metadata !{ metadata !"int", metadata !0 } |
| 2341 | !2 = metadata !{ metadata !"float", metadata !0 } |
| 2342 | !3 = metadata !{ metadata !"const float", metadata !2, i64 1 } |
| 2343 | |
| 2344 | The first field is an identity field. It can be any value, usually a |
| 2345 | metadata string, which uniquely identifies the type. The most important |
| 2346 | name in the tree is the name of the root node. Two trees with different |
| 2347 | root node names are entirely disjoint, even if they have leaves with |
| 2348 | common names. |
| 2349 | |
| 2350 | The second field identifies the type's parent node in the tree, or is |
| 2351 | null or omitted for a root node. A type is considered to alias all of |
| 2352 | its descendants and all of its ancestors in the tree. Also, a type is |
| 2353 | considered to alias all types in other trees, so that bitcode produced |
| 2354 | from multiple front-ends is handled conservatively. |
| 2355 | |
| 2356 | If the third field is present, it's an integer which if equal to 1 |
| 2357 | indicates that the type is "constant" (meaning |
| 2358 | ``pointsToConstantMemory`` should return true; see `other useful |
| 2359 | AliasAnalysis methods <AliasAnalysis.html#OtherItfs>`_). |
| 2360 | |
| 2361 | '``tbaa.struct``' Metadata |
| 2362 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 2363 | |
| 2364 | The :ref:`llvm.memcpy <int_memcpy>` is often used to implement |
| 2365 | aggregate assignment operations in C and similar languages, however it |
| 2366 | is defined to copy a contiguous region of memory, which is more than |
| 2367 | strictly necessary for aggregate types which contain holes due to |
| 2368 | padding. Also, it doesn't contain any TBAA information about the fields |
| 2369 | of the aggregate. |
| 2370 | |
| 2371 | ``!tbaa.struct`` metadata can describe which memory subregions in a |
| 2372 | memcpy are padding and what the TBAA tags of the struct are. |
| 2373 | |
| 2374 | The current metadata format is very simple. ``!tbaa.struct`` metadata |
| 2375 | nodes are a list of operands which are in conceptual groups of three. |
| 2376 | For each group of three, the first operand gives the byte offset of a |
| 2377 | field in bytes, the second gives its size in bytes, and the third gives |
| 2378 | its tbaa tag. e.g.: |
| 2379 | |
| 2380 | .. code-block:: llvm |
| 2381 | |
| 2382 | !4 = metadata !{ i64 0, i64 4, metadata !1, i64 8, i64 4, metadata !2 } |
| 2383 | |
| 2384 | This describes a struct with two fields. The first is at offset 0 bytes |
| 2385 | with size 4 bytes, and has tbaa tag !1. The second is at offset 8 bytes |
| 2386 | and has size 4 bytes and has tbaa tag !2. |
| 2387 | |
| 2388 | Note that the fields need not be contiguous. In this example, there is a |
| 2389 | 4 byte gap between the two fields. This gap represents padding which |
| 2390 | does not carry useful data and need not be preserved. |
| 2391 | |
| 2392 | '``fpmath``' Metadata |
| 2393 | ^^^^^^^^^^^^^^^^^^^^^ |
| 2394 | |
| 2395 | ``fpmath`` metadata may be attached to any instruction of floating point |
| 2396 | type. It can be used to express the maximum acceptable error in the |
| 2397 | result of that instruction, in ULPs, thus potentially allowing the |
| 2398 | compiler to use a more efficient but less accurate method of computing |
| 2399 | it. ULP is defined as follows: |
| 2400 | |
| 2401 | If ``x`` is a real number that lies between two finite consecutive |
| 2402 | floating-point numbers ``a`` and ``b``, without being equal to one |
| 2403 | of them, then ``ulp(x) = |b - a|``, otherwise ``ulp(x)`` is the |
| 2404 | distance between the two non-equal finite floating-point numbers |
| 2405 | nearest ``x``. Moreover, ``ulp(NaN)`` is ``NaN``. |
| 2406 | |
| 2407 | The metadata node shall consist of a single positive floating point |
| 2408 | number representing the maximum relative error, for example: |
| 2409 | |
| 2410 | .. code-block:: llvm |
| 2411 | |
| 2412 | !0 = metadata !{ float 2.5 } ; maximum acceptable inaccuracy is 2.5 ULPs |
| 2413 | |
| 2414 | '``range``' Metadata |
| 2415 | ^^^^^^^^^^^^^^^^^^^^ |
| 2416 | |
| 2417 | ``range`` metadata may be attached only to loads of integer types. It |
| 2418 | expresses the possible ranges the loaded value is in. The ranges are |
| 2419 | represented with a flattened list of integers. The loaded value is known |
| 2420 | to be in the union of the ranges defined by each consecutive pair. Each |
| 2421 | pair has the following properties: |
| 2422 | |
| 2423 | - The type must match the type loaded by the instruction. |
| 2424 | - The pair ``a,b`` represents the range ``[a,b)``. |
| 2425 | - Both ``a`` and ``b`` are constants. |
| 2426 | - The range is allowed to wrap. |
| 2427 | - The range should not represent the full or empty set. That is, |
| 2428 | ``a!=b``. |
| 2429 | |
| 2430 | In addition, the pairs must be in signed order of the lower bound and |
| 2431 | they must be non-contiguous. |
| 2432 | |
| 2433 | Examples: |
| 2434 | |
| 2435 | .. code-block:: llvm |
| 2436 | |
| 2437 | %a = load i8* %x, align 1, !range !0 ; Can only be 0 or 1 |
| 2438 | %b = load i8* %y, align 1, !range !1 ; Can only be 255 (-1), 0 or 1 |
| 2439 | %c = load i8* %z, align 1, !range !2 ; Can only be 0, 1, 3, 4 or 5 |
| 2440 | %d = load i8* %z, align 1, !range !3 ; Can only be -2, -1, 3, 4 or 5 |
| 2441 | ... |
| 2442 | !0 = metadata !{ i8 0, i8 2 } |
| 2443 | !1 = metadata !{ i8 255, i8 2 } |
| 2444 | !2 = metadata !{ i8 0, i8 2, i8 3, i8 6 } |
| 2445 | !3 = metadata !{ i8 -2, i8 0, i8 3, i8 6 } |
| 2446 | |
| 2447 | Module Flags Metadata |
| 2448 | ===================== |
| 2449 | |
| 2450 | Information about the module as a whole is difficult to convey to LLVM's |
| 2451 | subsystems. The LLVM IR isn't sufficient to transmit this information. |
| 2452 | The ``llvm.module.flags`` named metadata exists in order to facilitate |
| 2453 | this. These flags are in the form of key / value pairs — much like a |
| 2454 | dictionary — making it easy for any subsystem who cares about a flag to |
| 2455 | look it up. |
| 2456 | |
| 2457 | The ``llvm.module.flags`` metadata contains a list of metadata triplets. |
| 2458 | Each triplet has the following form: |
| 2459 | |
| 2460 | - The first element is a *behavior* flag, which specifies the behavior |
| 2461 | when two (or more) modules are merged together, and it encounters two |
| 2462 | (or more) metadata with the same ID. The supported behaviors are |
| 2463 | described below. |
| 2464 | - The second element is a metadata string that is a unique ID for the |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2465 | metadata. Each module may only have one flag entry for each unique ID (not |
| 2466 | including entries with the **Require** behavior). |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2467 | - The third element is the value of the flag. |
| 2468 | |
| 2469 | When two (or more) modules are merged together, the resulting |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2470 | ``llvm.module.flags`` metadata is the union of the modules' flags. That is, for |
| 2471 | each unique metadata ID string, there will be exactly one entry in the merged |
| 2472 | modules ``llvm.module.flags`` metadata table, and the value for that entry will |
| 2473 | be determined by the merge behavior flag, as described below. The only exception |
| 2474 | is that entries with the *Require* behavior are always preserved. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2475 | |
| 2476 | The following behaviors are supported: |
| 2477 | |
| 2478 | .. list-table:: |
| 2479 | :header-rows: 1 |
| 2480 | :widths: 10 90 |
| 2481 | |
| 2482 | * - Value |
| 2483 | - Behavior |
| 2484 | |
| 2485 | * - 1 |
| 2486 | - **Error** |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2487 | Emits an error if two values disagree, otherwise the resulting value |
| 2488 | is that of the operands. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2489 | |
| 2490 | * - 2 |
| 2491 | - **Warning** |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2492 | Emits a warning if two values disagree. The result value will be the |
| 2493 | operand for the flag from the first module being linked. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2494 | |
| 2495 | * - 3 |
| 2496 | - **Require** |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2497 | Adds a requirement that another module flag be present and have a |
| 2498 | specified value after linking is performed. The value must be a |
| 2499 | metadata pair, where the first element of the pair is the ID of the |
| 2500 | module flag to be restricted, and the second element of the pair is |
| 2501 | the value the module flag should be restricted to. This behavior can |
| 2502 | be used to restrict the allowable results (via triggering of an |
| 2503 | error) of linking IDs with the **Override** behavior. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2504 | |
| 2505 | * - 4 |
| 2506 | - **Override** |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2507 | Uses the specified value, regardless of the behavior or value of the |
| 2508 | other module. If both modules specify **Override**, but the values |
| 2509 | differ, an error will be emitted. |
| 2510 | |
Daniel Dunbar | 5db391c | 2013-01-16 21:38:56 +0000 | [diff] [blame] | 2511 | * - 5 |
| 2512 | - **Append** |
| 2513 | Appends the two values, which are required to be metadata nodes. |
| 2514 | |
| 2515 | * - 6 |
| 2516 | - **AppendUnique** |
| 2517 | Appends the two values, which are required to be metadata |
| 2518 | nodes. However, duplicate entries in the second list are dropped |
| 2519 | during the append operation. |
| 2520 | |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2521 | It is an error for a particular unique flag ID to have multiple behaviors, |
| 2522 | except in the case of **Require** (which adds restrictions on another metadata |
| 2523 | value) or **Override**. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2524 | |
| 2525 | An example of module flags: |
| 2526 | |
| 2527 | .. code-block:: llvm |
| 2528 | |
| 2529 | !0 = metadata !{ i32 1, metadata !"foo", i32 1 } |
| 2530 | !1 = metadata !{ i32 4, metadata !"bar", i32 37 } |
| 2531 | !2 = metadata !{ i32 2, metadata !"qux", i32 42 } |
| 2532 | !3 = metadata !{ i32 3, metadata !"qux", |
| 2533 | metadata !{ |
| 2534 | metadata !"foo", i32 1 |
| 2535 | } |
| 2536 | } |
| 2537 | !llvm.module.flags = !{ !0, !1, !2, !3 } |
| 2538 | |
| 2539 | - Metadata ``!0`` has the ID ``!"foo"`` and the value '1'. The behavior |
| 2540 | if two or more ``!"foo"`` flags are seen is to emit an error if their |
| 2541 | values are not equal. |
| 2542 | |
| 2543 | - Metadata ``!1`` has the ID ``!"bar"`` and the value '37'. The |
| 2544 | behavior if two or more ``!"bar"`` flags are seen is to use the value |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2545 | '37'. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2546 | |
| 2547 | - Metadata ``!2`` has the ID ``!"qux"`` and the value '42'. The |
| 2548 | behavior if two or more ``!"qux"`` flags are seen is to emit a |
| 2549 | warning if their values are not equal. |
| 2550 | |
| 2551 | - Metadata ``!3`` has the ID ``!"qux"`` and the value: |
| 2552 | |
| 2553 | :: |
| 2554 | |
| 2555 | metadata !{ metadata !"foo", i32 1 } |
| 2556 | |
Daniel Dunbar | 8dd938e | 2013-01-15 01:22:53 +0000 | [diff] [blame] | 2557 | The behavior is to emit an error if the ``llvm.module.flags`` does not |
| 2558 | contain a flag with the ID ``!"foo"`` that has the value '1' after linking is |
| 2559 | performed. |
Sean Silva | f722b00 | 2012-12-07 10:36:55 +0000 | [diff] [blame] | 2560 | |
| 2561 | Objective-C Garbage Collection Module Flags Metadata |
| 2562 | ---------------------------------------------------- |
| 2563 | |
| 2564 | On the Mach-O platform, Objective-C stores metadata about garbage |
| 2565 | collection in a special section called "image info". The metadata |
| 2566 | consists of a version number and a bitmask specifying what types of |
| 2567 | garbage collection are supported (if any) by the file. If two or more |
| 2568 | modules are linked together their garbage collection metadata needs to |
| 2569 | be merged rather than appended together. |
| 2570 | |
| 2571 | The Objective-C garbage collection module flags metadata consists of the |
| 2572 | following key-value pairs: |
| 2573 | |
| 2574 | .. list-table:: |
| 2575 | :header-rows: 1 |
| 2576 | :widths: 30 70 |
| 2577 | |
| 2578 | * - Key |
| 2579 | - Value |
| 2580 | |
| 2581 | * - ``Objective-C Version`` |
| 2582 | - **[Required]** — The Objective-C ABI version. Valid values are 1 and 2. |
| 2583 | |
| 2584 | * - ``Objective-C Image Info Version`` |
| 2585 | - **[Required]** — The version of the image info section. Currently |
| 2586 | always 0. |
| 2587 | |
| 2588 | * - ``Objective-C Image Info Section`` |
| 2589 | - **[Required]** — The section to place the metadata. Valid values are |
| 2590 | ``"__OBJC, __image_info, regular"`` for Objective-C ABI version 1, and |
| 2591 | ``"__DATA,__objc_imageinfo, regular, no_dead_strip"`` for |
| 2592 | Objective-C ABI version 2. |
| 2593 | |
| 2594 | * - ``Objective-C Garbage Collection`` |
| 2595 | - **[Required]** — Specifies whether garbage collection is supported or |
| 2596 | not. Valid values are 0, for no garbage collection, and 2, for garbage |
| 2597 | collection supported. |
| 2598 | |
| 2599 | * - ``Objective-C GC Only`` |
| 2600 | - **[Optional]** — Specifies that only garbage collection is supported. |
| 2601 | If present, its value must be 6. This flag requires that the |
| 2602 | ``Objective-C Garbage Collection`` flag have the value 2. |
| 2603 | |
| 2604 | Some important flag interactions: |
| 2605 | |
| 2606 | - If a module with ``Objective-C Garbage Collection`` set to 0 is |
| 2607 | merged with a module with ``Objective-C Garbage Collection`` set to |
| 2608 | 2, then the resulting module has the |
| 2609 | ``Objective-C Garbage Collection`` flag set to 0. |
| 2610 | - A module with ``Objective-C Garbage Collection`` set to 0 cannot be |
| 2611 | merged with a module with ``Objective-C GC Only`` set to 6. |
| 2612 | |
| 2613 | Intrinsic Global Variables |
| 2614 | ========================== |
| 2615 | |
| 2616 | LLVM has a number of "magic" global variables that contain data that |
| 2617 | affect code generation or other IR semantics. These are documented here. |
| 2618 | All globals of this sort should have a section specified as |
| 2619 | "``llvm.metadata``". This section and all globals that start with |
| 2620 | "``llvm.``" are reserved for use by LLVM. |
| 2621 | |
| 2622 | The '``llvm.used``' Global Variable |
| 2623 | ----------------------------------- |
| 2624 | |
| 2625 | The ``@llvm.used`` global is an array with i8\* element type which has |
| 2626 | :ref:`appending linkage <linkage_appending>`. This array contains a list of |
| 2627 | pointers to global variables and functions which may optionally have a |
| 2628 | pointer cast formed of bitcast or getelementptr. For example, a legal |
| 2629 | use of it is: |
| 2630 | |
| 2631 | .. code-block:: llvm |
| 2632 | |
| 2633 | @X = global i8 4 |
| 2634 | @Y = global i32 123 |
| 2635 | |
| 2636 | @llvm.used = appending global [2 x i8*] [ |
| 2637 | i8* @X, |
| 2638 | i8* bitcast (i32* @Y to i8*) |
| 2639 | ], section "llvm.metadata" |
| 2640 | |
| 2641 | If a global variable appears in the ``@llvm.used`` list, then the |
| 2642 | compiler, assembler, and linker are required to treat the symbol as if |
| 2643 | there is a reference to the global that it cannot see. For example, if a |
| 2644 | variable has internal linkage and no references other than that from the |
| 2645 | ``@llvm.used`` list, it cannot be deleted. This is commonly used to |
| 2646 | represent references from inline asms and other things the compiler |
| 2647 | cannot "see", and corresponds to "``attribute((used))``" in GNU C. |
| 2648 | |
| 2649 | On some targets, the code generator must emit a directive to the |
| 2650 | assembler or object file to prevent the assembler and linker from |
| 2651 | molesting the symbol. |
| 2652 | |
| 2653 | The '``llvm.compiler.used``' Global Variable |
| 2654 | -------------------------------------------- |
| 2655 | |
| 2656 | The ``@llvm.compiler.used`` directive is the same as the ``@llvm.used`` |
| 2657 | directive, except that it only prevents the compiler from touching the |
| 2658 | symbol. On targets that support it, this allows an intelligent linker to |
| 2659 | optimize references to the symbol without being impeded as it would be |
| 2660 | by ``@llvm.used``. |
| 2661 | |
| 2662 | This is a rare construct that should only be used in rare circumstances, |
| 2663 | and should not be exposed to source languages. |
| 2664 | |
| 2665 | The '``llvm.global_ctors``' Global Variable |
| 2666 | ------------------------------------------- |
| 2667 | |
| 2668 | .. code-block:: llvm |
| 2669 | |
| 2670 | %0 = type { i32, void ()* } |
| 2671 | @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor }] |
| 2672 | |
| 2673 | The ``@llvm.global_ctors`` array contains a list of constructor |
| 2674 | functions and associated priorities. The functions referenced by this |
| 2675 | array will be called in ascending order of priority (i.e. lowest first) |
| 2676 | when the module is loaded. The order of functions with the same priority |
| 2677 | is not defined. |
| 2678 | |
| 2679 | The '``llvm.global_dtors``' Global Variable |
| 2680 | ------------------------------------------- |
| 2681 | |
| 2682 | .. code-block:: llvm |
| 2683 | |
| 2684 | %0 = type { i32, void ()* } |
| 2685 | @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor }] |
| 2686 | |
| 2687 | The ``@llvm.global_dtors`` array contains a list of destructor functions |
| 2688 | and associated priorities. The functions referenced by this array will |
| 2689 | be called in descending order of priority (i.e. highest first) when the |
| 2690 | module is loaded. The order of functions with the same priority is not |
| 2691 | defined. |
| 2692 | |
| 2693 | Instruction Reference |
| 2694 | ===================== |
| 2695 | |
| 2696 | The LLVM instruction set consists of several different classifications |
| 2697 | of instructions: :ref:`terminator instructions <terminators>`, :ref:`binary |
| 2698 | instructions <binaryops>`, :ref:`bitwise binary |
| 2699 | instructions <bitwiseops>`, :ref:`memory instructions <memoryops>`, and |
| 2700 | :ref:`other instructions <otherops>`. |
| 2701 | |
| 2702 | .. _terminators: |
| 2703 | |
| 2704 | Terminator Instructions |
| 2705 | ----------------------- |
| 2706 | |
| 2707 | As mentioned :ref:`previously <functionstructure>`, every basic block in a |
| 2708 | program ends with a "Terminator" instruction, which indicates which |
| 2709 | block should be executed after the current block is finished. These |
| 2710 | terminator instructions typically yield a '``void``' value: they produce |
| 2711 | control flow, not values (the one exception being the |
| 2712 | ':ref:`invoke <i_invoke>`' instruction). |
| 2713 | |
| 2714 | The terminator instructions are: ':ref:`ret <i_ret>`', |
| 2715 | ':ref:`br <i_br>`', ':ref:`switch <i_switch>`', |
| 2716 | ':ref:`indirectbr <i_indirectbr>`', ':ref:`invoke <i_invoke>`', |
| 2717 | ':ref:`resume <i_resume>`', and ':ref:`unreachable <i_unreachable>`'. |
| 2718 | |
| 2719 | .. _i_ret: |
| 2720 | |
| 2721 | '``ret``' Instruction |
| 2722 | ^^^^^^^^^^^^^^^^^^^^^ |
| 2723 | |
| 2724 | Syntax: |
| 2725 | """"""" |
| 2726 | |
| 2727 | :: |
| 2728 | |
| 2729 | ret <type> <value> ; Return a value from a non-void function |
| 2730 | ret void ; Return from void function |
| 2731 | |
| 2732 | Overview: |
| 2733 | """"""""" |
| 2734 | |
| 2735 | The '``ret``' instruction is used to return control flow (and optionally |
| 2736 | a value) from a function back to the caller. |
| 2737 | |
| 2738 | There are two forms of the '``ret``' instruction: one that returns a |
| 2739 | value and then causes control flow, and one that just causes control |
| 2740 | flow to occur. |
| 2741 | |
| 2742 | Arguments: |
| 2743 | """""""""" |
| 2744 | |
| 2745 | The '``ret``' instruction optionally accepts a single argument, the |
| 2746 | return value. The type of the return value must be a ':ref:`first |
| 2747 | class <t_firstclass>`' type. |
| 2748 | |
| 2749 | A function is not :ref:`well formed <wellformed>` if it it has a non-void |
| 2750 | return type and contains a '``ret``' instruction with no return value or |
| 2751 | a return value with a type that does not match its type, or if it has a |
| 2752 | void return type and contains a '``ret``' instruction with a return |
| 2753 | value. |
| 2754 | |
| 2755 | Semantics: |
| 2756 | """""""""" |
| 2757 | |
| 2758 | When the '``ret``' instruction is executed, control flow returns back to |
| 2759 | the calling function's context. If the caller is a |
| 2760 | ":ref:`call <i_call>`" instruction, execution continues at the |
| 2761 | instruction after the call. If the caller was an |
| 2762 | ":ref:`invoke <i_invoke>`" instruction, execution continues at the |
| 2763 | beginning of the "normal" destination block. If the instruction returns |
| 2764 | a value, that value shall set the call or invoke instruction's return |
| 2765 | value. |
| 2766 | |
| 2767 | Example: |
| 2768 | """""""" |
| 2769 | |
| 2770 | .. code-block:: llvm |
| 2771 | |
| 2772 | ret i32 5 ; Return an integer value of 5 |
| 2773 | ret void ; Return from a void function |
| 2774 | ret { i32, i8 } { i32 4, i8 2 } ; Return a struct of values 4 and 2 |
| 2775 | |
| 2776 | .. _i_br: |
| 2777 | |
| 2778 | '``br``' Instruction |
| 2779 | ^^^^^^^^^^^^^^^^^^^^ |
| 2780 | |
| 2781 | Syntax: |
| 2782 | """"""" |
| 2783 | |
| 2784 | :: |
| 2785 | |
| 2786 | br i1 <cond>, label <iftrue>, label <iffalse> |
| 2787 | br label <dest> ; Unconditional branch |
| 2788 | |
| 2789 | Overview: |
| 2790 | """"""""" |
| 2791 | |
| 2792 | The '``br``' instruction is used to cause control flow to transfer to a |
| 2793 | different basic block in the current function. There are two forms of |
| 2794 | this instruction, corresponding to a conditional branch and an |
| 2795 | unconditional branch. |
| 2796 | |
| 2797 | Arguments: |
| 2798 | """""""""" |
| 2799 | |
| 2800 | The conditional branch form of the '``br``' instruction takes a single |
| 2801 | '``i1``' value and two '``label``' values. The unconditional form of the |
| 2802 | '``br``' instruction takes a single '``label``' value as a target. |
| 2803 | |
| 2804 | Semantics: |
| 2805 | """""""""" |
| 2806 | |
| 2807 | Upon execution of a conditional '``br``' instruction, the '``i1``' |
| 2808 | argument is evaluated. If the value is ``true``, control flows to the |
| 2809 | '``iftrue``' ``label`` argument. If "cond" is ``false``, control flows |
| 2810 | to the '``iffalse``' ``label`` argument. |
| 2811 | |
| 2812 | Example: |
| 2813 | """""""" |
| 2814 | |
| 2815 | .. code-block:: llvm |
| 2816 | |
| 2817 | Test: |
| 2818 | %cond = icmp eq i32 %a, %b |
| 2819 | br i1 %cond, label %IfEqual, label %IfUnequal |
| 2820 | IfEqual: |
| 2821 | ret i32 1 |
| 2822 | IfUnequal: |
| 2823 | ret i32 0 |
| 2824 | |
| 2825 | .. _i_switch: |
| 2826 | |
| 2827 | '``switch``' Instruction |
| 2828 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 2829 | |
| 2830 | Syntax: |
| 2831 | """"""" |
| 2832 | |
| 2833 | :: |
| 2834 | |
| 2835 | switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ] |
| 2836 | |
| 2837 | Overview: |
| 2838 | """"""""" |
| 2839 | |
| 2840 | The '``switch``' instruction is used to transfer control flow to one of |
| 2841 | several different places. It is a generalization of the '``br``' |
| 2842 | instruction, allowing a branch to occur to one of many possible |
| 2843 | destinations. |
| 2844 | |
| 2845 | Arguments: |
| 2846 | """""""""" |
| 2847 | |
| 2848 | The '``switch``' instruction uses three parameters: an integer |
| 2849 | comparison value '``value``', a default '``label``' destination, and an |
| 2850 | array of pairs of comparison value constants and '``label``'s. The table |
| 2851 | is not allowed to contain duplicate constant entries. |
| 2852 | |
| 2853 | Semantics: |
| 2854 | """""""""" |
| 2855 | |
| 2856 | The ``switch`` instruction specifies a table of values and destinations. |
| 2857 | When the '``switch``' instruction is executed, this table is searched |
| 2858 | for the given value. If the value is found, control flow is transferred |
| 2859 | to the corresponding destination; otherwise, control flow is transferred |
| 2860 | to the default destination. |
| 2861 | |
| 2862 | Implementation: |
| 2863 | """"""""""""""" |
| 2864 | |
| 2865 | Depending on properties of the target machine and the particular |
| 2866 | ``switch`` instruction, this instruction may be code generated in |
| 2867 | different ways. For example, it could be generated as a series of |
| 2868 | chained conditional branches or with a lookup table. |
| 2869 | |
| 2870 | Example: |
| 2871 | """""""" |
| 2872 | |
| 2873 | .. code-block:: llvm |
| 2874 | |
| 2875 | ; Emulate a conditional br instruction |
| 2876 | %Val = zext i1 %value to i32 |
| 2877 | switch i32 %Val, label %truedest [ i32 0, label %falsedest ] |
| 2878 | |
| 2879 | ; Emulate an unconditional br instruction |
| 2880 | switch i32 0, label %dest [ ] |
| 2881 | |
| 2882 | ; Implement a jump table: |
| 2883 | switch i32 %val, label %otherwise [ i32 0, label %onzero |
| 2884 | i32 1, label %onone |
| 2885 | i32 2, label %ontwo ] |
| 2886 | |
| 2887 | .. _i_indirectbr: |
| 2888 | |
| 2889 | '``indirectbr``' Instruction |
| 2890 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 2891 | |
| 2892 | Syntax: |
| 2893 | """"""" |
| 2894 | |
| 2895 | :: |
| 2896 | |
| 2897 | indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ] |
| 2898 | |
| 2899 | Overview: |
| 2900 | """"""""" |
| 2901 | |
| 2902 | The '``indirectbr``' instruction implements an indirect branch to a |
| 2903 | label within the current function, whose address is specified by |
| 2904 | "``address``". Address must be derived from a |
| 2905 | :ref:`blockaddress <blockaddress>` constant. |
| 2906 | |
| 2907 | Arguments: |
| 2908 | """""""""" |
| 2909 | |
| 2910 | The '``address``' argument is the address of the label to jump to. The |
| 2911 | rest of the arguments indicate the full set of possible destinations |
| 2912 | that the address may point to. Blocks are allowed to occur multiple |
| 2913 | times in the destination list, though this isn't particularly useful. |
| 2914 | |
| 2915 | This destination list is required so that dataflow analysis has an |
| 2916 | accurate understanding of the CFG. |
| 2917 | |
| 2918 | Semantics: |
| 2919 | """""""""" |
| 2920 | |
| 2921 | Control transfers to the block specified in the address argument. All |
| 2922 | possible destination blocks must be listed in the label list, otherwise |
| 2923 | this instruction has undefined behavior. This implies that jumps to |
| 2924 | labels defined in other functions have undefined behavior as well. |
| 2925 | |
| 2926 | Implementation: |
| 2927 | """"""""""""""" |
| 2928 | |
| 2929 | This is typically implemented with a jump through a register. |
| 2930 | |
| 2931 | Example: |
| 2932 | """""""" |
| 2933 | |
| 2934 | .. code-block:: llvm |
| 2935 | |
| 2936 | indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ] |
| 2937 | |
| 2938 | .. _i_invoke: |
| 2939 | |
| 2940 | '``invoke``' Instruction |
| 2941 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 2942 | |
| 2943 | Syntax: |
| 2944 | """"""" |
| 2945 | |
| 2946 | :: |
| 2947 | |
| 2948 | <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs] |
| 2949 | to label <normal label> unwind label <exception label> |
| 2950 | |
| 2951 | Overview: |
| 2952 | """"""""" |
| 2953 | |
| 2954 | The '``invoke``' instruction causes control to transfer to a specified |
| 2955 | function, with the possibility of control flow transfer to either the |
| 2956 | '``normal``' label or the '``exception``' label. If the callee function |
| 2957 | returns with the "``ret``" instruction, control flow will return to the |
| 2958 | "normal" label. If the callee (or any indirect callees) returns via the |
| 2959 | ":ref:`resume <i_resume>`" instruction or other exception handling |
| 2960 | mechanism, control is interrupted and continued at the dynamically |
| 2961 | nearest "exception" label. |
| 2962 | |
| 2963 | The '``exception``' label is a `landing |
| 2964 | pad <ExceptionHandling.html#overview>`_ for the exception. As such, |
| 2965 | '``exception``' label is required to have the |
| 2966 | ":ref:`landingpad <i_landingpad>`" instruction, which contains the |
| 2967 | information about the behavior of the program after unwinding happens, |
| 2968 | as its first non-PHI instruction. The restrictions on the |
| 2969 | "``landingpad``" instruction's tightly couples it to the "``invoke``" |
| 2970 | instruction, so that the important information contained within the |
| 2971 | "``landingpad``" instruction can't be lost through normal code motion. |
| 2972 | |
| 2973 | Arguments: |
| 2974 | """""""""" |
| 2975 | |
| 2976 | This instruction requires several arguments: |
| 2977 | |
| 2978 | #. The optional "cconv" marker indicates which :ref:`calling |
| 2979 | convention <callingconv>` the call should use. If none is |
| 2980 | specified, the call defaults to using C calling conventions. |
| 2981 | #. The optional :ref:`Parameter Attributes <paramattrs>` list for return |
| 2982 | values. Only '``zeroext``', '``signext``', and '``inreg``' attributes |
| 2983 | are valid here. |
| 2984 | #. '``ptr to function ty``': shall be the signature of the pointer to |
| 2985 | function value being invoked. In most cases, this is a direct |
| 2986 | function invocation, but indirect ``invoke``'s are just as possible, |
| 2987 | branching off an arbitrary pointer to function value. |
| 2988 | #. '``function ptr val``': An LLVM value containing a pointer to a |
| 2989 | function to be invoked. |
| 2990 | #. '``function args``': argument list whose types match the function |
| 2991 | signature argument types and parameter attributes. All arguments must |
| 2992 | be of :ref:`first class <t_firstclass>` type. If the function signature |
| 2993 | indicates the function accepts a variable number of arguments, the |
| 2994 | extra arguments can be specified. |
| 2995 | #. '``normal label``': the label reached when the called function |
| 2996 | executes a '``ret``' instruction. |
| 2997 | #. '``exception label``': the label reached when a callee returns via |
| 2998 | the :ref:`resume <i_resume>` instruction or other exception handling |
| 2999 | mechanism. |
| 3000 | #. The optional :ref:`function attributes <fnattrs>` list. Only |
| 3001 | '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``' |
| 3002 | attributes are valid here. |
| 3003 | |
| 3004 | Semantics: |
| 3005 | """""""""" |
| 3006 | |
| 3007 | This instruction is designed to operate as a standard '``call``' |
| 3008 | instruction in most regards. The primary difference is that it |
| 3009 | establishes an association with a label, which is used by the runtime |
| 3010 | library to unwind the stack. |
| 3011 | |
| 3012 | This instruction is used in languages with destructors to ensure that |
| 3013 | proper cleanup is performed in the case of either a ``longjmp`` or a |
| 3014 | thrown exception. Additionally, this is important for implementation of |
| 3015 | '``catch``' clauses in high-level languages that support them. |
| 3016 | |
| 3017 | For the purposes of the SSA form, the definition of the value returned |
| 3018 | by the '``invoke``' instruction is deemed to occur on the edge from the |
| 3019 | current block to the "normal" label. If the callee unwinds then no |
| 3020 | return value is available. |
| 3021 | |
| 3022 | Example: |
| 3023 | """""""" |
| 3024 | |
| 3025 | .. code-block:: llvm |
| 3026 | |
| 3027 | %retval = invoke i32 @Test(i32 15) to label %Continue |
| 3028 | unwind label %TestCleanup ; {i32}:retval set |
| 3029 | %retval = invoke coldcc i32 %Testfnptr(i32 15) to label %Continue |
| 3030 | unwind label %TestCleanup ; {i32}:retval set |
| 3031 | |
| 3032 | .. _i_resume: |
| 3033 | |
| 3034 | '``resume``' Instruction |
| 3035 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 3036 | |
| 3037 | Syntax: |
| 3038 | """"""" |
| 3039 | |
| 3040 | :: |
| 3041 | |
| 3042 | resume <type> <value> |
| 3043 | |
| 3044 | Overview: |
| 3045 | """"""""" |
| 3046 | |
| 3047 | The '``resume``' instruction is a terminator instruction that has no |
| 3048 | successors. |
| 3049 | |
| 3050 | Arguments: |
| 3051 | """""""""" |
| 3052 | |
| 3053 | The '``resume``' instruction requires one argument, which must have the |
| 3054 | same type as the result of any '``landingpad``' instruction in the same |
| 3055 | function. |
| 3056 | |
| 3057 | Semantics: |
| 3058 | """""""""" |
| 3059 | |
| 3060 | The '``resume``' instruction resumes propagation of an existing |
| 3061 | (in-flight) exception whose unwinding was interrupted with a |
| 3062 | :ref:`landingpad <i_landingpad>` instruction. |
| 3063 | |
| 3064 | Example: |
| 3065 | """""""" |
| 3066 | |
| 3067 | .. code-block:: llvm |
| 3068 | |
| 3069 | resume { i8*, i32 } %exn |
| 3070 | |
| 3071 | .. _i_unreachable: |
| 3072 | |
| 3073 | '``unreachable``' Instruction |
| 3074 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 3075 | |
| 3076 | Syntax: |
| 3077 | """"""" |
| 3078 | |
| 3079 | :: |
| 3080 | |
| 3081 | unreachable |
| 3082 | |
| 3083 | Overview: |
| 3084 | """"""""" |
| 3085 | |
| 3086 | The '``unreachable``' instruction has no defined semantics. This |
| 3087 | instruction is used to inform the optimizer that a particular portion of |
| 3088 | the code is not reachable. This can be used to indicate that the code |
| 3089 | after a no-return function cannot be reached, and other facts. |
| 3090 | |
| 3091 | Semantics: |
| 3092 | """""""""" |
| 3093 | |
| 3094 | The '``unreachable``' instruction has no defined semantics. |
| 3095 | |
| 3096 | .. _binaryops: |
| 3097 | |
| 3098 | Binary Operations |
| 3099 | ----------------- |
| 3100 | |
| 3101 | Binary operators are used to do most of the computation in a program. |
| 3102 | They require two operands of the same type, execute an operation on |
| 3103 | them, and produce a single value. The operands might represent multiple |
| 3104 | data, as is the case with the :ref:`vector <t_vector>` data type. The |
| 3105 | result value has the same type as its operands. |
| 3106 | |
| 3107 | There are several different binary operators: |
| 3108 | |
| 3109 | .. _i_add: |
| 3110 | |
| 3111 | '``add``' Instruction |
| 3112 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3113 | |
| 3114 | Syntax: |
| 3115 | """"""" |
| 3116 | |
| 3117 | :: |
| 3118 | |
| 3119 | <result> = add <ty> <op1>, <op2> ; yields {ty}:result |
| 3120 | <result> = add nuw <ty> <op1>, <op2> ; yields {ty}:result |
| 3121 | <result> = add nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3122 | <result> = add nuw nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3123 | |
| 3124 | Overview: |
| 3125 | """"""""" |
| 3126 | |
| 3127 | The '``add``' instruction returns the sum of its two operands. |
| 3128 | |
| 3129 | Arguments: |
| 3130 | """""""""" |
| 3131 | |
| 3132 | The two arguments to the '``add``' instruction must be |
| 3133 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3134 | arguments must have identical types. |
| 3135 | |
| 3136 | Semantics: |
| 3137 | """""""""" |
| 3138 | |
| 3139 | The value produced is the integer sum of the two operands. |
| 3140 | |
| 3141 | If the sum has unsigned overflow, the result returned is the |
| 3142 | mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of |
| 3143 | the result. |
| 3144 | |
| 3145 | Because LLVM integers use a two's complement representation, this |
| 3146 | instruction is appropriate for both signed and unsigned integers. |
| 3147 | |
| 3148 | ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap", |
| 3149 | respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the |
| 3150 | result value of the ``add`` is a :ref:`poison value <poisonvalues>` if |
| 3151 | unsigned and/or signed overflow, respectively, occurs. |
| 3152 | |
| 3153 | Example: |
| 3154 | """""""" |
| 3155 | |
| 3156 | .. code-block:: llvm |
| 3157 | |
| 3158 | <result> = add i32 4, %var ; yields {i32}:result = 4 + %var |
| 3159 | |
| 3160 | .. _i_fadd: |
| 3161 | |
| 3162 | '``fadd``' Instruction |
| 3163 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3164 | |
| 3165 | Syntax: |
| 3166 | """"""" |
| 3167 | |
| 3168 | :: |
| 3169 | |
| 3170 | <result> = fadd [fast-math flags]* <ty> <op1>, <op2> ; yields {ty}:result |
| 3171 | |
| 3172 | Overview: |
| 3173 | """"""""" |
| 3174 | |
| 3175 | The '``fadd``' instruction returns the sum of its two operands. |
| 3176 | |
| 3177 | Arguments: |
| 3178 | """""""""" |
| 3179 | |
| 3180 | The two arguments to the '``fadd``' instruction must be :ref:`floating |
| 3181 | point <t_floating>` or :ref:`vector <t_vector>` of floating point values. |
| 3182 | Both arguments must have identical types. |
| 3183 | |
| 3184 | Semantics: |
| 3185 | """""""""" |
| 3186 | |
| 3187 | The value produced is the floating point sum of the two operands. This |
| 3188 | instruction can also take any number of :ref:`fast-math flags <fastmath>`, |
| 3189 | which are optimization hints to enable otherwise unsafe floating point |
| 3190 | optimizations: |
| 3191 | |
| 3192 | Example: |
| 3193 | """""""" |
| 3194 | |
| 3195 | .. code-block:: llvm |
| 3196 | |
| 3197 | <result> = fadd float 4.0, %var ; yields {float}:result = 4.0 + %var |
| 3198 | |
| 3199 | '``sub``' Instruction |
| 3200 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3201 | |
| 3202 | Syntax: |
| 3203 | """"""" |
| 3204 | |
| 3205 | :: |
| 3206 | |
| 3207 | <result> = sub <ty> <op1>, <op2> ; yields {ty}:result |
| 3208 | <result> = sub nuw <ty> <op1>, <op2> ; yields {ty}:result |
| 3209 | <result> = sub nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3210 | <result> = sub nuw nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3211 | |
| 3212 | Overview: |
| 3213 | """"""""" |
| 3214 | |
| 3215 | The '``sub``' instruction returns the difference of its two operands. |
| 3216 | |
| 3217 | Note that the '``sub``' instruction is used to represent the '``neg``' |
| 3218 | instruction present in most other intermediate representations. |
| 3219 | |
| 3220 | Arguments: |
| 3221 | """""""""" |
| 3222 | |
| 3223 | The two arguments to the '``sub``' instruction must be |
| 3224 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3225 | arguments must have identical types. |
| 3226 | |
| 3227 | Semantics: |
| 3228 | """""""""" |
| 3229 | |
| 3230 | The value produced is the integer difference of the two operands. |
| 3231 | |
| 3232 | If the difference has unsigned overflow, the result returned is the |
| 3233 | mathematical result modulo 2\ :sup:`n`\ , where n is the bit width of |
| 3234 | the result. |
| 3235 | |
| 3236 | Because LLVM integers use a two's complement representation, this |
| 3237 | instruction is appropriate for both signed and unsigned integers. |
| 3238 | |
| 3239 | ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap", |
| 3240 | respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the |
| 3241 | result value of the ``sub`` is a :ref:`poison value <poisonvalues>` if |
| 3242 | unsigned and/or signed overflow, respectively, occurs. |
| 3243 | |
| 3244 | Example: |
| 3245 | """""""" |
| 3246 | |
| 3247 | .. code-block:: llvm |
| 3248 | |
| 3249 | <result> = sub i32 4, %var ; yields {i32}:result = 4 - %var |
| 3250 | <result> = sub i32 0, %val ; yields {i32}:result = -%var |
| 3251 | |
| 3252 | .. _i_fsub: |
| 3253 | |
| 3254 | '``fsub``' Instruction |
| 3255 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3256 | |
| 3257 | Syntax: |
| 3258 | """"""" |
| 3259 | |
| 3260 | :: |
| 3261 | |
| 3262 | <result> = fsub [fast-math flags]* <ty> <op1>, <op2> ; yields {ty}:result |
| 3263 | |
| 3264 | Overview: |
| 3265 | """"""""" |
| 3266 | |
| 3267 | The '``fsub``' instruction returns the difference of its two operands. |
| 3268 | |
| 3269 | Note that the '``fsub``' instruction is used to represent the '``fneg``' |
| 3270 | instruction present in most other intermediate representations. |
| 3271 | |
| 3272 | Arguments: |
| 3273 | """""""""" |
| 3274 | |
| 3275 | The two arguments to the '``fsub``' instruction must be :ref:`floating |
| 3276 | point <t_floating>` or :ref:`vector <t_vector>` of floating point values. |
| 3277 | Both arguments must have identical types. |
| 3278 | |
| 3279 | Semantics: |
| 3280 | """""""""" |
| 3281 | |
| 3282 | The value produced is the floating point difference of the two operands. |
| 3283 | This instruction can also take any number of :ref:`fast-math |
| 3284 | flags <fastmath>`, which are optimization hints to enable otherwise |
| 3285 | unsafe floating point optimizations: |
| 3286 | |
| 3287 | Example: |
| 3288 | """""""" |
| 3289 | |
| 3290 | .. code-block:: llvm |
| 3291 | |
| 3292 | <result> = fsub float 4.0, %var ; yields {float}:result = 4.0 - %var |
| 3293 | <result> = fsub float -0.0, %val ; yields {float}:result = -%var |
| 3294 | |
| 3295 | '``mul``' Instruction |
| 3296 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3297 | |
| 3298 | Syntax: |
| 3299 | """"""" |
| 3300 | |
| 3301 | :: |
| 3302 | |
| 3303 | <result> = mul <ty> <op1>, <op2> ; yields {ty}:result |
| 3304 | <result> = mul nuw <ty> <op1>, <op2> ; yields {ty}:result |
| 3305 | <result> = mul nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3306 | <result> = mul nuw nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3307 | |
| 3308 | Overview: |
| 3309 | """"""""" |
| 3310 | |
| 3311 | The '``mul``' instruction returns the product of its two operands. |
| 3312 | |
| 3313 | Arguments: |
| 3314 | """""""""" |
| 3315 | |
| 3316 | The two arguments to the '``mul``' instruction must be |
| 3317 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3318 | arguments must have identical types. |
| 3319 | |
| 3320 | Semantics: |
| 3321 | """""""""" |
| 3322 | |
| 3323 | The value produced is the integer product of the two operands. |
| 3324 | |
| 3325 | If the result of the multiplication has unsigned overflow, the result |
| 3326 | returned is the mathematical result modulo 2\ :sup:`n`\ , where n is the |
| 3327 | bit width of the result. |
| 3328 | |
| 3329 | Because LLVM integers use a two's complement representation, and the |
| 3330 | result is the same width as the operands, this instruction returns the |
| 3331 | correct result for both signed and unsigned integers. If a full product |
| 3332 | (e.g. ``i32`` * ``i32`` -> ``i64``) is needed, the operands should be |
| 3333 | sign-extended or zero-extended as appropriate to the width of the full |
| 3334 | product. |
| 3335 | |
| 3336 | ``nuw`` and ``nsw`` stand for "No Unsigned Wrap" and "No Signed Wrap", |
| 3337 | respectively. If the ``nuw`` and/or ``nsw`` keywords are present, the |
| 3338 | result value of the ``mul`` is a :ref:`poison value <poisonvalues>` if |
| 3339 | unsigned and/or signed overflow, respectively, occurs. |
| 3340 | |
| 3341 | Example: |
| 3342 | """""""" |
| 3343 | |
| 3344 | .. code-block:: llvm |
| 3345 | |
| 3346 | <result> = mul i32 4, %var ; yields {i32}:result = 4 * %var |
| 3347 | |
| 3348 | .. _i_fmul: |
| 3349 | |
| 3350 | '``fmul``' Instruction |
| 3351 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3352 | |
| 3353 | Syntax: |
| 3354 | """"""" |
| 3355 | |
| 3356 | :: |
| 3357 | |
| 3358 | <result> = fmul [fast-math flags]* <ty> <op1>, <op2> ; yields {ty}:result |
| 3359 | |
| 3360 | Overview: |
| 3361 | """"""""" |
| 3362 | |
| 3363 | The '``fmul``' instruction returns the product of its two operands. |
| 3364 | |
| 3365 | Arguments: |
| 3366 | """""""""" |
| 3367 | |
| 3368 | The two arguments to the '``fmul``' instruction must be :ref:`floating |
| 3369 | point <t_floating>` or :ref:`vector <t_vector>` of floating point values. |
| 3370 | Both arguments must have identical types. |
| 3371 | |
| 3372 | Semantics: |
| 3373 | """""""""" |
| 3374 | |
| 3375 | The value produced is the floating point product of the two operands. |
| 3376 | This instruction can also take any number of :ref:`fast-math |
| 3377 | flags <fastmath>`, which are optimization hints to enable otherwise |
| 3378 | unsafe floating point optimizations: |
| 3379 | |
| 3380 | Example: |
| 3381 | """""""" |
| 3382 | |
| 3383 | .. code-block:: llvm |
| 3384 | |
| 3385 | <result> = fmul float 4.0, %var ; yields {float}:result = 4.0 * %var |
| 3386 | |
| 3387 | '``udiv``' Instruction |
| 3388 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3389 | |
| 3390 | Syntax: |
| 3391 | """"""" |
| 3392 | |
| 3393 | :: |
| 3394 | |
| 3395 | <result> = udiv <ty> <op1>, <op2> ; yields {ty}:result |
| 3396 | <result> = udiv exact <ty> <op1>, <op2> ; yields {ty}:result |
| 3397 | |
| 3398 | Overview: |
| 3399 | """"""""" |
| 3400 | |
| 3401 | The '``udiv``' instruction returns the quotient of its two operands. |
| 3402 | |
| 3403 | Arguments: |
| 3404 | """""""""" |
| 3405 | |
| 3406 | The two arguments to the '``udiv``' instruction must be |
| 3407 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3408 | arguments must have identical types. |
| 3409 | |
| 3410 | Semantics: |
| 3411 | """""""""" |
| 3412 | |
| 3413 | The value produced is the unsigned integer quotient of the two operands. |
| 3414 | |
| 3415 | Note that unsigned integer division and signed integer division are |
| 3416 | distinct operations; for signed integer division, use '``sdiv``'. |
| 3417 | |
| 3418 | Division by zero leads to undefined behavior. |
| 3419 | |
| 3420 | If the ``exact`` keyword is present, the result value of the ``udiv`` is |
| 3421 | a :ref:`poison value <poisonvalues>` if %op1 is not a multiple of %op2 (as |
| 3422 | such, "((a udiv exact b) mul b) == a"). |
| 3423 | |
| 3424 | Example: |
| 3425 | """""""" |
| 3426 | |
| 3427 | .. code-block:: llvm |
| 3428 | |
| 3429 | <result> = udiv i32 4, %var ; yields {i32}:result = 4 / %var |
| 3430 | |
| 3431 | '``sdiv``' Instruction |
| 3432 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3433 | |
| 3434 | Syntax: |
| 3435 | """"""" |
| 3436 | |
| 3437 | :: |
| 3438 | |
| 3439 | <result> = sdiv <ty> <op1>, <op2> ; yields {ty}:result |
| 3440 | <result> = sdiv exact <ty> <op1>, <op2> ; yields {ty}:result |
| 3441 | |
| 3442 | Overview: |
| 3443 | """"""""" |
| 3444 | |
| 3445 | The '``sdiv``' instruction returns the quotient of its two operands. |
| 3446 | |
| 3447 | Arguments: |
| 3448 | """""""""" |
| 3449 | |
| 3450 | The two arguments to the '``sdiv``' instruction must be |
| 3451 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3452 | arguments must have identical types. |
| 3453 | |
| 3454 | Semantics: |
| 3455 | """""""""" |
| 3456 | |
| 3457 | The value produced is the signed integer quotient of the two operands |
| 3458 | rounded towards zero. |
| 3459 | |
| 3460 | Note that signed integer division and unsigned integer division are |
| 3461 | distinct operations; for unsigned integer division, use '``udiv``'. |
| 3462 | |
| 3463 | Division by zero leads to undefined behavior. Overflow also leads to |
| 3464 | undefined behavior; this is a rare case, but can occur, for example, by |
| 3465 | doing a 32-bit division of -2147483648 by -1. |
| 3466 | |
| 3467 | If the ``exact`` keyword is present, the result value of the ``sdiv`` is |
| 3468 | a :ref:`poison value <poisonvalues>` if the result would be rounded. |
| 3469 | |
| 3470 | Example: |
| 3471 | """""""" |
| 3472 | |
| 3473 | .. code-block:: llvm |
| 3474 | |
| 3475 | <result> = sdiv i32 4, %var ; yields {i32}:result = 4 / %var |
| 3476 | |
| 3477 | .. _i_fdiv: |
| 3478 | |
| 3479 | '``fdiv``' Instruction |
| 3480 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3481 | |
| 3482 | Syntax: |
| 3483 | """"""" |
| 3484 | |
| 3485 | :: |
| 3486 | |
| 3487 | <result> = fdiv [fast-math flags]* <ty> <op1>, <op2> ; yields {ty}:result |
| 3488 | |
| 3489 | Overview: |
| 3490 | """"""""" |
| 3491 | |
| 3492 | The '``fdiv``' instruction returns the quotient of its two operands. |
| 3493 | |
| 3494 | Arguments: |
| 3495 | """""""""" |
| 3496 | |
| 3497 | The two arguments to the '``fdiv``' instruction must be :ref:`floating |
| 3498 | point <t_floating>` or :ref:`vector <t_vector>` of floating point values. |
| 3499 | Both arguments must have identical types. |
| 3500 | |
| 3501 | Semantics: |
| 3502 | """""""""" |
| 3503 | |
| 3504 | The value produced is the floating point quotient of the two operands. |
| 3505 | This instruction can also take any number of :ref:`fast-math |
| 3506 | flags <fastmath>`, which are optimization hints to enable otherwise |
| 3507 | unsafe floating point optimizations: |
| 3508 | |
| 3509 | Example: |
| 3510 | """""""" |
| 3511 | |
| 3512 | .. code-block:: llvm |
| 3513 | |
| 3514 | <result> = fdiv float 4.0, %var ; yields {float}:result = 4.0 / %var |
| 3515 | |
| 3516 | '``urem``' Instruction |
| 3517 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3518 | |
| 3519 | Syntax: |
| 3520 | """"""" |
| 3521 | |
| 3522 | :: |
| 3523 | |
| 3524 | <result> = urem <ty> <op1>, <op2> ; yields {ty}:result |
| 3525 | |
| 3526 | Overview: |
| 3527 | """"""""" |
| 3528 | |
| 3529 | The '``urem``' instruction returns the remainder from the unsigned |
| 3530 | division of its two arguments. |
| 3531 | |
| 3532 | Arguments: |
| 3533 | """""""""" |
| 3534 | |
| 3535 | The two arguments to the '``urem``' instruction must be |
| 3536 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3537 | arguments must have identical types. |
| 3538 | |
| 3539 | Semantics: |
| 3540 | """""""""" |
| 3541 | |
| 3542 | This instruction returns the unsigned integer *remainder* of a division. |
| 3543 | This instruction always performs an unsigned division to get the |
| 3544 | remainder. |
| 3545 | |
| 3546 | Note that unsigned integer remainder and signed integer remainder are |
| 3547 | distinct operations; for signed integer remainder, use '``srem``'. |
| 3548 | |
| 3549 | Taking the remainder of a division by zero leads to undefined behavior. |
| 3550 | |
| 3551 | Example: |
| 3552 | """""""" |
| 3553 | |
| 3554 | .. code-block:: llvm |
| 3555 | |
| 3556 | <result> = urem i32 4, %var ; yields {i32}:result = 4 % %var |
| 3557 | |
| 3558 | '``srem``' Instruction |
| 3559 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3560 | |
| 3561 | Syntax: |
| 3562 | """"""" |
| 3563 | |
| 3564 | :: |
| 3565 | |
| 3566 | <result> = srem <ty> <op1>, <op2> ; yields {ty}:result |
| 3567 | |
| 3568 | Overview: |
| 3569 | """"""""" |
| 3570 | |
| 3571 | The '``srem``' instruction returns the remainder from the signed |
| 3572 | division of its two operands. This instruction can also take |
| 3573 | :ref:`vector <t_vector>` versions of the values in which case the elements |
| 3574 | must be integers. |
| 3575 | |
| 3576 | Arguments: |
| 3577 | """""""""" |
| 3578 | |
| 3579 | The two arguments to the '``srem``' instruction must be |
| 3580 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3581 | arguments must have identical types. |
| 3582 | |
| 3583 | Semantics: |
| 3584 | """""""""" |
| 3585 | |
| 3586 | This instruction returns the *remainder* of a division (where the result |
| 3587 | is either zero or has the same sign as the dividend, ``op1``), not the |
| 3588 | *modulo* operator (where the result is either zero or has the same sign |
| 3589 | as the divisor, ``op2``) of a value. For more information about the |
| 3590 | difference, see `The Math |
| 3591 | Forum <http://mathforum.org/dr.math/problems/anne.4.28.99.html>`_. For a |
| 3592 | table of how this is implemented in various languages, please see |
| 3593 | `Wikipedia: modulo |
| 3594 | operation <http://en.wikipedia.org/wiki/Modulo_operation>`_. |
| 3595 | |
| 3596 | Note that signed integer remainder and unsigned integer remainder are |
| 3597 | distinct operations; for unsigned integer remainder, use '``urem``'. |
| 3598 | |
| 3599 | Taking the remainder of a division by zero leads to undefined behavior. |
| 3600 | Overflow also leads to undefined behavior; this is a rare case, but can |
| 3601 | occur, for example, by taking the remainder of a 32-bit division of |
| 3602 | -2147483648 by -1. (The remainder doesn't actually overflow, but this |
| 3603 | rule lets srem be implemented using instructions that return both the |
| 3604 | result of the division and the remainder.) |
| 3605 | |
| 3606 | Example: |
| 3607 | """""""" |
| 3608 | |
| 3609 | .. code-block:: llvm |
| 3610 | |
| 3611 | <result> = srem i32 4, %var ; yields {i32}:result = 4 % %var |
| 3612 | |
| 3613 | .. _i_frem: |
| 3614 | |
| 3615 | '``frem``' Instruction |
| 3616 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3617 | |
| 3618 | Syntax: |
| 3619 | """"""" |
| 3620 | |
| 3621 | :: |
| 3622 | |
| 3623 | <result> = frem [fast-math flags]* <ty> <op1>, <op2> ; yields {ty}:result |
| 3624 | |
| 3625 | Overview: |
| 3626 | """"""""" |
| 3627 | |
| 3628 | The '``frem``' instruction returns the remainder from the division of |
| 3629 | its two operands. |
| 3630 | |
| 3631 | Arguments: |
| 3632 | """""""""" |
| 3633 | |
| 3634 | The two arguments to the '``frem``' instruction must be :ref:`floating |
| 3635 | point <t_floating>` or :ref:`vector <t_vector>` of floating point values. |
| 3636 | Both arguments must have identical types. |
| 3637 | |
| 3638 | Semantics: |
| 3639 | """""""""" |
| 3640 | |
| 3641 | This instruction returns the *remainder* of a division. The remainder |
| 3642 | has the same sign as the dividend. This instruction can also take any |
| 3643 | number of :ref:`fast-math flags <fastmath>`, which are optimization hints |
| 3644 | to enable otherwise unsafe floating point optimizations: |
| 3645 | |
| 3646 | Example: |
| 3647 | """""""" |
| 3648 | |
| 3649 | .. code-block:: llvm |
| 3650 | |
| 3651 | <result> = frem float 4.0, %var ; yields {float}:result = 4.0 % %var |
| 3652 | |
| 3653 | .. _bitwiseops: |
| 3654 | |
| 3655 | Bitwise Binary Operations |
| 3656 | ------------------------- |
| 3657 | |
| 3658 | Bitwise binary operators are used to do various forms of bit-twiddling |
| 3659 | in a program. They are generally very efficient instructions and can |
| 3660 | commonly be strength reduced from other instructions. They require two |
| 3661 | operands of the same type, execute an operation on them, and produce a |
| 3662 | single value. The resulting value is the same type as its operands. |
| 3663 | |
| 3664 | '``shl``' Instruction |
| 3665 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3666 | |
| 3667 | Syntax: |
| 3668 | """"""" |
| 3669 | |
| 3670 | :: |
| 3671 | |
| 3672 | <result> = shl <ty> <op1>, <op2> ; yields {ty}:result |
| 3673 | <result> = shl nuw <ty> <op1>, <op2> ; yields {ty}:result |
| 3674 | <result> = shl nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3675 | <result> = shl nuw nsw <ty> <op1>, <op2> ; yields {ty}:result |
| 3676 | |
| 3677 | Overview: |
| 3678 | """"""""" |
| 3679 | |
| 3680 | The '``shl``' instruction returns the first operand shifted to the left |
| 3681 | a specified number of bits. |
| 3682 | |
| 3683 | Arguments: |
| 3684 | """""""""" |
| 3685 | |
| 3686 | Both arguments to the '``shl``' instruction must be the same |
| 3687 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type. |
| 3688 | '``op2``' is treated as an unsigned value. |
| 3689 | |
| 3690 | Semantics: |
| 3691 | """""""""" |
| 3692 | |
| 3693 | The value produced is ``op1`` \* 2\ :sup:`op2` mod 2\ :sup:`n`, |
| 3694 | where ``n`` is the width of the result. If ``op2`` is (statically or |
| 3695 | dynamically) negative or equal to or larger than the number of bits in |
| 3696 | ``op1``, the result is undefined. If the arguments are vectors, each |
| 3697 | vector element of ``op1`` is shifted by the corresponding shift amount |
| 3698 | in ``op2``. |
| 3699 | |
| 3700 | If the ``nuw`` keyword is present, then the shift produces a :ref:`poison |
| 3701 | value <poisonvalues>` if it shifts out any non-zero bits. If the |
| 3702 | ``nsw`` keyword is present, then the shift produces a :ref:`poison |
| 3703 | value <poisonvalues>` if it shifts out any bits that disagree with the |
| 3704 | resultant sign bit. As such, NUW/NSW have the same semantics as they |
| 3705 | would if the shift were expressed as a mul instruction with the same |
| 3706 | nsw/nuw bits in (mul %op1, (shl 1, %op2)). |
| 3707 | |
| 3708 | Example: |
| 3709 | """""""" |
| 3710 | |
| 3711 | .. code-block:: llvm |
| 3712 | |
| 3713 | <result> = shl i32 4, %var ; yields {i32}: 4 << %var |
| 3714 | <result> = shl i32 4, 2 ; yields {i32}: 16 |
| 3715 | <result> = shl i32 1, 10 ; yields {i32}: 1024 |
| 3716 | <result> = shl i32 1, 32 ; undefined |
| 3717 | <result> = shl <2 x i32> < i32 1, i32 1>, < i32 1, i32 2> ; yields: result=<2 x i32> < i32 2, i32 4> |
| 3718 | |
| 3719 | '``lshr``' Instruction |
| 3720 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3721 | |
| 3722 | Syntax: |
| 3723 | """"""" |
| 3724 | |
| 3725 | :: |
| 3726 | |
| 3727 | <result> = lshr <ty> <op1>, <op2> ; yields {ty}:result |
| 3728 | <result> = lshr exact <ty> <op1>, <op2> ; yields {ty}:result |
| 3729 | |
| 3730 | Overview: |
| 3731 | """"""""" |
| 3732 | |
| 3733 | The '``lshr``' instruction (logical shift right) returns the first |
| 3734 | operand shifted to the right a specified number of bits with zero fill. |
| 3735 | |
| 3736 | Arguments: |
| 3737 | """""""""" |
| 3738 | |
| 3739 | Both arguments to the '``lshr``' instruction must be the same |
| 3740 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type. |
| 3741 | '``op2``' is treated as an unsigned value. |
| 3742 | |
| 3743 | Semantics: |
| 3744 | """""""""" |
| 3745 | |
| 3746 | This instruction always performs a logical shift right operation. The |
| 3747 | most significant bits of the result will be filled with zero bits after |
| 3748 | the shift. If ``op2`` is (statically or dynamically) equal to or larger |
| 3749 | than the number of bits in ``op1``, the result is undefined. If the |
| 3750 | arguments are vectors, each vector element of ``op1`` is shifted by the |
| 3751 | corresponding shift amount in ``op2``. |
| 3752 | |
| 3753 | If the ``exact`` keyword is present, the result value of the ``lshr`` is |
| 3754 | a :ref:`poison value <poisonvalues>` if any of the bits shifted out are |
| 3755 | non-zero. |
| 3756 | |
| 3757 | Example: |
| 3758 | """""""" |
| 3759 | |
| 3760 | .. code-block:: llvm |
| 3761 | |
| 3762 | <result> = lshr i32 4, 1 ; yields {i32}:result = 2 |
| 3763 | <result> = lshr i32 4, 2 ; yields {i32}:result = 1 |
| 3764 | <result> = lshr i8 4, 3 ; yields {i8}:result = 0 |
| 3765 | <result> = lshr i8 -2, 1 ; yields {i8}:result = 0x7FFFFFFF |
| 3766 | <result> = lshr i32 1, 32 ; undefined |
| 3767 | <result> = lshr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 2> ; yields: result=<2 x i32> < i32 0x7FFFFFFF, i32 1> |
| 3768 | |
| 3769 | '``ashr``' Instruction |
| 3770 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 3771 | |
| 3772 | Syntax: |
| 3773 | """"""" |
| 3774 | |
| 3775 | :: |
| 3776 | |
| 3777 | <result> = ashr <ty> <op1>, <op2> ; yields {ty}:result |
| 3778 | <result> = ashr exact <ty> <op1>, <op2> ; yields {ty}:result |
| 3779 | |
| 3780 | Overview: |
| 3781 | """"""""" |
| 3782 | |
| 3783 | The '``ashr``' instruction (arithmetic shift right) returns the first |
| 3784 | operand shifted to the right a specified number of bits with sign |
| 3785 | extension. |
| 3786 | |
| 3787 | Arguments: |
| 3788 | """""""""" |
| 3789 | |
| 3790 | Both arguments to the '``ashr``' instruction must be the same |
| 3791 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer type. |
| 3792 | '``op2``' is treated as an unsigned value. |
| 3793 | |
| 3794 | Semantics: |
| 3795 | """""""""" |
| 3796 | |
| 3797 | This instruction always performs an arithmetic shift right operation, |
| 3798 | The most significant bits of the result will be filled with the sign bit |
| 3799 | of ``op1``. If ``op2`` is (statically or dynamically) equal to or larger |
| 3800 | than the number of bits in ``op1``, the result is undefined. If the |
| 3801 | arguments are vectors, each vector element of ``op1`` is shifted by the |
| 3802 | corresponding shift amount in ``op2``. |
| 3803 | |
| 3804 | If the ``exact`` keyword is present, the result value of the ``ashr`` is |
| 3805 | a :ref:`poison value <poisonvalues>` if any of the bits shifted out are |
| 3806 | non-zero. |
| 3807 | |
| 3808 | Example: |
| 3809 | """""""" |
| 3810 | |
| 3811 | .. code-block:: llvm |
| 3812 | |
| 3813 | <result> = ashr i32 4, 1 ; yields {i32}:result = 2 |
| 3814 | <result> = ashr i32 4, 2 ; yields {i32}:result = 1 |
| 3815 | <result> = ashr i8 4, 3 ; yields {i8}:result = 0 |
| 3816 | <result> = ashr i8 -2, 1 ; yields {i8}:result = -1 |
| 3817 | <result> = ashr i32 1, 32 ; undefined |
| 3818 | <result> = ashr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 3> ; yields: result=<2 x i32> < i32 -1, i32 0> |
| 3819 | |
| 3820 | '``and``' Instruction |
| 3821 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3822 | |
| 3823 | Syntax: |
| 3824 | """"""" |
| 3825 | |
| 3826 | :: |
| 3827 | |
| 3828 | <result> = and <ty> <op1>, <op2> ; yields {ty}:result |
| 3829 | |
| 3830 | Overview: |
| 3831 | """"""""" |
| 3832 | |
| 3833 | The '``and``' instruction returns the bitwise logical and of its two |
| 3834 | operands. |
| 3835 | |
| 3836 | Arguments: |
| 3837 | """""""""" |
| 3838 | |
| 3839 | The two arguments to the '``and``' instruction must be |
| 3840 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3841 | arguments must have identical types. |
| 3842 | |
| 3843 | Semantics: |
| 3844 | """""""""" |
| 3845 | |
| 3846 | The truth table used for the '``and``' instruction is: |
| 3847 | |
| 3848 | +-----+-----+-----+ |
| 3849 | | In0 | In1 | Out | |
| 3850 | +-----+-----+-----+ |
| 3851 | | 0 | 0 | 0 | |
| 3852 | +-----+-----+-----+ |
| 3853 | | 0 | 1 | 0 | |
| 3854 | +-----+-----+-----+ |
| 3855 | | 1 | 0 | 0 | |
| 3856 | +-----+-----+-----+ |
| 3857 | | 1 | 1 | 1 | |
| 3858 | +-----+-----+-----+ |
| 3859 | |
| 3860 | Example: |
| 3861 | """""""" |
| 3862 | |
| 3863 | .. code-block:: llvm |
| 3864 | |
| 3865 | <result> = and i32 4, %var ; yields {i32}:result = 4 & %var |
| 3866 | <result> = and i32 15, 40 ; yields {i32}:result = 8 |
| 3867 | <result> = and i32 4, 8 ; yields {i32}:result = 0 |
| 3868 | |
| 3869 | '``or``' Instruction |
| 3870 | ^^^^^^^^^^^^^^^^^^^^ |
| 3871 | |
| 3872 | Syntax: |
| 3873 | """"""" |
| 3874 | |
| 3875 | :: |
| 3876 | |
| 3877 | <result> = or <ty> <op1>, <op2> ; yields {ty}:result |
| 3878 | |
| 3879 | Overview: |
| 3880 | """"""""" |
| 3881 | |
| 3882 | The '``or``' instruction returns the bitwise logical inclusive or of its |
| 3883 | two operands. |
| 3884 | |
| 3885 | Arguments: |
| 3886 | """""""""" |
| 3887 | |
| 3888 | The two arguments to the '``or``' instruction must be |
| 3889 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3890 | arguments must have identical types. |
| 3891 | |
| 3892 | Semantics: |
| 3893 | """""""""" |
| 3894 | |
| 3895 | The truth table used for the '``or``' instruction is: |
| 3896 | |
| 3897 | +-----+-----+-----+ |
| 3898 | | In0 | In1 | Out | |
| 3899 | +-----+-----+-----+ |
| 3900 | | 0 | 0 | 0 | |
| 3901 | +-----+-----+-----+ |
| 3902 | | 0 | 1 | 1 | |
| 3903 | +-----+-----+-----+ |
| 3904 | | 1 | 0 | 1 | |
| 3905 | +-----+-----+-----+ |
| 3906 | | 1 | 1 | 1 | |
| 3907 | +-----+-----+-----+ |
| 3908 | |
| 3909 | Example: |
| 3910 | """""""" |
| 3911 | |
| 3912 | :: |
| 3913 | |
| 3914 | <result> = or i32 4, %var ; yields {i32}:result = 4 | %var |
| 3915 | <result> = or i32 15, 40 ; yields {i32}:result = 47 |
| 3916 | <result> = or i32 4, 8 ; yields {i32}:result = 12 |
| 3917 | |
| 3918 | '``xor``' Instruction |
| 3919 | ^^^^^^^^^^^^^^^^^^^^^ |
| 3920 | |
| 3921 | Syntax: |
| 3922 | """"""" |
| 3923 | |
| 3924 | :: |
| 3925 | |
| 3926 | <result> = xor <ty> <op1>, <op2> ; yields {ty}:result |
| 3927 | |
| 3928 | Overview: |
| 3929 | """"""""" |
| 3930 | |
| 3931 | The '``xor``' instruction returns the bitwise logical exclusive or of |
| 3932 | its two operands. The ``xor`` is used to implement the "one's |
| 3933 | complement" operation, which is the "~" operator in C. |
| 3934 | |
| 3935 | Arguments: |
| 3936 | """""""""" |
| 3937 | |
| 3938 | The two arguments to the '``xor``' instruction must be |
| 3939 | :ref:`integer <t_integer>` or :ref:`vector <t_vector>` of integer values. Both |
| 3940 | arguments must have identical types. |
| 3941 | |
| 3942 | Semantics: |
| 3943 | """""""""" |
| 3944 | |
| 3945 | The truth table used for the '``xor``' instruction is: |
| 3946 | |
| 3947 | +-----+-----+-----+ |
| 3948 | | In0 | In1 | Out | |
| 3949 | +-----+-----+-----+ |
| 3950 | | 0 | 0 | 0 | |
| 3951 | +-----+-----+-----+ |
| 3952 | | 0 | 1 | 1 | |
| 3953 | +-----+-----+-----+ |
| 3954 | | 1 | 0 | 1 | |
| 3955 | +-----+-----+-----+ |
| 3956 | | 1 | 1 | 0 | |
| 3957 | +-----+-----+-----+ |
| 3958 | |
| 3959 | Example: |
| 3960 | """""""" |
| 3961 | |
| 3962 | .. code-block:: llvm |
| 3963 | |
| 3964 | <result> = xor i32 4, %var ; yields {i32}:result = 4 ^ %var |
| 3965 | <result> = xor i32 15, 40 ; yields {i32}:result = 39 |
| 3966 | <result> = xor i32 4, 8 ; yields {i32}:result = 12 |
| 3967 | <result> = xor i32 %V, -1 ; yields {i32}:result = ~%V |
| 3968 | |
| 3969 | Vector Operations |
| 3970 | ----------------- |
| 3971 | |
| 3972 | LLVM supports several instructions to represent vector operations in a |
| 3973 | target-independent manner. These instructions cover the element-access |
| 3974 | and vector-specific operations needed to process vectors effectively. |
| 3975 | While LLVM does directly support these vector operations, many |
| 3976 | sophisticated algorithms will want to use target-specific intrinsics to |
| 3977 | take full advantage of a specific target. |
| 3978 | |
| 3979 | .. _i_extractelement: |
| 3980 | |
| 3981 | '``extractelement``' Instruction |
| 3982 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 3983 | |
| 3984 | Syntax: |
| 3985 | """"""" |
| 3986 | |
| 3987 | :: |
| 3988 | |
| 3989 | <result> = extractelement <n x <ty>> <val>, i32 <idx> ; yields <ty> |
| 3990 | |
| 3991 | Overview: |
| 3992 | """"""""" |
| 3993 | |
| 3994 | The '``extractelement``' instruction extracts a single scalar element |
| 3995 | from a vector at a specified index. |
| 3996 | |
| 3997 | Arguments: |
| 3998 | """""""""" |
| 3999 | |
| 4000 | The first operand of an '``extractelement``' instruction is a value of |
| 4001 | :ref:`vector <t_vector>` type. The second operand is an index indicating |
| 4002 | the position from which to extract the element. The index may be a |
| 4003 | variable. |
| 4004 | |
| 4005 | Semantics: |
| 4006 | """""""""" |
| 4007 | |
| 4008 | The result is a scalar of the same type as the element type of ``val``. |
| 4009 | Its value is the value at position ``idx`` of ``val``. If ``idx`` |
| 4010 | exceeds the length of ``val``, the results are undefined. |
| 4011 | |
| 4012 | Example: |
| 4013 | """""""" |
| 4014 | |
| 4015 | .. code-block:: llvm |
| 4016 | |
| 4017 | <result> = extractelement <4 x i32> %vec, i32 0 ; yields i32 |
| 4018 | |
| 4019 | .. _i_insertelement: |
| 4020 | |
| 4021 | '``insertelement``' Instruction |
| 4022 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4023 | |
| 4024 | Syntax: |
| 4025 | """"""" |
| 4026 | |
| 4027 | :: |
| 4028 | |
| 4029 | <result> = insertelement <n x <ty>> <val>, <ty> <elt>, i32 <idx> ; yields <n x <ty>> |
| 4030 | |
| 4031 | Overview: |
| 4032 | """"""""" |
| 4033 | |
| 4034 | The '``insertelement``' instruction inserts a scalar element into a |
| 4035 | vector at a specified index. |
| 4036 | |
| 4037 | Arguments: |
| 4038 | """""""""" |
| 4039 | |
| 4040 | The first operand of an '``insertelement``' instruction is a value of |
| 4041 | :ref:`vector <t_vector>` type. The second operand is a scalar value whose |
| 4042 | type must equal the element type of the first operand. The third operand |
| 4043 | is an index indicating the position at which to insert the value. The |
| 4044 | index may be a variable. |
| 4045 | |
| 4046 | Semantics: |
| 4047 | """""""""" |
| 4048 | |
| 4049 | The result is a vector of the same type as ``val``. Its element values |
| 4050 | are those of ``val`` except at position ``idx``, where it gets the value |
| 4051 | ``elt``. If ``idx`` exceeds the length of ``val``, the results are |
| 4052 | undefined. |
| 4053 | |
| 4054 | Example: |
| 4055 | """""""" |
| 4056 | |
| 4057 | .. code-block:: llvm |
| 4058 | |
| 4059 | <result> = insertelement <4 x i32> %vec, i32 1, i32 0 ; yields <4 x i32> |
| 4060 | |
| 4061 | .. _i_shufflevector: |
| 4062 | |
| 4063 | '``shufflevector``' Instruction |
| 4064 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4065 | |
| 4066 | Syntax: |
| 4067 | """"""" |
| 4068 | |
| 4069 | :: |
| 4070 | |
| 4071 | <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask> ; yields <m x <ty>> |
| 4072 | |
| 4073 | Overview: |
| 4074 | """"""""" |
| 4075 | |
| 4076 | The '``shufflevector``' instruction constructs a permutation of elements |
| 4077 | from two input vectors, returning a vector with the same element type as |
| 4078 | the input and length that is the same as the shuffle mask. |
| 4079 | |
| 4080 | Arguments: |
| 4081 | """""""""" |
| 4082 | |
| 4083 | The first two operands of a '``shufflevector``' instruction are vectors |
| 4084 | with the same type. The third argument is a shuffle mask whose element |
| 4085 | type is always 'i32'. The result of the instruction is a vector whose |
| 4086 | length is the same as the shuffle mask and whose element type is the |
| 4087 | same as the element type of the first two operands. |
| 4088 | |
| 4089 | The shuffle mask operand is required to be a constant vector with either |
| 4090 | constant integer or undef values. |
| 4091 | |
| 4092 | Semantics: |
| 4093 | """""""""" |
| 4094 | |
| 4095 | The elements of the two input vectors are numbered from left to right |
| 4096 | across both of the vectors. The shuffle mask operand specifies, for each |
| 4097 | element of the result vector, which element of the two input vectors the |
| 4098 | result element gets. The element selector may be undef (meaning "don't |
| 4099 | care") and the second operand may be undef if performing a shuffle from |
| 4100 | only one vector. |
| 4101 | |
| 4102 | Example: |
| 4103 | """""""" |
| 4104 | |
| 4105 | .. code-block:: llvm |
| 4106 | |
| 4107 | <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2, |
| 4108 | <4 x i32> <i32 0, i32 4, i32 1, i32 5> ; yields <4 x i32> |
| 4109 | <result> = shufflevector <4 x i32> %v1, <4 x i32> undef, |
| 4110 | <4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32> - Identity shuffle. |
| 4111 | <result> = shufflevector <8 x i32> %v1, <8 x i32> undef, |
| 4112 | <4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32> |
| 4113 | <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2, |
| 4114 | <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 > ; yields <8 x i32> |
| 4115 | |
| 4116 | Aggregate Operations |
| 4117 | -------------------- |
| 4118 | |
| 4119 | LLVM supports several instructions for working with |
| 4120 | :ref:`aggregate <t_aggregate>` values. |
| 4121 | |
| 4122 | .. _i_extractvalue: |
| 4123 | |
| 4124 | '``extractvalue``' Instruction |
| 4125 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4126 | |
| 4127 | Syntax: |
| 4128 | """"""" |
| 4129 | |
| 4130 | :: |
| 4131 | |
| 4132 | <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}* |
| 4133 | |
| 4134 | Overview: |
| 4135 | """"""""" |
| 4136 | |
| 4137 | The '``extractvalue``' instruction extracts the value of a member field |
| 4138 | from an :ref:`aggregate <t_aggregate>` value. |
| 4139 | |
| 4140 | Arguments: |
| 4141 | """""""""" |
| 4142 | |
| 4143 | The first operand of an '``extractvalue``' instruction is a value of |
| 4144 | :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The operands are |
| 4145 | constant indices to specify which value to extract in a similar manner |
| 4146 | as indices in a '``getelementptr``' instruction. |
| 4147 | |
| 4148 | The major differences to ``getelementptr`` indexing are: |
| 4149 | |
| 4150 | - Since the value being indexed is not a pointer, the first index is |
| 4151 | omitted and assumed to be zero. |
| 4152 | - At least one index must be specified. |
| 4153 | - Not only struct indices but also array indices must be in bounds. |
| 4154 | |
| 4155 | Semantics: |
| 4156 | """""""""" |
| 4157 | |
| 4158 | The result is the value at the position in the aggregate specified by |
| 4159 | the index operands. |
| 4160 | |
| 4161 | Example: |
| 4162 | """""""" |
| 4163 | |
| 4164 | .. code-block:: llvm |
| 4165 | |
| 4166 | <result> = extractvalue {i32, float} %agg, 0 ; yields i32 |
| 4167 | |
| 4168 | .. _i_insertvalue: |
| 4169 | |
| 4170 | '``insertvalue``' Instruction |
| 4171 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4172 | |
| 4173 | Syntax: |
| 4174 | """"""" |
| 4175 | |
| 4176 | :: |
| 4177 | |
| 4178 | <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}* ; yields <aggregate type> |
| 4179 | |
| 4180 | Overview: |
| 4181 | """"""""" |
| 4182 | |
| 4183 | The '``insertvalue``' instruction inserts a value into a member field in |
| 4184 | an :ref:`aggregate <t_aggregate>` value. |
| 4185 | |
| 4186 | Arguments: |
| 4187 | """""""""" |
| 4188 | |
| 4189 | The first operand of an '``insertvalue``' instruction is a value of |
| 4190 | :ref:`struct <t_struct>` or :ref:`array <t_array>` type. The second operand is |
| 4191 | a first-class value to insert. The following operands are constant |
| 4192 | indices indicating the position at which to insert the value in a |
| 4193 | similar manner as indices in a '``extractvalue``' instruction. The value |
| 4194 | to insert must have the same type as the value identified by the |
| 4195 | indices. |
| 4196 | |
| 4197 | Semantics: |
| 4198 | """""""""" |
| 4199 | |
| 4200 | The result is an aggregate of the same type as ``val``. Its value is |
| 4201 | that of ``val`` except that the value at the position specified by the |
| 4202 | indices is that of ``elt``. |
| 4203 | |
| 4204 | Example: |
| 4205 | """""""" |
| 4206 | |
| 4207 | .. code-block:: llvm |
| 4208 | |
| 4209 | %agg1 = insertvalue {i32, float} undef, i32 1, 0 ; yields {i32 1, float undef} |
| 4210 | %agg2 = insertvalue {i32, float} %agg1, float %val, 1 ; yields {i32 1, float %val} |
| 4211 | %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0 ; yields {i32 1, float %val} |
| 4212 | |
| 4213 | .. _memoryops: |
| 4214 | |
| 4215 | Memory Access and Addressing Operations |
| 4216 | --------------------------------------- |
| 4217 | |
| 4218 | A key design point of an SSA-based representation is how it represents |
| 4219 | memory. In LLVM, no memory locations are in SSA form, which makes things |
| 4220 | very simple. This section describes how to read, write, and allocate |
| 4221 | memory in LLVM. |
| 4222 | |
| 4223 | .. _i_alloca: |
| 4224 | |
| 4225 | '``alloca``' Instruction |
| 4226 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4227 | |
| 4228 | Syntax: |
| 4229 | """"""" |
| 4230 | |
| 4231 | :: |
| 4232 | |
| 4233 | <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>] ; yields {type*}:result |
| 4234 | |
| 4235 | Overview: |
| 4236 | """"""""" |
| 4237 | |
| 4238 | The '``alloca``' instruction allocates memory on the stack frame of the |
| 4239 | currently executing function, to be automatically released when this |
| 4240 | function returns to its caller. The object is always allocated in the |
| 4241 | generic address space (address space zero). |
| 4242 | |
| 4243 | Arguments: |
| 4244 | """""""""" |
| 4245 | |
| 4246 | The '``alloca``' instruction allocates ``sizeof(<type>)*NumElements`` |
| 4247 | bytes of memory on the runtime stack, returning a pointer of the |
| 4248 | appropriate type to the program. If "NumElements" is specified, it is |
| 4249 | the number of elements allocated, otherwise "NumElements" is defaulted |
| 4250 | to be one. If a constant alignment is specified, the value result of the |
| 4251 | allocation is guaranteed to be aligned to at least that boundary. If not |
| 4252 | specified, or if zero, the target can choose to align the allocation on |
| 4253 | any convenient boundary compatible with the type. |
| 4254 | |
| 4255 | '``type``' may be any sized type. |
| 4256 | |
| 4257 | Semantics: |
| 4258 | """""""""" |
| 4259 | |
| 4260 | Memory is allocated; a pointer is returned. The operation is undefined |
| 4261 | if there is insufficient stack space for the allocation. '``alloca``'d |
| 4262 | memory is automatically released when the function returns. The |
| 4263 | '``alloca``' instruction is commonly used to represent automatic |
| 4264 | variables that must have an address available. When the function returns |
| 4265 | (either with the ``ret`` or ``resume`` instructions), the memory is |
| 4266 | reclaimed. Allocating zero bytes is legal, but the result is undefined. |
| 4267 | The order in which memory is allocated (ie., which way the stack grows) |
| 4268 | is not specified. |
| 4269 | |
| 4270 | Example: |
| 4271 | """""""" |
| 4272 | |
| 4273 | .. code-block:: llvm |
| 4274 | |
| 4275 | %ptr = alloca i32 ; yields {i32*}:ptr |
| 4276 | %ptr = alloca i32, i32 4 ; yields {i32*}:ptr |
| 4277 | %ptr = alloca i32, i32 4, align 1024 ; yields {i32*}:ptr |
| 4278 | %ptr = alloca i32, align 1024 ; yields {i32*}:ptr |
| 4279 | |
| 4280 | .. _i_load: |
| 4281 | |
| 4282 | '``load``' Instruction |
| 4283 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 4284 | |
| 4285 | Syntax: |
| 4286 | """"""" |
| 4287 | |
| 4288 | :: |
| 4289 | |
| 4290 | <result> = load [volatile] <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.load !<index>] |
| 4291 | <result> = load atomic [volatile] <ty>* <pointer> [singlethread] <ordering>, align <alignment> |
| 4292 | !<index> = !{ i32 1 } |
| 4293 | |
| 4294 | Overview: |
| 4295 | """"""""" |
| 4296 | |
| 4297 | The '``load``' instruction is used to read from memory. |
| 4298 | |
| 4299 | Arguments: |
| 4300 | """""""""" |
| 4301 | |
| 4302 | The argument to the '``load``' instruction specifies the memory address |
| 4303 | from which to load. The pointer must point to a :ref:`first |
| 4304 | class <t_firstclass>` type. If the ``load`` is marked as ``volatile``, |
| 4305 | then the optimizer is not allowed to modify the number or order of |
| 4306 | execution of this ``load`` with other :ref:`volatile |
| 4307 | operations <volatile>`. |
| 4308 | |
| 4309 | If the ``load`` is marked as ``atomic``, it takes an extra |
| 4310 | :ref:`ordering <ordering>` and optional ``singlethread`` argument. The |
| 4311 | ``release`` and ``acq_rel`` orderings are not valid on ``load`` |
| 4312 | instructions. Atomic loads produce :ref:`defined <memmodel>` results |
| 4313 | when they may see multiple atomic stores. The type of the pointee must |
| 4314 | be an integer type whose bit width is a power of two greater than or |
| 4315 | equal to eight and less than or equal to a target-specific size limit. |
| 4316 | ``align`` must be explicitly specified on atomic loads, and the load has |
| 4317 | undefined behavior if the alignment is not set to a value which is at |
| 4318 | least the size in bytes of the pointee. ``!nontemporal`` does not have |
| 4319 | any defined semantics for atomic loads. |
| 4320 | |
| 4321 | The optional constant ``align`` argument specifies the alignment of the |
| 4322 | operation (that is, the alignment of the memory address). A value of 0 |
| 4323 | or an omitted ``align`` argument means that the operation has the abi |
| 4324 | alignment for the target. It is the responsibility of the code emitter |
| 4325 | to ensure that the alignment information is correct. Overestimating the |
| 4326 | alignment results in undefined behavior. Underestimating the alignment |
| 4327 | may produce less efficient code. An alignment of 1 is always safe. |
| 4328 | |
| 4329 | The optional ``!nontemporal`` metadata must reference a single |
| 4330 | metatadata name <index> corresponding to a metadata node with one |
| 4331 | ``i32`` entry of value 1. The existence of the ``!nontemporal`` |
| 4332 | metatadata on the instruction tells the optimizer and code generator |
| 4333 | that this load is not expected to be reused in the cache. The code |
| 4334 | generator may select special instructions to save cache bandwidth, such |
| 4335 | as the ``MOVNT`` instruction on x86. |
| 4336 | |
| 4337 | The optional ``!invariant.load`` metadata must reference a single |
| 4338 | metatadata name <index> corresponding to a metadata node with no |
| 4339 | entries. The existence of the ``!invariant.load`` metatadata on the |
| 4340 | instruction tells the optimizer and code generator that this load |
| 4341 | address points to memory which does not change value during program |
| 4342 | execution. The optimizer may then move this load around, for example, by |
| 4343 | hoisting it out of loops using loop invariant code motion. |
| 4344 | |
| 4345 | Semantics: |
| 4346 | """""""""" |
| 4347 | |
| 4348 | The location of memory pointed to is loaded. If the value being loaded |
| 4349 | is of scalar type then the number of bytes read does not exceed the |
| 4350 | minimum number of bytes needed to hold all bits of the type. For |
| 4351 | example, loading an ``i24`` reads at most three bytes. When loading a |
| 4352 | value of a type like ``i20`` with a size that is not an integral number |
| 4353 | of bytes, the result is undefined if the value was not originally |
| 4354 | written using a store of the same type. |
| 4355 | |
| 4356 | Examples: |
| 4357 | """"""""" |
| 4358 | |
| 4359 | .. code-block:: llvm |
| 4360 | |
| 4361 | %ptr = alloca i32 ; yields {i32*}:ptr |
| 4362 | store i32 3, i32* %ptr ; yields {void} |
| 4363 | %val = load i32* %ptr ; yields {i32}:val = i32 3 |
| 4364 | |
| 4365 | .. _i_store: |
| 4366 | |
| 4367 | '``store``' Instruction |
| 4368 | ^^^^^^^^^^^^^^^^^^^^^^^ |
| 4369 | |
| 4370 | Syntax: |
| 4371 | """"""" |
| 4372 | |
| 4373 | :: |
| 4374 | |
| 4375 | store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] ; yields {void} |
| 4376 | store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment> ; yields {void} |
| 4377 | |
| 4378 | Overview: |
| 4379 | """"""""" |
| 4380 | |
| 4381 | The '``store``' instruction is used to write to memory. |
| 4382 | |
| 4383 | Arguments: |
| 4384 | """""""""" |
| 4385 | |
| 4386 | There are two arguments to the '``store``' instruction: a value to store |
| 4387 | and an address at which to store it. The type of the '``<pointer>``' |
| 4388 | operand must be a pointer to the :ref:`first class <t_firstclass>` type of |
| 4389 | the '``<value>``' operand. If the ``store`` is marked as ``volatile``, |
| 4390 | then the optimizer is not allowed to modify the number or order of |
| 4391 | execution of this ``store`` with other :ref:`volatile |
| 4392 | operations <volatile>`. |
| 4393 | |
| 4394 | If the ``store`` is marked as ``atomic``, it takes an extra |
| 4395 | :ref:`ordering <ordering>` and optional ``singlethread`` argument. The |
| 4396 | ``acquire`` and ``acq_rel`` orderings aren't valid on ``store`` |
| 4397 | instructions. Atomic loads produce :ref:`defined <memmodel>` results |
| 4398 | when they may see multiple atomic stores. The type of the pointee must |
| 4399 | be an integer type whose bit width is a power of two greater than or |
| 4400 | equal to eight and less than or equal to a target-specific size limit. |
| 4401 | ``align`` must be explicitly specified on atomic stores, and the store |
| 4402 | has undefined behavior if the alignment is not set to a value which is |
| 4403 | at least the size in bytes of the pointee. ``!nontemporal`` does not |
| 4404 | have any defined semantics for atomic stores. |
| 4405 | |
| 4406 | The optional constant "align" argument specifies the alignment of the |
| 4407 | operation (that is, the alignment of the memory address). A value of 0 |
| 4408 | or an omitted "align" argument means that the operation has the abi |
| 4409 | alignment for the target. It is the responsibility of the code emitter |
| 4410 | to ensure that the alignment information is correct. Overestimating the |
| 4411 | alignment results in an undefined behavior. Underestimating the |
| 4412 | alignment may produce less efficient code. An alignment of 1 is always |
| 4413 | safe. |
| 4414 | |
| 4415 | The optional !nontemporal metadata must reference a single metatadata |
| 4416 | name <index> corresponding to a metadata node with one i32 entry of |
| 4417 | value 1. The existence of the !nontemporal metatadata on the instruction |
| 4418 | tells the optimizer and code generator that this load is not expected to |
| 4419 | be reused in the cache. The code generator may select special |
| 4420 | instructions to save cache bandwidth, such as the MOVNT instruction on |
| 4421 | x86. |
| 4422 | |
| 4423 | Semantics: |
| 4424 | """""""""" |
| 4425 | |
| 4426 | The contents of memory are updated to contain '``<value>``' at the |
| 4427 | location specified by the '``<pointer>``' operand. If '``<value>``' is |
| 4428 | of scalar type then the number of bytes written does not exceed the |
| 4429 | minimum number of bytes needed to hold all bits of the type. For |
| 4430 | example, storing an ``i24`` writes at most three bytes. When writing a |
| 4431 | value of a type like ``i20`` with a size that is not an integral number |
| 4432 | of bytes, it is unspecified what happens to the extra bits that do not |
| 4433 | belong to the type, but they will typically be overwritten. |
| 4434 | |
| 4435 | Example: |
| 4436 | """""""" |
| 4437 | |
| 4438 | .. code-block:: llvm |
| 4439 | |
| 4440 | %ptr = alloca i32 ; yields {i32*}:ptr |
| 4441 | store i32 3, i32* %ptr ; yields {void} |
| 4442 | %val = load i32* %ptr ; yields {i32}:val = i32 3 |
| 4443 | |
| 4444 | .. _i_fence: |
| 4445 | |
| 4446 | '``fence``' Instruction |
| 4447 | ^^^^^^^^^^^^^^^^^^^^^^^ |
| 4448 | |
| 4449 | Syntax: |
| 4450 | """"""" |
| 4451 | |
| 4452 | :: |
| 4453 | |
| 4454 | fence [singlethread] <ordering> ; yields {void} |
| 4455 | |
| 4456 | Overview: |
| 4457 | """"""""" |
| 4458 | |
| 4459 | The '``fence``' instruction is used to introduce happens-before edges |
| 4460 | between operations. |
| 4461 | |
| 4462 | Arguments: |
| 4463 | """""""""" |
| 4464 | |
| 4465 | '``fence``' instructions take an :ref:`ordering <ordering>` argument which |
| 4466 | defines what *synchronizes-with* edges they add. They can only be given |
| 4467 | ``acquire``, ``release``, ``acq_rel``, and ``seq_cst`` orderings. |
| 4468 | |
| 4469 | Semantics: |
| 4470 | """""""""" |
| 4471 | |
| 4472 | A fence A which has (at least) ``release`` ordering semantics |
| 4473 | *synchronizes with* a fence B with (at least) ``acquire`` ordering |
| 4474 | semantics if and only if there exist atomic operations X and Y, both |
| 4475 | operating on some atomic object M, such that A is sequenced before X, X |
| 4476 | modifies M (either directly or through some side effect of a sequence |
| 4477 | headed by X), Y is sequenced before B, and Y observes M. This provides a |
| 4478 | *happens-before* dependency between A and B. Rather than an explicit |
| 4479 | ``fence``, one (but not both) of the atomic operations X or Y might |
| 4480 | provide a ``release`` or ``acquire`` (resp.) ordering constraint and |
| 4481 | still *synchronize-with* the explicit ``fence`` and establish the |
| 4482 | *happens-before* edge. |
| 4483 | |
| 4484 | A ``fence`` which has ``seq_cst`` ordering, in addition to having both |
| 4485 | ``acquire`` and ``release`` semantics specified above, participates in |
| 4486 | the global program order of other ``seq_cst`` operations and/or fences. |
| 4487 | |
| 4488 | The optional ":ref:`singlethread <singlethread>`" argument specifies |
| 4489 | that the fence only synchronizes with other fences in the same thread. |
| 4490 | (This is useful for interacting with signal handlers.) |
| 4491 | |
| 4492 | Example: |
| 4493 | """""""" |
| 4494 | |
| 4495 | .. code-block:: llvm |
| 4496 | |
| 4497 | fence acquire ; yields {void} |
| 4498 | fence singlethread seq_cst ; yields {void} |
| 4499 | |
| 4500 | .. _i_cmpxchg: |
| 4501 | |
| 4502 | '``cmpxchg``' Instruction |
| 4503 | ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4504 | |
| 4505 | Syntax: |
| 4506 | """"""" |
| 4507 | |
| 4508 | :: |
| 4509 | |
| 4510 | cmpxchg [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <ordering> ; yields {ty} |
| 4511 | |
| 4512 | Overview: |
| 4513 | """"""""" |
| 4514 | |
| 4515 | The '``cmpxchg``' instruction is used to atomically modify memory. It |
| 4516 | loads a value in memory and compares it to a given value. If they are |
| 4517 | equal, it stores a new value into the memory. |
| 4518 | |
| 4519 | Arguments: |
| 4520 | """""""""" |
| 4521 | |
| 4522 | There are three arguments to the '``cmpxchg``' instruction: an address |
| 4523 | to operate on, a value to compare to the value currently be at that |
| 4524 | address, and a new value to place at that address if the compared values |
| 4525 | are equal. The type of '<cmp>' must be an integer type whose bit width |
| 4526 | is a power of two greater than or equal to eight and less than or equal |
| 4527 | to a target-specific size limit. '<cmp>' and '<new>' must have the same |
| 4528 | type, and the type of '<pointer>' must be a pointer to that type. If the |
| 4529 | ``cmpxchg`` is marked as ``volatile``, then the optimizer is not allowed |
| 4530 | to modify the number or order of execution of this ``cmpxchg`` with |
| 4531 | other :ref:`volatile operations <volatile>`. |
| 4532 | |
| 4533 | The :ref:`ordering <ordering>` argument specifies how this ``cmpxchg`` |
| 4534 | synchronizes with other atomic operations. |
| 4535 | |
| 4536 | The optional "``singlethread``" argument declares that the ``cmpxchg`` |
| 4537 | is only atomic with respect to code (usually signal handlers) running in |
| 4538 | the same thread as the ``cmpxchg``. Otherwise the cmpxchg is atomic with |
| 4539 | respect to all other code in the system. |
| 4540 | |
| 4541 | The pointer passed into cmpxchg must have alignment greater than or |
| 4542 | equal to the size in memory of the operand. |
| 4543 | |
| 4544 | Semantics: |
| 4545 | """""""""" |
| 4546 | |
| 4547 | The contents of memory at the location specified by the '``<pointer>``' |
| 4548 | operand is read and compared to '``<cmp>``'; if the read value is the |
| 4549 | equal, '``<new>``' is written. The original value at the location is |
| 4550 | returned. |
| 4551 | |
| 4552 | A successful ``cmpxchg`` is a read-modify-write instruction for the purpose |
| 4553 | of identifying release sequences. A failed ``cmpxchg`` is equivalent to an |
| 4554 | atomic load with an ordering parameter determined by dropping any |
| 4555 | ``release`` part of the ``cmpxchg``'s ordering. |
| 4556 | |
| 4557 | Example: |
| 4558 | """""""" |
| 4559 | |
| 4560 | .. code-block:: llvm |
| 4561 | |
| 4562 | entry: |
| 4563 | %orig = atomic load i32* %ptr unordered ; yields {i32} |
| 4564 | br label %loop |
| 4565 | |
| 4566 | loop: |
| 4567 | %cmp = phi i32 [ %orig, %entry ], [%old, %loop] |
| 4568 | %squared = mul i32 %cmp, %cmp |
| 4569 | %old = cmpxchg i32* %ptr, i32 %cmp, i32 %squared ; yields {i32} |
| 4570 | %success = icmp eq i32 %cmp, %old |
| 4571 | br i1 %success, label %done, label %loop |
| 4572 | |
| 4573 | done: |
| 4574 | ... |
| 4575 | |
| 4576 | .. _i_atomicrmw: |
| 4577 | |
| 4578 | '``atomicrmw``' Instruction |
| 4579 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4580 | |
| 4581 | Syntax: |
| 4582 | """"""" |
| 4583 | |
| 4584 | :: |
| 4585 | |
| 4586 | atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering> ; yields {ty} |
| 4587 | |
| 4588 | Overview: |
| 4589 | """"""""" |
| 4590 | |
| 4591 | The '``atomicrmw``' instruction is used to atomically modify memory. |
| 4592 | |
| 4593 | Arguments: |
| 4594 | """""""""" |
| 4595 | |
| 4596 | There are three arguments to the '``atomicrmw``' instruction: an |
| 4597 | operation to apply, an address whose value to modify, an argument to the |
| 4598 | operation. The operation must be one of the following keywords: |
| 4599 | |
| 4600 | - xchg |
| 4601 | - add |
| 4602 | - sub |
| 4603 | - and |
| 4604 | - nand |
| 4605 | - or |
| 4606 | - xor |
| 4607 | - max |
| 4608 | - min |
| 4609 | - umax |
| 4610 | - umin |
| 4611 | |
| 4612 | The type of '<value>' must be an integer type whose bit width is a power |
| 4613 | of two greater than or equal to eight and less than or equal to a |
| 4614 | target-specific size limit. The type of the '``<pointer>``' operand must |
| 4615 | be a pointer to that type. If the ``atomicrmw`` is marked as |
| 4616 | ``volatile``, then the optimizer is not allowed to modify the number or |
| 4617 | order of execution of this ``atomicrmw`` with other :ref:`volatile |
| 4618 | operations <volatile>`. |
| 4619 | |
| 4620 | Semantics: |
| 4621 | """""""""" |
| 4622 | |
| 4623 | The contents of memory at the location specified by the '``<pointer>``' |
| 4624 | operand are atomically read, modified, and written back. The original |
| 4625 | value at the location is returned. The modification is specified by the |
| 4626 | operation argument: |
| 4627 | |
| 4628 | - xchg: ``*ptr = val`` |
| 4629 | - add: ``*ptr = *ptr + val`` |
| 4630 | - sub: ``*ptr = *ptr - val`` |
| 4631 | - and: ``*ptr = *ptr & val`` |
| 4632 | - nand: ``*ptr = ~(*ptr & val)`` |
| 4633 | - or: ``*ptr = *ptr | val`` |
| 4634 | - xor: ``*ptr = *ptr ^ val`` |
| 4635 | - max: ``*ptr = *ptr > val ? *ptr : val`` (using a signed comparison) |
| 4636 | - min: ``*ptr = *ptr < val ? *ptr : val`` (using a signed comparison) |
| 4637 | - umax: ``*ptr = *ptr > val ? *ptr : val`` (using an unsigned |
| 4638 | comparison) |
| 4639 | - umin: ``*ptr = *ptr < val ? *ptr : val`` (using an unsigned |
| 4640 | comparison) |
| 4641 | |
| 4642 | Example: |
| 4643 | """""""" |
| 4644 | |
| 4645 | .. code-block:: llvm |
| 4646 | |
| 4647 | %old = atomicrmw add i32* %ptr, i32 1 acquire ; yields {i32} |
| 4648 | |
| 4649 | .. _i_getelementptr: |
| 4650 | |
| 4651 | '``getelementptr``' Instruction |
| 4652 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4653 | |
| 4654 | Syntax: |
| 4655 | """"""" |
| 4656 | |
| 4657 | :: |
| 4658 | |
| 4659 | <result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}* |
| 4660 | <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}* |
| 4661 | <result> = getelementptr <ptr vector> ptrval, <vector index type> idx |
| 4662 | |
| 4663 | Overview: |
| 4664 | """"""""" |
| 4665 | |
| 4666 | The '``getelementptr``' instruction is used to get the address of a |
| 4667 | subelement of an :ref:`aggregate <t_aggregate>` data structure. It performs |
| 4668 | address calculation only and does not access memory. |
| 4669 | |
| 4670 | Arguments: |
| 4671 | """""""""" |
| 4672 | |
| 4673 | The first argument is always a pointer or a vector of pointers, and |
| 4674 | forms the basis of the calculation. The remaining arguments are indices |
| 4675 | that indicate which of the elements of the aggregate object are indexed. |
| 4676 | The interpretation of each index is dependent on the type being indexed |
| 4677 | into. The first index always indexes the pointer value given as the |
| 4678 | first argument, the second index indexes a value of the type pointed to |
| 4679 | (not necessarily the value directly pointed to, since the first index |
| 4680 | can be non-zero), etc. The first type indexed into must be a pointer |
| 4681 | value, subsequent types can be arrays, vectors, and structs. Note that |
| 4682 | subsequent types being indexed into can never be pointers, since that |
| 4683 | would require loading the pointer before continuing calculation. |
| 4684 | |
| 4685 | The type of each index argument depends on the type it is indexing into. |
| 4686 | When indexing into a (optionally packed) structure, only ``i32`` integer |
| 4687 | **constants** are allowed (when using a vector of indices they must all |
| 4688 | be the **same** ``i32`` integer constant). When indexing into an array, |
| 4689 | pointer or vector, integers of any width are allowed, and they are not |
| 4690 | required to be constant. These integers are treated as signed values |
| 4691 | where relevant. |
| 4692 | |
| 4693 | For example, let's consider a C code fragment and how it gets compiled |
| 4694 | to LLVM: |
| 4695 | |
| 4696 | .. code-block:: c |
| 4697 | |
| 4698 | struct RT { |
| 4699 | char A; |
| 4700 | int B[10][20]; |
| 4701 | char C; |
| 4702 | }; |
| 4703 | struct ST { |
| 4704 | int X; |
| 4705 | double Y; |
| 4706 | struct RT Z; |
| 4707 | }; |
| 4708 | |
| 4709 | int *foo(struct ST *s) { |
| 4710 | return &s[1].Z.B[5][13]; |
| 4711 | } |
| 4712 | |
| 4713 | The LLVM code generated by Clang is: |
| 4714 | |
| 4715 | .. code-block:: llvm |
| 4716 | |
| 4717 | %struct.RT = type { i8, [10 x [20 x i32]], i8 } |
| 4718 | %struct.ST = type { i32, double, %struct.RT } |
| 4719 | |
| 4720 | define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp { |
| 4721 | entry: |
| 4722 | %arrayidx = getelementptr inbounds %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13 |
| 4723 | ret i32* %arrayidx |
| 4724 | } |
| 4725 | |
| 4726 | Semantics: |
| 4727 | """""""""" |
| 4728 | |
| 4729 | In the example above, the first index is indexing into the |
| 4730 | '``%struct.ST*``' type, which is a pointer, yielding a '``%struct.ST``' |
| 4731 | = '``{ i32, double, %struct.RT }``' type, a structure. The second index |
| 4732 | indexes into the third element of the structure, yielding a |
| 4733 | '``%struct.RT``' = '``{ i8 , [10 x [20 x i32]], i8 }``' type, another |
| 4734 | structure. The third index indexes into the second element of the |
| 4735 | structure, yielding a '``[10 x [20 x i32]]``' type, an array. The two |
| 4736 | dimensions of the array are subscripted into, yielding an '``i32``' |
| 4737 | type. The '``getelementptr``' instruction returns a pointer to this |
| 4738 | element, thus computing a value of '``i32*``' type. |
| 4739 | |
| 4740 | Note that it is perfectly legal to index partially through a structure, |
| 4741 | returning a pointer to an inner element. Because of this, the LLVM code |
| 4742 | for the given testcase is equivalent to: |
| 4743 | |
| 4744 | .. code-block:: llvm |
| 4745 | |
| 4746 | define i32* @foo(%struct.ST* %s) { |
| 4747 | %t1 = getelementptr %struct.ST* %s, i32 1 ; yields %struct.ST*:%t1 |
| 4748 | %t2 = getelementptr %struct.ST* %t1, i32 0, i32 2 ; yields %struct.RT*:%t2 |
| 4749 | %t3 = getelementptr %struct.RT* %t2, i32 0, i32 1 ; yields [10 x [20 x i32]]*:%t3 |
| 4750 | %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5 ; yields [20 x i32]*:%t4 |
| 4751 | %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13 ; yields i32*:%t5 |
| 4752 | ret i32* %t5 |
| 4753 | } |
| 4754 | |
| 4755 | If the ``inbounds`` keyword is present, the result value of the |
| 4756 | ``getelementptr`` is a :ref:`poison value <poisonvalues>` if the base |
| 4757 | pointer is not an *in bounds* address of an allocated object, or if any |
| 4758 | of the addresses that would be formed by successive addition of the |
| 4759 | offsets implied by the indices to the base address with infinitely |
| 4760 | precise signed arithmetic are not an *in bounds* address of that |
| 4761 | allocated object. The *in bounds* addresses for an allocated object are |
| 4762 | all the addresses that point into the object, plus the address one byte |
| 4763 | past the end. In cases where the base is a vector of pointers the |
| 4764 | ``inbounds`` keyword applies to each of the computations element-wise. |
| 4765 | |
| 4766 | If the ``inbounds`` keyword is not present, the offsets are added to the |
| 4767 | base address with silently-wrapping two's complement arithmetic. If the |
| 4768 | offsets have a different width from the pointer, they are sign-extended |
| 4769 | or truncated to the width of the pointer. The result value of the |
| 4770 | ``getelementptr`` may be outside the object pointed to by the base |
| 4771 | pointer. The result value may not necessarily be used to access memory |
| 4772 | though, even if it happens to point into allocated storage. See the |
| 4773 | :ref:`Pointer Aliasing Rules <pointeraliasing>` section for more |
| 4774 | information. |
| 4775 | |
| 4776 | The getelementptr instruction is often confusing. For some more insight |
| 4777 | into how it works, see :doc:`the getelementptr FAQ <GetElementPtr>`. |
| 4778 | |
| 4779 | Example: |
| 4780 | """""""" |
| 4781 | |
| 4782 | .. code-block:: llvm |
| 4783 | |
| 4784 | ; yields [12 x i8]*:aptr |
| 4785 | %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1 |
| 4786 | ; yields i8*:vptr |
| 4787 | %vptr = getelementptr {i32, <2 x i8>}* %svptr, i64 0, i32 1, i32 1 |
| 4788 | ; yields i8*:eptr |
| 4789 | %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1 |
| 4790 | ; yields i32*:iptr |
| 4791 | %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0 |
| 4792 | |
| 4793 | In cases where the pointer argument is a vector of pointers, each index |
| 4794 | must be a vector with the same number of elements. For example: |
| 4795 | |
| 4796 | .. code-block:: llvm |
| 4797 | |
| 4798 | %A = getelementptr <4 x i8*> %ptrs, <4 x i64> %offsets, |
| 4799 | |
| 4800 | Conversion Operations |
| 4801 | --------------------- |
| 4802 | |
| 4803 | The instructions in this category are the conversion instructions |
| 4804 | (casting) which all take a single operand and a type. They perform |
| 4805 | various bit conversions on the operand. |
| 4806 | |
| 4807 | '``trunc .. to``' Instruction |
| 4808 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4809 | |
| 4810 | Syntax: |
| 4811 | """"""" |
| 4812 | |
| 4813 | :: |
| 4814 | |
| 4815 | <result> = trunc <ty> <value> to <ty2> ; yields ty2 |
| 4816 | |
| 4817 | Overview: |
| 4818 | """"""""" |
| 4819 | |
| 4820 | The '``trunc``' instruction truncates its operand to the type ``ty2``. |
| 4821 | |
| 4822 | Arguments: |
| 4823 | """""""""" |
| 4824 | |
| 4825 | The '``trunc``' instruction takes a value to trunc, and a type to trunc |
| 4826 | it to. Both types must be of :ref:`integer <t_integer>` types, or vectors |
| 4827 | of the same number of integers. The bit size of the ``value`` must be |
| 4828 | larger than the bit size of the destination type, ``ty2``. Equal sized |
| 4829 | types are not allowed. |
| 4830 | |
| 4831 | Semantics: |
| 4832 | """""""""" |
| 4833 | |
| 4834 | The '``trunc``' instruction truncates the high order bits in ``value`` |
| 4835 | and converts the remaining bits to ``ty2``. Since the source size must |
| 4836 | be larger than the destination size, ``trunc`` cannot be a *no-op cast*. |
| 4837 | It will always truncate bits. |
| 4838 | |
| 4839 | Example: |
| 4840 | """""""" |
| 4841 | |
| 4842 | .. code-block:: llvm |
| 4843 | |
| 4844 | %X = trunc i32 257 to i8 ; yields i8:1 |
| 4845 | %Y = trunc i32 123 to i1 ; yields i1:true |
| 4846 | %Z = trunc i32 122 to i1 ; yields i1:false |
| 4847 | %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> ; yields <i8 8, i8 7> |
| 4848 | |
| 4849 | '``zext .. to``' Instruction |
| 4850 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4851 | |
| 4852 | Syntax: |
| 4853 | """"""" |
| 4854 | |
| 4855 | :: |
| 4856 | |
| 4857 | <result> = zext <ty> <value> to <ty2> ; yields ty2 |
| 4858 | |
| 4859 | Overview: |
| 4860 | """"""""" |
| 4861 | |
| 4862 | The '``zext``' instruction zero extends its operand to type ``ty2``. |
| 4863 | |
| 4864 | Arguments: |
| 4865 | """""""""" |
| 4866 | |
| 4867 | The '``zext``' instruction takes a value to cast, and a type to cast it |
| 4868 | to. Both types must be of :ref:`integer <t_integer>` types, or vectors of |
| 4869 | the same number of integers. The bit size of the ``value`` must be |
| 4870 | smaller than the bit size of the destination type, ``ty2``. |
| 4871 | |
| 4872 | Semantics: |
| 4873 | """""""""" |
| 4874 | |
| 4875 | The ``zext`` fills the high order bits of the ``value`` with zero bits |
| 4876 | until it reaches the size of the destination type, ``ty2``. |
| 4877 | |
| 4878 | When zero extending from i1, the result will always be either 0 or 1. |
| 4879 | |
| 4880 | Example: |
| 4881 | """""""" |
| 4882 | |
| 4883 | .. code-block:: llvm |
| 4884 | |
| 4885 | %X = zext i32 257 to i64 ; yields i64:257 |
| 4886 | %Y = zext i1 true to i32 ; yields i32:1 |
| 4887 | %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7> |
| 4888 | |
| 4889 | '``sext .. to``' Instruction |
| 4890 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4891 | |
| 4892 | Syntax: |
| 4893 | """"""" |
| 4894 | |
| 4895 | :: |
| 4896 | |
| 4897 | <result> = sext <ty> <value> to <ty2> ; yields ty2 |
| 4898 | |
| 4899 | Overview: |
| 4900 | """"""""" |
| 4901 | |
| 4902 | The '``sext``' sign extends ``value`` to the type ``ty2``. |
| 4903 | |
| 4904 | Arguments: |
| 4905 | """""""""" |
| 4906 | |
| 4907 | The '``sext``' instruction takes a value to cast, and a type to cast it |
| 4908 | to. Both types must be of :ref:`integer <t_integer>` types, or vectors of |
| 4909 | the same number of integers. The bit size of the ``value`` must be |
| 4910 | smaller than the bit size of the destination type, ``ty2``. |
| 4911 | |
| 4912 | Semantics: |
| 4913 | """""""""" |
| 4914 | |
| 4915 | The '``sext``' instruction performs a sign extension by copying the sign |
| 4916 | bit (highest order bit) of the ``value`` until it reaches the bit size |
| 4917 | of the type ``ty2``. |
| 4918 | |
| 4919 | When sign extending from i1, the extension always results in -1 or 0. |
| 4920 | |
| 4921 | Example: |
| 4922 | """""""" |
| 4923 | |
| 4924 | .. code-block:: llvm |
| 4925 | |
| 4926 | %X = sext i8 -1 to i16 ; yields i16 :65535 |
| 4927 | %Y = sext i1 true to i32 ; yields i32:-1 |
| 4928 | %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7> |
| 4929 | |
| 4930 | '``fptrunc .. to``' Instruction |
| 4931 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4932 | |
| 4933 | Syntax: |
| 4934 | """"""" |
| 4935 | |
| 4936 | :: |
| 4937 | |
| 4938 | <result> = fptrunc <ty> <value> to <ty2> ; yields ty2 |
| 4939 | |
| 4940 | Overview: |
| 4941 | """"""""" |
| 4942 | |
| 4943 | The '``fptrunc``' instruction truncates ``value`` to type ``ty2``. |
| 4944 | |
| 4945 | Arguments: |
| 4946 | """""""""" |
| 4947 | |
| 4948 | The '``fptrunc``' instruction takes a :ref:`floating point <t_floating>` |
| 4949 | value to cast and a :ref:`floating point <t_floating>` type to cast it to. |
| 4950 | The size of ``value`` must be larger than the size of ``ty2``. This |
| 4951 | implies that ``fptrunc`` cannot be used to make a *no-op cast*. |
| 4952 | |
| 4953 | Semantics: |
| 4954 | """""""""" |
| 4955 | |
| 4956 | The '``fptrunc``' instruction truncates a ``value`` from a larger |
| 4957 | :ref:`floating point <t_floating>` type to a smaller :ref:`floating |
| 4958 | point <t_floating>` type. If the value cannot fit within the |
| 4959 | destination type, ``ty2``, then the results are undefined. |
| 4960 | |
| 4961 | Example: |
| 4962 | """""""" |
| 4963 | |
| 4964 | .. code-block:: llvm |
| 4965 | |
| 4966 | %X = fptrunc double 123.0 to float ; yields float:123.0 |
| 4967 | %Y = fptrunc double 1.0E+300 to float ; yields undefined |
| 4968 | |
| 4969 | '``fpext .. to``' Instruction |
| 4970 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 4971 | |
| 4972 | Syntax: |
| 4973 | """"""" |
| 4974 | |
| 4975 | :: |
| 4976 | |
| 4977 | <result> = fpext <ty> <value> to <ty2> ; yields ty2 |
| 4978 | |
| 4979 | Overview: |
| 4980 | """"""""" |
| 4981 | |
| 4982 | The '``fpext``' extends a floating point ``value`` to a larger floating |
| 4983 | point value. |
| 4984 | |
| 4985 | Arguments: |
| 4986 | """""""""" |
| 4987 | |
| 4988 | The '``fpext``' instruction takes a :ref:`floating point <t_floating>` |
| 4989 | ``value`` to cast, and a :ref:`floating point <t_floating>` type to cast it |
| 4990 | to. The source type must be smaller than the destination type. |
| 4991 | |
| 4992 | Semantics: |
| 4993 | """""""""" |
| 4994 | |
| 4995 | The '``fpext``' instruction extends the ``value`` from a smaller |
| 4996 | :ref:`floating point <t_floating>` type to a larger :ref:`floating |
| 4997 | point <t_floating>` type. The ``fpext`` cannot be used to make a |
| 4998 | *no-op cast* because it always changes bits. Use ``bitcast`` to make a |
| 4999 | *no-op cast* for a floating point cast. |
| 5000 | |
| 5001 | Example: |
| 5002 | """""""" |
| 5003 | |
| 5004 | .. code-block:: llvm |
| 5005 | |
| 5006 | %X = fpext float 3.125 to double ; yields double:3.125000e+00 |
| 5007 | %Y = fpext double %X to fp128 ; yields fp128:0xL00000000000000004000900000000000 |
| 5008 | |
| 5009 | '``fptoui .. to``' Instruction |
| 5010 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5011 | |
| 5012 | Syntax: |
| 5013 | """"""" |
| 5014 | |
| 5015 | :: |
| 5016 | |
| 5017 | <result> = fptoui <ty> <value> to <ty2> ; yields ty2 |
| 5018 | |
| 5019 | Overview: |
| 5020 | """"""""" |
| 5021 | |
| 5022 | The '``fptoui``' converts a floating point ``value`` to its unsigned |
| 5023 | integer equivalent of type ``ty2``. |
| 5024 | |
| 5025 | Arguments: |
| 5026 | """""""""" |
| 5027 | |
| 5028 | The '``fptoui``' instruction takes a value to cast, which must be a |
| 5029 | scalar or vector :ref:`floating point <t_floating>` value, and a type to |
| 5030 | cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If |
| 5031 | ``ty`` is a vector floating point type, ``ty2`` must be a vector integer |
| 5032 | type with the same number of elements as ``ty`` |
| 5033 | |
| 5034 | Semantics: |
| 5035 | """""""""" |
| 5036 | |
| 5037 | The '``fptoui``' instruction converts its :ref:`floating |
| 5038 | point <t_floating>` operand into the nearest (rounding towards zero) |
| 5039 | unsigned integer value. If the value cannot fit in ``ty2``, the results |
| 5040 | are undefined. |
| 5041 | |
| 5042 | Example: |
| 5043 | """""""" |
| 5044 | |
| 5045 | .. code-block:: llvm |
| 5046 | |
| 5047 | %X = fptoui double 123.0 to i32 ; yields i32:123 |
| 5048 | %Y = fptoui float 1.0E+300 to i1 ; yields undefined:1 |
| 5049 | %Z = fptoui float 1.04E+17 to i8 ; yields undefined:1 |
| 5050 | |
| 5051 | '``fptosi .. to``' Instruction |
| 5052 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5053 | |
| 5054 | Syntax: |
| 5055 | """"""" |
| 5056 | |
| 5057 | :: |
| 5058 | |
| 5059 | <result> = fptosi <ty> <value> to <ty2> ; yields ty2 |
| 5060 | |
| 5061 | Overview: |
| 5062 | """"""""" |
| 5063 | |
| 5064 | The '``fptosi``' instruction converts :ref:`floating point <t_floating>` |
| 5065 | ``value`` to type ``ty2``. |
| 5066 | |
| 5067 | Arguments: |
| 5068 | """""""""" |
| 5069 | |
| 5070 | The '``fptosi``' instruction takes a value to cast, which must be a |
| 5071 | scalar or vector :ref:`floating point <t_floating>` value, and a type to |
| 5072 | cast it to ``ty2``, which must be an :ref:`integer <t_integer>` type. If |
| 5073 | ``ty`` is a vector floating point type, ``ty2`` must be a vector integer |
| 5074 | type with the same number of elements as ``ty`` |
| 5075 | |
| 5076 | Semantics: |
| 5077 | """""""""" |
| 5078 | |
| 5079 | The '``fptosi``' instruction converts its :ref:`floating |
| 5080 | point <t_floating>` operand into the nearest (rounding towards zero) |
| 5081 | signed integer value. If the value cannot fit in ``ty2``, the results |
| 5082 | are undefined. |
| 5083 | |
| 5084 | Example: |
| 5085 | """""""" |
| 5086 | |
| 5087 | .. code-block:: llvm |
| 5088 | |
| 5089 | %X = fptosi double -123.0 to i32 ; yields i32:-123 |
| 5090 | %Y = fptosi float 1.0E-247 to i1 ; yields undefined:1 |
| 5091 | %Z = fptosi float 1.04E+17 to i8 ; yields undefined:1 |
| 5092 | |
| 5093 | '``uitofp .. to``' Instruction |
| 5094 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5095 | |
| 5096 | Syntax: |
| 5097 | """"""" |
| 5098 | |
| 5099 | :: |
| 5100 | |
| 5101 | <result> = uitofp <ty> <value> to <ty2> ; yields ty2 |
| 5102 | |
| 5103 | Overview: |
| 5104 | """"""""" |
| 5105 | |
| 5106 | The '``uitofp``' instruction regards ``value`` as an unsigned integer |
| 5107 | and converts that value to the ``ty2`` type. |
| 5108 | |
| 5109 | Arguments: |
| 5110 | """""""""" |
| 5111 | |
| 5112 | The '``uitofp``' instruction takes a value to cast, which must be a |
| 5113 | scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to |
| 5114 | ``ty2``, which must be an :ref:`floating point <t_floating>` type. If |
| 5115 | ``ty`` is a vector integer type, ``ty2`` must be a vector floating point |
| 5116 | type with the same number of elements as ``ty`` |
| 5117 | |
| 5118 | Semantics: |
| 5119 | """""""""" |
| 5120 | |
| 5121 | The '``uitofp``' instruction interprets its operand as an unsigned |
| 5122 | integer quantity and converts it to the corresponding floating point |
| 5123 | value. If the value cannot fit in the floating point value, the results |
| 5124 | are undefined. |
| 5125 | |
| 5126 | Example: |
| 5127 | """""""" |
| 5128 | |
| 5129 | .. code-block:: llvm |
| 5130 | |
| 5131 | %X = uitofp i32 257 to float ; yields float:257.0 |
| 5132 | %Y = uitofp i8 -1 to double ; yields double:255.0 |
| 5133 | |
| 5134 | '``sitofp .. to``' Instruction |
| 5135 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5136 | |
| 5137 | Syntax: |
| 5138 | """"""" |
| 5139 | |
| 5140 | :: |
| 5141 | |
| 5142 | <result> = sitofp <ty> <value> to <ty2> ; yields ty2 |
| 5143 | |
| 5144 | Overview: |
| 5145 | """"""""" |
| 5146 | |
| 5147 | The '``sitofp``' instruction regards ``value`` as a signed integer and |
| 5148 | converts that value to the ``ty2`` type. |
| 5149 | |
| 5150 | Arguments: |
| 5151 | """""""""" |
| 5152 | |
| 5153 | The '``sitofp``' instruction takes a value to cast, which must be a |
| 5154 | scalar or vector :ref:`integer <t_integer>` value, and a type to cast it to |
| 5155 | ``ty2``, which must be an :ref:`floating point <t_floating>` type. If |
| 5156 | ``ty`` is a vector integer type, ``ty2`` must be a vector floating point |
| 5157 | type with the same number of elements as ``ty`` |
| 5158 | |
| 5159 | Semantics: |
| 5160 | """""""""" |
| 5161 | |
| 5162 | The '``sitofp``' instruction interprets its operand as a signed integer |
| 5163 | quantity and converts it to the corresponding floating point value. If |
| 5164 | the value cannot fit in the floating point value, the results are |
| 5165 | undefined. |
| 5166 | |
| 5167 | Example: |
| 5168 | """""""" |
| 5169 | |
| 5170 | .. code-block:: llvm |
| 5171 | |
| 5172 | %X = sitofp i32 257 to float ; yields float:257.0 |
| 5173 | %Y = sitofp i8 -1 to double ; yields double:-1.0 |
| 5174 | |
| 5175 | .. _i_ptrtoint: |
| 5176 | |
| 5177 | '``ptrtoint .. to``' Instruction |
| 5178 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5179 | |
| 5180 | Syntax: |
| 5181 | """"""" |
| 5182 | |
| 5183 | :: |
| 5184 | |
| 5185 | <result> = ptrtoint <ty> <value> to <ty2> ; yields ty2 |
| 5186 | |
| 5187 | Overview: |
| 5188 | """"""""" |
| 5189 | |
| 5190 | The '``ptrtoint``' instruction converts the pointer or a vector of |
| 5191 | pointers ``value`` to the integer (or vector of integers) type ``ty2``. |
| 5192 | |
| 5193 | Arguments: |
| 5194 | """""""""" |
| 5195 | |
| 5196 | The '``ptrtoint``' instruction takes a ``value`` to cast, which must be |
| 5197 | a a value of type :ref:`pointer <t_pointer>` or a vector of pointers, and a |
| 5198 | type to cast it to ``ty2``, which must be an :ref:`integer <t_integer>` or |
| 5199 | a vector of integers type. |
| 5200 | |
| 5201 | Semantics: |
| 5202 | """""""""" |
| 5203 | |
| 5204 | The '``ptrtoint``' instruction converts ``value`` to integer type |
| 5205 | ``ty2`` by interpreting the pointer value as an integer and either |
| 5206 | truncating or zero extending that value to the size of the integer type. |
| 5207 | If ``value`` is smaller than ``ty2`` then a zero extension is done. If |
| 5208 | ``value`` is larger than ``ty2`` then a truncation is done. If they are |
| 5209 | the same size, then nothing is done (*no-op cast*) other than a type |
| 5210 | change. |
| 5211 | |
| 5212 | Example: |
| 5213 | """""""" |
| 5214 | |
| 5215 | .. code-block:: llvm |
| 5216 | |
| 5217 | %X = ptrtoint i32* %P to i8 ; yields truncation on 32-bit architecture |
| 5218 | %Y = ptrtoint i32* %P to i64 ; yields zero extension on 32-bit architecture |
| 5219 | %Z = ptrtoint <4 x i32*> %P to <4 x i64>; yields vector zero extension for a vector of addresses on 32-bit architecture |
| 5220 | |
| 5221 | .. _i_inttoptr: |
| 5222 | |
| 5223 | '``inttoptr .. to``' Instruction |
| 5224 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5225 | |
| 5226 | Syntax: |
| 5227 | """"""" |
| 5228 | |
| 5229 | :: |
| 5230 | |
| 5231 | <result> = inttoptr <ty> <value> to <ty2> ; yields ty2 |
| 5232 | |
| 5233 | Overview: |
| 5234 | """"""""" |
| 5235 | |
| 5236 | The '``inttoptr``' instruction converts an integer ``value`` to a |
| 5237 | pointer type, ``ty2``. |
| 5238 | |
| 5239 | Arguments: |
| 5240 | """""""""" |
| 5241 | |
| 5242 | The '``inttoptr``' instruction takes an :ref:`integer <t_integer>` value to |
| 5243 | cast, and a type to cast it to, which must be a :ref:`pointer <t_pointer>` |
| 5244 | type. |
| 5245 | |
| 5246 | Semantics: |
| 5247 | """""""""" |
| 5248 | |
| 5249 | The '``inttoptr``' instruction converts ``value`` to type ``ty2`` by |
| 5250 | applying either a zero extension or a truncation depending on the size |
| 5251 | of the integer ``value``. If ``value`` is larger than the size of a |
| 5252 | pointer then a truncation is done. If ``value`` is smaller than the size |
| 5253 | of a pointer then a zero extension is done. If they are the same size, |
| 5254 | nothing is done (*no-op cast*). |
| 5255 | |
| 5256 | Example: |
| 5257 | """""""" |
| 5258 | |
| 5259 | .. code-block:: llvm |
| 5260 | |
| 5261 | %X = inttoptr i32 255 to i32* ; yields zero extension on 64-bit architecture |
| 5262 | %Y = inttoptr i32 255 to i32* ; yields no-op on 32-bit architecture |
| 5263 | %Z = inttoptr i64 0 to i32* ; yields truncation on 32-bit architecture |
| 5264 | %Z = inttoptr <4 x i32> %G to <4 x i8*>; yields truncation of vector G to four pointers |
| 5265 | |
| 5266 | .. _i_bitcast: |
| 5267 | |
| 5268 | '``bitcast .. to``' Instruction |
| 5269 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5270 | |
| 5271 | Syntax: |
| 5272 | """"""" |
| 5273 | |
| 5274 | :: |
| 5275 | |
| 5276 | <result> = bitcast <ty> <value> to <ty2> ; yields ty2 |
| 5277 | |
| 5278 | Overview: |
| 5279 | """"""""" |
| 5280 | |
| 5281 | The '``bitcast``' instruction converts ``value`` to type ``ty2`` without |
| 5282 | changing any bits. |
| 5283 | |
| 5284 | Arguments: |
| 5285 | """""""""" |
| 5286 | |
| 5287 | The '``bitcast``' instruction takes a value to cast, which must be a |
| 5288 | non-aggregate first class value, and a type to cast it to, which must |
| 5289 | also be a non-aggregate :ref:`first class <t_firstclass>` type. The bit |
| 5290 | sizes of ``value`` and the destination type, ``ty2``, must be identical. |
| 5291 | If the source type is a pointer, the destination type must also be a |
| 5292 | pointer. This instruction supports bitwise conversion of vectors to |
| 5293 | integers and to vectors of other types (as long as they have the same |
| 5294 | size). |
| 5295 | |
| 5296 | Semantics: |
| 5297 | """""""""" |
| 5298 | |
| 5299 | The '``bitcast``' instruction converts ``value`` to type ``ty2``. It is |
| 5300 | always a *no-op cast* because no bits change with this conversion. The |
| 5301 | conversion is done as if the ``value`` had been stored to memory and |
| 5302 | read back as type ``ty2``. Pointer (or vector of pointers) types may |
| 5303 | only be converted to other pointer (or vector of pointers) types with |
| 5304 | this instruction. To convert pointers to other types, use the |
| 5305 | :ref:`inttoptr <i_inttoptr>` or :ref:`ptrtoint <i_ptrtoint>` instructions |
| 5306 | first. |
| 5307 | |
| 5308 | Example: |
| 5309 | """""""" |
| 5310 | |
| 5311 | .. code-block:: llvm |
| 5312 | |
| 5313 | %X = bitcast i8 255 to i8 ; yields i8 :-1 |
| 5314 | %Y = bitcast i32* %x to sint* ; yields sint*:%x |
| 5315 | %Z = bitcast <2 x int> %V to i64; ; yields i64: %V |
| 5316 | %Z = bitcast <2 x i32*> %V to <2 x i64*> ; yields <2 x i64*> |
| 5317 | |
| 5318 | .. _otherops: |
| 5319 | |
| 5320 | Other Operations |
| 5321 | ---------------- |
| 5322 | |
| 5323 | The instructions in this category are the "miscellaneous" instructions, |
| 5324 | which defy better classification. |
| 5325 | |
| 5326 | .. _i_icmp: |
| 5327 | |
| 5328 | '``icmp``' Instruction |
| 5329 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 5330 | |
| 5331 | Syntax: |
| 5332 | """"""" |
| 5333 | |
| 5334 | :: |
| 5335 | |
| 5336 | <result> = icmp <cond> <ty> <op1>, <op2> ; yields {i1} or {<N x i1>}:result |
| 5337 | |
| 5338 | Overview: |
| 5339 | """"""""" |
| 5340 | |
| 5341 | The '``icmp``' instruction returns a boolean value or a vector of |
| 5342 | boolean values based on comparison of its two integer, integer vector, |
| 5343 | pointer, or pointer vector operands. |
| 5344 | |
| 5345 | Arguments: |
| 5346 | """""""""" |
| 5347 | |
| 5348 | The '``icmp``' instruction takes three operands. The first operand is |
| 5349 | the condition code indicating the kind of comparison to perform. It is |
| 5350 | not a value, just a keyword. The possible condition code are: |
| 5351 | |
| 5352 | #. ``eq``: equal |
| 5353 | #. ``ne``: not equal |
| 5354 | #. ``ugt``: unsigned greater than |
| 5355 | #. ``uge``: unsigned greater or equal |
| 5356 | #. ``ult``: unsigned less than |
| 5357 | #. ``ule``: unsigned less or equal |
| 5358 | #. ``sgt``: signed greater than |
| 5359 | #. ``sge``: signed greater or equal |
| 5360 | #. ``slt``: signed less than |
| 5361 | #. ``sle``: signed less or equal |
| 5362 | |
| 5363 | The remaining two arguments must be :ref:`integer <t_integer>` or |
| 5364 | :ref:`pointer <t_pointer>` or integer :ref:`vector <t_vector>` typed. They |
| 5365 | must also be identical types. |
| 5366 | |
| 5367 | Semantics: |
| 5368 | """""""""" |
| 5369 | |
| 5370 | The '``icmp``' compares ``op1`` and ``op2`` according to the condition |
| 5371 | code given as ``cond``. The comparison performed always yields either an |
| 5372 | :ref:`i1 <t_integer>` or vector of ``i1`` result, as follows: |
| 5373 | |
| 5374 | #. ``eq``: yields ``true`` if the operands are equal, ``false`` |
| 5375 | otherwise. No sign interpretation is necessary or performed. |
| 5376 | #. ``ne``: yields ``true`` if the operands are unequal, ``false`` |
| 5377 | otherwise. No sign interpretation is necessary or performed. |
| 5378 | #. ``ugt``: interprets the operands as unsigned values and yields |
| 5379 | ``true`` if ``op1`` is greater than ``op2``. |
| 5380 | #. ``uge``: interprets the operands as unsigned values and yields |
| 5381 | ``true`` if ``op1`` is greater than or equal to ``op2``. |
| 5382 | #. ``ult``: interprets the operands as unsigned values and yields |
| 5383 | ``true`` if ``op1`` is less than ``op2``. |
| 5384 | #. ``ule``: interprets the operands as unsigned values and yields |
| 5385 | ``true`` if ``op1`` is less than or equal to ``op2``. |
| 5386 | #. ``sgt``: interprets the operands as signed values and yields ``true`` |
| 5387 | if ``op1`` is greater than ``op2``. |
| 5388 | #. ``sge``: interprets the operands as signed values and yields ``true`` |
| 5389 | if ``op1`` is greater than or equal to ``op2``. |
| 5390 | #. ``slt``: interprets the operands as signed values and yields ``true`` |
| 5391 | if ``op1`` is less than ``op2``. |
| 5392 | #. ``sle``: interprets the operands as signed values and yields ``true`` |
| 5393 | if ``op1`` is less than or equal to ``op2``. |
| 5394 | |
| 5395 | If the operands are :ref:`pointer <t_pointer>` typed, the pointer values |
| 5396 | are compared as if they were integers. |
| 5397 | |
| 5398 | If the operands are integer vectors, then they are compared element by |
| 5399 | element. The result is an ``i1`` vector with the same number of elements |
| 5400 | as the values being compared. Otherwise, the result is an ``i1``. |
| 5401 | |
| 5402 | Example: |
| 5403 | """""""" |
| 5404 | |
| 5405 | .. code-block:: llvm |
| 5406 | |
| 5407 | <result> = icmp eq i32 4, 5 ; yields: result=false |
| 5408 | <result> = icmp ne float* %X, %X ; yields: result=false |
| 5409 | <result> = icmp ult i16 4, 5 ; yields: result=true |
| 5410 | <result> = icmp sgt i16 4, 5 ; yields: result=false |
| 5411 | <result> = icmp ule i16 -4, 5 ; yields: result=false |
| 5412 | <result> = icmp sge i16 4, 5 ; yields: result=false |
| 5413 | |
| 5414 | Note that the code generator does not yet support vector types with the |
| 5415 | ``icmp`` instruction. |
| 5416 | |
| 5417 | .. _i_fcmp: |
| 5418 | |
| 5419 | '``fcmp``' Instruction |
| 5420 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 5421 | |
| 5422 | Syntax: |
| 5423 | """"""" |
| 5424 | |
| 5425 | :: |
| 5426 | |
| 5427 | <result> = fcmp <cond> <ty> <op1>, <op2> ; yields {i1} or {<N x i1>}:result |
| 5428 | |
| 5429 | Overview: |
| 5430 | """"""""" |
| 5431 | |
| 5432 | The '``fcmp``' instruction returns a boolean value or vector of boolean |
| 5433 | values based on comparison of its operands. |
| 5434 | |
| 5435 | If the operands are floating point scalars, then the result type is a |
| 5436 | boolean (:ref:`i1 <t_integer>`). |
| 5437 | |
| 5438 | If the operands are floating point vectors, then the result type is a |
| 5439 | vector of boolean with the same number of elements as the operands being |
| 5440 | compared. |
| 5441 | |
| 5442 | Arguments: |
| 5443 | """""""""" |
| 5444 | |
| 5445 | The '``fcmp``' instruction takes three operands. The first operand is |
| 5446 | the condition code indicating the kind of comparison to perform. It is |
| 5447 | not a value, just a keyword. The possible condition code are: |
| 5448 | |
| 5449 | #. ``false``: no comparison, always returns false |
| 5450 | #. ``oeq``: ordered and equal |
| 5451 | #. ``ogt``: ordered and greater than |
| 5452 | #. ``oge``: ordered and greater than or equal |
| 5453 | #. ``olt``: ordered and less than |
| 5454 | #. ``ole``: ordered and less than or equal |
| 5455 | #. ``one``: ordered and not equal |
| 5456 | #. ``ord``: ordered (no nans) |
| 5457 | #. ``ueq``: unordered or equal |
| 5458 | #. ``ugt``: unordered or greater than |
| 5459 | #. ``uge``: unordered or greater than or equal |
| 5460 | #. ``ult``: unordered or less than |
| 5461 | #. ``ule``: unordered or less than or equal |
| 5462 | #. ``une``: unordered or not equal |
| 5463 | #. ``uno``: unordered (either nans) |
| 5464 | #. ``true``: no comparison, always returns true |
| 5465 | |
| 5466 | *Ordered* means that neither operand is a QNAN while *unordered* means |
| 5467 | that either operand may be a QNAN. |
| 5468 | |
| 5469 | Each of ``val1`` and ``val2`` arguments must be either a :ref:`floating |
| 5470 | point <t_floating>` type or a :ref:`vector <t_vector>` of floating point |
| 5471 | type. They must have identical types. |
| 5472 | |
| 5473 | Semantics: |
| 5474 | """""""""" |
| 5475 | |
| 5476 | The '``fcmp``' instruction compares ``op1`` and ``op2`` according to the |
| 5477 | condition code given as ``cond``. If the operands are vectors, then the |
| 5478 | vectors are compared element by element. Each comparison performed |
| 5479 | always yields an :ref:`i1 <t_integer>` result, as follows: |
| 5480 | |
| 5481 | #. ``false``: always yields ``false``, regardless of operands. |
| 5482 | #. ``oeq``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5483 | is equal to ``op2``. |
| 5484 | #. ``ogt``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5485 | is greater than ``op2``. |
| 5486 | #. ``oge``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5487 | is greater than or equal to ``op2``. |
| 5488 | #. ``olt``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5489 | is less than ``op2``. |
| 5490 | #. ``ole``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5491 | is less than or equal to ``op2``. |
| 5492 | #. ``one``: yields ``true`` if both operands are not a QNAN and ``op1`` |
| 5493 | is not equal to ``op2``. |
| 5494 | #. ``ord``: yields ``true`` if both operands are not a QNAN. |
| 5495 | #. ``ueq``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5496 | equal to ``op2``. |
| 5497 | #. ``ugt``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5498 | greater than ``op2``. |
| 5499 | #. ``uge``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5500 | greater than or equal to ``op2``. |
| 5501 | #. ``ult``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5502 | less than ``op2``. |
| 5503 | #. ``ule``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5504 | less than or equal to ``op2``. |
| 5505 | #. ``une``: yields ``true`` if either operand is a QNAN or ``op1`` is |
| 5506 | not equal to ``op2``. |
| 5507 | #. ``uno``: yields ``true`` if either operand is a QNAN. |
| 5508 | #. ``true``: always yields ``true``, regardless of operands. |
| 5509 | |
| 5510 | Example: |
| 5511 | """""""" |
| 5512 | |
| 5513 | .. code-block:: llvm |
| 5514 | |
| 5515 | <result> = fcmp oeq float 4.0, 5.0 ; yields: result=false |
| 5516 | <result> = fcmp one float 4.0, 5.0 ; yields: result=true |
| 5517 | <result> = fcmp olt float 4.0, 5.0 ; yields: result=true |
| 5518 | <result> = fcmp ueq double 1.0, 2.0 ; yields: result=false |
| 5519 | |
| 5520 | Note that the code generator does not yet support vector types with the |
| 5521 | ``fcmp`` instruction. |
| 5522 | |
| 5523 | .. _i_phi: |
| 5524 | |
| 5525 | '``phi``' Instruction |
| 5526 | ^^^^^^^^^^^^^^^^^^^^^ |
| 5527 | |
| 5528 | Syntax: |
| 5529 | """"""" |
| 5530 | |
| 5531 | :: |
| 5532 | |
| 5533 | <result> = phi <ty> [ <val0>, <label0>], ... |
| 5534 | |
| 5535 | Overview: |
| 5536 | """"""""" |
| 5537 | |
| 5538 | The '``phi``' instruction is used to implement the φ node in the SSA |
| 5539 | graph representing the function. |
| 5540 | |
| 5541 | Arguments: |
| 5542 | """""""""" |
| 5543 | |
| 5544 | The type of the incoming values is specified with the first type field. |
| 5545 | After this, the '``phi``' instruction takes a list of pairs as |
| 5546 | arguments, with one pair for each predecessor basic block of the current |
| 5547 | block. Only values of :ref:`first class <t_firstclass>` type may be used as |
| 5548 | the value arguments to the PHI node. Only labels may be used as the |
| 5549 | label arguments. |
| 5550 | |
| 5551 | There must be no non-phi instructions between the start of a basic block |
| 5552 | and the PHI instructions: i.e. PHI instructions must be first in a basic |
| 5553 | block. |
| 5554 | |
| 5555 | For the purposes of the SSA form, the use of each incoming value is |
| 5556 | deemed to occur on the edge from the corresponding predecessor block to |
| 5557 | the current block (but after any definition of an '``invoke``' |
| 5558 | instruction's return value on the same edge). |
| 5559 | |
| 5560 | Semantics: |
| 5561 | """""""""" |
| 5562 | |
| 5563 | At runtime, the '``phi``' instruction logically takes on the value |
| 5564 | specified by the pair corresponding to the predecessor basic block that |
| 5565 | executed just prior to the current block. |
| 5566 | |
| 5567 | Example: |
| 5568 | """""""" |
| 5569 | |
| 5570 | .. code-block:: llvm |
| 5571 | |
| 5572 | Loop: ; Infinite loop that counts from 0 on up... |
| 5573 | %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ] |
| 5574 | %nextindvar = add i32 %indvar, 1 |
| 5575 | br label %Loop |
| 5576 | |
| 5577 | .. _i_select: |
| 5578 | |
| 5579 | '``select``' Instruction |
| 5580 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5581 | |
| 5582 | Syntax: |
| 5583 | """"""" |
| 5584 | |
| 5585 | :: |
| 5586 | |
| 5587 | <result> = select selty <cond>, <ty> <val1>, <ty> <val2> ; yields ty |
| 5588 | |
| 5589 | selty is either i1 or {<N x i1>} |
| 5590 | |
| 5591 | Overview: |
| 5592 | """"""""" |
| 5593 | |
| 5594 | The '``select``' instruction is used to choose one value based on a |
| 5595 | condition, without branching. |
| 5596 | |
| 5597 | Arguments: |
| 5598 | """""""""" |
| 5599 | |
| 5600 | The '``select``' instruction requires an 'i1' value or a vector of 'i1' |
| 5601 | values indicating the condition, and two values of the same :ref:`first |
| 5602 | class <t_firstclass>` type. If the val1/val2 are vectors and the |
| 5603 | condition is a scalar, then entire vectors are selected, not individual |
| 5604 | elements. |
| 5605 | |
| 5606 | Semantics: |
| 5607 | """""""""" |
| 5608 | |
| 5609 | If the condition is an i1 and it evaluates to 1, the instruction returns |
| 5610 | the first value argument; otherwise, it returns the second value |
| 5611 | argument. |
| 5612 | |
| 5613 | If the condition is a vector of i1, then the value arguments must be |
| 5614 | vectors of the same size, and the selection is done element by element. |
| 5615 | |
| 5616 | Example: |
| 5617 | """""""" |
| 5618 | |
| 5619 | .. code-block:: llvm |
| 5620 | |
| 5621 | %X = select i1 true, i8 17, i8 42 ; yields i8:17 |
| 5622 | |
| 5623 | .. _i_call: |
| 5624 | |
| 5625 | '``call``' Instruction |
| 5626 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 5627 | |
| 5628 | Syntax: |
| 5629 | """"""" |
| 5630 | |
| 5631 | :: |
| 5632 | |
| 5633 | <result> = [tail] call [cconv] [ret attrs] <ty> [<fnty>*] <fnptrval>(<function args>) [fn attrs] |
| 5634 | |
| 5635 | Overview: |
| 5636 | """"""""" |
| 5637 | |
| 5638 | The '``call``' instruction represents a simple function call. |
| 5639 | |
| 5640 | Arguments: |
| 5641 | """""""""" |
| 5642 | |
| 5643 | This instruction requires several arguments: |
| 5644 | |
| 5645 | #. The optional "tail" marker indicates that the callee function does |
| 5646 | not access any allocas or varargs in the caller. Note that calls may |
| 5647 | be marked "tail" even if they do not occur before a |
| 5648 | :ref:`ret <i_ret>` instruction. If the "tail" marker is present, the |
| 5649 | function call is eligible for tail call optimization, but `might not |
| 5650 | in fact be optimized into a jump <CodeGenerator.html#tailcallopt>`_. |
| 5651 | The code generator may optimize calls marked "tail" with either 1) |
| 5652 | automatic `sibling call |
| 5653 | optimization <CodeGenerator.html#sibcallopt>`_ when the caller and |
| 5654 | callee have matching signatures, or 2) forced tail call optimization |
| 5655 | when the following extra requirements are met: |
| 5656 | |
| 5657 | - Caller and callee both have the calling convention ``fastcc``. |
| 5658 | - The call is in tail position (ret immediately follows call and ret |
| 5659 | uses value of call or is void). |
| 5660 | - Option ``-tailcallopt`` is enabled, or |
| 5661 | ``llvm::GuaranteedTailCallOpt`` is ``true``. |
| 5662 | - `Platform specific constraints are |
| 5663 | met. <CodeGenerator.html#tailcallopt>`_ |
| 5664 | |
| 5665 | #. The optional "cconv" marker indicates which :ref:`calling |
| 5666 | convention <callingconv>` the call should use. If none is |
| 5667 | specified, the call defaults to using C calling conventions. The |
| 5668 | calling convention of the call must match the calling convention of |
| 5669 | the target function, or else the behavior is undefined. |
| 5670 | #. The optional :ref:`Parameter Attributes <paramattrs>` list for return |
| 5671 | values. Only '``zeroext``', '``signext``', and '``inreg``' attributes |
| 5672 | are valid here. |
| 5673 | #. '``ty``': the type of the call instruction itself which is also the |
| 5674 | type of the return value. Functions that return no value are marked |
| 5675 | ``void``. |
| 5676 | #. '``fnty``': shall be the signature of the pointer to function value |
| 5677 | being invoked. The argument types must match the types implied by |
| 5678 | this signature. This type can be omitted if the function is not |
| 5679 | varargs and if the function type does not return a pointer to a |
| 5680 | function. |
| 5681 | #. '``fnptrval``': An LLVM value containing a pointer to a function to |
| 5682 | be invoked. In most cases, this is a direct function invocation, but |
| 5683 | indirect ``call``'s are just as possible, calling an arbitrary pointer |
| 5684 | to function value. |
| 5685 | #. '``function args``': argument list whose types match the function |
| 5686 | signature argument types and parameter attributes. All arguments must |
| 5687 | be of :ref:`first class <t_firstclass>` type. If the function signature |
| 5688 | indicates the function accepts a variable number of arguments, the |
| 5689 | extra arguments can be specified. |
| 5690 | #. The optional :ref:`function attributes <fnattrs>` list. Only |
| 5691 | '``noreturn``', '``nounwind``', '``readonly``' and '``readnone``' |
| 5692 | attributes are valid here. |
| 5693 | |
| 5694 | Semantics: |
| 5695 | """""""""" |
| 5696 | |
| 5697 | The '``call``' instruction is used to cause control flow to transfer to |
| 5698 | a specified function, with its incoming arguments bound to the specified |
| 5699 | values. Upon a '``ret``' instruction in the called function, control |
| 5700 | flow continues with the instruction after the function call, and the |
| 5701 | return value of the function is bound to the result argument. |
| 5702 | |
| 5703 | Example: |
| 5704 | """""""" |
| 5705 | |
| 5706 | .. code-block:: llvm |
| 5707 | |
| 5708 | %retval = call i32 @test(i32 %argc) |
| 5709 | call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42) ; yields i32 |
| 5710 | %X = tail call i32 @foo() ; yields i32 |
| 5711 | %Y = tail call fastcc i32 @foo() ; yields i32 |
| 5712 | call void %foo(i8 97 signext) |
| 5713 | |
| 5714 | %struct.A = type { i32, i8 } |
| 5715 | %r = call %struct.A @foo() ; yields { 32, i8 } |
| 5716 | %gr = extractvalue %struct.A %r, 0 ; yields i32 |
| 5717 | %gr1 = extractvalue %struct.A %r, 1 ; yields i8 |
| 5718 | %Z = call void @foo() noreturn ; indicates that %foo never returns normally |
| 5719 | %ZZ = call zeroext i32 @bar() ; Return value is %zero extended |
| 5720 | |
| 5721 | llvm treats calls to some functions with names and arguments that match |
| 5722 | the standard C99 library as being the C99 library functions, and may |
| 5723 | perform optimizations or generate code for them under that assumption. |
| 5724 | This is something we'd like to change in the future to provide better |
| 5725 | support for freestanding environments and non-C-based languages. |
| 5726 | |
| 5727 | .. _i_va_arg: |
| 5728 | |
| 5729 | '``va_arg``' Instruction |
| 5730 | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5731 | |
| 5732 | Syntax: |
| 5733 | """"""" |
| 5734 | |
| 5735 | :: |
| 5736 | |
| 5737 | <resultval> = va_arg <va_list*> <arglist>, <argty> |
| 5738 | |
| 5739 | Overview: |
| 5740 | """"""""" |
| 5741 | |
| 5742 | The '``va_arg``' instruction is used to access arguments passed through |
| 5743 | the "variable argument" area of a function call. It is used to implement |
| 5744 | the ``va_arg`` macro in C. |
| 5745 | |
| 5746 | Arguments: |
| 5747 | """""""""" |
| 5748 | |
| 5749 | This instruction takes a ``va_list*`` value and the type of the |
| 5750 | argument. It returns a value of the specified argument type and |
| 5751 | increments the ``va_list`` to point to the next argument. The actual |
| 5752 | type of ``va_list`` is target specific. |
| 5753 | |
| 5754 | Semantics: |
| 5755 | """""""""" |
| 5756 | |
| 5757 | The '``va_arg``' instruction loads an argument of the specified type |
| 5758 | from the specified ``va_list`` and causes the ``va_list`` to point to |
| 5759 | the next argument. For more information, see the variable argument |
| 5760 | handling :ref:`Intrinsic Functions <int_varargs>`. |
| 5761 | |
| 5762 | It is legal for this instruction to be called in a function which does |
| 5763 | not take a variable number of arguments, for example, the ``vfprintf`` |
| 5764 | function. |
| 5765 | |
| 5766 | ``va_arg`` is an LLVM instruction instead of an :ref:`intrinsic |
| 5767 | function <intrinsics>` because it takes a type as an argument. |
| 5768 | |
| 5769 | Example: |
| 5770 | """""""" |
| 5771 | |
| 5772 | See the :ref:`variable argument processing <int_varargs>` section. |
| 5773 | |
| 5774 | Note that the code generator does not yet fully support va\_arg on many |
| 5775 | targets. Also, it does not currently support va\_arg with aggregate |
| 5776 | types on any target. |
| 5777 | |
| 5778 | .. _i_landingpad: |
| 5779 | |
| 5780 | '``landingpad``' Instruction |
| 5781 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5782 | |
| 5783 | Syntax: |
| 5784 | """"""" |
| 5785 | |
| 5786 | :: |
| 5787 | |
| 5788 | <resultval> = landingpad <resultty> personality <type> <pers_fn> <clause>+ |
| 5789 | <resultval> = landingpad <resultty> personality <type> <pers_fn> cleanup <clause>* |
| 5790 | |
| 5791 | <clause> := catch <type> <value> |
| 5792 | <clause> := filter <array constant type> <array constant> |
| 5793 | |
| 5794 | Overview: |
| 5795 | """"""""" |
| 5796 | |
| 5797 | The '``landingpad``' instruction is used by `LLVM's exception handling |
| 5798 | system <ExceptionHandling.html#overview>`_ to specify that a basic block |
| 5799 | is a landing pad — one where the exception lands, and corresponds to the |
| 5800 | code found in the ``catch`` portion of a ``try``/``catch`` sequence. It |
| 5801 | defines values supplied by the personality function (``pers_fn``) upon |
| 5802 | re-entry to the function. The ``resultval`` has the type ``resultty``. |
| 5803 | |
| 5804 | Arguments: |
| 5805 | """""""""" |
| 5806 | |
| 5807 | This instruction takes a ``pers_fn`` value. This is the personality |
| 5808 | function associated with the unwinding mechanism. The optional |
| 5809 | ``cleanup`` flag indicates that the landing pad block is a cleanup. |
| 5810 | |
| 5811 | A ``clause`` begins with the clause type — ``catch`` or ``filter`` — and |
| 5812 | contains the global variable representing the "type" that may be caught |
| 5813 | or filtered respectively. Unlike the ``catch`` clause, the ``filter`` |
| 5814 | clause takes an array constant as its argument. Use |
| 5815 | "``[0 x i8**] undef``" for a filter which cannot throw. The |
| 5816 | '``landingpad``' instruction must contain *at least* one ``clause`` or |
| 5817 | the ``cleanup`` flag. |
| 5818 | |
| 5819 | Semantics: |
| 5820 | """""""""" |
| 5821 | |
| 5822 | The '``landingpad``' instruction defines the values which are set by the |
| 5823 | personality function (``pers_fn``) upon re-entry to the function, and |
| 5824 | therefore the "result type" of the ``landingpad`` instruction. As with |
| 5825 | calling conventions, how the personality function results are |
| 5826 | represented in LLVM IR is target specific. |
| 5827 | |
| 5828 | The clauses are applied in order from top to bottom. If two |
| 5829 | ``landingpad`` instructions are merged together through inlining, the |
| 5830 | clauses from the calling function are appended to the list of clauses. |
| 5831 | When the call stack is being unwound due to an exception being thrown, |
| 5832 | the exception is compared against each ``clause`` in turn. If it doesn't |
| 5833 | match any of the clauses, and the ``cleanup`` flag is not set, then |
| 5834 | unwinding continues further up the call stack. |
| 5835 | |
| 5836 | The ``landingpad`` instruction has several restrictions: |
| 5837 | |
| 5838 | - A landing pad block is a basic block which is the unwind destination |
| 5839 | of an '``invoke``' instruction. |
| 5840 | - A landing pad block must have a '``landingpad``' instruction as its |
| 5841 | first non-PHI instruction. |
| 5842 | - There can be only one '``landingpad``' instruction within the landing |
| 5843 | pad block. |
| 5844 | - A basic block that is not a landing pad block may not include a |
| 5845 | '``landingpad``' instruction. |
| 5846 | - All '``landingpad``' instructions in a function must have the same |
| 5847 | personality function. |
| 5848 | |
| 5849 | Example: |
| 5850 | """""""" |
| 5851 | |
| 5852 | .. code-block:: llvm |
| 5853 | |
| 5854 | ;; A landing pad which can catch an integer. |
| 5855 | %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 |
| 5856 | catch i8** @_ZTIi |
| 5857 | ;; A landing pad that is a cleanup. |
| 5858 | %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 |
| 5859 | cleanup |
| 5860 | ;; A landing pad which can catch an integer and can only throw a double. |
| 5861 | %res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 |
| 5862 | catch i8** @_ZTIi |
| 5863 | filter [1 x i8**] [@_ZTId] |
| 5864 | |
| 5865 | .. _intrinsics: |
| 5866 | |
| 5867 | Intrinsic Functions |
| 5868 | =================== |
| 5869 | |
| 5870 | LLVM supports the notion of an "intrinsic function". These functions |
| 5871 | have well known names and semantics and are required to follow certain |
| 5872 | restrictions. Overall, these intrinsics represent an extension mechanism |
| 5873 | for the LLVM language that does not require changing all of the |
| 5874 | transformations in LLVM when adding to the language (or the bitcode |
| 5875 | reader/writer, the parser, etc...). |
| 5876 | |
| 5877 | Intrinsic function names must all start with an "``llvm.``" prefix. This |
| 5878 | prefix is reserved in LLVM for intrinsic names; thus, function names may |
| 5879 | not begin with this prefix. Intrinsic functions must always be external |
| 5880 | functions: you cannot define the body of intrinsic functions. Intrinsic |
| 5881 | functions may only be used in call or invoke instructions: it is illegal |
| 5882 | to take the address of an intrinsic function. Additionally, because |
| 5883 | intrinsic functions are part of the LLVM language, it is required if any |
| 5884 | are added that they be documented here. |
| 5885 | |
| 5886 | Some intrinsic functions can be overloaded, i.e., the intrinsic |
| 5887 | represents a family of functions that perform the same operation but on |
| 5888 | different data types. Because LLVM can represent over 8 million |
| 5889 | different integer types, overloading is used commonly to allow an |
| 5890 | intrinsic function to operate on any integer type. One or more of the |
| 5891 | argument types or the result type can be overloaded to accept any |
| 5892 | integer type. Argument types may also be defined as exactly matching a |
| 5893 | previous argument's type or the result type. This allows an intrinsic |
| 5894 | function which accepts multiple arguments, but needs all of them to be |
| 5895 | of the same type, to only be overloaded with respect to a single |
| 5896 | argument or the result. |
| 5897 | |
| 5898 | Overloaded intrinsics will have the names of its overloaded argument |
| 5899 | types encoded into its function name, each preceded by a period. Only |
| 5900 | those types which are overloaded result in a name suffix. Arguments |
| 5901 | whose type is matched against another type do not. For example, the |
| 5902 | ``llvm.ctpop`` function can take an integer of any width and returns an |
| 5903 | integer of exactly the same integer width. This leads to a family of |
| 5904 | functions such as ``i8 @llvm.ctpop.i8(i8 %val)`` and |
| 5905 | ``i29 @llvm.ctpop.i29(i29 %val)``. Only one type, the return type, is |
| 5906 | overloaded, and only one type suffix is required. Because the argument's |
| 5907 | type is matched against the return type, it does not require its own |
| 5908 | name suffix. |
| 5909 | |
| 5910 | To learn how to add an intrinsic function, please see the `Extending |
| 5911 | LLVM Guide <ExtendingLLVM.html>`_. |
| 5912 | |
| 5913 | .. _int_varargs: |
| 5914 | |
| 5915 | Variable Argument Handling Intrinsics |
| 5916 | ------------------------------------- |
| 5917 | |
| 5918 | Variable argument support is defined in LLVM with the |
| 5919 | :ref:`va_arg <i_va_arg>` instruction and these three intrinsic |
| 5920 | functions. These functions are related to the similarly named macros |
| 5921 | defined in the ``<stdarg.h>`` header file. |
| 5922 | |
| 5923 | All of these functions operate on arguments that use a target-specific |
| 5924 | value type "``va_list``". The LLVM assembly language reference manual |
| 5925 | does not define what this type is, so all transformations should be |
| 5926 | prepared to handle these functions regardless of the type used. |
| 5927 | |
| 5928 | This example shows how the :ref:`va_arg <i_va_arg>` instruction and the |
| 5929 | variable argument handling intrinsic functions are used. |
| 5930 | |
| 5931 | .. code-block:: llvm |
| 5932 | |
| 5933 | define i32 @test(i32 %X, ...) { |
| 5934 | ; Initialize variable argument processing |
| 5935 | %ap = alloca i8* |
| 5936 | %ap2 = bitcast i8** %ap to i8* |
| 5937 | call void @llvm.va_start(i8* %ap2) |
| 5938 | |
| 5939 | ; Read a single integer argument |
| 5940 | %tmp = va_arg i8** %ap, i32 |
| 5941 | |
| 5942 | ; Demonstrate usage of llvm.va_copy and llvm.va_end |
| 5943 | %aq = alloca i8* |
| 5944 | %aq2 = bitcast i8** %aq to i8* |
| 5945 | call void @llvm.va_copy(i8* %aq2, i8* %ap2) |
| 5946 | call void @llvm.va_end(i8* %aq2) |
| 5947 | |
| 5948 | ; Stop processing of arguments. |
| 5949 | call void @llvm.va_end(i8* %ap2) |
| 5950 | ret i32 %tmp |
| 5951 | } |
| 5952 | |
| 5953 | declare void @llvm.va_start(i8*) |
| 5954 | declare void @llvm.va_copy(i8*, i8*) |
| 5955 | declare void @llvm.va_end(i8*) |
| 5956 | |
| 5957 | .. _int_va_start: |
| 5958 | |
| 5959 | '``llvm.va_start``' Intrinsic |
| 5960 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5961 | |
| 5962 | Syntax: |
| 5963 | """"""" |
| 5964 | |
| 5965 | :: |
| 5966 | |
| 5967 | declare void %llvm.va_start(i8* <arglist>) |
| 5968 | |
| 5969 | Overview: |
| 5970 | """"""""" |
| 5971 | |
| 5972 | The '``llvm.va_start``' intrinsic initializes ``*<arglist>`` for |
| 5973 | subsequent use by ``va_arg``. |
| 5974 | |
| 5975 | Arguments: |
| 5976 | """""""""" |
| 5977 | |
| 5978 | The argument is a pointer to a ``va_list`` element to initialize. |
| 5979 | |
| 5980 | Semantics: |
| 5981 | """""""""" |
| 5982 | |
| 5983 | The '``llvm.va_start``' intrinsic works just like the ``va_start`` macro |
| 5984 | available in C. In a target-dependent way, it initializes the |
| 5985 | ``va_list`` element to which the argument points, so that the next call |
| 5986 | to ``va_arg`` will produce the first variable argument passed to the |
| 5987 | function. Unlike the C ``va_start`` macro, this intrinsic does not need |
| 5988 | to know the last argument of the function as the compiler can figure |
| 5989 | that out. |
| 5990 | |
| 5991 | '``llvm.va_end``' Intrinsic |
| 5992 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 5993 | |
| 5994 | Syntax: |
| 5995 | """"""" |
| 5996 | |
| 5997 | :: |
| 5998 | |
| 5999 | declare void @llvm.va_end(i8* <arglist>) |
| 6000 | |
| 6001 | Overview: |
| 6002 | """"""""" |
| 6003 | |
| 6004 | The '``llvm.va_end``' intrinsic destroys ``*<arglist>``, which has been |
| 6005 | initialized previously with ``llvm.va_start`` or ``llvm.va_copy``. |
| 6006 | |
| 6007 | Arguments: |
| 6008 | """""""""" |
| 6009 | |
| 6010 | The argument is a pointer to a ``va_list`` to destroy. |
| 6011 | |
| 6012 | Semantics: |
| 6013 | """""""""" |
| 6014 | |
| 6015 | The '``llvm.va_end``' intrinsic works just like the ``va_end`` macro |
| 6016 | available in C. In a target-dependent way, it destroys the ``va_list`` |
| 6017 | element to which the argument points. Calls to |
| 6018 | :ref:`llvm.va_start <int_va_start>` and |
| 6019 | :ref:`llvm.va_copy <int_va_copy>` must be matched exactly with calls to |
| 6020 | ``llvm.va_end``. |
| 6021 | |
| 6022 | .. _int_va_copy: |
| 6023 | |
| 6024 | '``llvm.va_copy``' Intrinsic |
| 6025 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6026 | |
| 6027 | Syntax: |
| 6028 | """"""" |
| 6029 | |
| 6030 | :: |
| 6031 | |
| 6032 | declare void @llvm.va_copy(i8* <destarglist>, i8* <srcarglist>) |
| 6033 | |
| 6034 | Overview: |
| 6035 | """"""""" |
| 6036 | |
| 6037 | The '``llvm.va_copy``' intrinsic copies the current argument position |
| 6038 | from the source argument list to the destination argument list. |
| 6039 | |
| 6040 | Arguments: |
| 6041 | """""""""" |
| 6042 | |
| 6043 | The first argument is a pointer to a ``va_list`` element to initialize. |
| 6044 | The second argument is a pointer to a ``va_list`` element to copy from. |
| 6045 | |
| 6046 | Semantics: |
| 6047 | """""""""" |
| 6048 | |
| 6049 | The '``llvm.va_copy``' intrinsic works just like the ``va_copy`` macro |
| 6050 | available in C. In a target-dependent way, it copies the source |
| 6051 | ``va_list`` element into the destination ``va_list`` element. This |
| 6052 | intrinsic is necessary because the `` llvm.va_start`` intrinsic may be |
| 6053 | arbitrarily complex and require, for example, memory allocation. |
| 6054 | |
| 6055 | Accurate Garbage Collection Intrinsics |
| 6056 | -------------------------------------- |
| 6057 | |
| 6058 | LLVM support for `Accurate Garbage Collection <GarbageCollection.html>`_ |
| 6059 | (GC) requires the implementation and generation of these intrinsics. |
| 6060 | These intrinsics allow identification of :ref:`GC roots on the |
| 6061 | stack <int_gcroot>`, as well as garbage collector implementations that |
| 6062 | require :ref:`read <int_gcread>` and :ref:`write <int_gcwrite>` barriers. |
| 6063 | Front-ends for type-safe garbage collected languages should generate |
| 6064 | these intrinsics to make use of the LLVM garbage collectors. For more |
| 6065 | details, see `Accurate Garbage Collection with |
| 6066 | LLVM <GarbageCollection.html>`_. |
| 6067 | |
| 6068 | The garbage collection intrinsics only operate on objects in the generic |
| 6069 | address space (address space zero). |
| 6070 | |
| 6071 | .. _int_gcroot: |
| 6072 | |
| 6073 | '``llvm.gcroot``' Intrinsic |
| 6074 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6075 | |
| 6076 | Syntax: |
| 6077 | """"""" |
| 6078 | |
| 6079 | :: |
| 6080 | |
| 6081 | declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata) |
| 6082 | |
| 6083 | Overview: |
| 6084 | """"""""" |
| 6085 | |
| 6086 | The '``llvm.gcroot``' intrinsic declares the existence of a GC root to |
| 6087 | the code generator, and allows some metadata to be associated with it. |
| 6088 | |
| 6089 | Arguments: |
| 6090 | """""""""" |
| 6091 | |
| 6092 | The first argument specifies the address of a stack object that contains |
| 6093 | the root pointer. The second pointer (which must be either a constant or |
| 6094 | a global value address) contains the meta-data to be associated with the |
| 6095 | root. |
| 6096 | |
| 6097 | Semantics: |
| 6098 | """""""""" |
| 6099 | |
| 6100 | At runtime, a call to this intrinsic stores a null pointer into the |
| 6101 | "ptrloc" location. At compile-time, the code generator generates |
| 6102 | information to allow the runtime to find the pointer at GC safe points. |
| 6103 | The '``llvm.gcroot``' intrinsic may only be used in a function which |
| 6104 | :ref:`specifies a GC algorithm <gc>`. |
| 6105 | |
| 6106 | .. _int_gcread: |
| 6107 | |
| 6108 | '``llvm.gcread``' Intrinsic |
| 6109 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6110 | |
| 6111 | Syntax: |
| 6112 | """"""" |
| 6113 | |
| 6114 | :: |
| 6115 | |
| 6116 | declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr) |
| 6117 | |
| 6118 | Overview: |
| 6119 | """"""""" |
| 6120 | |
| 6121 | The '``llvm.gcread``' intrinsic identifies reads of references from heap |
| 6122 | locations, allowing garbage collector implementations that require read |
| 6123 | barriers. |
| 6124 | |
| 6125 | Arguments: |
| 6126 | """""""""" |
| 6127 | |
| 6128 | The second argument is the address to read from, which should be an |
| 6129 | address allocated from the garbage collector. The first object is a |
| 6130 | pointer to the start of the referenced object, if needed by the language |
| 6131 | runtime (otherwise null). |
| 6132 | |
| 6133 | Semantics: |
| 6134 | """""""""" |
| 6135 | |
| 6136 | The '``llvm.gcread``' intrinsic has the same semantics as a load |
| 6137 | instruction, but may be replaced with substantially more complex code by |
| 6138 | the garbage collector runtime, as needed. The '``llvm.gcread``' |
| 6139 | intrinsic may only be used in a function which :ref:`specifies a GC |
| 6140 | algorithm <gc>`. |
| 6141 | |
| 6142 | .. _int_gcwrite: |
| 6143 | |
| 6144 | '``llvm.gcwrite``' Intrinsic |
| 6145 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6146 | |
| 6147 | Syntax: |
| 6148 | """"""" |
| 6149 | |
| 6150 | :: |
| 6151 | |
| 6152 | declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2) |
| 6153 | |
| 6154 | Overview: |
| 6155 | """"""""" |
| 6156 | |
| 6157 | The '``llvm.gcwrite``' intrinsic identifies writes of references to heap |
| 6158 | locations, allowing garbage collector implementations that require write |
| 6159 | barriers (such as generational or reference counting collectors). |
| 6160 | |
| 6161 | Arguments: |
| 6162 | """""""""" |
| 6163 | |
| 6164 | The first argument is the reference to store, the second is the start of |
| 6165 | the object to store it to, and the third is the address of the field of |
| 6166 | Obj to store to. If the runtime does not require a pointer to the |
| 6167 | object, Obj may be null. |
| 6168 | |
| 6169 | Semantics: |
| 6170 | """""""""" |
| 6171 | |
| 6172 | The '``llvm.gcwrite``' intrinsic has the same semantics as a store |
| 6173 | instruction, but may be replaced with substantially more complex code by |
| 6174 | the garbage collector runtime, as needed. The '``llvm.gcwrite``' |
| 6175 | intrinsic may only be used in a function which :ref:`specifies a GC |
| 6176 | algorithm <gc>`. |
| 6177 | |
| 6178 | Code Generator Intrinsics |
| 6179 | ------------------------- |
| 6180 | |
| 6181 | These intrinsics are provided by LLVM to expose special features that |
| 6182 | may only be implemented with code generator support. |
| 6183 | |
| 6184 | '``llvm.returnaddress``' Intrinsic |
| 6185 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6186 | |
| 6187 | Syntax: |
| 6188 | """"""" |
| 6189 | |
| 6190 | :: |
| 6191 | |
| 6192 | declare i8 *@llvm.returnaddress(i32 <level>) |
| 6193 | |
| 6194 | Overview: |
| 6195 | """"""""" |
| 6196 | |
| 6197 | The '``llvm.returnaddress``' intrinsic attempts to compute a |
| 6198 | target-specific value indicating the return address of the current |
| 6199 | function or one of its callers. |
| 6200 | |
| 6201 | Arguments: |
| 6202 | """""""""" |
| 6203 | |
| 6204 | The argument to this intrinsic indicates which function to return the |
| 6205 | address for. Zero indicates the calling function, one indicates its |
| 6206 | caller, etc. The argument is **required** to be a constant integer |
| 6207 | value. |
| 6208 | |
| 6209 | Semantics: |
| 6210 | """""""""" |
| 6211 | |
| 6212 | The '``llvm.returnaddress``' intrinsic either returns a pointer |
| 6213 | indicating the return address of the specified call frame, or zero if it |
| 6214 | cannot be identified. The value returned by this intrinsic is likely to |
| 6215 | be incorrect or 0 for arguments other than zero, so it should only be |
| 6216 | used for debugging purposes. |
| 6217 | |
| 6218 | Note that calling this intrinsic does not prevent function inlining or |
| 6219 | other aggressive transformations, so the value returned may not be that |
| 6220 | of the obvious source-language caller. |
| 6221 | |
| 6222 | '``llvm.frameaddress``' Intrinsic |
| 6223 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6224 | |
| 6225 | Syntax: |
| 6226 | """"""" |
| 6227 | |
| 6228 | :: |
| 6229 | |
| 6230 | declare i8* @llvm.frameaddress(i32 <level>) |
| 6231 | |
| 6232 | Overview: |
| 6233 | """"""""" |
| 6234 | |
| 6235 | The '``llvm.frameaddress``' intrinsic attempts to return the |
| 6236 | target-specific frame pointer value for the specified stack frame. |
| 6237 | |
| 6238 | Arguments: |
| 6239 | """""""""" |
| 6240 | |
| 6241 | The argument to this intrinsic indicates which function to return the |
| 6242 | frame pointer for. Zero indicates the calling function, one indicates |
| 6243 | its caller, etc. The argument is **required** to be a constant integer |
| 6244 | value. |
| 6245 | |
| 6246 | Semantics: |
| 6247 | """""""""" |
| 6248 | |
| 6249 | The '``llvm.frameaddress``' intrinsic either returns a pointer |
| 6250 | indicating the frame address of the specified call frame, or zero if it |
| 6251 | cannot be identified. The value returned by this intrinsic is likely to |
| 6252 | be incorrect or 0 for arguments other than zero, so it should only be |
| 6253 | used for debugging purposes. |
| 6254 | |
| 6255 | Note that calling this intrinsic does not prevent function inlining or |
| 6256 | other aggressive transformations, so the value returned may not be that |
| 6257 | of the obvious source-language caller. |
| 6258 | |
| 6259 | .. _int_stacksave: |
| 6260 | |
| 6261 | '``llvm.stacksave``' Intrinsic |
| 6262 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6263 | |
| 6264 | Syntax: |
| 6265 | """"""" |
| 6266 | |
| 6267 | :: |
| 6268 | |
| 6269 | declare i8* @llvm.stacksave() |
| 6270 | |
| 6271 | Overview: |
| 6272 | """"""""" |
| 6273 | |
| 6274 | The '``llvm.stacksave``' intrinsic is used to remember the current state |
| 6275 | of the function stack, for use with |
| 6276 | :ref:`llvm.stackrestore <int_stackrestore>`. This is useful for |
| 6277 | implementing language features like scoped automatic variable sized |
| 6278 | arrays in C99. |
| 6279 | |
| 6280 | Semantics: |
| 6281 | """""""""" |
| 6282 | |
| 6283 | This intrinsic returns a opaque pointer value that can be passed to |
| 6284 | :ref:`llvm.stackrestore <int_stackrestore>`. When an |
| 6285 | ``llvm.stackrestore`` intrinsic is executed with a value saved from |
| 6286 | ``llvm.stacksave``, it effectively restores the state of the stack to |
| 6287 | the state it was in when the ``llvm.stacksave`` intrinsic executed. In |
| 6288 | practice, this pops any :ref:`alloca <i_alloca>` blocks from the stack that |
| 6289 | were allocated after the ``llvm.stacksave`` was executed. |
| 6290 | |
| 6291 | .. _int_stackrestore: |
| 6292 | |
| 6293 | '``llvm.stackrestore``' Intrinsic |
| 6294 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6295 | |
| 6296 | Syntax: |
| 6297 | """"""" |
| 6298 | |
| 6299 | :: |
| 6300 | |
| 6301 | declare void @llvm.stackrestore(i8* %ptr) |
| 6302 | |
| 6303 | Overview: |
| 6304 | """"""""" |
| 6305 | |
| 6306 | The '``llvm.stackrestore``' intrinsic is used to restore the state of |
| 6307 | the function stack to the state it was in when the corresponding |
| 6308 | :ref:`llvm.stacksave <int_stacksave>` intrinsic executed. This is |
| 6309 | useful for implementing language features like scoped automatic variable |
| 6310 | sized arrays in C99. |
| 6311 | |
| 6312 | Semantics: |
| 6313 | """""""""" |
| 6314 | |
| 6315 | See the description for :ref:`llvm.stacksave <int_stacksave>`. |
| 6316 | |
| 6317 | '``llvm.prefetch``' Intrinsic |
| 6318 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6319 | |
| 6320 | Syntax: |
| 6321 | """"""" |
| 6322 | |
| 6323 | :: |
| 6324 | |
| 6325 | declare void @llvm.prefetch(i8* <address>, i32 <rw>, i32 <locality>, i32 <cache type>) |
| 6326 | |
| 6327 | Overview: |
| 6328 | """"""""" |
| 6329 | |
| 6330 | The '``llvm.prefetch``' intrinsic is a hint to the code generator to |
| 6331 | insert a prefetch instruction if supported; otherwise, it is a noop. |
| 6332 | Prefetches have no effect on the behavior of the program but can change |
| 6333 | its performance characteristics. |
| 6334 | |
| 6335 | Arguments: |
| 6336 | """""""""" |
| 6337 | |
| 6338 | ``address`` is the address to be prefetched, ``rw`` is the specifier |
| 6339 | determining if the fetch should be for a read (0) or write (1), and |
| 6340 | ``locality`` is a temporal locality specifier ranging from (0) - no |
| 6341 | locality, to (3) - extremely local keep in cache. The ``cache type`` |
| 6342 | specifies whether the prefetch is performed on the data (1) or |
| 6343 | instruction (0) cache. The ``rw``, ``locality`` and ``cache type`` |
| 6344 | arguments must be constant integers. |
| 6345 | |
| 6346 | Semantics: |
| 6347 | """""""""" |
| 6348 | |
| 6349 | This intrinsic does not modify the behavior of the program. In |
| 6350 | particular, prefetches cannot trap and do not produce a value. On |
| 6351 | targets that support this intrinsic, the prefetch can provide hints to |
| 6352 | the processor cache for better performance. |
| 6353 | |
| 6354 | '``llvm.pcmarker``' Intrinsic |
| 6355 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6356 | |
| 6357 | Syntax: |
| 6358 | """"""" |
| 6359 | |
| 6360 | :: |
| 6361 | |
| 6362 | declare void @llvm.pcmarker(i32 <id>) |
| 6363 | |
| 6364 | Overview: |
| 6365 | """"""""" |
| 6366 | |
| 6367 | The '``llvm.pcmarker``' intrinsic is a method to export a Program |
| 6368 | Counter (PC) in a region of code to simulators and other tools. The |
| 6369 | method is target specific, but it is expected that the marker will use |
| 6370 | exported symbols to transmit the PC of the marker. The marker makes no |
| 6371 | guarantees that it will remain with any specific instruction after |
| 6372 | optimizations. It is possible that the presence of a marker will inhibit |
| 6373 | optimizations. The intended use is to be inserted after optimizations to |
| 6374 | allow correlations of simulation runs. |
| 6375 | |
| 6376 | Arguments: |
| 6377 | """""""""" |
| 6378 | |
| 6379 | ``id`` is a numerical id identifying the marker. |
| 6380 | |
| 6381 | Semantics: |
| 6382 | """""""""" |
| 6383 | |
| 6384 | This intrinsic does not modify the behavior of the program. Backends |
| 6385 | that do not support this intrinsic may ignore it. |
| 6386 | |
| 6387 | '``llvm.readcyclecounter``' Intrinsic |
| 6388 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6389 | |
| 6390 | Syntax: |
| 6391 | """"""" |
| 6392 | |
| 6393 | :: |
| 6394 | |
| 6395 | declare i64 @llvm.readcyclecounter() |
| 6396 | |
| 6397 | Overview: |
| 6398 | """"""""" |
| 6399 | |
| 6400 | The '``llvm.readcyclecounter``' intrinsic provides access to the cycle |
| 6401 | counter register (or similar low latency, high accuracy clocks) on those |
| 6402 | targets that support it. On X86, it should map to RDTSC. On Alpha, it |
| 6403 | should map to RPCC. As the backing counters overflow quickly (on the |
| 6404 | order of 9 seconds on alpha), this should only be used for small |
| 6405 | timings. |
| 6406 | |
| 6407 | Semantics: |
| 6408 | """""""""" |
| 6409 | |
| 6410 | When directly supported, reading the cycle counter should not modify any |
| 6411 | memory. Implementations are allowed to either return a application |
| 6412 | specific value or a system wide value. On backends without support, this |
| 6413 | is lowered to a constant 0. |
| 6414 | |
| 6415 | Standard C Library Intrinsics |
| 6416 | ----------------------------- |
| 6417 | |
| 6418 | LLVM provides intrinsics for a few important standard C library |
| 6419 | functions. These intrinsics allow source-language front-ends to pass |
| 6420 | information about the alignment of the pointer arguments to the code |
| 6421 | generator, providing opportunity for more efficient code generation. |
| 6422 | |
| 6423 | .. _int_memcpy: |
| 6424 | |
| 6425 | '``llvm.memcpy``' Intrinsic |
| 6426 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6427 | |
| 6428 | Syntax: |
| 6429 | """"""" |
| 6430 | |
| 6431 | This is an overloaded intrinsic. You can use ``llvm.memcpy`` on any |
| 6432 | integer bit width and for different address spaces. Not all targets |
| 6433 | support all bit widths however. |
| 6434 | |
| 6435 | :: |
| 6436 | |
| 6437 | declare void @llvm.memcpy.p0i8.p0i8.i32(i8* <dest>, i8* <src>, |
| 6438 | i32 <len>, i32 <align>, i1 <isvolatile>) |
| 6439 | declare void @llvm.memcpy.p0i8.p0i8.i64(i8* <dest>, i8* <src>, |
| 6440 | i64 <len>, i32 <align>, i1 <isvolatile>) |
| 6441 | |
| 6442 | Overview: |
| 6443 | """"""""" |
| 6444 | |
| 6445 | The '``llvm.memcpy.*``' intrinsics copy a block of memory from the |
| 6446 | source location to the destination location. |
| 6447 | |
| 6448 | Note that, unlike the standard libc function, the ``llvm.memcpy.*`` |
| 6449 | intrinsics do not return a value, takes extra alignment/isvolatile |
| 6450 | arguments and the pointers can be in specified address spaces. |
| 6451 | |
| 6452 | Arguments: |
| 6453 | """""""""" |
| 6454 | |
| 6455 | The first argument is a pointer to the destination, the second is a |
| 6456 | pointer to the source. The third argument is an integer argument |
| 6457 | specifying the number of bytes to copy, the fourth argument is the |
| 6458 | alignment of the source and destination locations, and the fifth is a |
| 6459 | boolean indicating a volatile access. |
| 6460 | |
| 6461 | If the call to this intrinsic has an alignment value that is not 0 or 1, |
| 6462 | then the caller guarantees that both the source and destination pointers |
| 6463 | are aligned to that boundary. |
| 6464 | |
| 6465 | If the ``isvolatile`` parameter is ``true``, the ``llvm.memcpy`` call is |
| 6466 | a :ref:`volatile operation <volatile>`. The detailed access behavior is not |
| 6467 | very cleanly specified and it is unwise to depend on it. |
| 6468 | |
| 6469 | Semantics: |
| 6470 | """""""""" |
| 6471 | |
| 6472 | The '``llvm.memcpy.*``' intrinsics copy a block of memory from the |
| 6473 | source location to the destination location, which are not allowed to |
| 6474 | overlap. It copies "len" bytes of memory over. If the argument is known |
| 6475 | to be aligned to some boundary, this can be specified as the fourth |
| 6476 | argument, otherwise it should be set to 0 or 1. |
| 6477 | |
| 6478 | '``llvm.memmove``' Intrinsic |
| 6479 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6480 | |
| 6481 | Syntax: |
| 6482 | """"""" |
| 6483 | |
| 6484 | This is an overloaded intrinsic. You can use llvm.memmove on any integer |
| 6485 | bit width and for different address space. Not all targets support all |
| 6486 | bit widths however. |
| 6487 | |
| 6488 | :: |
| 6489 | |
| 6490 | declare void @llvm.memmove.p0i8.p0i8.i32(i8* <dest>, i8* <src>, |
| 6491 | i32 <len>, i32 <align>, i1 <isvolatile>) |
| 6492 | declare void @llvm.memmove.p0i8.p0i8.i64(i8* <dest>, i8* <src>, |
| 6493 | i64 <len>, i32 <align>, i1 <isvolatile>) |
| 6494 | |
| 6495 | Overview: |
| 6496 | """"""""" |
| 6497 | |
| 6498 | The '``llvm.memmove.*``' intrinsics move a block of memory from the |
| 6499 | source location to the destination location. It is similar to the |
| 6500 | '``llvm.memcpy``' intrinsic but allows the two memory locations to |
| 6501 | overlap. |
| 6502 | |
| 6503 | Note that, unlike the standard libc function, the ``llvm.memmove.*`` |
| 6504 | intrinsics do not return a value, takes extra alignment/isvolatile |
| 6505 | arguments and the pointers can be in specified address spaces. |
| 6506 | |
| 6507 | Arguments: |
| 6508 | """""""""" |
| 6509 | |
| 6510 | The first argument is a pointer to the destination, the second is a |
| 6511 | pointer to the source. The third argument is an integer argument |
| 6512 | specifying the number of bytes to copy, the fourth argument is the |
| 6513 | alignment of the source and destination locations, and the fifth is a |
| 6514 | boolean indicating a volatile access. |
| 6515 | |
| 6516 | If the call to this intrinsic has an alignment value that is not 0 or 1, |
| 6517 | then the caller guarantees that the source and destination pointers are |
| 6518 | aligned to that boundary. |
| 6519 | |
| 6520 | If the ``isvolatile`` parameter is ``true``, the ``llvm.memmove`` call |
| 6521 | is a :ref:`volatile operation <volatile>`. The detailed access behavior is |
| 6522 | not very cleanly specified and it is unwise to depend on it. |
| 6523 | |
| 6524 | Semantics: |
| 6525 | """""""""" |
| 6526 | |
| 6527 | The '``llvm.memmove.*``' intrinsics copy a block of memory from the |
| 6528 | source location to the destination location, which may overlap. It |
| 6529 | copies "len" bytes of memory over. If the argument is known to be |
| 6530 | aligned to some boundary, this can be specified as the fourth argument, |
| 6531 | otherwise it should be set to 0 or 1. |
| 6532 | |
| 6533 | '``llvm.memset.*``' Intrinsics |
| 6534 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6535 | |
| 6536 | Syntax: |
| 6537 | """"""" |
| 6538 | |
| 6539 | This is an overloaded intrinsic. You can use llvm.memset on any integer |
| 6540 | bit width and for different address spaces. However, not all targets |
| 6541 | support all bit widths. |
| 6542 | |
| 6543 | :: |
| 6544 | |
| 6545 | declare void @llvm.memset.p0i8.i32(i8* <dest>, i8 <val>, |
| 6546 | i32 <len>, i32 <align>, i1 <isvolatile>) |
| 6547 | declare void @llvm.memset.p0i8.i64(i8* <dest>, i8 <val>, |
| 6548 | i64 <len>, i32 <align>, i1 <isvolatile>) |
| 6549 | |
| 6550 | Overview: |
| 6551 | """"""""" |
| 6552 | |
| 6553 | The '``llvm.memset.*``' intrinsics fill a block of memory with a |
| 6554 | particular byte value. |
| 6555 | |
| 6556 | Note that, unlike the standard libc function, the ``llvm.memset`` |
| 6557 | intrinsic does not return a value and takes extra alignment/volatile |
| 6558 | arguments. Also, the destination can be in an arbitrary address space. |
| 6559 | |
| 6560 | Arguments: |
| 6561 | """""""""" |
| 6562 | |
| 6563 | The first argument is a pointer to the destination to fill, the second |
| 6564 | is the byte value with which to fill it, the third argument is an |
| 6565 | integer argument specifying the number of bytes to fill, and the fourth |
| 6566 | argument is the known alignment of the destination location. |
| 6567 | |
| 6568 | If the call to this intrinsic has an alignment value that is not 0 or 1, |
| 6569 | then the caller guarantees that the destination pointer is aligned to |
| 6570 | that boundary. |
| 6571 | |
| 6572 | If the ``isvolatile`` parameter is ``true``, the ``llvm.memset`` call is |
| 6573 | a :ref:`volatile operation <volatile>`. The detailed access behavior is not |
| 6574 | very cleanly specified and it is unwise to depend on it. |
| 6575 | |
| 6576 | Semantics: |
| 6577 | """""""""" |
| 6578 | |
| 6579 | The '``llvm.memset.*``' intrinsics fill "len" bytes of memory starting |
| 6580 | at the destination location. If the argument is known to be aligned to |
| 6581 | some boundary, this can be specified as the fourth argument, otherwise |
| 6582 | it should be set to 0 or 1. |
| 6583 | |
| 6584 | '``llvm.sqrt.*``' Intrinsic |
| 6585 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6586 | |
| 6587 | Syntax: |
| 6588 | """"""" |
| 6589 | |
| 6590 | This is an overloaded intrinsic. You can use ``llvm.sqrt`` on any |
| 6591 | floating point or vector of floating point type. Not all targets support |
| 6592 | all types however. |
| 6593 | |
| 6594 | :: |
| 6595 | |
| 6596 | declare float @llvm.sqrt.f32(float %Val) |
| 6597 | declare double @llvm.sqrt.f64(double %Val) |
| 6598 | declare x86_fp80 @llvm.sqrt.f80(x86_fp80 %Val) |
| 6599 | declare fp128 @llvm.sqrt.f128(fp128 %Val) |
| 6600 | declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val) |
| 6601 | |
| 6602 | Overview: |
| 6603 | """"""""" |
| 6604 | |
| 6605 | The '``llvm.sqrt``' intrinsics return the sqrt of the specified operand, |
| 6606 | returning the same value as the libm '``sqrt``' functions would. Unlike |
| 6607 | ``sqrt`` in libm, however, ``llvm.sqrt`` has undefined behavior for |
| 6608 | negative numbers other than -0.0 (which allows for better optimization, |
| 6609 | because there is no need to worry about errno being set). |
| 6610 | ``llvm.sqrt(-0.0)`` is defined to return -0.0 like IEEE sqrt. |
| 6611 | |
| 6612 | Arguments: |
| 6613 | """""""""" |
| 6614 | |
| 6615 | The argument and return value are floating point numbers of the same |
| 6616 | type. |
| 6617 | |
| 6618 | Semantics: |
| 6619 | """""""""" |
| 6620 | |
| 6621 | This function returns the sqrt of the specified operand if it is a |
| 6622 | nonnegative floating point number. |
| 6623 | |
| 6624 | '``llvm.powi.*``' Intrinsic |
| 6625 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6626 | |
| 6627 | Syntax: |
| 6628 | """"""" |
| 6629 | |
| 6630 | This is an overloaded intrinsic. You can use ``llvm.powi`` on any |
| 6631 | floating point or vector of floating point type. Not all targets support |
| 6632 | all types however. |
| 6633 | |
| 6634 | :: |
| 6635 | |
| 6636 | declare float @llvm.powi.f32(float %Val, i32 %power) |
| 6637 | declare double @llvm.powi.f64(double %Val, i32 %power) |
| 6638 | declare x86_fp80 @llvm.powi.f80(x86_fp80 %Val, i32 %power) |
| 6639 | declare fp128 @llvm.powi.f128(fp128 %Val, i32 %power) |
| 6640 | declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128 %Val, i32 %power) |
| 6641 | |
| 6642 | Overview: |
| 6643 | """"""""" |
| 6644 | |
| 6645 | The '``llvm.powi.*``' intrinsics return the first operand raised to the |
| 6646 | specified (positive or negative) power. The order of evaluation of |
| 6647 | multiplications is not defined. When a vector of floating point type is |
| 6648 | used, the second argument remains a scalar integer value. |
| 6649 | |
| 6650 | Arguments: |
| 6651 | """""""""" |
| 6652 | |
| 6653 | The second argument is an integer power, and the first is a value to |
| 6654 | raise to that power. |
| 6655 | |
| 6656 | Semantics: |
| 6657 | """""""""" |
| 6658 | |
| 6659 | This function returns the first value raised to the second power with an |
| 6660 | unspecified sequence of rounding operations. |
| 6661 | |
| 6662 | '``llvm.sin.*``' Intrinsic |
| 6663 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6664 | |
| 6665 | Syntax: |
| 6666 | """"""" |
| 6667 | |
| 6668 | This is an overloaded intrinsic. You can use ``llvm.sin`` on any |
| 6669 | floating point or vector of floating point type. Not all targets support |
| 6670 | all types however. |
| 6671 | |
| 6672 | :: |
| 6673 | |
| 6674 | declare float @llvm.sin.f32(float %Val) |
| 6675 | declare double @llvm.sin.f64(double %Val) |
| 6676 | declare x86_fp80 @llvm.sin.f80(x86_fp80 %Val) |
| 6677 | declare fp128 @llvm.sin.f128(fp128 %Val) |
| 6678 | declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128 %Val) |
| 6679 | |
| 6680 | Overview: |
| 6681 | """"""""" |
| 6682 | |
| 6683 | The '``llvm.sin.*``' intrinsics return the sine of the operand. |
| 6684 | |
| 6685 | Arguments: |
| 6686 | """""""""" |
| 6687 | |
| 6688 | The argument and return value are floating point numbers of the same |
| 6689 | type. |
| 6690 | |
| 6691 | Semantics: |
| 6692 | """""""""" |
| 6693 | |
| 6694 | This function returns the sine of the specified operand, returning the |
| 6695 | same values as the libm ``sin`` functions would, and handles error |
| 6696 | conditions in the same way. |
| 6697 | |
| 6698 | '``llvm.cos.*``' Intrinsic |
| 6699 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6700 | |
| 6701 | Syntax: |
| 6702 | """"""" |
| 6703 | |
| 6704 | This is an overloaded intrinsic. You can use ``llvm.cos`` on any |
| 6705 | floating point or vector of floating point type. Not all targets support |
| 6706 | all types however. |
| 6707 | |
| 6708 | :: |
| 6709 | |
| 6710 | declare float @llvm.cos.f32(float %Val) |
| 6711 | declare double @llvm.cos.f64(double %Val) |
| 6712 | declare x86_fp80 @llvm.cos.f80(x86_fp80 %Val) |
| 6713 | declare fp128 @llvm.cos.f128(fp128 %Val) |
| 6714 | declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128 %Val) |
| 6715 | |
| 6716 | Overview: |
| 6717 | """"""""" |
| 6718 | |
| 6719 | The '``llvm.cos.*``' intrinsics return the cosine of the operand. |
| 6720 | |
| 6721 | Arguments: |
| 6722 | """""""""" |
| 6723 | |
| 6724 | The argument and return value are floating point numbers of the same |
| 6725 | type. |
| 6726 | |
| 6727 | Semantics: |
| 6728 | """""""""" |
| 6729 | |
| 6730 | This function returns the cosine of the specified operand, returning the |
| 6731 | same values as the libm ``cos`` functions would, and handles error |
| 6732 | conditions in the same way. |
| 6733 | |
| 6734 | '``llvm.pow.*``' Intrinsic |
| 6735 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6736 | |
| 6737 | Syntax: |
| 6738 | """"""" |
| 6739 | |
| 6740 | This is an overloaded intrinsic. You can use ``llvm.pow`` on any |
| 6741 | floating point or vector of floating point type. Not all targets support |
| 6742 | all types however. |
| 6743 | |
| 6744 | :: |
| 6745 | |
| 6746 | declare float @llvm.pow.f32(float %Val, float %Power) |
| 6747 | declare double @llvm.pow.f64(double %Val, double %Power) |
| 6748 | declare x86_fp80 @llvm.pow.f80(x86_fp80 %Val, x86_fp80 %Power) |
| 6749 | declare fp128 @llvm.pow.f128(fp128 %Val, fp128 %Power) |
| 6750 | declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128 %Val, ppc_fp128 Power) |
| 6751 | |
| 6752 | Overview: |
| 6753 | """"""""" |
| 6754 | |
| 6755 | The '``llvm.pow.*``' intrinsics return the first operand raised to the |
| 6756 | specified (positive or negative) power. |
| 6757 | |
| 6758 | Arguments: |
| 6759 | """""""""" |
| 6760 | |
| 6761 | The second argument is a floating point power, and the first is a value |
| 6762 | to raise to that power. |
| 6763 | |
| 6764 | Semantics: |
| 6765 | """""""""" |
| 6766 | |
| 6767 | This function returns the first value raised to the second power, |
| 6768 | returning the same values as the libm ``pow`` functions would, and |
| 6769 | handles error conditions in the same way. |
| 6770 | |
| 6771 | '``llvm.exp.*``' Intrinsic |
| 6772 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6773 | |
| 6774 | Syntax: |
| 6775 | """"""" |
| 6776 | |
| 6777 | This is an overloaded intrinsic. You can use ``llvm.exp`` on any |
| 6778 | floating point or vector of floating point type. Not all targets support |
| 6779 | all types however. |
| 6780 | |
| 6781 | :: |
| 6782 | |
| 6783 | declare float @llvm.exp.f32(float %Val) |
| 6784 | declare double @llvm.exp.f64(double %Val) |
| 6785 | declare x86_fp80 @llvm.exp.f80(x86_fp80 %Val) |
| 6786 | declare fp128 @llvm.exp.f128(fp128 %Val) |
| 6787 | declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128 %Val) |
| 6788 | |
| 6789 | Overview: |
| 6790 | """"""""" |
| 6791 | |
| 6792 | The '``llvm.exp.*``' intrinsics perform the exp function. |
| 6793 | |
| 6794 | Arguments: |
| 6795 | """""""""" |
| 6796 | |
| 6797 | The argument and return value are floating point numbers of the same |
| 6798 | type. |
| 6799 | |
| 6800 | Semantics: |
| 6801 | """""""""" |
| 6802 | |
| 6803 | This function returns the same values as the libm ``exp`` functions |
| 6804 | would, and handles error conditions in the same way. |
| 6805 | |
| 6806 | '``llvm.exp2.*``' Intrinsic |
| 6807 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6808 | |
| 6809 | Syntax: |
| 6810 | """"""" |
| 6811 | |
| 6812 | This is an overloaded intrinsic. You can use ``llvm.exp2`` on any |
| 6813 | floating point or vector of floating point type. Not all targets support |
| 6814 | all types however. |
| 6815 | |
| 6816 | :: |
| 6817 | |
| 6818 | declare float @llvm.exp2.f32(float %Val) |
| 6819 | declare double @llvm.exp2.f64(double %Val) |
| 6820 | declare x86_fp80 @llvm.exp2.f80(x86_fp80 %Val) |
| 6821 | declare fp128 @llvm.exp2.f128(fp128 %Val) |
| 6822 | declare ppc_fp128 @llvm.exp2.ppcf128(ppc_fp128 %Val) |
| 6823 | |
| 6824 | Overview: |
| 6825 | """"""""" |
| 6826 | |
| 6827 | The '``llvm.exp2.*``' intrinsics perform the exp2 function. |
| 6828 | |
| 6829 | Arguments: |
| 6830 | """""""""" |
| 6831 | |
| 6832 | The argument and return value are floating point numbers of the same |
| 6833 | type. |
| 6834 | |
| 6835 | Semantics: |
| 6836 | """""""""" |
| 6837 | |
| 6838 | This function returns the same values as the libm ``exp2`` functions |
| 6839 | would, and handles error conditions in the same way. |
| 6840 | |
| 6841 | '``llvm.log.*``' Intrinsic |
| 6842 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6843 | |
| 6844 | Syntax: |
| 6845 | """"""" |
| 6846 | |
| 6847 | This is an overloaded intrinsic. You can use ``llvm.log`` on any |
| 6848 | floating point or vector of floating point type. Not all targets support |
| 6849 | all types however. |
| 6850 | |
| 6851 | :: |
| 6852 | |
| 6853 | declare float @llvm.log.f32(float %Val) |
| 6854 | declare double @llvm.log.f64(double %Val) |
| 6855 | declare x86_fp80 @llvm.log.f80(x86_fp80 %Val) |
| 6856 | declare fp128 @llvm.log.f128(fp128 %Val) |
| 6857 | declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128 %Val) |
| 6858 | |
| 6859 | Overview: |
| 6860 | """"""""" |
| 6861 | |
| 6862 | The '``llvm.log.*``' intrinsics perform the log function. |
| 6863 | |
| 6864 | Arguments: |
| 6865 | """""""""" |
| 6866 | |
| 6867 | The argument and return value are floating point numbers of the same |
| 6868 | type. |
| 6869 | |
| 6870 | Semantics: |
| 6871 | """""""""" |
| 6872 | |
| 6873 | This function returns the same values as the libm ``log`` functions |
| 6874 | would, and handles error conditions in the same way. |
| 6875 | |
| 6876 | '``llvm.log10.*``' Intrinsic |
| 6877 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6878 | |
| 6879 | Syntax: |
| 6880 | """"""" |
| 6881 | |
| 6882 | This is an overloaded intrinsic. You can use ``llvm.log10`` on any |
| 6883 | floating point or vector of floating point type. Not all targets support |
| 6884 | all types however. |
| 6885 | |
| 6886 | :: |
| 6887 | |
| 6888 | declare float @llvm.log10.f32(float %Val) |
| 6889 | declare double @llvm.log10.f64(double %Val) |
| 6890 | declare x86_fp80 @llvm.log10.f80(x86_fp80 %Val) |
| 6891 | declare fp128 @llvm.log10.f128(fp128 %Val) |
| 6892 | declare ppc_fp128 @llvm.log10.ppcf128(ppc_fp128 %Val) |
| 6893 | |
| 6894 | Overview: |
| 6895 | """"""""" |
| 6896 | |
| 6897 | The '``llvm.log10.*``' intrinsics perform the log10 function. |
| 6898 | |
| 6899 | Arguments: |
| 6900 | """""""""" |
| 6901 | |
| 6902 | The argument and return value are floating point numbers of the same |
| 6903 | type. |
| 6904 | |
| 6905 | Semantics: |
| 6906 | """""""""" |
| 6907 | |
| 6908 | This function returns the same values as the libm ``log10`` functions |
| 6909 | would, and handles error conditions in the same way. |
| 6910 | |
| 6911 | '``llvm.log2.*``' Intrinsic |
| 6912 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6913 | |
| 6914 | Syntax: |
| 6915 | """"""" |
| 6916 | |
| 6917 | This is an overloaded intrinsic. You can use ``llvm.log2`` on any |
| 6918 | floating point or vector of floating point type. Not all targets support |
| 6919 | all types however. |
| 6920 | |
| 6921 | :: |
| 6922 | |
| 6923 | declare float @llvm.log2.f32(float %Val) |
| 6924 | declare double @llvm.log2.f64(double %Val) |
| 6925 | declare x86_fp80 @llvm.log2.f80(x86_fp80 %Val) |
| 6926 | declare fp128 @llvm.log2.f128(fp128 %Val) |
| 6927 | declare ppc_fp128 @llvm.log2.ppcf128(ppc_fp128 %Val) |
| 6928 | |
| 6929 | Overview: |
| 6930 | """"""""" |
| 6931 | |
| 6932 | The '``llvm.log2.*``' intrinsics perform the log2 function. |
| 6933 | |
| 6934 | Arguments: |
| 6935 | """""""""" |
| 6936 | |
| 6937 | The argument and return value are floating point numbers of the same |
| 6938 | type. |
| 6939 | |
| 6940 | Semantics: |
| 6941 | """""""""" |
| 6942 | |
| 6943 | This function returns the same values as the libm ``log2`` functions |
| 6944 | would, and handles error conditions in the same way. |
| 6945 | |
| 6946 | '``llvm.fma.*``' Intrinsic |
| 6947 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6948 | |
| 6949 | Syntax: |
| 6950 | """"""" |
| 6951 | |
| 6952 | This is an overloaded intrinsic. You can use ``llvm.fma`` on any |
| 6953 | floating point or vector of floating point type. Not all targets support |
| 6954 | all types however. |
| 6955 | |
| 6956 | :: |
| 6957 | |
| 6958 | declare float @llvm.fma.f32(float %a, float %b, float %c) |
| 6959 | declare double @llvm.fma.f64(double %a, double %b, double %c) |
| 6960 | declare x86_fp80 @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c) |
| 6961 | declare fp128 @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c) |
| 6962 | declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c) |
| 6963 | |
| 6964 | Overview: |
| 6965 | """"""""" |
| 6966 | |
| 6967 | The '``llvm.fma.*``' intrinsics perform the fused multiply-add |
| 6968 | operation. |
| 6969 | |
| 6970 | Arguments: |
| 6971 | """""""""" |
| 6972 | |
| 6973 | The argument and return value are floating point numbers of the same |
| 6974 | type. |
| 6975 | |
| 6976 | Semantics: |
| 6977 | """""""""" |
| 6978 | |
| 6979 | This function returns the same values as the libm ``fma`` functions |
| 6980 | would. |
| 6981 | |
| 6982 | '``llvm.fabs.*``' Intrinsic |
| 6983 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 6984 | |
| 6985 | Syntax: |
| 6986 | """"""" |
| 6987 | |
| 6988 | This is an overloaded intrinsic. You can use ``llvm.fabs`` on any |
| 6989 | floating point or vector of floating point type. Not all targets support |
| 6990 | all types however. |
| 6991 | |
| 6992 | :: |
| 6993 | |
| 6994 | declare float @llvm.fabs.f32(float %Val) |
| 6995 | declare double @llvm.fabs.f64(double %Val) |
| 6996 | declare x86_fp80 @llvm.fabs.f80(x86_fp80 %Val) |
| 6997 | declare fp128 @llvm.fabs.f128(fp128 %Val) |
| 6998 | declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128 %Val) |
| 6999 | |
| 7000 | Overview: |
| 7001 | """"""""" |
| 7002 | |
| 7003 | The '``llvm.fabs.*``' intrinsics return the absolute value of the |
| 7004 | operand. |
| 7005 | |
| 7006 | Arguments: |
| 7007 | """""""""" |
| 7008 | |
| 7009 | The argument and return value are floating point numbers of the same |
| 7010 | type. |
| 7011 | |
| 7012 | Semantics: |
| 7013 | """""""""" |
| 7014 | |
| 7015 | This function returns the same values as the libm ``fabs`` functions |
| 7016 | would, and handles error conditions in the same way. |
| 7017 | |
| 7018 | '``llvm.floor.*``' Intrinsic |
| 7019 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7020 | |
| 7021 | Syntax: |
| 7022 | """"""" |
| 7023 | |
| 7024 | This is an overloaded intrinsic. You can use ``llvm.floor`` on any |
| 7025 | floating point or vector of floating point type. Not all targets support |
| 7026 | all types however. |
| 7027 | |
| 7028 | :: |
| 7029 | |
| 7030 | declare float @llvm.floor.f32(float %Val) |
| 7031 | declare double @llvm.floor.f64(double %Val) |
| 7032 | declare x86_fp80 @llvm.floor.f80(x86_fp80 %Val) |
| 7033 | declare fp128 @llvm.floor.f128(fp128 %Val) |
| 7034 | declare ppc_fp128 @llvm.floor.ppcf128(ppc_fp128 %Val) |
| 7035 | |
| 7036 | Overview: |
| 7037 | """"""""" |
| 7038 | |
| 7039 | The '``llvm.floor.*``' intrinsics return the floor of the operand. |
| 7040 | |
| 7041 | Arguments: |
| 7042 | """""""""" |
| 7043 | |
| 7044 | The argument and return value are floating point numbers of the same |
| 7045 | type. |
| 7046 | |
| 7047 | Semantics: |
| 7048 | """""""""" |
| 7049 | |
| 7050 | This function returns the same values as the libm ``floor`` functions |
| 7051 | would, and handles error conditions in the same way. |
| 7052 | |
| 7053 | '``llvm.ceil.*``' Intrinsic |
| 7054 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7055 | |
| 7056 | Syntax: |
| 7057 | """"""" |
| 7058 | |
| 7059 | This is an overloaded intrinsic. You can use ``llvm.ceil`` on any |
| 7060 | floating point or vector of floating point type. Not all targets support |
| 7061 | all types however. |
| 7062 | |
| 7063 | :: |
| 7064 | |
| 7065 | declare float @llvm.ceil.f32(float %Val) |
| 7066 | declare double @llvm.ceil.f64(double %Val) |
| 7067 | declare x86_fp80 @llvm.ceil.f80(x86_fp80 %Val) |
| 7068 | declare fp128 @llvm.ceil.f128(fp128 %Val) |
| 7069 | declare ppc_fp128 @llvm.ceil.ppcf128(ppc_fp128 %Val) |
| 7070 | |
| 7071 | Overview: |
| 7072 | """"""""" |
| 7073 | |
| 7074 | The '``llvm.ceil.*``' intrinsics return the ceiling of the operand. |
| 7075 | |
| 7076 | Arguments: |
| 7077 | """""""""" |
| 7078 | |
| 7079 | The argument and return value are floating point numbers of the same |
| 7080 | type. |
| 7081 | |
| 7082 | Semantics: |
| 7083 | """""""""" |
| 7084 | |
| 7085 | This function returns the same values as the libm ``ceil`` functions |
| 7086 | would, and handles error conditions in the same way. |
| 7087 | |
| 7088 | '``llvm.trunc.*``' Intrinsic |
| 7089 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7090 | |
| 7091 | Syntax: |
| 7092 | """"""" |
| 7093 | |
| 7094 | This is an overloaded intrinsic. You can use ``llvm.trunc`` on any |
| 7095 | floating point or vector of floating point type. Not all targets support |
| 7096 | all types however. |
| 7097 | |
| 7098 | :: |
| 7099 | |
| 7100 | declare float @llvm.trunc.f32(float %Val) |
| 7101 | declare double @llvm.trunc.f64(double %Val) |
| 7102 | declare x86_fp80 @llvm.trunc.f80(x86_fp80 %Val) |
| 7103 | declare fp128 @llvm.trunc.f128(fp128 %Val) |
| 7104 | declare ppc_fp128 @llvm.trunc.ppcf128(ppc_fp128 %Val) |
| 7105 | |
| 7106 | Overview: |
| 7107 | """"""""" |
| 7108 | |
| 7109 | The '``llvm.trunc.*``' intrinsics returns the operand rounded to the |
| 7110 | nearest integer not larger in magnitude than the operand. |
| 7111 | |
| 7112 | Arguments: |
| 7113 | """""""""" |
| 7114 | |
| 7115 | The argument and return value are floating point numbers of the same |
| 7116 | type. |
| 7117 | |
| 7118 | Semantics: |
| 7119 | """""""""" |
| 7120 | |
| 7121 | This function returns the same values as the libm ``trunc`` functions |
| 7122 | would, and handles error conditions in the same way. |
| 7123 | |
| 7124 | '``llvm.rint.*``' Intrinsic |
| 7125 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7126 | |
| 7127 | Syntax: |
| 7128 | """"""" |
| 7129 | |
| 7130 | This is an overloaded intrinsic. You can use ``llvm.rint`` on any |
| 7131 | floating point or vector of floating point type. Not all targets support |
| 7132 | all types however. |
| 7133 | |
| 7134 | :: |
| 7135 | |
| 7136 | declare float @llvm.rint.f32(float %Val) |
| 7137 | declare double @llvm.rint.f64(double %Val) |
| 7138 | declare x86_fp80 @llvm.rint.f80(x86_fp80 %Val) |
| 7139 | declare fp128 @llvm.rint.f128(fp128 %Val) |
| 7140 | declare ppc_fp128 @llvm.rint.ppcf128(ppc_fp128 %Val) |
| 7141 | |
| 7142 | Overview: |
| 7143 | """"""""" |
| 7144 | |
| 7145 | The '``llvm.rint.*``' intrinsics returns the operand rounded to the |
| 7146 | nearest integer. It may raise an inexact floating-point exception if the |
| 7147 | operand isn't an integer. |
| 7148 | |
| 7149 | Arguments: |
| 7150 | """""""""" |
| 7151 | |
| 7152 | The argument and return value are floating point numbers of the same |
| 7153 | type. |
| 7154 | |
| 7155 | Semantics: |
| 7156 | """""""""" |
| 7157 | |
| 7158 | This function returns the same values as the libm ``rint`` functions |
| 7159 | would, and handles error conditions in the same way. |
| 7160 | |
| 7161 | '``llvm.nearbyint.*``' Intrinsic |
| 7162 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7163 | |
| 7164 | Syntax: |
| 7165 | """"""" |
| 7166 | |
| 7167 | This is an overloaded intrinsic. You can use ``llvm.nearbyint`` on any |
| 7168 | floating point or vector of floating point type. Not all targets support |
| 7169 | all types however. |
| 7170 | |
| 7171 | :: |
| 7172 | |
| 7173 | declare float @llvm.nearbyint.f32(float %Val) |
| 7174 | declare double @llvm.nearbyint.f64(double %Val) |
| 7175 | declare x86_fp80 @llvm.nearbyint.f80(x86_fp80 %Val) |
| 7176 | declare fp128 @llvm.nearbyint.f128(fp128 %Val) |
| 7177 | declare ppc_fp128 @llvm.nearbyint.ppcf128(ppc_fp128 %Val) |
| 7178 | |
| 7179 | Overview: |
| 7180 | """"""""" |
| 7181 | |
| 7182 | The '``llvm.nearbyint.*``' intrinsics returns the operand rounded to the |
| 7183 | nearest integer. |
| 7184 | |
| 7185 | Arguments: |
| 7186 | """""""""" |
| 7187 | |
| 7188 | The argument and return value are floating point numbers of the same |
| 7189 | type. |
| 7190 | |
| 7191 | Semantics: |
| 7192 | """""""""" |
| 7193 | |
| 7194 | This function returns the same values as the libm ``nearbyint`` |
| 7195 | functions would, and handles error conditions in the same way. |
| 7196 | |
| 7197 | Bit Manipulation Intrinsics |
| 7198 | --------------------------- |
| 7199 | |
| 7200 | LLVM provides intrinsics for a few important bit manipulation |
| 7201 | operations. These allow efficient code generation for some algorithms. |
| 7202 | |
| 7203 | '``llvm.bswap.*``' Intrinsics |
| 7204 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7205 | |
| 7206 | Syntax: |
| 7207 | """"""" |
| 7208 | |
| 7209 | This is an overloaded intrinsic function. You can use bswap on any |
| 7210 | integer type that is an even number of bytes (i.e. BitWidth % 16 == 0). |
| 7211 | |
| 7212 | :: |
| 7213 | |
| 7214 | declare i16 @llvm.bswap.i16(i16 <id>) |
| 7215 | declare i32 @llvm.bswap.i32(i32 <id>) |
| 7216 | declare i64 @llvm.bswap.i64(i64 <id>) |
| 7217 | |
| 7218 | Overview: |
| 7219 | """"""""" |
| 7220 | |
| 7221 | The '``llvm.bswap``' family of intrinsics is used to byte swap integer |
| 7222 | values with an even number of bytes (positive multiple of 16 bits). |
| 7223 | These are useful for performing operations on data that is not in the |
| 7224 | target's native byte order. |
| 7225 | |
| 7226 | Semantics: |
| 7227 | """""""""" |
| 7228 | |
| 7229 | The ``llvm.bswap.i16`` intrinsic returns an i16 value that has the high |
| 7230 | and low byte of the input i16 swapped. Similarly, the ``llvm.bswap.i32`` |
| 7231 | intrinsic returns an i32 value that has the four bytes of the input i32 |
| 7232 | swapped, so that if the input bytes are numbered 0, 1, 2, 3 then the |
| 7233 | returned i32 will have its bytes in 3, 2, 1, 0 order. The |
| 7234 | ``llvm.bswap.i48``, ``llvm.bswap.i64`` and other intrinsics extend this |
| 7235 | concept to additional even-byte lengths (6 bytes, 8 bytes and more, |
| 7236 | respectively). |
| 7237 | |
| 7238 | '``llvm.ctpop.*``' Intrinsic |
| 7239 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7240 | |
| 7241 | Syntax: |
| 7242 | """"""" |
| 7243 | |
| 7244 | This is an overloaded intrinsic. You can use llvm.ctpop on any integer |
| 7245 | bit width, or on any vector with integer elements. Not all targets |
| 7246 | support all bit widths or vector types, however. |
| 7247 | |
| 7248 | :: |
| 7249 | |
| 7250 | declare i8 @llvm.ctpop.i8(i8 <src>) |
| 7251 | declare i16 @llvm.ctpop.i16(i16 <src>) |
| 7252 | declare i32 @llvm.ctpop.i32(i32 <src>) |
| 7253 | declare i64 @llvm.ctpop.i64(i64 <src>) |
| 7254 | declare i256 @llvm.ctpop.i256(i256 <src>) |
| 7255 | declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32> <src>) |
| 7256 | |
| 7257 | Overview: |
| 7258 | """"""""" |
| 7259 | |
| 7260 | The '``llvm.ctpop``' family of intrinsics counts the number of bits set |
| 7261 | in a value. |
| 7262 | |
| 7263 | Arguments: |
| 7264 | """""""""" |
| 7265 | |
| 7266 | The only argument is the value to be counted. The argument may be of any |
| 7267 | integer type, or a vector with integer elements. The return type must |
| 7268 | match the argument type. |
| 7269 | |
| 7270 | Semantics: |
| 7271 | """""""""" |
| 7272 | |
| 7273 | The '``llvm.ctpop``' intrinsic counts the 1's in a variable, or within |
| 7274 | each element of a vector. |
| 7275 | |
| 7276 | '``llvm.ctlz.*``' Intrinsic |
| 7277 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7278 | |
| 7279 | Syntax: |
| 7280 | """"""" |
| 7281 | |
| 7282 | This is an overloaded intrinsic. You can use ``llvm.ctlz`` on any |
| 7283 | integer bit width, or any vector whose elements are integers. Not all |
| 7284 | targets support all bit widths or vector types, however. |
| 7285 | |
| 7286 | :: |
| 7287 | |
| 7288 | declare i8 @llvm.ctlz.i8 (i8 <src>, i1 <is_zero_undef>) |
| 7289 | declare i16 @llvm.ctlz.i16 (i16 <src>, i1 <is_zero_undef>) |
| 7290 | declare i32 @llvm.ctlz.i32 (i32 <src>, i1 <is_zero_undef>) |
| 7291 | declare i64 @llvm.ctlz.i64 (i64 <src>, i1 <is_zero_undef>) |
| 7292 | declare i256 @llvm.ctlz.i256(i256 <src>, i1 <is_zero_undef>) |
| 7293 | declase <2 x i32> @llvm.ctlz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>) |
| 7294 | |
| 7295 | Overview: |
| 7296 | """"""""" |
| 7297 | |
| 7298 | The '``llvm.ctlz``' family of intrinsic functions counts the number of |
| 7299 | leading zeros in a variable. |
| 7300 | |
| 7301 | Arguments: |
| 7302 | """""""""" |
| 7303 | |
| 7304 | The first argument is the value to be counted. This argument may be of |
| 7305 | any integer type, or a vectory with integer element type. The return |
| 7306 | type must match the first argument type. |
| 7307 | |
| 7308 | The second argument must be a constant and is a flag to indicate whether |
| 7309 | the intrinsic should ensure that a zero as the first argument produces a |
| 7310 | defined result. Historically some architectures did not provide a |
| 7311 | defined result for zero values as efficiently, and many algorithms are |
| 7312 | now predicated on avoiding zero-value inputs. |
| 7313 | |
| 7314 | Semantics: |
| 7315 | """""""""" |
| 7316 | |
| 7317 | The '``llvm.ctlz``' intrinsic counts the leading (most significant) |
| 7318 | zeros in a variable, or within each element of the vector. If |
| 7319 | ``src == 0`` then the result is the size in bits of the type of ``src`` |
| 7320 | if ``is_zero_undef == 0`` and ``undef`` otherwise. For example, |
| 7321 | ``llvm.ctlz(i32 2) = 30``. |
| 7322 | |
| 7323 | '``llvm.cttz.*``' Intrinsic |
| 7324 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7325 | |
| 7326 | Syntax: |
| 7327 | """"""" |
| 7328 | |
| 7329 | This is an overloaded intrinsic. You can use ``llvm.cttz`` on any |
| 7330 | integer bit width, or any vector of integer elements. Not all targets |
| 7331 | support all bit widths or vector types, however. |
| 7332 | |
| 7333 | :: |
| 7334 | |
| 7335 | declare i8 @llvm.cttz.i8 (i8 <src>, i1 <is_zero_undef>) |
| 7336 | declare i16 @llvm.cttz.i16 (i16 <src>, i1 <is_zero_undef>) |
| 7337 | declare i32 @llvm.cttz.i32 (i32 <src>, i1 <is_zero_undef>) |
| 7338 | declare i64 @llvm.cttz.i64 (i64 <src>, i1 <is_zero_undef>) |
| 7339 | declare i256 @llvm.cttz.i256(i256 <src>, i1 <is_zero_undef>) |
| 7340 | declase <2 x i32> @llvm.cttz.v2i32(<2 x i32> <src>, i1 <is_zero_undef>) |
| 7341 | |
| 7342 | Overview: |
| 7343 | """"""""" |
| 7344 | |
| 7345 | The '``llvm.cttz``' family of intrinsic functions counts the number of |
| 7346 | trailing zeros. |
| 7347 | |
| 7348 | Arguments: |
| 7349 | """""""""" |
| 7350 | |
| 7351 | The first argument is the value to be counted. This argument may be of |
| 7352 | any integer type, or a vectory with integer element type. The return |
| 7353 | type must match the first argument type. |
| 7354 | |
| 7355 | The second argument must be a constant and is a flag to indicate whether |
| 7356 | the intrinsic should ensure that a zero as the first argument produces a |
| 7357 | defined result. Historically some architectures did not provide a |
| 7358 | defined result for zero values as efficiently, and many algorithms are |
| 7359 | now predicated on avoiding zero-value inputs. |
| 7360 | |
| 7361 | Semantics: |
| 7362 | """""""""" |
| 7363 | |
| 7364 | The '``llvm.cttz``' intrinsic counts the trailing (least significant) |
| 7365 | zeros in a variable, or within each element of a vector. If ``src == 0`` |
| 7366 | then the result is the size in bits of the type of ``src`` if |
| 7367 | ``is_zero_undef == 0`` and ``undef`` otherwise. For example, |
| 7368 | ``llvm.cttz(2) = 1``. |
| 7369 | |
| 7370 | Arithmetic with Overflow Intrinsics |
| 7371 | ----------------------------------- |
| 7372 | |
| 7373 | LLVM provides intrinsics for some arithmetic with overflow operations. |
| 7374 | |
| 7375 | '``llvm.sadd.with.overflow.*``' Intrinsics |
| 7376 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7377 | |
| 7378 | Syntax: |
| 7379 | """"""" |
| 7380 | |
| 7381 | This is an overloaded intrinsic. You can use ``llvm.sadd.with.overflow`` |
| 7382 | on any integer bit width. |
| 7383 | |
| 7384 | :: |
| 7385 | |
| 7386 | declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b) |
| 7387 | declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) |
| 7388 | declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b) |
| 7389 | |
| 7390 | Overview: |
| 7391 | """"""""" |
| 7392 | |
| 7393 | The '``llvm.sadd.with.overflow``' family of intrinsic functions perform |
| 7394 | a signed addition of the two arguments, and indicate whether an overflow |
| 7395 | occurred during the signed summation. |
| 7396 | |
| 7397 | Arguments: |
| 7398 | """""""""" |
| 7399 | |
| 7400 | The arguments (%a and %b) and the first element of the result structure |
| 7401 | may be of integer types of any bit width, but they must have the same |
| 7402 | bit width. The second element of the result structure must be of type |
| 7403 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed |
| 7404 | addition. |
| 7405 | |
| 7406 | Semantics: |
| 7407 | """""""""" |
| 7408 | |
| 7409 | The '``llvm.sadd.with.overflow``' family of intrinsic functions perform |
| 7410 | a signed addition of the two variables. They return a structure — the |
| 7411 | first element of which is the signed summation, and the second element |
| 7412 | of which is a bit specifying if the signed summation resulted in an |
| 7413 | overflow. |
| 7414 | |
| 7415 | Examples: |
| 7416 | """"""""" |
| 7417 | |
| 7418 | .. code-block:: llvm |
| 7419 | |
| 7420 | %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) |
| 7421 | %sum = extractvalue {i32, i1} %res, 0 |
| 7422 | %obit = extractvalue {i32, i1} %res, 1 |
| 7423 | br i1 %obit, label %overflow, label %normal |
| 7424 | |
| 7425 | '``llvm.uadd.with.overflow.*``' Intrinsics |
| 7426 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7427 | |
| 7428 | Syntax: |
| 7429 | """"""" |
| 7430 | |
| 7431 | This is an overloaded intrinsic. You can use ``llvm.uadd.with.overflow`` |
| 7432 | on any integer bit width. |
| 7433 | |
| 7434 | :: |
| 7435 | |
| 7436 | declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b) |
| 7437 | declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) |
| 7438 | declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b) |
| 7439 | |
| 7440 | Overview: |
| 7441 | """"""""" |
| 7442 | |
| 7443 | The '``llvm.uadd.with.overflow``' family of intrinsic functions perform |
| 7444 | an unsigned addition of the two arguments, and indicate whether a carry |
| 7445 | occurred during the unsigned summation. |
| 7446 | |
| 7447 | Arguments: |
| 7448 | """""""""" |
| 7449 | |
| 7450 | The arguments (%a and %b) and the first element of the result structure |
| 7451 | may be of integer types of any bit width, but they must have the same |
| 7452 | bit width. The second element of the result structure must be of type |
| 7453 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned |
| 7454 | addition. |
| 7455 | |
| 7456 | Semantics: |
| 7457 | """""""""" |
| 7458 | |
| 7459 | The '``llvm.uadd.with.overflow``' family of intrinsic functions perform |
| 7460 | an unsigned addition of the two arguments. They return a structure — the |
| 7461 | first element of which is the sum, and the second element of which is a |
| 7462 | bit specifying if the unsigned summation resulted in a carry. |
| 7463 | |
| 7464 | Examples: |
| 7465 | """"""""" |
| 7466 | |
| 7467 | .. code-block:: llvm |
| 7468 | |
| 7469 | %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) |
| 7470 | %sum = extractvalue {i32, i1} %res, 0 |
| 7471 | %obit = extractvalue {i32, i1} %res, 1 |
| 7472 | br i1 %obit, label %carry, label %normal |
| 7473 | |
| 7474 | '``llvm.ssub.with.overflow.*``' Intrinsics |
| 7475 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7476 | |
| 7477 | Syntax: |
| 7478 | """"""" |
| 7479 | |
| 7480 | This is an overloaded intrinsic. You can use ``llvm.ssub.with.overflow`` |
| 7481 | on any integer bit width. |
| 7482 | |
| 7483 | :: |
| 7484 | |
| 7485 | declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b) |
| 7486 | declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) |
| 7487 | declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) |
| 7488 | |
| 7489 | Overview: |
| 7490 | """"""""" |
| 7491 | |
| 7492 | The '``llvm.ssub.with.overflow``' family of intrinsic functions perform |
| 7493 | a signed subtraction of the two arguments, and indicate whether an |
| 7494 | overflow occurred during the signed subtraction. |
| 7495 | |
| 7496 | Arguments: |
| 7497 | """""""""" |
| 7498 | |
| 7499 | The arguments (%a and %b) and the first element of the result structure |
| 7500 | may be of integer types of any bit width, but they must have the same |
| 7501 | bit width. The second element of the result structure must be of type |
| 7502 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed |
| 7503 | subtraction. |
| 7504 | |
| 7505 | Semantics: |
| 7506 | """""""""" |
| 7507 | |
| 7508 | The '``llvm.ssub.with.overflow``' family of intrinsic functions perform |
| 7509 | a signed subtraction of the two arguments. They return a structure — the |
| 7510 | first element of which is the subtraction, and the second element of |
| 7511 | which is a bit specifying if the signed subtraction resulted in an |
| 7512 | overflow. |
| 7513 | |
| 7514 | Examples: |
| 7515 | """"""""" |
| 7516 | |
| 7517 | .. code-block:: llvm |
| 7518 | |
| 7519 | %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) |
| 7520 | %sum = extractvalue {i32, i1} %res, 0 |
| 7521 | %obit = extractvalue {i32, i1} %res, 1 |
| 7522 | br i1 %obit, label %overflow, label %normal |
| 7523 | |
| 7524 | '``llvm.usub.with.overflow.*``' Intrinsics |
| 7525 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7526 | |
| 7527 | Syntax: |
| 7528 | """"""" |
| 7529 | |
| 7530 | This is an overloaded intrinsic. You can use ``llvm.usub.with.overflow`` |
| 7531 | on any integer bit width. |
| 7532 | |
| 7533 | :: |
| 7534 | |
| 7535 | declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b) |
| 7536 | declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) |
| 7537 | declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b) |
| 7538 | |
| 7539 | Overview: |
| 7540 | """"""""" |
| 7541 | |
| 7542 | The '``llvm.usub.with.overflow``' family of intrinsic functions perform |
| 7543 | an unsigned subtraction of the two arguments, and indicate whether an |
| 7544 | overflow occurred during the unsigned subtraction. |
| 7545 | |
| 7546 | Arguments: |
| 7547 | """""""""" |
| 7548 | |
| 7549 | The arguments (%a and %b) and the first element of the result structure |
| 7550 | may be of integer types of any bit width, but they must have the same |
| 7551 | bit width. The second element of the result structure must be of type |
| 7552 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned |
| 7553 | subtraction. |
| 7554 | |
| 7555 | Semantics: |
| 7556 | """""""""" |
| 7557 | |
| 7558 | The '``llvm.usub.with.overflow``' family of intrinsic functions perform |
| 7559 | an unsigned subtraction of the two arguments. They return a structure — |
| 7560 | the first element of which is the subtraction, and the second element of |
| 7561 | which is a bit specifying if the unsigned subtraction resulted in an |
| 7562 | overflow. |
| 7563 | |
| 7564 | Examples: |
| 7565 | """"""""" |
| 7566 | |
| 7567 | .. code-block:: llvm |
| 7568 | |
| 7569 | %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) |
| 7570 | %sum = extractvalue {i32, i1} %res, 0 |
| 7571 | %obit = extractvalue {i32, i1} %res, 1 |
| 7572 | br i1 %obit, label %overflow, label %normal |
| 7573 | |
| 7574 | '``llvm.smul.with.overflow.*``' Intrinsics |
| 7575 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7576 | |
| 7577 | Syntax: |
| 7578 | """"""" |
| 7579 | |
| 7580 | This is an overloaded intrinsic. You can use ``llvm.smul.with.overflow`` |
| 7581 | on any integer bit width. |
| 7582 | |
| 7583 | :: |
| 7584 | |
| 7585 | declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b) |
| 7586 | declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) |
| 7587 | declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b) |
| 7588 | |
| 7589 | Overview: |
| 7590 | """"""""" |
| 7591 | |
| 7592 | The '``llvm.smul.with.overflow``' family of intrinsic functions perform |
| 7593 | a signed multiplication of the two arguments, and indicate whether an |
| 7594 | overflow occurred during the signed multiplication. |
| 7595 | |
| 7596 | Arguments: |
| 7597 | """""""""" |
| 7598 | |
| 7599 | The arguments (%a and %b) and the first element of the result structure |
| 7600 | may be of integer types of any bit width, but they must have the same |
| 7601 | bit width. The second element of the result structure must be of type |
| 7602 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo signed |
| 7603 | multiplication. |
| 7604 | |
| 7605 | Semantics: |
| 7606 | """""""""" |
| 7607 | |
| 7608 | The '``llvm.smul.with.overflow``' family of intrinsic functions perform |
| 7609 | a signed multiplication of the two arguments. They return a structure — |
| 7610 | the first element of which is the multiplication, and the second element |
| 7611 | of which is a bit specifying if the signed multiplication resulted in an |
| 7612 | overflow. |
| 7613 | |
| 7614 | Examples: |
| 7615 | """"""""" |
| 7616 | |
| 7617 | .. code-block:: llvm |
| 7618 | |
| 7619 | %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) |
| 7620 | %sum = extractvalue {i32, i1} %res, 0 |
| 7621 | %obit = extractvalue {i32, i1} %res, 1 |
| 7622 | br i1 %obit, label %overflow, label %normal |
| 7623 | |
| 7624 | '``llvm.umul.with.overflow.*``' Intrinsics |
| 7625 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7626 | |
| 7627 | Syntax: |
| 7628 | """"""" |
| 7629 | |
| 7630 | This is an overloaded intrinsic. You can use ``llvm.umul.with.overflow`` |
| 7631 | on any integer bit width. |
| 7632 | |
| 7633 | :: |
| 7634 | |
| 7635 | declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b) |
| 7636 | declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b) |
| 7637 | declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b) |
| 7638 | |
| 7639 | Overview: |
| 7640 | """"""""" |
| 7641 | |
| 7642 | The '``llvm.umul.with.overflow``' family of intrinsic functions perform |
| 7643 | a unsigned multiplication of the two arguments, and indicate whether an |
| 7644 | overflow occurred during the unsigned multiplication. |
| 7645 | |
| 7646 | Arguments: |
| 7647 | """""""""" |
| 7648 | |
| 7649 | The arguments (%a and %b) and the first element of the result structure |
| 7650 | may be of integer types of any bit width, but they must have the same |
| 7651 | bit width. The second element of the result structure must be of type |
| 7652 | ``i1``. ``%a`` and ``%b`` are the two values that will undergo unsigned |
| 7653 | multiplication. |
| 7654 | |
| 7655 | Semantics: |
| 7656 | """""""""" |
| 7657 | |
| 7658 | The '``llvm.umul.with.overflow``' family of intrinsic functions perform |
| 7659 | an unsigned multiplication of the two arguments. They return a structure |
| 7660 | — the first element of which is the multiplication, and the second |
| 7661 | element of which is a bit specifying if the unsigned multiplication |
| 7662 | resulted in an overflow. |
| 7663 | |
| 7664 | Examples: |
| 7665 | """"""""" |
| 7666 | |
| 7667 | .. code-block:: llvm |
| 7668 | |
| 7669 | %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b) |
| 7670 | %sum = extractvalue {i32, i1} %res, 0 |
| 7671 | %obit = extractvalue {i32, i1} %res, 1 |
| 7672 | br i1 %obit, label %overflow, label %normal |
| 7673 | |
| 7674 | Specialised Arithmetic Intrinsics |
| 7675 | --------------------------------- |
| 7676 | |
| 7677 | '``llvm.fmuladd.*``' Intrinsic |
| 7678 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7679 | |
| 7680 | Syntax: |
| 7681 | """"""" |
| 7682 | |
| 7683 | :: |
| 7684 | |
| 7685 | declare float @llvm.fmuladd.f32(float %a, float %b, float %c) |
| 7686 | declare double @llvm.fmuladd.f64(double %a, double %b, double %c) |
| 7687 | |
| 7688 | Overview: |
| 7689 | """"""""" |
| 7690 | |
| 7691 | The '``llvm.fmuladd.*``' intrinsic functions represent multiply-add |
| 7692 | expressions that can be fused if the code generator determines that the |
| 7693 | fused expression would be legal and efficient. |
| 7694 | |
| 7695 | Arguments: |
| 7696 | """""""""" |
| 7697 | |
| 7698 | The '``llvm.fmuladd.*``' intrinsics each take three arguments: two |
| 7699 | multiplicands, a and b, and an addend c. |
| 7700 | |
| 7701 | Semantics: |
| 7702 | """""""""" |
| 7703 | |
| 7704 | The expression: |
| 7705 | |
| 7706 | :: |
| 7707 | |
| 7708 | %0 = call float @llvm.fmuladd.f32(%a, %b, %c) |
| 7709 | |
| 7710 | is equivalent to the expression a \* b + c, except that rounding will |
| 7711 | not be performed between the multiplication and addition steps if the |
| 7712 | code generator fuses the operations. Fusion is not guaranteed, even if |
| 7713 | the target platform supports it. If a fused multiply-add is required the |
| 7714 | corresponding llvm.fma.\* intrinsic function should be used instead. |
| 7715 | |
| 7716 | Examples: |
| 7717 | """"""""" |
| 7718 | |
| 7719 | .. code-block:: llvm |
| 7720 | |
| 7721 | %r2 = call float @llvm.fmuladd.f32(float %a, float %b, float %c) ; yields {float}:r2 = (a * b) + c |
| 7722 | |
| 7723 | Half Precision Floating Point Intrinsics |
| 7724 | ---------------------------------------- |
| 7725 | |
| 7726 | For most target platforms, half precision floating point is a |
| 7727 | storage-only format. This means that it is a dense encoding (in memory) |
| 7728 | but does not support computation in the format. |
| 7729 | |
| 7730 | This means that code must first load the half-precision floating point |
| 7731 | value as an i16, then convert it to float with |
| 7732 | :ref:`llvm.convert.from.fp16 <int_convert_from_fp16>`. Computation can |
| 7733 | then be performed on the float value (including extending to double |
| 7734 | etc). To store the value back to memory, it is first converted to float |
| 7735 | if needed, then converted to i16 with |
| 7736 | :ref:`llvm.convert.to.fp16 <int_convert_to_fp16>`, then storing as an |
| 7737 | i16 value. |
| 7738 | |
| 7739 | .. _int_convert_to_fp16: |
| 7740 | |
| 7741 | '``llvm.convert.to.fp16``' Intrinsic |
| 7742 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7743 | |
| 7744 | Syntax: |
| 7745 | """"""" |
| 7746 | |
| 7747 | :: |
| 7748 | |
| 7749 | declare i16 @llvm.convert.to.fp16(f32 %a) |
| 7750 | |
| 7751 | Overview: |
| 7752 | """"""""" |
| 7753 | |
| 7754 | The '``llvm.convert.to.fp16``' intrinsic function performs a conversion |
| 7755 | from single precision floating point format to half precision floating |
| 7756 | point format. |
| 7757 | |
| 7758 | Arguments: |
| 7759 | """""""""" |
| 7760 | |
| 7761 | The intrinsic function contains single argument - the value to be |
| 7762 | converted. |
| 7763 | |
| 7764 | Semantics: |
| 7765 | """""""""" |
| 7766 | |
| 7767 | The '``llvm.convert.to.fp16``' intrinsic function performs a conversion |
| 7768 | from single precision floating point format to half precision floating |
| 7769 | point format. The return value is an ``i16`` which contains the |
| 7770 | converted number. |
| 7771 | |
| 7772 | Examples: |
| 7773 | """"""""" |
| 7774 | |
| 7775 | .. code-block:: llvm |
| 7776 | |
| 7777 | %res = call i16 @llvm.convert.to.fp16(f32 %a) |
| 7778 | store i16 %res, i16* @x, align 2 |
| 7779 | |
| 7780 | .. _int_convert_from_fp16: |
| 7781 | |
| 7782 | '``llvm.convert.from.fp16``' Intrinsic |
| 7783 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7784 | |
| 7785 | Syntax: |
| 7786 | """"""" |
| 7787 | |
| 7788 | :: |
| 7789 | |
| 7790 | declare f32 @llvm.convert.from.fp16(i16 %a) |
| 7791 | |
| 7792 | Overview: |
| 7793 | """"""""" |
| 7794 | |
| 7795 | The '``llvm.convert.from.fp16``' intrinsic function performs a |
| 7796 | conversion from half precision floating point format to single precision |
| 7797 | floating point format. |
| 7798 | |
| 7799 | Arguments: |
| 7800 | """""""""" |
| 7801 | |
| 7802 | The intrinsic function contains single argument - the value to be |
| 7803 | converted. |
| 7804 | |
| 7805 | Semantics: |
| 7806 | """""""""" |
| 7807 | |
| 7808 | The '``llvm.convert.from.fp16``' intrinsic function performs a |
| 7809 | conversion from half single precision floating point format to single |
| 7810 | precision floating point format. The input half-float value is |
| 7811 | represented by an ``i16`` value. |
| 7812 | |
| 7813 | Examples: |
| 7814 | """"""""" |
| 7815 | |
| 7816 | .. code-block:: llvm |
| 7817 | |
| 7818 | %a = load i16* @x, align 2 |
| 7819 | %res = call f32 @llvm.convert.from.fp16(i16 %a) |
| 7820 | |
| 7821 | Debugger Intrinsics |
| 7822 | ------------------- |
| 7823 | |
| 7824 | The LLVM debugger intrinsics (which all start with ``llvm.dbg.`` |
| 7825 | prefix), are described in the `LLVM Source Level |
| 7826 | Debugging <SourceLevelDebugging.html#format_common_intrinsics>`_ |
| 7827 | document. |
| 7828 | |
| 7829 | Exception Handling Intrinsics |
| 7830 | ----------------------------- |
| 7831 | |
| 7832 | The LLVM exception handling intrinsics (which all start with |
| 7833 | ``llvm.eh.`` prefix), are described in the `LLVM Exception |
| 7834 | Handling <ExceptionHandling.html#format_common_intrinsics>`_ document. |
| 7835 | |
| 7836 | .. _int_trampoline: |
| 7837 | |
| 7838 | Trampoline Intrinsics |
| 7839 | --------------------- |
| 7840 | |
| 7841 | These intrinsics make it possible to excise one parameter, marked with |
| 7842 | the :ref:`nest <nest>` attribute, from a function. The result is a |
| 7843 | callable function pointer lacking the nest parameter - the caller does |
| 7844 | not need to provide a value for it. Instead, the value to use is stored |
| 7845 | in advance in a "trampoline", a block of memory usually allocated on the |
| 7846 | stack, which also contains code to splice the nest value into the |
| 7847 | argument list. This is used to implement the GCC nested function address |
| 7848 | extension. |
| 7849 | |
| 7850 | For example, if the function is ``i32 f(i8* nest %c, i32 %x, i32 %y)`` |
| 7851 | then the resulting function pointer has signature ``i32 (i32, i32)*``. |
| 7852 | It can be created as follows: |
| 7853 | |
| 7854 | .. code-block:: llvm |
| 7855 | |
| 7856 | %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86 |
| 7857 | %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0 |
| 7858 | call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8*, i32, i32)* @f to i8*), i8* %nval) |
| 7859 | %p = call i8* @llvm.adjust.trampoline(i8* %tramp1) |
| 7860 | %fp = bitcast i8* %p to i32 (i32, i32)* |
| 7861 | |
| 7862 | The call ``%val = call i32 %fp(i32 %x, i32 %y)`` is then equivalent to |
| 7863 | ``%val = call i32 %f(i8* %nval, i32 %x, i32 %y)``. |
| 7864 | |
| 7865 | .. _int_it: |
| 7866 | |
| 7867 | '``llvm.init.trampoline``' Intrinsic |
| 7868 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7869 | |
| 7870 | Syntax: |
| 7871 | """"""" |
| 7872 | |
| 7873 | :: |
| 7874 | |
| 7875 | declare void @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <nval>) |
| 7876 | |
| 7877 | Overview: |
| 7878 | """"""""" |
| 7879 | |
| 7880 | This fills the memory pointed to by ``tramp`` with executable code, |
| 7881 | turning it into a trampoline. |
| 7882 | |
| 7883 | Arguments: |
| 7884 | """""""""" |
| 7885 | |
| 7886 | The ``llvm.init.trampoline`` intrinsic takes three arguments, all |
| 7887 | pointers. The ``tramp`` argument must point to a sufficiently large and |
| 7888 | sufficiently aligned block of memory; this memory is written to by the |
| 7889 | intrinsic. Note that the size and the alignment are target-specific - |
| 7890 | LLVM currently provides no portable way of determining them, so a |
| 7891 | front-end that generates this intrinsic needs to have some |
| 7892 | target-specific knowledge. The ``func`` argument must hold a function |
| 7893 | bitcast to an ``i8*``. |
| 7894 | |
| 7895 | Semantics: |
| 7896 | """""""""" |
| 7897 | |
| 7898 | The block of memory pointed to by ``tramp`` is filled with target |
| 7899 | dependent code, turning it into a function. Then ``tramp`` needs to be |
| 7900 | passed to :ref:`llvm.adjust.trampoline <int_at>` to get a pointer which can |
| 7901 | be :ref:`bitcast (to a new function) and called <int_trampoline>`. The new |
| 7902 | function's signature is the same as that of ``func`` with any arguments |
| 7903 | marked with the ``nest`` attribute removed. At most one such ``nest`` |
| 7904 | argument is allowed, and it must be of pointer type. Calling the new |
| 7905 | function is equivalent to calling ``func`` with the same argument list, |
| 7906 | but with ``nval`` used for the missing ``nest`` argument. If, after |
| 7907 | calling ``llvm.init.trampoline``, the memory pointed to by ``tramp`` is |
| 7908 | modified, then the effect of any later call to the returned function |
| 7909 | pointer is undefined. |
| 7910 | |
| 7911 | .. _int_at: |
| 7912 | |
| 7913 | '``llvm.adjust.trampoline``' Intrinsic |
| 7914 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7915 | |
| 7916 | Syntax: |
| 7917 | """"""" |
| 7918 | |
| 7919 | :: |
| 7920 | |
| 7921 | declare i8* @llvm.adjust.trampoline(i8* <tramp>) |
| 7922 | |
| 7923 | Overview: |
| 7924 | """"""""" |
| 7925 | |
| 7926 | This performs any required machine-specific adjustment to the address of |
| 7927 | a trampoline (passed as ``tramp``). |
| 7928 | |
| 7929 | Arguments: |
| 7930 | """""""""" |
| 7931 | |
| 7932 | ``tramp`` must point to a block of memory which already has trampoline |
| 7933 | code filled in by a previous call to |
| 7934 | :ref:`llvm.init.trampoline <int_it>`. |
| 7935 | |
| 7936 | Semantics: |
| 7937 | """""""""" |
| 7938 | |
| 7939 | On some architectures the address of the code to be executed needs to be |
| 7940 | different to the address where the trampoline is actually stored. This |
| 7941 | intrinsic returns the executable address corresponding to ``tramp`` |
| 7942 | after performing the required machine specific adjustments. The pointer |
| 7943 | returned can then be :ref:`bitcast and executed <int_trampoline>`. |
| 7944 | |
| 7945 | Memory Use Markers |
| 7946 | ------------------ |
| 7947 | |
| 7948 | This class of intrinsics exists to information about the lifetime of |
| 7949 | memory objects and ranges where variables are immutable. |
| 7950 | |
| 7951 | '``llvm.lifetime.start``' Intrinsic |
| 7952 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7953 | |
| 7954 | Syntax: |
| 7955 | """"""" |
| 7956 | |
| 7957 | :: |
| 7958 | |
| 7959 | declare void @llvm.lifetime.start(i64 <size>, i8* nocapture <ptr>) |
| 7960 | |
| 7961 | Overview: |
| 7962 | """"""""" |
| 7963 | |
| 7964 | The '``llvm.lifetime.start``' intrinsic specifies the start of a memory |
| 7965 | object's lifetime. |
| 7966 | |
| 7967 | Arguments: |
| 7968 | """""""""" |
| 7969 | |
| 7970 | The first argument is a constant integer representing the size of the |
| 7971 | object, or -1 if it is variable sized. The second argument is a pointer |
| 7972 | to the object. |
| 7973 | |
| 7974 | Semantics: |
| 7975 | """""""""" |
| 7976 | |
| 7977 | This intrinsic indicates that before this point in the code, the value |
| 7978 | of the memory pointed to by ``ptr`` is dead. This means that it is known |
| 7979 | to never be used and has an undefined value. A load from the pointer |
| 7980 | that precedes this intrinsic can be replaced with ``'undef'``. |
| 7981 | |
| 7982 | '``llvm.lifetime.end``' Intrinsic |
| 7983 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 7984 | |
| 7985 | Syntax: |
| 7986 | """"""" |
| 7987 | |
| 7988 | :: |
| 7989 | |
| 7990 | declare void @llvm.lifetime.end(i64 <size>, i8* nocapture <ptr>) |
| 7991 | |
| 7992 | Overview: |
| 7993 | """"""""" |
| 7994 | |
| 7995 | The '``llvm.lifetime.end``' intrinsic specifies the end of a memory |
| 7996 | object's lifetime. |
| 7997 | |
| 7998 | Arguments: |
| 7999 | """""""""" |
| 8000 | |
| 8001 | The first argument is a constant integer representing the size of the |
| 8002 | object, or -1 if it is variable sized. The second argument is a pointer |
| 8003 | to the object. |
| 8004 | |
| 8005 | Semantics: |
| 8006 | """""""""" |
| 8007 | |
| 8008 | This intrinsic indicates that after this point in the code, the value of |
| 8009 | the memory pointed to by ``ptr`` is dead. This means that it is known to |
| 8010 | never be used and has an undefined value. Any stores into the memory |
| 8011 | object following this intrinsic may be removed as dead. |
| 8012 | |
| 8013 | '``llvm.invariant.start``' Intrinsic |
| 8014 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8015 | |
| 8016 | Syntax: |
| 8017 | """"""" |
| 8018 | |
| 8019 | :: |
| 8020 | |
| 8021 | declare {}* @llvm.invariant.start(i64 <size>, i8* nocapture <ptr>) |
| 8022 | |
| 8023 | Overview: |
| 8024 | """"""""" |
| 8025 | |
| 8026 | The '``llvm.invariant.start``' intrinsic specifies that the contents of |
| 8027 | a memory object will not change. |
| 8028 | |
| 8029 | Arguments: |
| 8030 | """""""""" |
| 8031 | |
| 8032 | The first argument is a constant integer representing the size of the |
| 8033 | object, or -1 if it is variable sized. The second argument is a pointer |
| 8034 | to the object. |
| 8035 | |
| 8036 | Semantics: |
| 8037 | """""""""" |
| 8038 | |
| 8039 | This intrinsic indicates that until an ``llvm.invariant.end`` that uses |
| 8040 | the return value, the referenced memory location is constant and |
| 8041 | unchanging. |
| 8042 | |
| 8043 | '``llvm.invariant.end``' Intrinsic |
| 8044 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8045 | |
| 8046 | Syntax: |
| 8047 | """"""" |
| 8048 | |
| 8049 | :: |
| 8050 | |
| 8051 | declare void @llvm.invariant.end({}* <start>, i64 <size>, i8* nocapture <ptr>) |
| 8052 | |
| 8053 | Overview: |
| 8054 | """"""""" |
| 8055 | |
| 8056 | The '``llvm.invariant.end``' intrinsic specifies that the contents of a |
| 8057 | memory object are mutable. |
| 8058 | |
| 8059 | Arguments: |
| 8060 | """""""""" |
| 8061 | |
| 8062 | The first argument is the matching ``llvm.invariant.start`` intrinsic. |
| 8063 | The second argument is a constant integer representing the size of the |
| 8064 | object, or -1 if it is variable sized and the third argument is a |
| 8065 | pointer to the object. |
| 8066 | |
| 8067 | Semantics: |
| 8068 | """""""""" |
| 8069 | |
| 8070 | This intrinsic indicates that the memory is mutable again. |
| 8071 | |
| 8072 | General Intrinsics |
| 8073 | ------------------ |
| 8074 | |
| 8075 | This class of intrinsics is designed to be generic and has no specific |
| 8076 | purpose. |
| 8077 | |
| 8078 | '``llvm.var.annotation``' Intrinsic |
| 8079 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8080 | |
| 8081 | Syntax: |
| 8082 | """"""" |
| 8083 | |
| 8084 | :: |
| 8085 | |
| 8086 | declare void @llvm.var.annotation(i8* <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8087 | |
| 8088 | Overview: |
| 8089 | """"""""" |
| 8090 | |
| 8091 | The '``llvm.var.annotation``' intrinsic. |
| 8092 | |
| 8093 | Arguments: |
| 8094 | """""""""" |
| 8095 | |
| 8096 | The first argument is a pointer to a value, the second is a pointer to a |
| 8097 | global string, the third is a pointer to a global string which is the |
| 8098 | source file name, and the last argument is the line number. |
| 8099 | |
| 8100 | Semantics: |
| 8101 | """""""""" |
| 8102 | |
| 8103 | This intrinsic allows annotation of local variables with arbitrary |
| 8104 | strings. This can be useful for special purpose optimizations that want |
| 8105 | to look for these annotations. These have no other defined use; they are |
| 8106 | ignored by code generation and optimization. |
| 8107 | |
| 8108 | '``llvm.annotation.*``' Intrinsic |
| 8109 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8110 | |
| 8111 | Syntax: |
| 8112 | """"""" |
| 8113 | |
| 8114 | This is an overloaded intrinsic. You can use '``llvm.annotation``' on |
| 8115 | any integer bit width. |
| 8116 | |
| 8117 | :: |
| 8118 | |
| 8119 | declare i8 @llvm.annotation.i8(i8 <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8120 | declare i16 @llvm.annotation.i16(i16 <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8121 | declare i32 @llvm.annotation.i32(i32 <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8122 | declare i64 @llvm.annotation.i64(i64 <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8123 | declare i256 @llvm.annotation.i256(i256 <val>, i8* <str>, i8* <str>, i32 <int>) |
| 8124 | |
| 8125 | Overview: |
| 8126 | """"""""" |
| 8127 | |
| 8128 | The '``llvm.annotation``' intrinsic. |
| 8129 | |
| 8130 | Arguments: |
| 8131 | """""""""" |
| 8132 | |
| 8133 | The first argument is an integer value (result of some expression), the |
| 8134 | second is a pointer to a global string, the third is a pointer to a |
| 8135 | global string which is the source file name, and the last argument is |
| 8136 | the line number. It returns the value of the first argument. |
| 8137 | |
| 8138 | Semantics: |
| 8139 | """""""""" |
| 8140 | |
| 8141 | This intrinsic allows annotations to be put on arbitrary expressions |
| 8142 | with arbitrary strings. This can be useful for special purpose |
| 8143 | optimizations that want to look for these annotations. These have no |
| 8144 | other defined use; they are ignored by code generation and optimization. |
| 8145 | |
| 8146 | '``llvm.trap``' Intrinsic |
| 8147 | ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8148 | |
| 8149 | Syntax: |
| 8150 | """"""" |
| 8151 | |
| 8152 | :: |
| 8153 | |
| 8154 | declare void @llvm.trap() noreturn nounwind |
| 8155 | |
| 8156 | Overview: |
| 8157 | """"""""" |
| 8158 | |
| 8159 | The '``llvm.trap``' intrinsic. |
| 8160 | |
| 8161 | Arguments: |
| 8162 | """""""""" |
| 8163 | |
| 8164 | None. |
| 8165 | |
| 8166 | Semantics: |
| 8167 | """""""""" |
| 8168 | |
| 8169 | This intrinsic is lowered to the target dependent trap instruction. If |
| 8170 | the target does not have a trap instruction, this intrinsic will be |
| 8171 | lowered to a call of the ``abort()`` function. |
| 8172 | |
| 8173 | '``llvm.debugtrap``' Intrinsic |
| 8174 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8175 | |
| 8176 | Syntax: |
| 8177 | """"""" |
| 8178 | |
| 8179 | :: |
| 8180 | |
| 8181 | declare void @llvm.debugtrap() nounwind |
| 8182 | |
| 8183 | Overview: |
| 8184 | """"""""" |
| 8185 | |
| 8186 | The '``llvm.debugtrap``' intrinsic. |
| 8187 | |
| 8188 | Arguments: |
| 8189 | """""""""" |
| 8190 | |
| 8191 | None. |
| 8192 | |
| 8193 | Semantics: |
| 8194 | """""""""" |
| 8195 | |
| 8196 | This intrinsic is lowered to code which is intended to cause an |
| 8197 | execution trap with the intention of requesting the attention of a |
| 8198 | debugger. |
| 8199 | |
| 8200 | '``llvm.stackprotector``' Intrinsic |
| 8201 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8202 | |
| 8203 | Syntax: |
| 8204 | """"""" |
| 8205 | |
| 8206 | :: |
| 8207 | |
| 8208 | declare void @llvm.stackprotector(i8* <guard>, i8** <slot>) |
| 8209 | |
| 8210 | Overview: |
| 8211 | """"""""" |
| 8212 | |
| 8213 | The ``llvm.stackprotector`` intrinsic takes the ``guard`` and stores it |
| 8214 | onto the stack at ``slot``. The stack slot is adjusted to ensure that it |
| 8215 | is placed on the stack before local variables. |
| 8216 | |
| 8217 | Arguments: |
| 8218 | """""""""" |
| 8219 | |
| 8220 | The ``llvm.stackprotector`` intrinsic requires two pointer arguments. |
| 8221 | The first argument is the value loaded from the stack guard |
| 8222 | ``@__stack_chk_guard``. The second variable is an ``alloca`` that has |
| 8223 | enough space to hold the value of the guard. |
| 8224 | |
| 8225 | Semantics: |
| 8226 | """""""""" |
| 8227 | |
| 8228 | This intrinsic causes the prologue/epilogue inserter to force the |
| 8229 | position of the ``AllocaInst`` stack slot to be before local variables |
| 8230 | on the stack. This is to ensure that if a local variable on the stack is |
| 8231 | overwritten, it will destroy the value of the guard. When the function |
| 8232 | exits, the guard on the stack is checked against the original guard. If |
| 8233 | they are different, then the program aborts by calling the |
| 8234 | ``__stack_chk_fail()`` function. |
| 8235 | |
| 8236 | '``llvm.objectsize``' Intrinsic |
| 8237 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8238 | |
| 8239 | Syntax: |
| 8240 | """"""" |
| 8241 | |
| 8242 | :: |
| 8243 | |
| 8244 | declare i32 @llvm.objectsize.i32(i8* <object>, i1 <min>) |
| 8245 | declare i64 @llvm.objectsize.i64(i8* <object>, i1 <min>) |
| 8246 | |
| 8247 | Overview: |
| 8248 | """"""""" |
| 8249 | |
| 8250 | The ``llvm.objectsize`` intrinsic is designed to provide information to |
| 8251 | the optimizers to determine at compile time whether a) an operation |
| 8252 | (like memcpy) will overflow a buffer that corresponds to an object, or |
| 8253 | b) that a runtime check for overflow isn't necessary. An object in this |
| 8254 | context means an allocation of a specific class, structure, array, or |
| 8255 | other object. |
| 8256 | |
| 8257 | Arguments: |
| 8258 | """""""""" |
| 8259 | |
| 8260 | The ``llvm.objectsize`` intrinsic takes two arguments. The first |
| 8261 | argument is a pointer to or into the ``object``. The second argument is |
| 8262 | a boolean and determines whether ``llvm.objectsize`` returns 0 (if true) |
| 8263 | or -1 (if false) when the object size is unknown. The second argument |
| 8264 | only accepts constants. |
| 8265 | |
| 8266 | Semantics: |
| 8267 | """""""""" |
| 8268 | |
| 8269 | The ``llvm.objectsize`` intrinsic is lowered to a constant representing |
| 8270 | the size of the object concerned. If the size cannot be determined at |
| 8271 | compile time, ``llvm.objectsize`` returns ``i32/i64 -1 or 0`` (depending |
| 8272 | on the ``min`` argument). |
| 8273 | |
| 8274 | '``llvm.expect``' Intrinsic |
| 8275 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8276 | |
| 8277 | Syntax: |
| 8278 | """"""" |
| 8279 | |
| 8280 | :: |
| 8281 | |
| 8282 | declare i32 @llvm.expect.i32(i32 <val>, i32 <expected_val>) |
| 8283 | declare i64 @llvm.expect.i64(i64 <val>, i64 <expected_val>) |
| 8284 | |
| 8285 | Overview: |
| 8286 | """"""""" |
| 8287 | |
| 8288 | The ``llvm.expect`` intrinsic provides information about expected (the |
| 8289 | most probable) value of ``val``, which can be used by optimizers. |
| 8290 | |
| 8291 | Arguments: |
| 8292 | """""""""" |
| 8293 | |
| 8294 | The ``llvm.expect`` intrinsic takes two arguments. The first argument is |
| 8295 | a value. The second argument is an expected value, this needs to be a |
| 8296 | constant value, variables are not allowed. |
| 8297 | |
| 8298 | Semantics: |
| 8299 | """""""""" |
| 8300 | |
| 8301 | This intrinsic is lowered to the ``val``. |
| 8302 | |
| 8303 | '``llvm.donothing``' Intrinsic |
| 8304 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 8305 | |
| 8306 | Syntax: |
| 8307 | """"""" |
| 8308 | |
| 8309 | :: |
| 8310 | |
| 8311 | declare void @llvm.donothing() nounwind readnone |
| 8312 | |
| 8313 | Overview: |
| 8314 | """"""""" |
| 8315 | |
| 8316 | The ``llvm.donothing`` intrinsic doesn't perform any operation. It's the |
| 8317 | only intrinsic that can be called with an invoke instruction. |
| 8318 | |
| 8319 | Arguments: |
| 8320 | """""""""" |
| 8321 | |
| 8322 | None. |
| 8323 | |
| 8324 | Semantics: |
| 8325 | """""""""" |
| 8326 | |
| 8327 | This intrinsic does nothing, and it's removed by optimizers and ignored |
| 8328 | by codegen. |