Provided opcode definitions.

Clarified documentation of symbol tables.
Clarified definition of slot numbers.
Added the http-equiv meta tag for HTML 4.01 strict compliance.
Adjusted line lengths.
Differentiated between "type slot" and "value slot" everywhere.
ispelled it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15908 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2004-08-18 20:06:19 +00:00
parent d6640951c2
commit 09daa63597

View File

@ -1,6 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>LLVM Bytecode File Format</title> <title>LLVM Bytecode File Format</title>
<link rel="stylesheet" href="llvm.css" type="text/css"> <link rel="stylesheet" href="llvm.css" type="text/css">
<style type="text/css"> <style type="text/css">
@ -254,17 +255,6 @@ variable bit rate encoding as described above.</p>
<td class="td_left">A 64-bit signed integer that occupies from one to ten <td class="td_left">A 64-bit signed integer that occupies from one to ten
bytes using the signed variable bit rate encoding.</td> bytes using the signed variable bit rate encoding.</td>
</tr> </tr>
<tr>
<td><a name="opcode"><b>opcode</b></a></td>
<td class="td_left">An enumerated integer value used in the instruction
format that identifies the LLVM instruction opcode referenced. The
specific values used depend on the version of LLVM you're using. See the
<a
href="http://llvm.org/cvsweb/cvsweb.cgi/llvm/include/llvm/Instruction.def">
<tt>include/llvm/Instruction.def</tt></a> file for the definitive set of
opcode values used for your release. The opcode values are the first
argument to the various <tt>HANDLE_*_INST</tt> macros.
</td>
<tr> <tr>
<td><a name="char"><b>char</b></a></td> <td><a name="char"><b>char</b></a></td>
<td class="td_left">A single unsigned character encoded into one byte</td> <td class="td_left">A single unsigned character encoded into one byte</td>
@ -408,10 +398,9 @@ slot numbers with their "type plane". That is, Values of the same type
are written to the bytecode file in a list (sequentially). Their order in are written to the bytecode file in a list (sequentially). Their order in
that list determines their slot number. This means that slot #1 doesn't mean that list determines their slot number. This means that slot #1 doesn't mean
anything unless you also specify for which type you want slot #1. Types are anything unless you also specify for which type you want slot #1. Types are
handled specially and are always written to the file first (in the <a always written to the file first (in the <a href="#globaltypes">Global Type
href="#globaltypes">Global Type Pool</a>) and in such a way that both forward Pool</a>) and in such a way that both forward and backward references of the
and backward references of the types can often be resolved with a single pass types can often be resolved with a single pass through the type pool. </p>
through the type pool. </p>
<p>Slot numbers are also kept small by rearranging their order. Because <p>Slot numbers are also kept small by rearranging their order. Because
of the structure of LLVM, certain values are much more likely to be used of the structure of LLVM, certain values are much more likely to be used
frequently in the body of a function. For this reason, a compaction table is frequently in the body of a function. For this reason, a compaction table is
@ -420,6 +409,10 @@ smaller. Suppose you have a function body that uses just the types "int*" and
"{double}" but uses them thousands of time. Its worthwhile to ensure that the "{double}" but uses them thousands of time. Its worthwhile to ensure that the
slot number for these types are low so they can be encoded in a single byte slot number for these types are low so they can be encoded in a single byte
(via vbr). This is exactly what the compaction table does.</p> (via vbr). This is exactly what the compaction table does.</p>
<p>In summary then, a slot number can be though of as just a vbr encoded index
into a list of Type* or Value*. To keep slot numbers low, Value* are indexed by
two slot numbers: the "type plane index" (type slot) and the "value index"
(value slot).</p>
</div> </div>
<!-- *********************************************************************** --> <!-- *********************************************************************** -->
<div class="doc_section"> <a name="general">General Structure</a> </div> <div class="doc_section"> <a name="general">General Structure</a> </div>
@ -731,7 +724,7 @@ triples</a>.
<div class="doc_subsection"><a name="globaltypes">Global Type Pool</a> </div> <div class="doc_subsection"><a name="globaltypes">Global Type Pool</a> </div>
<div class="doc_text"> <div class="doc_text">
<p>The global type pool consists of type definitions. Their order of appearance <p>The global type pool consists of type definitions. Their order of appearance
in the file determines their slot number (0 based). Slot numbers are in the file determines their type slot number (0 based). Slot numbers are
used to replace pointers in the intermediate representation. Each slot number used to replace pointers in the intermediate representation. Each slot number
uniquely identifies one entry in a type plane (a collection of values of the uniquely identifies one entry in a type plane (a collection of values of the
same type). Since all values have types and are associated with the order in same type). Since all values have types and are associated with the order in
@ -765,7 +758,7 @@ table below.</p>
of type, as given in the following sections.</p> of type, as given in the following sections.</p>
<h3>Primitive Types</h3> <h3>Primitive Types</h3>
<p>The primitive types encompass the basic integer and floating point <p>The primitive types encompass the basic integer and floating point
types</p> types. They are encoded simply as their TypeID.</p>
<table> <table>
<tbody> <tbody>
<tr> <tr>
@ -813,11 +806,11 @@ following mapping:
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a></td> <td><a href="#uint24_vbr">uint24_vbr</a></td>
<td class="td_left">Slot number of function's return type.</td> <td class="td_left">Type slot number of function's return type.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#llist">llist</a>(<a href="#uint24_vbr">uint24_vbr</a>)</td> <td><a href="#llist">llist</a>(<a href="#uint24_vbr">uint24_vbr</a>)</td>
<td class="td_left">Slot number of each argument's type.</td> <td class="td_left">Type slot number of each argument's type.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a>?</td> <td><a href="#uint32_vbr">uint32_vbr</a>?</td>
@ -856,7 +849,7 @@ missing otherwise.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a></td> <td><a href="#uint24_vbr">uint24_vbr</a></td>
<td class="td_left">Slot number of array's element type.</td> <td class="td_left">Type slot number of array's element type.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td> <td><a href="#uint32_vbr">uint32_vbr</a></td>
@ -877,7 +870,7 @@ missing otherwise.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a></td> <td><a href="#uint24_vbr">uint24_vbr</a></td>
<td class="td_left">Slot number of pointer's element type.</td> <td class="td_left">Type slot number of pointer's element type.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -916,12 +909,12 @@ all functions. The format is shown in the table below:</p>
<tr> <tr>
<td><a href="#zlist">zlist</a>(<a href="#globalvar">globalvar</a>)</td> <td><a href="#zlist">zlist</a>(<a href="#globalvar">globalvar</a>)</td>
<td class="td_left">A zero terminated list of global var <td class="td_left">A zero terminated list of global var
definitions occuring in the module.</td> definitions occurring in the module.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#zlist">zlist</a>(<a href="#uint24_vbr">uint24_vbr</a>)</td> <td><a href="#zlist">zlist</a>(<a href="#uint24_vbr">uint24_vbr</a>)</td>
<td class="td_left">A zero terminated list of function types <td class="td_left">A zero terminated list of function types
occuring in the module.</td> occurring in the module.</td>
</tr> </tr>
<tr> <tr>
<td style="vertical-align: top;"><a href="#llist">llist</a>(<a <td style="vertical-align: top;"><a href="#llist">llist</a>(<a
@ -975,7 +968,7 @@ follows. </td>
</tr> </tr>
<tr> <tr>
<td><a href="#bit">bit(5-31)</a></td> <td><a href="#bit">bit(5-31)</a></td>
<td class="td_left">Slot number of type for the global variable.</td> <td class="td_left">Type slot number of type for the global variable.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -990,7 +983,7 @@ the global variable field, if it has one.</p>
<tr> <tr>
<td>(<a href="#zlist">zlist</a>(<a href="#uint32_vbr">uint32_vbr</a>))? <td>(<a href="#zlist">zlist</a>(<a href="#uint32_vbr">uint32_vbr</a>))?
</td> </td>
<td class="td_left">An optional zero-terminated list of slot <td class="td_left">An optional zero-terminated list of value slot
numbers of the global variable's constant initializer.</td> numbers of the global variable's constant initializer.</td>
</tr> </tr>
</tbody> </tbody>
@ -1040,7 +1033,7 @@ uniquely from other constant planes that follow. </td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a>+</td> <td><a href="#uint24_vbr">uint24_vbr</a>+</td>
<td class="td_left">Slot number of the constant string's type. <td class="td_left">Type slot number of the constant string's type.
Note that the constant string's type implicitly defines the length of Note that the constant string's type implicitly defines the length of
the string. </td> the string. </td>
</tr> </tr>
@ -1075,7 +1068,7 @@ for the details. </p>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"><a name="constant">Constant Field</a></div> <div class="doc_subsubsection"><a name="constant">Constant Field</a></div>
<div class="doc_text"> <div class="doc_text">
<p>Constants come in many shapes and flavors. The sections that followe <p>Constants come in many shapes and flavors. The sections that follow
define the format for each of them. All constants start with a <a define the format for each of them. All constants start with a <a
href="#uint32_vbr">uint32_vbr</a> encoded integer that provides the href="#uint32_vbr">uint32_vbr</a> encoded integer that provides the
number of operands for the constant. For primitive, structure, and number of operands for the constant. For primitive, structure, and
@ -1093,10 +1086,10 @@ corresponding value. </li>
<li><b>Floating Point</b>. Both the float and double types are <li><b>Floating Point</b>. Both the float and double types are
written literally in binary format.</li> written literally in binary format.</li>
<li><b>Arrays</b>. Arrays are written simply as a list of <a <li><b>Arrays</b>. Arrays are written simply as a list of <a
href="#uint32_vbr">uint32_vbr</a> encoded slot numbers to the constant href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the constant
element values.</li> element values.</li>
<li><b>Structures</b>. Structures are written simply as a list of <a <li><b>Structures</b>. Structures are written simply as a list of <a
href="#uint32_vbr">uint32_vbr</a> encoded slot numbers to the constant href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the constant
field values of the structure.</li> field values of the structure.</li>
</ul> </ul>
<p>When the number of operands to the constant is non-zero, we have a <p>When the number of operands to the constant is non-zero, we have a
@ -1114,12 +1107,12 @@ expression.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td> <td><a href="#uint32_vbr">uint32_vbr</a></td>
<td class="td_left">The slot number of the constant value for an <td class="td_left">The value slot number of the constant value for an
operand.<sup>1</sup></td> operand.<sup>1</sup></td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a></td> <td><a href="#uint24_vbr">uint24_vbr</a></td>
<td class="td_left">The slot number for the type of the constant <td class="td_left">The type slot number for the type of the constant
value for an operand.<sup>1</sup></td> value for an operand.<sup>1</sup></td>
</tr> </tr>
</tbody> </tbody>
@ -1191,7 +1184,7 @@ save bytecode space. If not, then a regular constant pool is written.</li>
<div class="doc_text"> <div class="doc_text">
<p>Compaction tables are part of a function definition. They are merely <p>Compaction tables are part of a function definition. They are merely
a device for reducing the size of bytecode files. The size of a a device for reducing the size of bytecode files. The size of a
bytecode file is dependent on the <em>value</em> of the slot numbers bytecode file is dependent on the <em>values</em> of the slot numbers
used because larger values use more bytes in the variable bit rate used because larger values use more bytes in the variable bit rate
encoding scheme. Furthermore, the compressed instruction format encoding scheme. Furthermore, the compressed instruction format
reserves only six bits for the type of the instruction. In large reserves only six bits for the type of the instruction. In large
@ -1214,7 +1207,7 @@ both. Compaction tables have the format shown in the table below.</p>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a>+</td> <td><a href="#uint24_vbr">uint24_vbr</a>+</td>
<td class="td_left">The slot number in the global type plane of <td class="td_left">The type slot number in the global types of
the type that will be referenced in the function with the index of this the type that will be referenced in the function with the index of this
entry in the compaction table.</td> entry in the compaction table.</td>
</tr> </tr>
@ -1227,9 +1220,9 @@ details.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a>+</td> <td><a href="#uint32_vbr">uint32_vbr</a>+</td>
<td class="td_left">The slot number in the globals of the value <td class="td_left">The value slot number in the global values
that will be referenced in the function with the index of this entry in that will be referenced in the function with the index of this entry in
the compaction table</td> the compaction table.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -1247,8 +1240,7 @@ encoding uses a <a href="#uint32_vbr">uint32_vbr</a> for each of the
length and type, in that order.</p> length and type, in that order.</p>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="instructionlist">Instruction List</a> <div class="doc_subsection"><a name="instructionlist">Instruction List</a></div>
</div>
<div class="doc_text"> <div class="doc_text">
<p>The instructions in a function are written as a simple list. Basic <p>The instructions in a function are written as a simple list. Basic
blocks are inferred by the terminating instruction types. The format of blocks are inferred by the terminating instruction types. The format of
@ -1301,8 +1293,8 @@ format.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint24_vbr">uint24_vbr</a></td> <td><a href="#uint24_vbr">uint24_vbr</a></td>
<td class="td_left">Provides the slot number of the result type <td class="td_left">Provides the type slot number of the result type of
of the instruction</td> the instruction.</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td> <td><a href="#uint32_vbr">uint32_vbr</a></td>
@ -1310,8 +1302,8 @@ of the instruction</td>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a>+</td> <td><a href="#uint32_vbr">uint32_vbr</a>+</td>
<td class="td_left">The slot number of the value(s) for the <td class="td_left">The slot number of the value(s) for the operand(s).
operand(s). <sup>1</sup></td> <sup>1</sup></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -1335,27 +1327,27 @@ single <a href="#uint32_vbr">uint32_vbr</a> as follows:</p>
<tr> <tr>
<td>0-1</td> <td>0-1</td>
<td>constant "1"</td> <td>constant "1"</td>
<td class="td_left">These two bits must be the value 1 which <td class="td_left">These two bits must be the value 1 which identifies
identifies this as an instruction of format 1.</td> this as an instruction of format 1.</td>
</tr> </tr>
<tr> <tr>
<td>2-7</td> <td>2-7</td>
<td><a href="#opcode">opcode</a></td> <td><a href="#opcode">opcode</a></td>
<td class="td_left">Specifies the opcode of the instruction. Note <td class="td_left">Specifies the opcode of the instruction. Note that
that the maximum opcode value is 63.</td> the maximum opcode value is 63.</td>
</tr> </tr>
<tr> <tr>
<td>8-19</td> <td>8-19</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the type for <td class="td_left">Specifies the slot number of the type for this
this instruction. Maximum slot number is 2<sup>12</sup>-1=4095.</td> instruction. Maximum slot number is 2<sup>12</sup>-1=4095.</td>
</tr> </tr>
<tr> <tr>
<td>20-31</td> <td>20-31</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the
the first operand. Maximum slot number is 2<sup>12</sup>-1=4095. Note first operand. Maximum slot number is 2<sup>12</sup>-1=4095. Note that
that the value 2<sup>12</sup>-1 denotes zero operands.</td> the value 2<sup>12</sup>-1 denotes zero operands.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -1372,32 +1364,32 @@ that the value 2<sup>12</sup>-1 denotes zero operands.</td>
<tr> <tr>
<td>0-1</td> <td>0-1</td>
<td>constant "2"</td> <td>constant "2"</td>
<td class="td_left">These two bits must be the value 2 which <td class="td_left">These two bits must be the value 2 which identifies
identifies this as an instruction of format 2.</td> this as an instruction of format 2.</td>
</tr> </tr>
<tr> <tr>
<td>2-7</td> <td>2-7</td>
<td><a href="#opcodes">opcode</a></td> <td><a href="#opcodes">opcode</a></td>
<td class="td_left">Specifies the opcode of the instruction. Note <td class="td_left">Specifies the opcode of the instruction. Note that
that the maximum opcode value is 63.</td> the maximum opcode value is 63.</td>
</tr> </tr>
<tr> <tr>
<td>8-15</td> <td>8-15</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the type for <td class="td_left">Specifies the slot number of the type for this
this instruction. Maximum slot number is 2<sup>8</sup>-1=255.</td> instruction. Maximum slot number is 2<sup>8</sup>-1=255.</td>
</tr> </tr>
<tr> <tr>
<td>16-23</td> <td>16-23</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the first
the first operand. Maximum slot number is 2<sup>8</sup>-1=255.</td> operand. Maximum slot number is 2<sup>8</sup>-1=255.</td>
</tr> </tr>
<tr> <tr>
<td>24-31</td> <td>24-31</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the second
the second operand. Maximum slot number is 2<sup>8</sup>-1=255.</td> operand. Maximum slot number is 2<sup>8</sup>-1=255.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -1414,51 +1406,120 @@ single <a href="#uint32_vbr">uint32_vbr</a> as follows:</p>
<tr> <tr>
<td>0-1</td> <td>0-1</td>
<td>constant "3"</td> <td>constant "3"</td>
<td class="td_left">These two bits must be the value 3 which <td class="td_left">These two bits must be the value 3 which identifies
identifies this as an instruction of format 3.</td> this as an instruction of format 3.</td>
</tr> </tr>
<tr> <tr>
<td>2-7</td> <td>2-7</td>
<td><a href="#opcodes">opcode</a></td> <td><a href="#opcodes">opcode</a></td>
<td class="td_left">Specifies the opcode of the instruction. Note <td class="td_left">Specifies the opcode of the instruction. Note that
that the maximum opcode value is 63.</td> the maximum opcode value is 63.</td>
</tr> </tr>
<tr> <tr>
<td>8-13</td> <td>8-13</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the type for <td class="td_left">Specifies the slot number of the type for this
this instruction. Maximum slot number is 2<sup>6</sup>-1=63.</td> instruction. Maximum slot number is 2<sup>6</sup>-1=63.</td>
</tr> </tr>
<tr> <tr>
<td>14-19</td> <td>14-19</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the first
the first operand. Maximum slot number is 2<sup>6</sup>-1=63.</td> operand. Maximum slot number is 2<sup>6</sup>-1=63.</td>
</tr> </tr>
<tr> <tr>
<td>20-25</td> <td>20-25</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the second
the second operand. Maximum slot number is 2<sup>6</sup>-1=63.</td> operand. Maximum slot number is 2<sup>6</sup>-1=63.</td>
</tr> </tr>
<tr> <tr>
<td>26-31</td> <td>26-31</td>
<td><a href="#unsigned">unsigned</a></td> <td><a href="#unsigned">unsigned</a></td>
<td class="td_left">Specifies the slot number of the value for <td class="td_left">Specifies the slot number of the value for the third
the third operand. Maximum slot number is 2<sup>6</sup>-1=63.</td> operand. Maximum slot number is 2<sup>6</sup>-1=63.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="opcodes">Opcodes</a></div>
<div class="doc_text">
<p>Instructions encode an opcode that identifies the kind of instruction.
Opcodes are an enumerated integer value. The specific values used depend on
the version of LLVM you're using. The opcode values are defined in the
<a href="http://llvm.org/cvsweb/cvsweb.cgi/llvm/include/llvm/Instruction.def">
<tt>include/llvm/Instruction.def</tt></a> file. You should check there for the
most recent definitions. The table below provides the opcodes defined as of
the writing of this document. The table associates each opcode mneumonic with
its enumeration value and the bytecode and LLVM version numbers in which the
opcode was introduced.</p>
<table>
<tbody>
<tr>
<th>Opcode</th>
<th>Number</th>
<th>Bytecode Version</th>
<th>LLVM Version</th>
</tr>
<tr><td colspan="4"><b>Terminator Instructions</b></td></tr>
<tr><td>Ret</td><td>1</td><td>1</td><td>1.0</td></tr>
<tr><td>Br</td><td>2</td><td>1</td><td>1.0</td></tr>
<tr><td>Switch</td><td>3</td><td>1</td><td>1.0</td></tr>
<tr><td>Invoke</td><td>4</td><td>1</td><td>1.0</td></tr>
<tr><td>Unwind</td><td>5</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Binary Operators</b></td></tr>
<tr><td>Add</td><td>6</td><td>1</td><td>1.0</td></tr>
<tr><td>Sub</td><td>7</td><td>1</td><td>1.0</td></tr>
<tr><td>Mul</td><td>8</td><td>1</td><td>1.0</td></tr>
<tr><td>Div</td><td>9</td><td>1</td><td>1.0</td></tr>
<tr><td>Rem</td><td>10</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Logical Operators</b></td></tr>
<tr><td>And</td><td>11</td><td>1</td><td>1.0</td></tr>
<tr><td>Or</td><td>12</td><td>1</td><td>1.0</td></tr>
<tr><td>Xor</td><td>13</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Binary Comparison Operators</b></td></tr>
<tr><td>SetEQ</td><td>14</td><td>1</td><td>1.0</td></tr>
<tr><td>SetNE</td><td>15</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLE</td><td>16</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGE</td><td>17</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLT</td><td>18</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGT</td><td>19</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Memory Operators</b></td></tr>
<tr><td>Malloc</td><td>20</td><td>1</td><td>1.0</td></tr>
<tr><td>Free</td><td>21</td><td>1</td><td>1.0</td></tr>
<tr><td>Alloca</td><td>22</td><td>1</td><td>1.0</td></tr>
<tr><td>Load</td><td>23</td><td>1</td><td>1.0</td></tr>
<tr><td>Store</td><td>24</td><td>1</td><td>1.0</td></tr>
<tr><td>GetElementPtr</td><td>25</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Other Operators</b></td></tr>
<tr><td>PHI</td><td>26</td><td>1</td><td>1.0</td></tr>
<tr><td>Cast</td><td>27</td><td>1</td><td>1.0</td></tr>
<tr><td>Call</td><td>28</td><td>1</td><td>1.0</td></tr>
<tr><td>Shl</td><td>29</td><td>1</td><td>1.0</td></tr>
<tr><td>Shr</td><td>30</td><td>1</td><td>1.0</td></tr>
<tr><td>VANext</td><td>31</td><td>1</td><td>1.0</td></tr>
<tr><td>VAArg</td><td>32</td><td>1</td><td>1.0</td></tr>
<tr><td>Select</td><td>33</td><td>2</td><td>1.2</td></tr>
<tr><td>UserOp1</td><td>34</td><td>1</td><td>1.0</td></tr>
<tr><td>UserOp2</td><td>35</td><td>1</td><td>1.0</td></tr>
</tbody>
</table>
</div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="symtab">Symbol Table</a> </div> <div class="doc_subsection"><a name="symtab">Symbol Table</a> </div>
<div class="doc_text"> <div class="doc_text">
<p>A symbol table can be put out in conjunction with a module or a function. <p>A symbol table can be put out in conjunction with a module or a function. A
A symbol table is a list of type planes. Each type plane starts with the number symbol table has a list of name/type associations followed by a list of
of entries in the plane and the type plane's slot number (so the type name/value associations. The name/value associations are organized into "type
can be looked up in the global type pool). For each entry in a type planes" so that all values of a common type are listed together. Each type
plane, the slot number of the value and the name associated with that plane starts with the number of entries in the plane and the type slot number
value are written. The format is given in the table below. </p> for all the values in that plane (so the type can be looked up in the global
type pool). For each entry in a type plane, the slot number of the value and
the name associated with that value are written. The format is given in the
table below. </p>
<table> <table>
<tbody> <tbody>
<tr> <tr>
@ -1471,19 +1532,51 @@ value are written. The format is given in the table below. </p>
<td class="td_left">Symbol Table Identifier (0x04)</td> <td class="td_left">Symbol Table Identifier (0x04)</td>
</tr> </tr>
<tr> <tr>
<td><a href="#llist">llist</a>(<a href="#symtab_entry">symtab_entry</a>)</td> <td><a href="#llist">llist</a>(<a href="#symtab_entry">type_entry</a>)</td>
<td class="td_left">A length list of symbol table entries for <td class="td_left">A length list of symbol table entries for
<tt>Type</tt>s <tt>Type</tt>s
</td> </td>
</tr> </tr>
<tr> <tr>
<td><a href="#zlist">llist</a>(<a href="#symtab_plane">symtab_plane</a>)</td> <td><a href="#zlist">llist</a>(<a href="#symtab_plane">symtab_plane</a>)</td>
<td class="td_left">A length list of planes of symbol table <td class="td_left">A length list of "type planes" of symbol table
entries for <tt>Value</tt>s</td> entries for <tt>Value</tt>s</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="type_entry">Symbol Table Type
Entry</a>
</div>
<div class="doc_text">
<p>A symbol table type entry associates a name with a type. The name is provided
simply as an array of chars. The type is provided as a type slot number (index)
into the global type pool. The format is given in the following table:</p>
<table>
<tbody>
<tr>
<th><b>Type</b></th>
<th class="td_left"><b>Field Description</b></th>
</tr>
<tr>
<td><a href="#uint32_vbr">uint24_vbr</a></td>
<td class="td_left">Type slot number of the type being given a
name relative to the global type pool.
</td>
</tr>
<tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td>
<td class="td_left">Length of the character array that follows.</td>
</tr>
<tr>
<td><a href="#char">char</a>+</td>
<td class="td_left">The characters of the name.</td>
</tr>
</tbody>
</table>
</div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="symtab_plane">Symbol Table <div class="doc_subsubsection"> <a name="symtab_plane">Symbol Table
Plane</a> Plane</a>
@ -1503,22 +1596,23 @@ values of a common type. The encoding is given in the following table:</p>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td> <td><a href="#uint32_vbr">uint32_vbr</a></td>
<td class="td_left">Slot number of type for this plane.</td> <td class="td_left">Type slot number of type for all values in this plane..</td>
</tr> </tr>
<tr> <tr>
<td><a href="#symtab_entry">symtab_entry</a>+</td> <td><a href="#value_entry">value_entry</a>+</td>
<td class="td_left">The symbol table entries for this plane.</td> <td class="td_left">The symbol table entries for to associate values with
names.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="symtab_entry">Symbol Table <div class="doc_subsubsection"><a name="value_entry">Symbol Table Value
Entry</a> Entry</a>
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p>A symbol table entry provides the assocation between a type or <p>A symbol table value entry provides the assocation between a value and the
value's slot number and the name given to that type or value. The name given to the value. The value is referenced by its slot number. The
format is given in the following table:</p> format is given in the following table:</p>
<table> <table>
<tbody> <tbody>
@ -1528,7 +1622,7 @@ format is given in the following table:</p>
</tr> </tr>
<tr> <tr>
<td><a href="#uint32_vbr">uint24_vbr</a></td> <td><a href="#uint32_vbr">uint24_vbr</a></td>
<td class="td_left">Slot number of the type or value being given a name. <td class="td_left">Value slot number of the value being given a name.
</td> </td>
</tr> </tr>
<tr> <tr>
@ -1542,6 +1636,7 @@ format is given in the following table:</p>
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- *********************************************************************** --> <!-- *********************************************************************** -->
<div class="doc_section"> <a name="versiondiffs">Version Differences</a> <div class="doc_section"> <a name="versiondiffs">Version Differences</a>
</div> </div>
@ -1686,7 +1781,5 @@ From 1.1</a></div>
<a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br> <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
Last modified: $Date$ Last modified: $Date$
</address> </address>
<!-- vim: sw=2
-->
</body> </body>
</html> </html>