From 96952bd3b10d6a880b406461e2373b8781abc919 Mon Sep 17 00:00:00 2001
From: Michael Ilseman This example is made up of a global variable named
".str", an external declaration of the "puts" function,
a function definition for
- "main" and named metadata
+ "main" and named metadata
"foo". In general, a module is made up of a list of global values (where both
@@ -1103,7 +1103,7 @@ declare signext i8 @returns_signed_char()
readonly functions should not write to
byval parameters). This is not a valid attribute for return
values. The byval attribute also supports specifying an alignment with
the align attribute. It indicates the alignment of the stack slot to
form and the known alignment of the pointer specified to the call site. If
@@ -1461,12 +1461,12 @@ target datalayout = "layout specification"
this is not a specification from the frontend of what alignment the code
generator should use. Instead, if specified, the target data layout is required to match what the
- ultimate code generator expects. This string is used by the
+ Instead, if specified, the target data layout is required to match what the
+ ultimate code generator expects. This string is used by the
mid-level optimizers to
- improve code, and this only works if it matches what the ultimate code
+ improve code, and this only works if it matches what the ultimate code
generator uses. If you would like to generate IR that does not embed this
- target-specific detail into the IR, then you don't have to specify the
+ target-specific detail into the IR, then you don't have to specify the
string. This will disable some optimizations that require precise layout
information, but this also prevents those optimizations from introducing
target specificity into the IR.
Structures may optionally be "packed" structures, which indicate that the + +
Structures may optionally be "packed" structures, which indicate that the alignment of the struct is one byte, and that there is no padding between the elements. In non-packed structs, padding between field types is inserted as defined by the DataLayout string in the module, which is required to match @@ -2127,13 +2127,13 @@ in signal handlers).
no way to write one. Identified types can be recursive, can be opaqued, and are never uniqued. - +%T1 = type { <type list> } ; Identified normal struct type %T2 = type <{ <type list> }> ; Identified packed struct type- +
The pointer type is used to specify memory locations. Pointers are commonly used to reference objects in memory.
- +Pointer types may have an optional address space attribute defining the numbered address space where the pointed-to object resides. The default address space is number zero. The semantics of non-zero address @@ -2987,7 +2987,7 @@ call void asm sideeffect "something bad", ""(), !srcloc !42 -
A named metadata is a collection of +
A named metadata is a collection of metadata nodes, which can be looked up in the module symbol table. For example:
@@ -2997,7 +2997,7 @@ call void asm sideeffect "something bad", ""(), !srcloc !42 -Metadata can be used as function arguments. Here llvm.dbg.value +
Metadata can be used as function arguments. Here llvm.dbg.value function is using two metadata arguments:
fpmath metadata may be attached to any instruction of floating point @@ -3522,13 +3522,13 @@ cast formed of bitcast or getelementptr. For example, a legal use of it is:
control flow, not values (the one exception being the 'invoke' instruction). -The terminator instructions are: - 'ret', +
The terminator instructions are: + 'ret', 'br', - 'switch', + 'switch', 'indirectbr', - 'invoke', - 'resume', and + 'invoke', + 'resume', and 'unreachable'.
@@ -3827,7 +3827,7 @@ IfUnequal:If the nuw keyword is present, then the shift produces a +
If the nuw keyword is present, then the shift produces a
poison value if it shifts out any non-zero bits. If
the nsw keyword is present, then the shift produces a
poison value if it shifts out any bits that disagree
@@ -5059,7 +5059,7 @@ IfUnequal:
href="#memorymodel">defined results when they may see multiple atomic
stores. The type of the pointee must be an integer type whose bit width
is a power of two greater than or equal to eight and less than or equal
- to a target-specific size limit. align
must be explicitly
+ to a target-specific size limit. align
must be explicitly
specified on atomic loads, and the load has undefined behavior if the
alignment is not set to a value which is at least the size in bytes of
the pointee. !nontemporal
does not have any defined semantics
@@ -5140,7 +5140,7 @@ IfUnequal:
href="#memorymodel">defined results when they may see multiple atomic
stores. The type of the pointee must be an integer type whose bit width
is a power of two greater than or equal to eight and less than or equal
- to a target-specific size limit. align
must be explicitly
+ to a target-specific size limit. align
must be explicitly
specified on atomic stores, and the store has undefined behavior if the
alignment is not set to a value which is at least the size in bytes of
the pointee. !nontemporal
does not have any defined semantics
@@ -5402,7 +5402,7 @@ specified by the operation argument:
<result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}* <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}* - <result> = getelementptr <ptr vector> ptrval, <vector index type> idx + <result> = getelementptr <ptr vector> ptrval, <vector index type> idx
This means that code must first load the half-precision floating point value as an i16, then convert it to float with llvm.convert.from.fp16. @@ -8942,7 +8942,7 @@ intrinsic function should be used instead.
is a boolean and determines whether llvm.objectsize returns 0 (if true) or -1 (if false) when the object size is unknown. The second argument only accepts constants. - +The llvm.objectsize intrinsic is lowered to a constant representing the size of the object concerned. If the size cannot be determined at compile -- 2.34.1