From 37c529ae680633af2d6b87e7f8cf163ff343df76 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 21 May 2010 22:20:54 +0000 Subject: [PATCH] expand on the llvm ir bitcode dox. Patch by Peter Housel! llvm-svn: 104391 --- llvm/docs/BitCodeFormat.html | 346 ++++++++++++++++++++++++++++++++++- 1 file changed, 339 insertions(+), 7 deletions(-) diff --git a/llvm/docs/BitCodeFormat.html b/llvm/docs/BitCodeFormat.html index f1ddefdea9af..fc045cb0751d 100644 --- a/llvm/docs/BitCodeFormat.html +++ b/llvm/docs/BitCodeFormat.html @@ -40,8 +40,9 @@
-

Written by Chris Lattner - and Joshua Haberman. +

Written by Chris Lattner, + Joshua Haberman, + and Peter S. Housel.

@@ -1037,8 +1038,17 @@ fields of FUNCTION records.

-

The PARAMATTR_BLOCK block (id 9) ... -

+

The PARAMATTR_BLOCK block (id 9) contains a table of +entries describing the attributes of function parameters. These +entries are referenced by 1-based index in the paramattr field +of module block FUNCTION +records, or within the attr field of function block INST_INVOKE and INST_CALL records.

+ +

Entries within PARAMATTR_BLOCK are constructed to ensure +that each is unique (i.e., no two indicies represent equivalent +attribute lists).

@@ -1051,8 +1061,41 @@ fields of FUNCTION records.

[ENTRY, paramidx0, attr0, paramidx1, attr1...]

-

The ENTRY record (code 1) ... +

The ENTRY record (code 1) contains an even number of +values describing a unique set of function parameter attributes. Each +paramidx value indicates which set of attributes is +represented, with 0 representing the return value attributes, +0xFFFFFFFF representing function attributes, and other values +representing 1-based function parameters. Each attr value is a +bitmap with the following interpretation:

+ + @@ -1061,11 +1104,283 @@ fields of FUNCTION records.

-

The TYPE_BLOCK block (id 10) ... +

The TYPE_BLOCK block (id 10) contains records which +constitute a table of type operator entries used to represent types +referenced within an LLVM module. Each record (with the exception of +NUMENTRY) generates a +single type table entry, which may be referenced by 0-based index from +instructions, constants, metadata, type symbol table entries, or other +type operator records.

+

Entries within TYPE_BLOCK are constructed to ensure that +each entry is unique (i.e., no two indicies represent structurally +equivalent types).

+
+ +
TYPE_CODE_NUMENTRY Record +
+ +
+ +

[NUMENTRY, numentries]

+ +

The NUMENTRY record (code 1) contains a single value which +indicates the total number of type code entries in the type table of +the module. If present, NUMENTRY should be the first record +in the block. +

+
+ + +
TYPE_CODE_VOID Record +
+ +
+ +

[VOID]

+ +

The VOID record (code 2) adds a void type to the +type table. +

+
+ + +
TYPE_CODE_FLOAT Record +
+ +
+ +

[FLOAT]

+ +

The FLOAT record (code 3) adds a float (32-bit +floating point) type to the type table. +

+
+ + +
TYPE_CODE_DOUBLE Record +
+ +
+ +

[DOUBLE]

+ +

The DOUBLE record (code 4) adds a double (64-bit +floating point) type to the type table. +

+
+ + +
TYPE_CODE_LABEL Record +
+ +
+ +

[LABEL]

+ +

The LABEL record (code 5) adds a label type to +the type table. +

+
+ + +
TYPE_CODE_OPAQUE Record +
+ +
+ +

[OPAQUE]

+ +

The OPAQUE record (code 6) adds an opaque type to +the type table. Note that distinct opaque types are not +unified. +

+
+ + +
TYPE_CODE_INTEGER Record +
+ +
+ +

[INTEGER, width]

+ +

The INTEGER record (code 7) adds an integer type to the +type table. The single width field indicates the width of the +integer type. +

+
+ + +
TYPE_CODE_POINTER Record +
+ +
+ +

[POINTER, pointee type, address space]

+ +

The POINTER record (code 8) adds a pointer type to the +type table. The operand fields are

+ + +
+ + +
TYPE_CODE_FUNCTION Record +
+ +
+ +

[FUNCTION, vararg, ignored, retty, ...paramty... ]

+ +

The FUNCTION record (code 9) adds a function type to the +type table. The operand fields are

+ + + +
+ + +
TYPE_CODE_STRUCT Record +
+ +
+ +

[STRUCT, ispacked, ...eltty...]

+ +

The STRUCT record (code 10) adds a struct type to the +type table. The operand fields are

+ + +
+ + +
TYPE_CODE_ARRAY Record +
+ +
+ +

[ARRAY, numelts, eltty]

+ +

The ARRAY record (code 11) adds an array type to the type +table. The operand fields are

+ + +
+ + +
TYPE_CODE_VECTOR Record +
+ +
+ +

[VECTOR, numelts, eltty]

+ +

The VECTOR record (code 12) adds a vector type to the type +table. The operand fields are

+ + +
+ + +
TYPE_CODE_X86_FP80 Record +
+ +
+ +

[X86_FP80]

+ +

The X86_FP80 record (code 13) adds an x86_fp80 (80-bit +floating point) type to the type table. +

+
+ + +
TYPE_CODE_FP128 Record +
+ +
+ +

[FP128]

+ +

The FP128 record (code 14) adds an fp128 (128-bit +floating point) type to the type table. +

+
+ + +
TYPE_CODE_PPC_FP128 Record +
+ +
+ +

[PPC_FP128]

+ +

The PPC_FP128 record (code 15) adds a ppc_fp128 +(128-bit floating point) type to the type table. +

+
+ + +
TYPE_CODE_METADATA Record +
+ +
+ +

[METADATA]

+ +

The METADATA record (code 16) adds a metadata +type to the type table. +

+
+ + +
TYPE_CODE_UNION Record +
+ +
+ +

[UNION, ...eltty...]

+ +

The UNION record (code 17) adds a union type to +the type table. The eltty operand fields are zero or more type +indices representing the element types of the union. +

+ +
CONSTANTS_BLOCK Contents @@ -1107,11 +1422,28 @@ fields of FUNCTION records.

-

The TYPE_SYMTAB_BLOCK block (id 13) ... +

The TYPE_SYMTAB_BLOCK block (id 13) contains entries which +map between module-level named types and their corresponding type +indices.

+ + + +
+ +

[ENTRY, typeid, ...string...]

+ +

The ENTRY record (code 1) contains a variable number of +values, with the first giving the type index of the designated type, +and the remaining values giving the character codes of the type +name. Each entry corresponds to a single named type. +

+
+