Syntax:
@@ -2985,11 +3069,11 @@ IfUnequal:
-
+
-
+
Syntax:
@@ -3033,11 +3117,11 @@ IfUnequal:
-
+
-
+
Syntax:
@@ -3123,10 +3207,11 @@ that the invoke/unwind semantics are likely to change in future versions.
-
+
-
+
Syntax:
@@ -3154,10 +3239,11 @@ that the invoke/unwind semantics are likely to change in future versions.
-
+
-
+
Syntax:
@@ -3175,10 +3261,14 @@ Instruction
+
+
-
+
-
+
Binary operators are used to do most of the computation in a program. They
require two operands of the same type, execute an operation on them, and
@@ -3188,14 +3278,12 @@ Instruction
There are several different binary operators:
-
-
-
+
-
+
Syntax:
@@ -3236,11 +3324,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3266,11 +3354,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3318,11 +3406,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3354,11 +3442,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3404,11 +3492,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3434,10 +3522,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3474,10 +3563,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3516,10 +3606,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3545,10 +3636,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3582,11 +3674,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3606,9 +3698,10 @@ Instruction
Semantics:
This instruction returns the remainder of a division (where the result
- has the same sign as the dividend, op1), not the modulo
- operator (where the result has the same sign as the divisor, op2) of
- a value. For more information about the difference,
+ is either zero or has the same sign as the dividend, op1), not the
+ modulo operator (where the result is either zero or has the same sign
+ as the divisor, op2) of a value.
+ For more information about the difference,
see The
Math Forum. For a table of how this is implemented in various languages,
please see
@@ -3632,10 +3725,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3662,11 +3756,14 @@ Instruction
+
+
-
+
-
+
Bitwise binary operators are used to do various forms of bit-twiddling in a
program. They are generally very efficient instructions and can commonly be
@@ -3674,13 +3771,12 @@ Operations
same type, execute an operation on them, and produce a single value. The
resulting value is the same type as its operands.
-
-
-
+
-
+
Syntax:
@@ -3727,10 +3823,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3773,9 +3870,11 @@ Instruction
-
-
+
+
+
Syntax:
@@ -3818,10 +3917,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3878,9 +3978,11 @@ Instruction
-
+
-
+
Syntax:
@@ -3939,10 +4041,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4002,12 +4105,14 @@ Instruction
+
+
-
+
-
+
LLVM supports several instructions to represent vector operations in a
target-independent manner. These instructions cover the element-access and
@@ -4016,14 +4121,12 @@ Instruction
will want to use target-specific intrinsics to take full advantage of a
specific target.
-
-
-
+
-
+
Syntax:
@@ -4055,11 +4158,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4091,11 +4194,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4138,24 +4241,24 @@ Instruction
+
+
-
+
-
+
LLVM supports several instructions for working with
aggregate values.
-
-
-
+
-
+
Syntax:
@@ -4193,15 +4296,15 @@ Instruction
-
+
-
+
Syntax:
- <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx> ; yields <aggregate type>
+ <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, }* ; yields <aggregate type>
Overview:
@@ -4225,33 +4328,33 @@ Instruction
Example:
- %agg1 = insertvalue {i32, float} undef, i32 1, 0 ; yields {i32 1, float undef}
- %agg2 = insertvalue {i32, float} %agg1, float %val, 1 ; yields {i32 1, float %val}
+ %agg1 = insertvalue {i32, float} undef, i32 1, 0 ; yields {i32 1, float undef}
+ %agg2 = insertvalue {i32, float} %agg1, float %val, 1 ; yields {i32 1, float %val}
+ %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0 ; yields {i32 1, float %val}
+
-
+
-
+
A key design point of an SSA-based representation is how it represents
memory. In LLVM, no memory locations are in SSA form, which makes things
very simple. This section describes how to read, write, and allocate
memory in LLVM.
-
-
-
+
-
+
Syntax:
@@ -4298,10 +4401,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4356,10 +4460,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4417,11 +4522,11 @@ Instruction
-
+
-
+
Syntax:
@@ -4547,23 +4652,25 @@ entry:
-
-
-
+
+
+
+
The instructions in this category are the conversion instructions (casting)
which all take a single operand and a type. They perform various bit
conversions on the operand.
-
-
-
-
+
+
+
Syntax:
@@ -4575,12 +4682,12 @@ entry:
type ty2.
Arguments:
-The 'trunc' instruction takes a value to trunc, which must
- be an integer type, and a type that specifies the
- size and type of the result, which must be
- an integer type. The bit size of value must
- be larger than the bit size of ty2. Equal sized types are not
- allowed.
+The 'trunc' instruction takes a value to trunc, and a type to trunc it to.
+ Both types must be of integer types, or vectors
+ of the same number of integers.
+ The bit size of the value must be larger than
+ the bit size of the destination type, ty2.
+ Equal sized types are not allowed.
Semantics:
The 'trunc' instruction truncates the high order bits
@@ -4590,18 +4697,20 @@ entry:
Example:
- %X = trunc i32 257 to i8 ; yields i8:1
- %Y = trunc i32 123 to i1 ; yields i1:true
- %Z = trunc i32 122 to i1 ; yields i1:false
+ %X = trunc i32 257 to i8 ; yields i8:1
+ %Y = trunc i32 123 to i1 ; yields i1:true
+ %Z = trunc i32 122 to i1 ; yields i1:false
+ %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> ; yields <i8 8, i8 7>
-
-
+
+
+
Syntax:
@@ -4614,10 +4723,11 @@ entry:
Arguments:
-The 'zext' instruction takes a value to cast, which must be of
- integer type, and a type to cast it to, which must
- also be of integer type. The bit size of the
- value must be smaller than the bit size of the destination type,
+
The 'zext' instruction takes a value to cast, and a type to cast it to.
+ Both types must be of integer types, or vectors
+ of the same number of integers.
+ The bit size of the value must be smaller than
+ the bit size of the destination type,
ty2.
Semantics:
@@ -4630,15 +4740,17 @@ entry:
%X = zext i32 257 to i64 ; yields i64:257
%Y = zext i1 true to i32 ; yields i32:1
+ %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
-
-
+
+
+
Syntax:
@@ -4649,10 +4761,11 @@ entry:
The 'sext' sign extends value to the type ty2.
Arguments:
-The 'sext' instruction takes a value to cast, which must be of
- integer type, and a type to cast it to, which must
- also be of integer type. The bit size of the
- value must be smaller than the bit size of the destination type,
+
The 'sext' instruction takes a value to cast, and a type to cast it to.
+ Both types must be of integer types, or vectors
+ of the same number of integers.
+ The bit size of the value must be smaller than
+ the bit size of the destination type,
ty2.
Semantics:
@@ -4666,16 +4779,17 @@ entry:
%X = sext i8 -1 to i16 ; yields i16 :65535
%Y = sext i1 true to i32 ; yields i32:-1
+ %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> ; yields <i32 8, i32 7>
-
+
-
+
Syntax:
@@ -4709,10 +4823,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4738,17 +4853,18 @@ entry:
Example:
- %X = fpext float 3.1415 to double ; yields double:3.1415
- %Y = fpext float 1.0 to float ; yields float:1.0 (no-op)
+ %X = fpext float 3.125 to double ; yields double:3.125000e+00
+ %Y = fpext double %X to fp128 ; yields fp128:0xL00000000000000004000900000000000
-
-
+
+
+
Syntax:
@@ -4782,10 +4898,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4820,10 +4937,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4856,10 +4974,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4891,10 +5010,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4928,10 +5048,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -4965,10 +5086,11 @@ entry:
-
-
+
+
+
Syntax:
@@ -5007,21 +5129,24 @@ entry:
+
+
-
+
-
+
The instructions in this category are the "miscellaneous" instructions, which
defy better classification.
-
-
-
+
-
+
Syntax:
@@ -5120,10 +5245,11 @@ entry:
-
+
-
+
Syntax:
@@ -5240,11 +5366,11 @@ entry:
-
+
-
+
Syntax:
@@ -5288,11 +5414,11 @@ Loop: ; Infinite loop that counts from 0 on up...
-
+
-
+
Syntax:
@@ -5331,11 +5457,11 @@ Loop: ; Infinite loop that counts from 0 on up...
-
+
-
+
Syntax:
@@ -5440,11 +5566,11 @@ freestanding environments and non-C-based languages.
-
+
-
+
Syntax:
@@ -5485,11 +5611,15 @@ freestanding environments and non-C-based languages.
+
+
+
+
-
+
-
+
LLVM supports the notion of an "intrinsic function". These functions have
well known names and semantics and are required to follow certain
@@ -5532,14 +5662,12 @@ freestanding environments and non-C-based languages.
To learn how to add an intrinsic function, please see the
Extending LLVM Guide.
-
-
-
+
-
+
Variable argument support is defined in LLVM with
the va_arg instruction and these three
@@ -5581,15 +5709,13 @@ declare void @llvm.va_copy(i8*, i8*)
declare void @llvm.va_end(i8*)
-
-
-
+
-
+
Syntax:
@@ -5615,11 +5741,11 @@ declare void @llvm.va_end(i8*)
-
+
-
+
Syntax:
@@ -5646,11 +5772,11 @@ declare void @llvm.va_end(i8*)
-
+
-
+
Syntax:
@@ -5676,12 +5802,14 @@ declare void @llvm.va_end(i8*)
+
+
-
+
-
+
LLVM support for Accurate Garbage
Collection (GC) requires the implementation and generation of these
@@ -5696,14 +5824,12 @@ LLVM.
The garbage collection intrinsics only operate on objects in the generic
address space (address space zero).
-
-
-
+
-
+
Syntax:
@@ -5730,11 +5856,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5762,11 +5888,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5793,24 +5919,24 @@ LLVM.
+
+
-
+
-
+
These intrinsics are provided by LLVM to expose special features that may
only be implemented with code generator support.
-
-
-
+
-
+
Syntax:
@@ -5841,11 +5967,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5875,11 +6001,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5905,11 +6031,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5930,11 +6056,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5963,11 +6089,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -5994,11 +6120,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -6020,26 +6146,26 @@ LLVM.
+
+
-
+
-
+
LLVM provides intrinsics for a few important standard C library functions.
These intrinsics allow source-language front-ends to pass information about
the alignment of the pointer arguments to the code generator, providing
opportunity for more efficient code generation.
-
-
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.memcpy on any
@@ -6089,11 +6215,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
@@ -6145,11 +6271,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.memset on any integer bit
@@ -6195,11 +6321,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.sqrt on any
@@ -6233,11 +6359,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.powi on any
@@ -6269,11 +6395,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.sin on any
@@ -6303,11 +6429,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.cos on any
@@ -6337,11 +6463,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.pow on any
@@ -6371,24 +6497,90 @@ LLVM.
+
+
+
+
+
+
+
+
Syntax:
+
This is an overloaded intrinsic. You can use llvm.exp on any
+ floating point or vector of floating point type. Not all targets support all
+ types however.
+
+
+ declare float @llvm.exp.f32(float %Val)
+ declare double @llvm.exp.f64(double %Val)
+ declare x86_fp80 @llvm.exp.f80(x86_fp80 %Val)
+ declare fp128 @llvm.exp.f128(fp128 %Val)
+ declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128 %Val)
+
+
+
Overview:
+
The 'llvm.exp.*' intrinsics perform the exp function.
+
+
Arguments:
+
The argument and return value are floating point numbers of the same
+ type.
+
+
Semantics:
+
This function returns the same values as the libm exp functions
+ would, and handles error conditions in the same way.
+
+
+
+
+
+
+
+
+
Syntax:
+
This is an overloaded intrinsic. You can use llvm.log on any
+ floating point or vector of floating point type. Not all targets support all
+ types however.
+
+
+ declare float @llvm.log.f32(float %Val)
+ declare double @llvm.log.f64(double %Val)
+ declare x86_fp80 @llvm.log.f80(x86_fp80 %Val)
+ declare fp128 @llvm.log.f128(fp128 %Val)
+ declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128 %Val)
+
+
+
Overview:
+
The 'llvm.log.*' intrinsics perform the log function.
+
+
Arguments:
+
The argument and return value are floating point numbers of the same
+ type.
+
+
Semantics:
+
This function returns the same values as the libm log functions
+ would, and handles error conditions in the same way.
+
+
+
-
+
-
+
LLVM provides intrinsics for a few important bit manipulation operations.
These allow efficient code generation for some algorithms.
-
-
-
+
-
+
Syntax:
This is an overloaded intrinsic function. You can use bswap on any integer
@@ -6419,11 +6611,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
@@ -6451,11 +6643,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.ctlz on any
@@ -6485,11 +6677,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.cttz on any
@@ -6518,23 +6710,25 @@ LLVM.
+
+
-
+
-
+
LLVM provides intrinsics for some arithmetic with overflow operations.
-
-
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.sadd.with.overflow
@@ -6576,11 +6770,13 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.uadd.with.overflow
@@ -6621,11 +6817,13 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.ssub.with.overflow
@@ -6667,11 +6865,13 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.usub.with.overflow
@@ -6713,11 +6913,13 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.smul.with.overflow
@@ -6760,11 +6962,13 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.umul.with.overflow
@@ -6805,12 +7009,14 @@ LLVM.
+
+
-
+
-
+
Half precision floating point is a storage-only format. This means that it is
a dense encoding (in memory) but does not support computation in the
@@ -6824,14 +7030,15 @@ LLVM.
float if needed, then converted to i16 with
llvm.convert.to.fp16, then
storing as an i16 value.
-
-
+
-
+
Syntax:
@@ -6862,11 +7069,13 @@ LLVM.
-
+
-
+
Syntax:
@@ -6896,12 +7105,14 @@ LLVM.
+
+
-
+
-
+
The LLVM debugger intrinsics (which all start with llvm.dbg.
prefix), are described in
@@ -6911,11 +7122,11 @@ LLVM.
-
+
-
+
The LLVM exception handling intrinsics (which all start with
llvm.eh. prefix), are described in
@@ -6925,11 +7136,11 @@ LLVM.
-
+
-
+
This intrinsic makes it possible to excise one parameter, marked with
the nest attribute, from a function.
@@ -6955,14 +7166,14 @@ LLVM.
The call %val = call i32 %fp(i32 %x, i32 %y) is then equivalent
to %val = call i32 %f(i8* %nval, i32 %x, i32 %y).
-
-
-
+
-
+
Syntax:
@@ -6999,12 +7210,14 @@ LLVM.
+
+
-
+
-
+
These intrinsic functions expand the "universal IR" of LLVM to represent
hardware constructs for atomic operations and memory synchronization. This
@@ -7024,13 +7237,12 @@ LLVM.
No one model or paradigm should be selected above others unless the hardware
itself ubiquitously does so.
-
-
-
-
+
+
+
Syntax:
declare void @llvm.memory.barrier(i1 <ll>, i1 <ls>, i1 <sl>, i1 <ss>, i1 <device>)
@@ -7098,11 +7310,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.atomic.cmp.swap on
@@ -7158,10 +7370,11 @@ LLVM.
-
-
+
+
+
Syntax:
This is an overloaded intrinsic. You can use llvm.atomic.swap on any
@@ -7214,12 +7427,11 @@ LLVM.
-
-
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.atomic.load.add on
@@ -7264,12 +7476,11 @@ LLVM.
-
-
-
+
Syntax:
This is an overloaded intrinsic. You can use llvm.atomic.load.sub on
@@ -7316,14 +7527,25 @@ LLVM.
-
-
-
+
+
+
Syntax:
These are overloaded intrinsics. You can
@@ -7396,14 +7618,25 @@ LLVM.
-
-
-
+
+
+
Syntax:
These are overloaded intrinsics. You can use llvm.atomic.load_max,
@@ -7474,25 +7707,24 @@ LLVM.
+
-
+
-
+
This class of intrinsics exists to information about the lifetime of memory
objects and ranges where variables are immutable.
-
-
-
+
-
+
Syntax:
@@ -7518,11 +7750,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7547,11 +7779,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7575,11 +7807,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7601,24 +7833,24 @@ LLVM.
+
+
-
+
-
+
This class of intrinsics is designed to be generic and has no specific
purpose.
-
-
-
+
-
+
Syntax:
@@ -7642,11 +7874,11 @@ LLVM.
-
+
-
+
Syntax:
This is an overloaded intrinsic. You can use 'llvm.annotation' on
@@ -7678,11 +7910,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7703,11 +7935,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7737,11 +7969,11 @@ LLVM.
-
+
-
+
Syntax:
@@ -7771,6 +8003,10 @@ LLVM.
+
+
+
+
@@ -7780,7 +8016,7 @@ LLVM.
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01">
Chris Lattner
- The LLVM Compiler Infrastructure
+ The LLVM Compiler Infrastructure
Last modified: $Date$