blob: 926d8dca34679173a39dcfce9155a5a010a08fcc [file] [log] [blame]
Chris Lattner00950542001-06-06 20:29:01 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><title>llvm Assembly Language Reference Manual</title></head>
3<body bgcolor=white>
4
5<table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
6<tr><td>&nbsp; <font size=+5 color="#EEEEFF" face="Georgia,Palatino,Times,Roman"><b>llvm Assembly Language Reference Manual</b></font></td>
7</tr></table>
8
9<ol>
10 <li><a href="#abstract">Abstract</a>
11 <li><a href="#introduction">Introduction</a>
12 <li><a href="#identifiers">Identifiers</a>
13 <li><a href="#typesystem">Type System</a>
14 <ol>
15 <li><a href="#t_primitive">Primitive Types</a>
16 <ol>
17 <li><a href="#t_classifications">Type Classifications</a>
18 </ol>
19 <li><a href="#t_derived">Derived Types</a>
20 <ol>
21 <li><a href="#t_array" >Array Type</a>
Chris Lattner7faa8832002-04-14 06:13:44 +000022 <li><a href="#t_function">Function Type</a>
Chris Lattner00950542001-06-06 20:29:01 +000023 <li><a href="#t_pointer">Pointer Type</a>
24 <li><a href="#t_struct" >Structure Type</a>
25 <li><a href="#t_packed" >Packed Type</a>
26 </ol>
27 </ol>
28 <li><a href="#highlevel">High Level Structure</a>
29 <ol>
30 <li><a href="#modulestructure">Module Structure</a>
Chris Lattner2b7d3202002-05-06 03:03:22 +000031 <li><a href="#globalvars">Global Variables</a>
Chris Lattner7faa8832002-04-14 06:13:44 +000032 <li><a href="#functionstructure">Function Structure</a>
Chris Lattner00950542001-06-06 20:29:01 +000033 </ol>
34 <li><a href="#instref">Instruction Reference</a>
35 <ol>
36 <li><a href="#terminators">Terminator Instructions</a>
37 <ol>
Chris Lattner7faa8832002-04-14 06:13:44 +000038 <li><a href="#i_ret" >'<tt>ret</tt>' Instruction</a>
39 <li><a href="#i_br" >'<tt>br</tt>' Instruction</a>
40 <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a>
41 <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a>
Chris Lattner00950542001-06-06 20:29:01 +000042 </ol>
43 <li><a href="#unaryops">Unary Operations</a>
44 <ol>
45 <li><a href="#i_not" >'<tt>not</tt>' Instruction</a>
Chris Lattner00950542001-06-06 20:29:01 +000046 </ol>
47 <li><a href="#binaryops">Binary Operations</a>
48 <ol>
49 <li><a href="#i_add" >'<tt>add</tt>' Instruction</a>
50 <li><a href="#i_sub" >'<tt>sub</tt>' Instruction</a>
51 <li><a href="#i_mul" >'<tt>mul</tt>' Instruction</a>
52 <li><a href="#i_div" >'<tt>div</tt>' Instruction</a>
53 <li><a href="#i_rem" >'<tt>rem</tt>' Instruction</a>
54 <li><a href="#i_setcc">'<tt>set<i>cc</i></tt>' Instructions</a>
55 </ol>
56 <li><a href="#bitwiseops">Bitwise Binary Operations</a>
57 <ol>
58 <li><a href="#i_and">'<tt>and</tt>' Instruction</a>
59 <li><a href="#i_or" >'<tt>or</tt>' Instruction</a>
60 <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a>
61 <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a>
62 <li><a href="#i_shr">'<tt>shr</tt>' Instruction</a>
63 </ol>
64 <li><a href="#memoryops">Memory Access Operations</a>
65 <ol>
66 <li><a href="#i_malloc" >'<tt>malloc</tt>' Instruction</a>
67 <li><a href="#i_free" >'<tt>free</tt>' Instruction</a>
68 <li><a href="#i_alloca" >'<tt>alloca</tt>' Instruction</a>
69 <li><a href="#i_load" >'<tt>load</tt>' Instruction</a>
70 <li><a href="#i_store" >'<tt>store</tt>' Instruction</a>
Chris Lattner2b7d3202002-05-06 03:03:22 +000071 <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
Chris Lattner00950542001-06-06 20:29:01 +000072 </ol>
73 <li><a href="#otherops">Other Operations</a>
74 <ol>
Chris Lattner6536cfe2002-05-06 22:08:29 +000075 <li><a href="#i_phi" >'<tt>phi</tt>' Instruction</a>
Chris Lattner33ba0d92001-07-09 00:26:23 +000076 <li><a href="#i_cast">'<tt>cast .. to</tt>' Instruction</a>
Chris Lattner00950542001-06-06 20:29:01 +000077 <li><a href="#i_call" >'<tt>call</tt>' Instruction</a>
Chris Lattner00950542001-06-06 20:29:01 +000078 </ol>
Chris Lattner00950542001-06-06 20:29:01 +000079 </ol>
Chris Lattner6536cfe2002-05-06 22:08:29 +000080<!--
Chris Lattner00950542001-06-06 20:29:01 +000081 <li><a href="#related">Related Work</a>
Chris Lattner6536cfe2002-05-06 22:08:29 +000082-->
Chris Lattner00950542001-06-06 20:29:01 +000083</ol>
84
85
86<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +000087<p><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
88<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +000089<a name="abstract">Abstract
90</b></font></td></tr></table><ul>
91<!-- *********************************************************************** -->
92
93<blockquote>
Chris Lattner7faa8832002-04-14 06:13:44 +000094 This document describes the LLVM assembly language. LLVM is an SSA based
95 representation that is a useful midlevel IR, providing type safety, low level
Chris Lattner2b7d3202002-05-06 03:03:22 +000096 operations, flexibility, and the capability of representing 'all' high level
Chris Lattner7faa8832002-04-14 06:13:44 +000097 languages cleanly.
Chris Lattner00950542001-06-06 20:29:01 +000098</blockquote>
99
100
101
102
103<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000104</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
105<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000106<a name="introduction">Introduction
107</b></font></td></tr></table><ul>
108<!-- *********************************************************************** -->
109
Chris Lattner7faa8832002-04-14 06:13:44 +0000110The LLVM code representation is designed to be used in three different forms: as
111an in-memory compiler IR, as an on-disk bytecode representation, suitable for
112fast loading by a dynamic compiler, and as a human readable assembly language
113representation. This allows LLVM to provide a powerful intermediate
114representation for efficient compiler transformations and analysis, while
115providing a natural means to debug and visualize the transformations. The three
116different forms of LLVM are all equivalent. This document describes the human
117readable representation and notation.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000118
Chris Lattner7faa8832002-04-14 06:13:44 +0000119The LLVM representation aims to be a light weight and low level while being
120expressive, type safe, and extensible at the same time. It aims to be a
121"universal IR" of sorts, by being at a low enough level that high level ideas
122may be cleanly mapped to it (similar to how microprocessors are "universal
123IR's", allowing many source languages to be mapped to them). By providing type
124safety, LLVM can be used as the target of optimizations: for example, through
125pointer analysis, it can be proven that a C automatic variable is never accessed
126outside of the current function... allowing it to be promoted to a simple SSA
127value instead of a memory location.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000128
129<!-- _______________________________________________________________________ -->
130</ul><a name="wellformed"><h4><hr size=0>Well Formedness</h4><ul>
131
Chris Lattner7faa8832002-04-14 06:13:44 +0000132It is important to note that this document describes 'well formed' llvm assembly
133language. There is a difference between what the parser accepts and what is
134considered 'well formed'. For example, the following instruction is
135syntactically okay, but not well formed:<p>
Chris Lattner00950542001-06-06 20:29:01 +0000136
137<pre>
138 %x = <a href="#i_add">add</a> int 1, %x
139</pre>
140
Chris Lattner7faa8832002-04-14 06:13:44 +0000141...because only a <tt><a href="#i_phi">phi</a></tt> node may refer to itself.
142The LLVM api provides a verification pass (created by the
143<tt>createVerifierPass</tt> function) that may be used to verify that an LLVM
144module is well formed. This pass is automatically run by the parser after
Chris Lattner2b7d3202002-05-06 03:03:22 +0000145parsing input assembly, and by the optimizer before it outputs bytecode. The
Chris Lattner7faa8832002-04-14 06:13:44 +0000146violations pointed out by the verifier pass indicate bugs in transformation
Chris Lattner2b7d3202002-05-06 03:03:22 +0000147passes or input to the parser.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000148
149Describe the typesetting conventions here.
150
151
152<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000153</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
154<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000155<a name="identifiers">Identifiers
156</b></font></td></tr></table><ul>
157<!-- *********************************************************************** -->
158
159LLVM uses three different forms of identifiers, for different purposes:<p>
160
161<ol>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000162<li>Numeric constants are represented as you would expect: 12, -3 123.421, etc. Floating point constants have an optional hexidecimal notation.
Chris Lattner00950542001-06-06 20:29:01 +0000163<li>Named values are represented as a string of characters with a '%' prefix. For example, %foo, %DivisionByZero, %a.really.long.identifier. The actual regular expression used is '<tt>%[a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.
164<li>Unnamed values are represented as an unsigned numeric value with a '%' prefix. For example, %12, %2, %44.
165</ol><p>
166
Chris Lattner7faa8832002-04-14 06:13:44 +0000167LLVM requires the values start with a '%' sign for two reasons: Compilers don't
168need to worry about name clashes with reserved words, and the set of reserved
169words may be expanded in the future without penalty. Additionally, unnamed
170identifiers allow a compiler to quickly come up with a temporary variable
171without having to avoid symbol table conflicts.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000172
Chris Lattner7faa8832002-04-14 06:13:44 +0000173Reserved words in LLVM are very similar to reserved words in other languages.
174There are keywords for different opcodes ('<tt><a href="#i_add">add</a></tt>',
175'<tt><a href="#i_cast">cast</a></tt>', '<tt><a href="#i_ret">ret</a></tt>',
176etc...), for primitive type names ('<tt><a href="#t_void">void</a></tt>',
177'<tt><a href="#t_uint">uint</a></tt>', etc...), and others. These reserved
178words cannot conflict with variable names, because none of them start with a '%'
179character.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000180
Chris Lattner7faa8832002-04-14 06:13:44 +0000181Here is an example of LLVM code to multiply the integer variable '<tt>%X</tt>'
182by 8:<p>
Chris Lattner00950542001-06-06 20:29:01 +0000183
184The easy way:
185<pre>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000186 %result = <a href="#i_mul">mul</a> uint %X, 8
Chris Lattner00950542001-06-06 20:29:01 +0000187</pre>
188
189After strength reduction:
190<pre>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000191 %result = <a href="#i_shl">shl</a> uint %X, ubyte 3
Chris Lattner00950542001-06-06 20:29:01 +0000192</pre>
193
194And the hard way:
195<pre>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000196 <a href="#i_add">add</a> uint %X, %X <i>; yields {int}:%0</i>
197 <a href="#i_add">add</a> uint %0, %0 <i>; yields {int}:%1</i>
198 %result = <a href="#i_add">add</a> uint %1, %1
Chris Lattner00950542001-06-06 20:29:01 +0000199</pre>
200
201This last way of multiplying <tt>%X</tt> by 8 illustrates several important lexical features of LLVM:<p>
202
203<ol>
204<li>Comments are delimited with a '<tt>;</tt>' and go until the end of line.
Chris Lattner7faa8832002-04-14 06:13:44 +0000205<li>Unnamed temporaries are created when the result of a computation is not
206 assigned to a named value.
Chris Lattner00950542001-06-06 20:29:01 +0000207<li>Unnamed temporaries are numbered sequentially
208</ol><p>
209
Chris Lattner7faa8832002-04-14 06:13:44 +0000210...and it also show a convention that we follow in this document. When
211demonstrating instructions, we will follow an instruction with a comment that
212defines the type and name of value produced. Comments are shown in italic
213text.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000214
Chris Lattner2b7d3202002-05-06 03:03:22 +0000215The one unintuitive notation for constants is the optional hexidecimal form of
216floating point constants. For example, the form '<tt>double
2170x432ff973cafa8000</tt>' is equivalent to (but harder to read than) '<tt>double
2184.5e+15</tt>' which is also supported by the parser. The only time hexadecimal
219floating point constants are useful (and the only time that they are generated
220by the disassembler) is when an FP constant has to be emitted that is not
221representable as a decimal floating point number exactly. For example, NaN's,
222infinities, and other special cases are represented in their IEEE hexadecimal
223format so that assembly and disassembly do not cause any bits to change in the
224constants.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000225
226
227<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000228</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
229<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000230<a name="typesystem">Type System
231</b></font></td></tr></table><ul>
232<!-- *********************************************************************** -->
233
Chris Lattner2b7d3202002-05-06 03:03:22 +0000234The LLVM type system is one of the most important features of the intermediate
235representation. Being strongly typed enables a number of optimizations to be
236performed on the IR directly, without having to do extra analyses on the side
237before the transformation. A strong type system makes it easier to read the
238generated code and enables novel analyses and transformations that are not
239feasible to perform on normal three address code representations.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000240
Chris Lattner2b7d3202002-05-06 03:03:22 +0000241The written form for the type system was heavily influenced by the syntactic
242problems with types in the C language<sup><a
243href="#rw_stroustrup">1</a></sup>.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000244
245
246
247<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000248</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
249<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000250<a name="t_primitive">Primitive Types
251</b></font></td></tr></table><ul>
252
Chris Lattner7faa8832002-04-14 06:13:44 +0000253The primitive types are the fundemental building blocks of the LLVM system. The
254current set of primitive types are as follows:<p>
Chris Lattner00950542001-06-06 20:29:01 +0000255
256<table border=0 align=center><tr><td>
257
258<table border=1 cellspacing=0 cellpadding=4 align=center>
259<tr><td><tt>void</tt></td> <td>No value</td></tr>
260<tr><td><tt>ubyte</tt></td> <td>Unsigned 8 bit value</td></tr>
261<tr><td><tt>ushort</tt></td><td>Unsigned 16 bit value</td></tr>
262<tr><td><tt>uint</tt></td> <td>Unsigned 32 bit value</td></tr>
263<tr><td><tt>ulong</tt></td> <td>Unsigned 64 bit value</td></tr>
264<tr><td><tt>float</tt></td> <td>32 bit floating point value</td></tr>
265<tr><td><tt>label</tt></td> <td>Branch destination</td></tr>
266</table>
267
Chris Lattner7faa8832002-04-14 06:13:44 +0000268</td><td valign=top>
Chris Lattner00950542001-06-06 20:29:01 +0000269
270<table border=1 cellspacing=0 cellpadding=4 align=center>
271<tr><td><tt>bool</tt></td> <td>True or False value</td></tr>
272<tr><td><tt>sbyte</tt></td> <td>Signed 8 bit value</td></tr>
273<tr><td><tt>short</tt></td> <td>Signed 16 bit value</td></tr>
274<tr><td><tt>int</tt></td> <td>Signed 32 bit value</td></tr>
275<tr><td><tt>long</tt></td> <td>Signed 64 bit value</td></tr>
276<tr><td><tt>double</tt></td><td>64 bit floating point value</td></tr>
Chris Lattner00950542001-06-06 20:29:01 +0000277</table>
278
279</td></tr></table><p>
280
281
282
283<!-- _______________________________________________________________________ -->
284</ul><a name="t_classifications"><h4><hr size=0>Type Classifications</h4><ul>
285
286These different primitive types fall into a few useful classifications:<p>
287
288<table border=1 cellspacing=0 cellpadding=4 align=center>
289<tr><td><a name="t_signed">signed</td> <td><tt>sbyte, short, int, long, float, double</tt></td></tr>
290<tr><td><a name="t_unsigned">unsigned</td><td><tt>ubyte, ushort, uint, ulong</tt></td></tr>
291<tr><td><a name="t_integral">integral</td><td><tt>ubyte, sbyte, ushort, short, uint, int, ulong, long</tt></td></tr>
292<tr><td><a name="t_floating">floating point</td><td><tt>float, double</tt></td></tr>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000293<tr><td><a name="t_firstclass">first class</td><td><tt>bool, ubyte, sbyte, ushort, short,<br> uint, int, ulong, long, float, double, <a href="#t_pointer">pointer</a></tt></td></tr>
Chris Lattner00950542001-06-06 20:29:01 +0000294</table><p>
295
296
297
298
299
300<!-- ======================================================================= -->
301</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0><tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
302<a name="t_derived">Derived Types
303</b></font></td></tr></table><ul>
304
Chris Lattner7faa8832002-04-14 06:13:44 +0000305The real power in LLVM comes from the derived types in the system. This is what
306allows a programmer to represent arrays, functions, pointers, and other useful
307types. Note that these derived types may be recursive: For example, it is
308possible to have a two dimensional array.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000309
310
311
312<!-- _______________________________________________________________________ -->
313</ul><a name="t_array"><h4><hr size=0>Array Type</h4><ul>
314
315<h5>Overview:</h5>
316
Chris Lattner7faa8832002-04-14 06:13:44 +0000317The array type is a very simple derived type that arranges elements sequentially
318in memory. The array type requires a size (number of elements) and an
319underlying data type.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000320
Chris Lattner7faa8832002-04-14 06:13:44 +0000321<h5>Syntax:</h5>
322<pre>
323 [&lt;# elements&gt; x &lt;elementtype&gt;]
324</pre>
Chris Lattner00950542001-06-06 20:29:01 +0000325
Chris Lattner2b7d3202002-05-06 03:03:22 +0000326The number of elements is a constant integer value, elementtype may be any type
Chris Lattner7faa8832002-04-14 06:13:44 +0000327with a size.<p>
328
329<h5>Examples:</h5>
330<ul>
Chris Lattner00950542001-06-06 20:29:01 +0000331 <tt>[40 x int ]</tt>: Array of 40 integer values.<br>
332 <tt>[41 x int ]</tt>: Array of 41 integer values.<br>
333 <tt>[40 x uint]</tt>: Array of 40 unsigned integer values.<p>
Chris Lattner7faa8832002-04-14 06:13:44 +0000334</ul>
Chris Lattner00950542001-06-06 20:29:01 +0000335
336Here are some examples of multidimensional arrays:<p>
337<ul>
338<table border=0 cellpadding=0 cellspacing=0>
339<tr><td><tt>[3 x [4 x int]]</tt></td><td>: 3x4 array integer values.</td></tr>
Chris Lattner7faa8832002-04-14 06:13:44 +0000340<tr><td><tt>[12 x [10 x float]]</tt></td><td>: 2x10 array of single precision floating point values.</td></tr>
Chris Lattner00950542001-06-06 20:29:01 +0000341<tr><td><tt>[2 x [3 x [4 x uint]]]</tt></td><td>: 2x3x4 array of unsigned integer values.</td></tr>
342</table>
343</ul>
344
345
Chris Lattner00950542001-06-06 20:29:01 +0000346<!-- _______________________________________________________________________ -->
Chris Lattner7faa8832002-04-14 06:13:44 +0000347</ul><a name="t_function"><h4><hr size=0>Function Type</h4><ul>
Chris Lattner00950542001-06-06 20:29:01 +0000348
349<h5>Overview:</h5>
350
Chris Lattner7faa8832002-04-14 06:13:44 +0000351The function type can be thought of as a function signature. It consists of a
352return type and a list of formal parameter types. Function types are usually
353used when to build virtual function tables (which are structures of pointers to
354functions), for indirect function calls, and when defining a function.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000355
356<h5>Syntax:</h5>
357<pre>
358 &lt;returntype&gt; (&lt;parameter list&gt;)
359</pre>
360
Chris Lattner7faa8832002-04-14 06:13:44 +0000361Where '<tt>&lt;parameter list&gt;</tt>' is a comma seperated list of type
362specifiers. Optionally, the parameter list may include a type <tt>...</tt>,
363which indicates that the function takes a variable number of arguments. Note
364that there currently is no way to define a function in LLVM that takes a
365variable number of arguments, but it is possible to <b>call</b> a function that
366is vararg.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000367
368<h5>Examples:</h5>
369<ul>
370<table border=0 cellpadding=0 cellspacing=0>
Chris Lattner7faa8832002-04-14 06:13:44 +0000371
372<tr><td><tt>int (int)</tt></td><td>: function taking an <tt>int</tt>, returning
373an <tt>int</tt></td></tr>
374
375<tr><td><tt>float (int, int *) *</tt></td><td>: <a href="#t_pointer">Pointer</a>
376to a function that takes an <tt>int</tt> and a <a href="#t_pointer">pointer</a>
377to <tt>int</tt>, returning <tt>float</tt>.</td></tr>
378
379<tr><td><tt>int (sbyte *, ...)</tt></td><td>: A vararg function that takes at
380least one <a href="#t_pointer">pointer</a> to <tt>sbyte</tt> (signed char in C),
381which returns an integer. This is the signature for <tt>printf</tt> in
382LLVM.</td></tr>
383
Chris Lattner00950542001-06-06 20:29:01 +0000384</table>
385</ul>
386
387
388
389<!-- _______________________________________________________________________ -->
390</ul><a name="t_struct"><h4><hr size=0>Structure Type</h4><ul>
391
392<h5>Overview:</h5>
393
Chris Lattner2b7d3202002-05-06 03:03:22 +0000394The structure type is used to represent a collection of data members together in
395memory. Although the runtime is allowed to lay out the data members any way
396that it would like, they are guaranteed to be "close" to each other.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000397
Chris Lattner2b7d3202002-05-06 03:03:22 +0000398Structures are accessed using '<tt><a href="#i_load">load</a></tt> and '<tt><a
399href="#i_store">store</a></tt>' by getting a pointer to a field with the '<tt><a
400href="#i_getelementptr">getelementptr</a></tt>' instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000401
402<h5>Syntax:</h5>
403<pre>
404 { &lt;type list&gt; }
405</pre>
406
407
408<h5>Examples:</h5>
409<table border=0 cellpadding=0 cellspacing=0>
Chris Lattner7faa8832002-04-14 06:13:44 +0000410
411<tr><td><tt>{ int, int, int }</tt></td><td>: a triple of three <tt>int</tt>
412values</td></tr>
413
414<tr><td><tt>{ float, int (int *) * }</tt></td><td>: A pair, where the first
415element is a <tt>float</tt> and the second element is a <a
416href="#t_pointer">pointer</a> to a <a href="t_function">function</a> that takes
417an <tt>int</tt>, returning an <tt>int</tt>.</td></tr>
418
Chris Lattner00950542001-06-06 20:29:01 +0000419</table>
420
421
422<!-- _______________________________________________________________________ -->
423</ul><a name="t_pointer"><h4><hr size=0>Pointer Type</h4><ul>
424
Chris Lattner7faa8832002-04-14 06:13:44 +0000425<h5>Overview:</h5>
426
427As in many languages, the pointer type represents a pointer or reference to
428another object, which must live in memory.<p>
429
430<h5>Syntax:</h5>
431<pre>
432 &lt;type&gt; *
433</pre>
434
435<h5>Examples:</h5>
436
437<table border=0 cellpadding=0 cellspacing=0>
438
439<tr><td><tt>[4x int]*</tt></td><td>: <a href="#t_pointer">pointer</a> to <a
440href="#t_array">array</a> of four <tt>int</tt> values</td></tr>
441
442<tr><td><tt>int (int *) *</tt></td><td>: A <a href="#t_pointer">pointer</a> to a
443<a href="t_function">function</a> that takes an <tt>int</tt>, returning an
444<tt>int</tt>.</td></tr>
445
446</table>
447<p>
448
Chris Lattner00950542001-06-06 20:29:01 +0000449
450<!-- _______________________________________________________________________ -->
Chris Lattner7faa8832002-04-14 06:13:44 +0000451<!--
Chris Lattner00950542001-06-06 20:29:01 +0000452</ul><a name="t_packed"><h4><hr size=0>Packed Type</h4><ul>
453
454Mention/decide that packed types work with saturation or not. Maybe have a packed+saturated type in addition to just a packed type.<p>
455
456Packed types should be 'nonsaturated' because standard data types are not saturated. Maybe have a saturated packed type?<p>
457
Chris Lattner7faa8832002-04-14 06:13:44 +0000458-->
459
Chris Lattner00950542001-06-06 20:29:01 +0000460
461<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000462</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
463<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000464<a name="highlevel">High Level Structure
465</b></font></td></tr></table><ul>
466<!-- *********************************************************************** -->
467
468
469<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000470</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
471<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000472<a name="modulestructure">Module Structure
473</b></font></td></tr></table><ul>
474
Chris Lattner2b7d3202002-05-06 03:03:22 +0000475LLVM programs are composed of "Module"s, each of which is a translation unit of
476the input programs. Each module consists of functions, global variables, and
477symbol table entries. Modules may be combined together with the LLVM linker,
478which merges function (and global variable) definitions, resolves forward
479declarations, and merges symbol table entries. Here is an example of the "hello world" module:<p>
Chris Lattner00950542001-06-06 20:29:01 +0000480
Chris Lattner2b7d3202002-05-06 03:03:22 +0000481<pre>
482<i>; Declare the string constant as a global constant...</i>
483<a href="#identifiers">%.LC0</a> = <a href="#linkage_decl">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x sbyte]</a> c"hello world\0A\00" <i>; [13 x sbyte]*</i>
484
485<i>; Forward declaration of puts</i>
486<a href="#functionstructure">declare</a> int "puts"(sbyte*) <i>; int(sbyte*)* </i>
487
488<i>; Definition of main function</i>
489int "main"() { <i>; int()* </i>
490 <i>; Convert [13x sbyte]* to sbyte *...</i>
491 %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x sbyte]* %.LC0, uint 0, uint 0 <i>; sbyte*</i>
492
493 <i>; Call puts function to write out the string to stdout...</i>
494 <a href="#i_call">call</a> int %puts(sbyte* %cast210) <i>; int</i>
495 <a href="#i_ret">ret</a> int 0
496}
497</pre>
498
499This example is made up of a <a href="#globalvars">global variable</a> named
500"<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function, and a
501<a href="#functionstructure">function definition</a> for "<tt>main</tt>".<p>
502
503<a name="linkage_decl">
504In general, a module is made up of a list of global values, where both functions
505and global variables are global values. Global values are represented by a
506pointer to a memory location (in this case, a pointer to an array of char, and a
507pointer to a function), and can be either "internal" or externally accessible
508(which corresponds to the static keyword in C, when used at function scope).<p>
509
510For example, since the "<tt>.LC0</tt>" variable is defined to be internal, if
511another module defined a "<tt>.LC0</tt>" variable and was linked with this one,
512one of the two would be renamed, preventing a collision. Since "<tt>main</tt>"
513and "<tt>puts</tt>" are external (lacking "<tt>internal</tt>" declarations),
514they are accessible outside of the current module. It is illegal for a function
515declaration to be "<tt>internal</tt>".<p>
Chris Lattner00950542001-06-06 20:29:01 +0000516
517
518<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000519</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
520<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
521<a name="globalvars">Global Variables
522</b></font></td></tr></table><ul>
523
524Global variables define regions of memory allocated at compilation time instead
525of runtime. Global variables, may optionally be initialized. A variable may be
526defined as a global "constant", which indicates that the contents of the
527variable will never be modified (opening options for optimization). Constants
528must always have an initial value.<p>
529
530As SSA values, global variables define pointer values that are in scope in
531(i.e. they dominate) all basic blocks in the program. Global variables always
532define a pointer to their "content" type because they describe a region of
533memory, and all memory objects in LLVM are accessed through pointers.<p>
534
535
536
537<!-- ======================================================================= -->
538</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
539<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner7faa8832002-04-14 06:13:44 +0000540<a name="functionstructure">Function Structure
Chris Lattner00950542001-06-06 20:29:01 +0000541</b></font></td></tr></table><ul>
542
Chris Lattner2b7d3202002-05-06 03:03:22 +0000543LLVM functions definitions are composed of a (possibly empty) argument list, an
544opening curly brace, a list of basic blocks, and a closing curly brace. LLVM
545function declarations are defined with the "<tt>declare</tt>" keyword, a
546function name and a function signature.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000547
Chris Lattner2b7d3202002-05-06 03:03:22 +0000548A function definition contains a list of basic blocks, forming the CFG for the
549function. Each basic block may optionally start with a label (giving the basic
550block a symbol table entry), contains a list of instructions, and ends with a <a
551href="#terminators">terminator</a> instruction (such as a branch or function
552return).<p>
553
554The first basic block in program is special in two ways: it is immediately
555executed on entrance to the function, and it is not allowed to have predecessor
556basic blocks (i.e. there can not be any branches to the entry block of a
557function).<p>
Chris Lattner00950542001-06-06 20:29:01 +0000558
559
560<!-- *********************************************************************** -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000561</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
562<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000563<a name="instref">Instruction Reference
564</b></font></td></tr></table><ul>
565<!-- *********************************************************************** -->
566
Chris Lattner2b7d3202002-05-06 03:03:22 +0000567The LLVM instruction set consists of several different classifications of
568instructions: <a href="#terminators">terminator instructions</a>, a <a
569href="#unaryops">unary instruction</a>, <a href="#binaryops">binary
570instructions</a>, <a href="#memoryops">memory instructions</a>, and <a
571href="#otherops">other instructions</a>.<p>
572
Chris Lattner00950542001-06-06 20:29:01 +0000573
574<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000575</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
576<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000577<a name="terminators">Terminator Instructions
578</b></font></td></tr></table><ul>
579
Chris Lattner2b7d3202002-05-06 03:03:22 +0000580As mentioned <a href="#functionstructure">previously</a>, every basic block in a
581program ends with a "Terminator" instruction, which indicates where control flow
582should go now that this basic block has been completely executed. These
583terminator instructions typically yield a '<tt>void</tt>' value: they produce
584control flow, not values (the one exception being the '<a
585href="#i_invoke"><tt>invoke</tt></a>' instruction).<p>
Chris Lattner00950542001-06-06 20:29:01 +0000586
Chris Lattner7faa8832002-04-14 06:13:44 +0000587There are four different terminator instructions: the '<a
588href="#i_ret"><tt>ret</tt></a>' instruction, the '<a
589href="#i_br"><tt>br</tt></a>' instruction, the '<a
590href="#i_switch"><tt>switch</tt></a>' instruction, and the '<a
591href="#i_invoke"><tt>invoke</tt></a>' instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000592
593
594<!-- _______________________________________________________________________ -->
595</ul><a name="i_ret"><h4><hr size=0>'<tt>ret</tt>' Instruction</h4><ul>
596
597<h5>Syntax:</h5>
598<pre>
Chris Lattner7faa8832002-04-14 06:13:44 +0000599 ret &lt;type&gt; &lt;value&gt; <i>; Return a value from a non-void function</i>
600 ret void <i>; Return from void function</i>
Chris Lattner00950542001-06-06 20:29:01 +0000601</pre>
602
603<h5>Overview:</h5>
Chris Lattner00950542001-06-06 20:29:01 +0000604
Chris Lattner2b7d3202002-05-06 03:03:22 +0000605The '<tt>ret</tt>' instruction is used to return control flow (and a value) from
606a function, back to the caller.<p>
Chris Lattner7faa8832002-04-14 06:13:44 +0000607
608There are two forms of the '<tt>ret</tt>' instructruction: one that returns a
609value and then causes control flow, and one that just causes control flow to
610occur.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000611
612<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000613
614The '<tt>ret</tt>' instruction may return any '<a href="#t_firstclass">first
615class</a>' type. Notice that a function is not <a href="#wellformed">well
616formed</a> if there exists a '<tt>ret</tt>' instruction inside of the function
617that returns a value that does not match the return type of the function.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000618
619<h5>Semantics:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000620
621When the '<tt>ret</tt>' instruction is executed, control flow returns back to
622the calling function's context. If the instruction returns a value, that value
623shall be propogated into the calling function's data space.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000624
625<h5>Example:</h5>
626<pre>
627 ret int 5 <i>; Return an integer value of 5</i>
Chris Lattner7faa8832002-04-14 06:13:44 +0000628 ret void <i>; Return from a void function</i>
Chris Lattner00950542001-06-06 20:29:01 +0000629</pre>
630
631
632<!-- _______________________________________________________________________ -->
633</ul><a name="i_br"><h4><hr size=0>'<tt>br</tt>' Instruction</h4><ul>
634
635<h5>Syntax:</h5>
636<pre>
637 br bool &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;
638 br label &lt;dest&gt; <i>; Unconditional branch</i>
639</pre>
640
641<h5>Overview:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000642
643The '<tt>br</tt>' instruction is used to cause control flow to transfer to a
644different basic block in the current function. There are two forms of this
645instruction, corresponding to a conditional branch and an unconditional
646branch.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000647
648<h5>Arguments:</h5>
649
Chris Lattner7faa8832002-04-14 06:13:44 +0000650The conditional branch form of the '<tt>br</tt>' instruction takes a single
651'<tt>bool</tt>' value and two '<tt>label</tt>' values. The unconditional form
652of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a
653target.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000654
655<h5>Semantics:</h5>
656
Chris Lattner7faa8832002-04-14 06:13:44 +0000657Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>bool</tt>'
658argument is evaluated. If the value is <tt>true</tt>, control flows to the
659'<tt>iftrue</tt>' '<tt>label</tt>' argument. If "cond" is <tt>false</tt>,
660control flows to the '<tt>iffalse</tt>' '<tt>label</tt>' argument.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000661
662<h5>Example:</h5>
663<pre>
664Test:
665 %cond = <a href="#i_setcc">seteq</a> int %a, %b
666 br bool %cond, label %IfEqual, label %IfUnequal
667IfEqual:
Chris Lattner2b7d3202002-05-06 03:03:22 +0000668 <a href="#i_ret">ret</a> int 1
Chris Lattner00950542001-06-06 20:29:01 +0000669IfUnequal:
Chris Lattner2b7d3202002-05-06 03:03:22 +0000670 <a href="#i_ret">ret</a> int 0
Chris Lattner00950542001-06-06 20:29:01 +0000671</pre>
672
673
674<!-- _______________________________________________________________________ -->
675</ul><a name="i_switch"><h4><hr size=0>'<tt>switch</tt>' Instruction</h4><ul>
676
677<h5>Syntax:</h5>
678<pre>
679 <i>; Definitions for lookup indirect branch</i>
680 %switchtype = type [&lt;anysize&gt; x { uint, label }]
681
682 <i>; Lookup indirect branch</i>
683 switch uint &lt;value&gt;, label &lt;defaultdest&gt;, %switchtype &lt;switchtable&gt;
684
685 <i>; Indexed indirect branch</i>
686 switch uint &lt;idxvalue&gt;, label &lt;defaultdest&gt;, [&lt;anysize&gt; x label] &lt;desttable&gt;
687</pre>
688
689<h5>Overview:</h5>
Chris Lattner00950542001-06-06 20:29:01 +0000690
Chris Lattner7faa8832002-04-14 06:13:44 +0000691The '<tt>switch</tt>' instruction is used to transfer control flow to one of
692several different places. It is a generalization of the '<tt>br</tt>'
693instruction, allowing a branch to occur to one of many possible destinations.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000694
Chris Lattner7faa8832002-04-14 06:13:44 +0000695The '<tt>switch</tt>' statement supports two different styles of indirect
696branching: lookup branching and indexed branching. Lookup branching is
697generally useful if the values to switch on are spread far appart, where index
698branching is useful if the values to switch on are generally dense.<p>
699
700The two different forms of the '<tt>switch</tt>' statement are simple hints to
Chris Lattner2b7d3202002-05-06 03:03:22 +0000701the underlying implementation. For example, the compiler may choose to
702implement a small indirect branch table as a series of predicated comparisons:
703if it is faster for the target architecture.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000704
705<h5>Arguments:</h5>
Chris Lattner00950542001-06-06 20:29:01 +0000706
Chris Lattner7faa8832002-04-14 06:13:44 +0000707The lookup form of the '<tt>switch</tt>' instruction uses three parameters: a
708'<tt>uint</tt>' comparison value '<tt>value</tt>', a default '<tt>label</tt>'
709destination, and an array of pairs of comparison value constants and
710'<tt>label</tt>'s. The sized array must be a constant value.<p>
711
712The indexed form of the '<tt>switch</tt>' instruction uses three parameters: an
713'<tt>uint</tt>' index value, a default '<tt>label</tt>' and a sized array of
714'<tt>label</tt>'s. The '<tt>dests</tt>' array must be a constant array.
Chris Lattner00950542001-06-06 20:29:01 +0000715
716<h5>Semantics:</h5>
717
Chris Lattner7faa8832002-04-14 06:13:44 +0000718The lookup style switch statement specifies a table of values and destinations.
719When the '<tt>switch</tt>' instruction is executed, this table is searched for
720the given value. If the value is found, the corresponding destination is
721branched to. <p>
Chris Lattner00950542001-06-06 20:29:01 +0000722
Chris Lattner7faa8832002-04-14 06:13:44 +0000723The index branch form simply looks up a label element directly in a table and
724branches to it.<p>
725
726In either case, the compiler knows the static size of the array, because it is
727provided as part of the constant values type.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000728
729<h5>Example:</h5>
730<pre>
731 <i>; Emulate a conditional br instruction</i>
732 %Val = <a href="#i_cast">cast</a> bool %value to uint
733 switch uint %Val, label %truedest, [1 x label] [label %falsedest ]
734
735 <i>; Emulate an unconditional br instruction</i>
736 switch uint 0, label %dest, [ 0 x label] [ ]
737
Chris Lattner2b7d3202002-05-06 03:03:22 +0000738 <i>; Implement a jump table:</i>
Chris Lattner00950542001-06-06 20:29:01 +0000739 switch uint %val, label %otherwise, [3 x label] [ label %onzero,
740 label %onone,
741 label %ontwo ]
742
743</pre>
744
745
746
747<!-- _______________________________________________________________________ -->
Chris Lattner7faa8832002-04-14 06:13:44 +0000748</ul><a name="i_invoke"><h4><hr size=0>'<tt>invoke</tt>' Instruction</h4><ul>
Chris Lattner00950542001-06-06 20:29:01 +0000749
750<h5>Syntax:</h5>
751<pre>
Chris Lattner7faa8832002-04-14 06:13:44 +0000752 &lt;result&gt; = invoke &lt;ptr to function ty&gt; %&lt;function ptr val&gt;(&lt;function args&gt;)
753 to label &lt;normal label&gt; except label &lt;exception label&gt;
Chris Lattner00950542001-06-06 20:29:01 +0000754</pre>
755
Chris Lattner6536cfe2002-05-06 22:08:29 +0000756<h5>Overview:</h5>
757
758The '<tt>invoke</tt>' instruction is used to cause control flow to transfer to a
759specified function, with the possibility of control flow transfer to either the
760'<tt>normal label</tt>' label or the '<tt>exception label</tt>'. The '<tt><a
761href="#i_call">call</a></tt>' instruction is closely related, but guarantees
762that control flow either never returns from the called function, or that it
763returns to the instruction succeeding the '<tt><a href="#i_call">call</a></tt>'
764instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000765
766<h5>Arguments:</h5>
767
768This instruction requires several arguments:<p>
769<ol>
Chris Lattner7faa8832002-04-14 06:13:44 +0000770
771<li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
Chris Lattner2b7d3202002-05-06 03:03:22 +0000772function value being invoked. In most cases, this is a direct function
Chris Lattner7faa8832002-04-14 06:13:44 +0000773invocation, but indirect <tt>invoke</tt>'s are just as possible, branching off
774an arbitrary pointer to function value.<p>
775
776<li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
777function to be invoked.
778
779<li>'<tt>function args</tt>': argument list whose types match the function
Chris Lattner6536cfe2002-05-06 22:08:29 +0000780signature argument types. If the function signature indicates the function
781accepts a variable number of arguments, the extra arguments can be specified.
Chris Lattner7faa8832002-04-14 06:13:44 +0000782
783<li>'<tt>normal label</tt>': the label reached when the called function executes
784a '<tt><a href="#i_ret">ret</a></tt>' instruction.
785
786<li>'<tt>exception label</tt>': the label reached when an exception is thrown.
Chris Lattner00950542001-06-06 20:29:01 +0000787</ol>
788
789<h5>Semantics:</h5>
790
Chris Lattner2b7d3202002-05-06 03:03:22 +0000791This instruction is designed to operate as a standard '<tt><a
792href="#i_call">call</a></tt>' instruction in most regards. The primary
793difference is that it associates a label with the function invocation that may
794be accessed via the runtime library provided by the execution environment. This
795instruction is used in languages with destructors to ensure that proper cleanup
796is performed in the case of either a <tt>longjmp</tt> or a thrown exception.
797Additionally, this is important for implementation of '<tt>catch</tt>' clauses
798in high-level languages that support them.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000799
Chris Lattner7faa8832002-04-14 06:13:44 +0000800For a more comprehensive explanation of this instruction look in the llvm/docs/2001-05-18-ExceptionHandling.txt document.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000801
802<h5>Example:</h5>
803<pre>
Chris Lattner7faa8832002-04-14 06:13:44 +0000804 %retval = invoke int %Test(int 15)
805 to label %Continue except label %TestCleanup <i>; {int}:retval set</i>
Chris Lattner00950542001-06-06 20:29:01 +0000806</pre>
807
808
809
810<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +0000811</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
812<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +0000813<a name="unaryops">Unary Operations
814</b></font></td></tr></table><ul>
815
816Unary operators are used to do a simple operation to a single value.<p>
817
Chris Lattner7faa8832002-04-14 06:13:44 +0000818There is only one unary operator: the '<a href="#i_not"><tt>not</tt></a>' instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000819
820
821<!-- _______________________________________________________________________ -->
822</ul><a name="i_not"><h4><hr size=0>'<tt>not</tt>' Instruction</h4><ul>
823
824<h5>Syntax:</h5>
825<pre>
826 &lt;result&gt; = not &lt;ty&gt; &lt;var&gt; <i>; yields {ty}:result</i>
827</pre>
828
829<h5>Overview:</h5>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000830The '<tt>not</tt>' instruction returns the bitwise complement of its operand.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000831
832<h5>Arguments:</h5>
Chris Lattner6536cfe2002-05-06 22:08:29 +0000833The single argument to '<tt>not</tt>' must be of of <a href="#t_integral">integral</a> or bool type.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000834
835
Chris Lattner2b7d3202002-05-06 03:03:22 +0000836<h5>Semantics:</h5> The '<tt>not</tt>' instruction returns the bitwise
837complement (AKA ones complement) of an <a href="#t_integral">integral</a>
838type.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000839
Chris Lattner00950542001-06-06 20:29:01 +0000840<pre>
841 &lt;result&gt; = xor bool true, &lt;var&gt; <i>; yields {bool}:result</i>
842</pre>
843
844<h5>Example:</h5>
845<pre>
Chris Lattner2b7d3202002-05-06 03:03:22 +0000846 %x = not int 1 <i>; {int}:x is now equal to -2</i>
Chris Lattner00950542001-06-06 20:29:01 +0000847 %x = not bool true <i>; {bool}:x is now equal to false</i>
848</pre>
849
850
851
Chris Lattner00950542001-06-06 20:29:01 +0000852<!-- ======================================================================= -->
853</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0><tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
854<a name="binaryops">Binary Operations
855</b></font></td></tr></table><ul>
856
Chris Lattner7faa8832002-04-14 06:13:44 +0000857Binary operators are used to do most of the computation in a program. They
858require two operands, execute an operation on them, and produce a single value.
859The result value of a binary operator is not neccesarily the same type as its
860operands.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000861
862There are several different binary operators:<p>
863
864
865<!-- _______________________________________________________________________ -->
866</ul><a name="i_add"><h4><hr size=0>'<tt>add</tt>' Instruction</h4><ul>
867
868<h5>Syntax:</h5>
869<pre>
870 &lt;result&gt; = add &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
871</pre>
872
873<h5>Overview:</h5>
874The '<tt>add</tt>' instruction returns the sum of its two operands.<p>
875
876<h5>Arguments:</h5>
877The two arguments to the '<tt>add</tt>' instruction must be either <a href="#t_integral">integral</a> or <a href="#t_floating">floating point</a> values. Both arguments must have identical types.<p>
878
879<h5>Semantics:</h5>
880...<p>
881
882<h5>Example:</h5>
883<pre>
884 &lt;result&gt; = add int 4, %var <i>; yields {int}:result = 4 + %var</i>
885</pre>
886
887
888<!-- _______________________________________________________________________ -->
889</ul><a name="i_sub"><h4><hr size=0>'<tt>sub</tt>' Instruction</h4><ul>
890
891<h5>Syntax:</h5>
892<pre>
893 &lt;result&gt; = sub &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
894</pre>
895
896<h5>Overview:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000897
Chris Lattner00950542001-06-06 20:29:01 +0000898The '<tt>sub</tt>' instruction returns the difference of its two operands.<p>
899
Chris Lattner7faa8832002-04-14 06:13:44 +0000900Note that the '<tt>sub</tt>' instruction is used to represent the '<tt>neg</tt>'
901instruction present in most other intermediate representations.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000902
903<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000904
905The two arguments to the '<tt>sub</tt>' instruction must be either <a
906href="#t_integral">integral</a> or <a href="#t_floating">floating point</a>
907values. Both arguments must have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000908
909<h5>Semantics:</h5>
910...<p>
911
912<h5>Example:</h5>
913<pre>
914 &lt;result&gt; = sub int 4, %var <i>; yields {int}:result = 4 - %var</i>
915 &lt;result&gt; = sub int 0, %val <i>; yields {int}:result = -%var</i>
916</pre>
917
918<!-- _______________________________________________________________________ -->
919</ul><a name="i_mul"><h4><hr size=0>'<tt>mul</tt>' Instruction</h4><ul>
920
921<h5>Syntax:</h5>
922<pre>
923 &lt;result&gt; = mul &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
924</pre>
925
926<h5>Overview:</h5>
927The '<tt>mul</tt>' instruction returns the product of its two operands.<p>
928
929<h5>Arguments:</h5>
930The two arguments to the '<tt>mul</tt>' instruction must be either <a href="#t_integral">integral</a> or <a href="#t_floating">floating point</a> values. Both arguments must have identical types.<p>
931
932<h5>Semantics:</h5>
933...<p>
Chris Lattner7faa8832002-04-14 06:13:44 +0000934
935There is no signed vs unsigned multiplication. The appropriate action is taken
936based on the type of the operand. <p>
Chris Lattner00950542001-06-06 20:29:01 +0000937
938
939<h5>Example:</h5>
940<pre>
941 &lt;result&gt; = mul int 4, %var <i>; yields {int}:result = 4 * %var</i>
942</pre>
943
944
945<!-- _______________________________________________________________________ -->
946</ul><a name="i_div"><h4><hr size=0>'<tt>div</tt>' Instruction</h4><ul>
947
948<h5>Syntax:</h5>
949<pre>
950 &lt;result&gt; = div &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
951</pre>
952
953<h5>Overview:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000954
Chris Lattner00950542001-06-06 20:29:01 +0000955The '<tt>div</tt>' instruction returns the quotient of its two operands.<p>
956
957<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +0000958
959The two arguments to the '<tt>div</tt>' instruction must be either <a
960href="#t_integral">integral</a> or <a href="#t_floating">floating point</a>
961values. Both arguments must have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +0000962
963<h5>Semantics:</h5>
964...<p>
965
966<h5>Example:</h5>
967<pre>
968 &lt;result&gt; = div int 4, %var <i>; yields {int}:result = 4 / %var</i>
969</pre>
970
971
972<!-- _______________________________________________________________________ -->
973</ul><a name="i_rem"><h4><hr size=0>'<tt>rem</tt>' Instruction</h4><ul>
974
975<h5>Syntax:</h5>
976<pre>
977 &lt;result&gt; = rem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
978</pre>
979
980<h5>Overview:</h5>
981The '<tt>rem</tt>' instruction returns the remainder from the division of its two operands.<p>
982
983<h5>Arguments:</h5>
984The two arguments to the '<tt>rem</tt>' instruction must be either <a href="#t_integral">integral</a> or <a href="#t_floating">floating point</a> values. Both arguments must have identical types.<p>
985
986<h5>Semantics:</h5>
Chris Lattner6536cfe2002-05-06 22:08:29 +0000987
988This returns the <i>remainder</i> of a division (where the result has the same
989sign as the divisor), not the <i>modulus</i> (where the result has the same sign
990as the dividend) of a value. For more information about the difference, see: <a
991href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The Math
992Forum</a>.<p>
993
Chris Lattner00950542001-06-06 20:29:01 +0000994...<p>
995
996<h5>Example:</h5>
997<pre>
998 &lt;result&gt; = rem int 4, %var <i>; yields {int}:result = 4 % %var</i>
999</pre>
1000
1001
1002<!-- _______________________________________________________________________ -->
1003</ul><a name="i_setcc"><h4><hr size=0>'<tt>set<i>cc</i></tt>' Instructions</h4><ul>
1004
1005<h5>Syntax:</h5>
1006<pre>
1007 &lt;result&gt; = seteq &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1008 &lt;result&gt; = setne &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1009 &lt;result&gt; = setlt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1010 &lt;result&gt; = setgt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1011 &lt;result&gt; = setle &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1012 &lt;result&gt; = setge &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {bool}:result</i>
1013</pre>
1014
Chris Lattner6536cfe2002-05-06 22:08:29 +00001015<h5>Overview:</h5> The '<tt>set<i>cc</i></tt>' family of instructions returns a
1016boolean value based on a comparison of their two operands.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001017
Chris Lattner7faa8832002-04-14 06:13:44 +00001018<h5>Arguments:</h5> The two arguments to the '<tt>set<i>cc</i></tt>'
1019instructions must be of <a href="#t_firstclass">first class</a> or <a
1020href="#t_pointer">pointer</a> type (it is not possible to compare
1021'<tt>label</tt>'s, '<tt>array</tt>'s, '<tt>structure</tt>' or '<tt>void</tt>'
Chris Lattner6536cfe2002-05-06 22:08:29 +00001022values, etc...). Both arguments must have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001023
Chris Lattner6536cfe2002-05-06 22:08:29 +00001024The '<tt>setlt</tt>', '<tt>setgt</tt>', '<tt>setle</tt>', and '<tt>setge</tt>'
1025instructions do not operate on '<tt>bool</tt>' typed arguments.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001026
1027<h5>Semantics:</h5>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001028
1029The '<tt>seteq</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1030both operands are equal.<br>
1031
1032The '<tt>setne</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1033both operands are unequal.<br>
1034
1035The '<tt>setlt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1036the first operand is less than the second operand.<br>
1037
1038The '<tt>setgt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1039the first operand is greater than the second operand.<br>
1040
1041The '<tt>setle</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1042the first operand is less than or equal to the second operand.<br>
1043
1044The '<tt>setge</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>' value if
1045the first operand is greater than or equal to the second operand.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001046
1047<h5>Example:</h5>
1048<pre>
1049 &lt;result&gt; = seteq int 4, 5 <i>; yields {bool}:result = false</i>
1050 &lt;result&gt; = setne float 4, 5 <i>; yields {bool}:result = true</i>
1051 &lt;result&gt; = setlt uint 4, 5 <i>; yields {bool}:result = true</i>
1052 &lt;result&gt; = setgt sbyte 4, 5 <i>; yields {bool}:result = false</i>
1053 &lt;result&gt; = setle sbyte 4, 5 <i>; yields {bool}:result = true</i>
1054 &lt;result&gt; = setge sbyte 4, 5 <i>; yields {bool}:result = false</i>
1055</pre>
1056
1057
1058
1059<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +00001060</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
1061<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +00001062<a name="bitwiseops">Bitwise Binary Operations
1063</b></font></td></tr></table><ul>
1064
Chris Lattner2b7d3202002-05-06 03:03:22 +00001065Bitwise binary operators are used to do various forms of bit-twiddling in a
1066program. They are generally very efficient instructions, and can commonly be
1067strength reduced from other instructions. They require two operands, execute an
1068operation on them, and produce a single value. The resulting value of the
1069bitwise binary operators is always the same type as its first operand.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001070
1071<!-- _______________________________________________________________________ -->
1072</ul><a name="i_and"><h4><hr size=0>'<tt>and</tt>' Instruction</h4><ul>
1073
1074<h5>Syntax:</h5>
1075<pre>
1076 &lt;result&gt; = and &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
1077</pre>
1078
1079<h5>Overview:</h5>
1080The '<tt>and</tt>' instruction returns the bitwise logical and of its two operands.<p>
1081
1082<h5>Arguments:</h5>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001083
1084The two arguments to the '<tt>and</tt>' instruction must be either <a
1085href="#t_integral">integral</a> or <tt>bool</tt> values. Both arguments must
1086have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001087
1088
1089<h5>Semantics:</h5>
1090...<p>
1091
1092
1093<h5>Example:</h5>
1094<pre>
1095 &lt;result&gt; = and int 4, %var <i>; yields {int}:result = 4 & %var</i>
1096 &lt;result&gt; = and int 15, 40 <i>; yields {int}:result = 8</i>
1097 &lt;result&gt; = and int 4, 8 <i>; yields {int}:result = 0</i>
1098</pre>
1099
1100
1101
1102<!-- _______________________________________________________________________ -->
1103</ul><a name="i_or"><h4><hr size=0>'<tt>or</tt>' Instruction</h4><ul>
1104
1105<h5>Syntax:</h5>
1106<pre>
1107 &lt;result&gt; = or &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
1108</pre>
1109
Chris Lattner7faa8832002-04-14 06:13:44 +00001110<h5>Overview:</h5> The '<tt>or</tt>' instruction returns the bitwise logical
1111inclusive or of its two operands.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001112
1113<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001114
1115The two arguments to the '<tt>or</tt>' instruction must be either <a
Chris Lattner6536cfe2002-05-06 22:08:29 +00001116href="#t_integral">integral</a> or <tt>bool</tt> values. Both arguments must
1117have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001118
1119
1120<h5>Semantics:</h5>
1121...<p>
1122
1123
1124<h5>Example:</h5>
1125<pre>
1126 &lt;result&gt; = or int 4, %var <i>; yields {int}:result = 4 | %var</i>
1127 &lt;result&gt; = or int 15, 40 <i>; yields {int}:result = 47</i>
1128 &lt;result&gt; = or int 4, 8 <i>; yields {int}:result = 12</i>
1129</pre>
1130
1131
1132<!-- _______________________________________________________________________ -->
1133</ul><a name="i_xor"><h4><hr size=0>'<tt>xor</tt>' Instruction</h4><ul>
1134
1135<h5>Syntax:</h5>
1136<pre>
1137 &lt;result&gt; = xor &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt; <i>; yields {ty}:result</i>
1138</pre>
1139
1140<h5>Overview:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001141
1142The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of its
1143two operands.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001144
1145<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001146
1147The two arguments to the '<tt>xor</tt>' instruction must be either <a
Chris Lattner6536cfe2002-05-06 22:08:29 +00001148href="#t_integral">integral</a> or <tt>bool</tt> values. Both arguments must
1149have identical types.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001150
1151
1152<h5>Semantics:</h5>
1153...<p>
1154
1155
1156<h5>Example:</h5>
1157<pre>
1158 &lt;result&gt; = xor int 4, %var <i>; yields {int}:result = 4 ^ %var</i>
1159 &lt;result&gt; = xor int 15, 40 <i>; yields {int}:result = 39</i>
1160 &lt;result&gt; = xor int 4, 8 <i>; yields {int}:result = 12</i>
1161</pre>
1162
1163
1164<!-- _______________________________________________________________________ -->
1165</ul><a name="i_shl"><h4><hr size=0>'<tt>shl</tt>' Instruction</h4><ul>
1166
1167<h5>Syntax:</h5>
1168<pre>
1169 &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt; <i>; yields {ty}:result</i>
1170</pre>
1171
1172<h5>Overview:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001173
1174The '<tt>shl</tt>' instruction returns the first operand shifted to the left a
1175specified number of bits.
Chris Lattner00950542001-06-06 20:29:01 +00001176
1177<h5>Arguments:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001178
1179The first argument to the '<tt>shl</tt>' instruction must be an <a
1180href="#t_integral">integral</a> type. The second argument must be an
1181'<tt>ubyte</tt>' type.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001182
1183<h5>Semantics:</h5>
1184... 0 bits are shifted into the emptied bit positions...<p>
1185
1186
1187<h5>Example:</h5>
1188<pre>
1189 &lt;result&gt; = shl int 4, ubyte %var <i>; yields {int}:result = 4 << %var</i>
1190 &lt;result&gt; = shl int 4, ubyte 2 <i>; yields {int}:result = 16</i>
1191 &lt;result&gt; = shl int 1, ubyte 10 <i>; yields {int}:result = 1024</i>
1192</pre>
1193
1194
1195<!-- _______________________________________________________________________ -->
1196</ul><a name="i_shr"><h4><hr size=0>'<tt>shr</tt>' Instruction</h4><ul>
1197
1198
1199<h5>Syntax:</h5>
1200<pre>
1201 &lt;result&gt; = shr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt; <i>; yields {ty}:result</i>
1202</pre>
1203
1204<h5>Overview:</h5>
1205The '<tt>shr</tt>' instruction returns the first operand shifted to the right a specified number of bits.
1206
1207<h5>Arguments:</h5>
1208The first argument to the '<tt>shr</tt>' instruction must be an <a href="#t_integral">integral</a> type. The second argument must be an '<tt>ubyte</tt>' type.<p>
1209
1210<h5>Semantics:</h5>
1211... if the first argument is a <a href="#t_signed">signed</a> type, the most significant bit is duplicated in the newly free'd bit positions. If the first argument is unsigned, zeros shall fill the empty positions...<p>
1212
1213<h5>Example:</h5>
1214<pre>
1215 &lt;result&gt; = shr int 4, ubyte %var <i>; yields {int}:result = 4 >> %var</i>
1216 &lt;result&gt; = shr int 4, ubyte 1 <i>; yields {int}:result = 2</i>
1217 &lt;result&gt; = shr int 4, ubyte 2 <i>; yields {int}:result = 1</i>
1218 &lt;result&gt; = shr int 4, ubyte 3 <i>; yields {int}:result = 0</i>
1219</pre>
1220
1221
1222
1223
1224
1225<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +00001226</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
1227<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +00001228<a name="memoryops">Memory Access Operations
1229</b></font></td></tr></table><ul>
1230
Chris Lattner6536cfe2002-05-06 22:08:29 +00001231Accessing memory in SSA form is, well, sticky at best. This section describes how to read, write, allocate and free memory in LLVM.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001232
1233
1234<!-- _______________________________________________________________________ -->
1235</ul><a name="i_malloc"><h4><hr size=0>'<tt>malloc</tt>' Instruction</h4><ul>
1236
1237<h5>Syntax:</h5>
1238<pre>
Chris Lattner7faa8832002-04-14 06:13:44 +00001239 &lt;result&gt; = malloc &lt;type&gt;, uint &lt;NumElements&gt; <i>; yields {type*}:result</i>
1240 &lt;result&gt; = malloc &lt;type&gt; <i>; yields {type*}:result</i>
Chris Lattner00950542001-06-06 20:29:01 +00001241</pre>
1242
1243<h5>Overview:</h5>
1244The '<tt>malloc</tt>' instruction allocates memory from the system heap and returns a pointer to it.<p>
1245
1246<h5>Arguments:</h5>
1247
Chris Lattner7faa8832002-04-14 06:13:44 +00001248The the '<tt>malloc</tt>' instruction allocates
1249<tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory from the operating
1250system, and returns a pointer of the appropriate type to the program. The
1251second form of the instruction is a shorter version of the first instruction
1252that defaults to allocating one element.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001253
Chris Lattner7faa8832002-04-14 06:13:44 +00001254'<tt>type</tt>' must be a sized type<p>
Chris Lattner00950542001-06-06 20:29:01 +00001255
1256<h5>Semantics:</h5>
1257Memory is allocated, a pointer is returned.<p>
1258
1259<h5>Example:</h5>
1260<pre>
1261 %array = malloc [4 x ubyte ] <i>; yields {[%4 x ubyte]*}:array</i>
1262
1263 %size = <a href="#i_add">add</a> uint 2, 2 <i>; yields {uint}:size = uint 4</i>
Chris Lattner7faa8832002-04-14 06:13:44 +00001264 %array1 = malloc ubyte, uint 4 <i>; yields {ubyte*}:array1</i>
1265 %array2 = malloc [12 x ubyte], uint %size <i>; yields {[12 x ubyte]*}:array2</i>
Chris Lattner00950542001-06-06 20:29:01 +00001266</pre>
1267
1268
1269<!-- _______________________________________________________________________ -->
1270</ul><a name="i_free"><h4><hr size=0>'<tt>free</tt>' Instruction</h4><ul>
1271
1272<h5>Syntax:</h5>
1273<pre>
1274 free &lt;type&gt; &lt;value&gt; <i>; yields {void}</i>
1275</pre>
1276
1277
1278<h5>Overview:</h5>
1279The '<tt>free</tt>' instruction returns memory back to the unused memory heap, to be reallocated in the future.<p>
1280
1281
1282<h5>Arguments:</h5>
1283
Chris Lattner6536cfe2002-05-06 22:08:29 +00001284'<tt>value</tt>' shall be a pointer value that points to a value that was
1285allocated with the '<tt><a href="#i_malloc">malloc</a></tt>' instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001286
1287
1288<h5>Semantics:</h5>
Chris Lattner00950542001-06-06 20:29:01 +00001289
Chris Lattner6536cfe2002-05-06 22:08:29 +00001290Access to the memory pointed to by the pointer is not longer defined after this instruction executes.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001291
1292<h5>Example:</h5>
1293<pre>
1294 %array = <a href="#i_malloc">malloc</a> [4 x ubyte] <i>; yields {[4 x ubyte]*}:array</i>
1295 free [4 x ubyte]* %array
1296</pre>
1297
1298
1299<!-- _______________________________________________________________________ -->
1300</ul><a name="i_alloca"><h4><hr size=0>'<tt>alloca</tt>' Instruction</h4><ul>
1301
1302<h5>Syntax:</h5>
1303<pre>
Chris Lattner7faa8832002-04-14 06:13:44 +00001304 &lt;result&gt; = alloca &lt;type&gt;, uint &lt;NumElements&gt; <i>; yields {type*}:result</i>
1305 &lt;result&gt; = alloca &lt;type&gt; <i>; yields {type*}:result</i>
Chris Lattner00950542001-06-06 20:29:01 +00001306</pre>
1307
1308<h5>Overview:</h5>
1309
Chris Lattner7faa8832002-04-14 06:13:44 +00001310The '<tt>alloca</tt>' instruction allocates memory on the current stack frame of
1311the procedure that is live until the current function returns to its caller.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001312
1313<h5>Arguments:</h5>
Chris Lattner00950542001-06-06 20:29:01 +00001314
Chris Lattner7faa8832002-04-14 06:13:44 +00001315The the '<tt>alloca</tt>' instruction allocates
1316<tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the runtime stack,
1317returning a pointer of the appropriate type to the program. The second form of
1318the instruction is a shorter version of the first that defaults to allocating
1319one element.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001320
Chris Lattner7faa8832002-04-14 06:13:44 +00001321'<tt>type</tt>' may be any sized type.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001322
1323<h5>Semantics:</h5>
Chris Lattner7faa8832002-04-14 06:13:44 +00001324
1325Memory is allocated, a pointer is returned. '<tt>alloca</tt>'d memory is
1326automatically released when the function returns. The '<tt>alloca</tt>'
1327instruction is commonly used to represent automatic variables that must have an
1328address available, as well as spilled variables.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001329
1330<h5>Example:</h5>
1331<pre>
1332 %ptr = alloca int <i>; yields {int*}:ptr</i>
Chris Lattner7faa8832002-04-14 06:13:44 +00001333 %ptr = alloca int, uint 4 <i>; yields {int*}:ptr</i>
Chris Lattner00950542001-06-06 20:29:01 +00001334</pre>
1335
1336
1337<!-- _______________________________________________________________________ -->
Chris Lattner2b7d3202002-05-06 03:03:22 +00001338</ul><a name="i_load"><h4><hr size=0>'<tt>load</tt>' Instruction</h4><ul>
1339
1340<h5>Syntax:</h5>
1341<pre>
1342 &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;
1343</pre>
1344
1345<h5>Overview:</h5>
1346The '<tt>load</tt>' instruction is used to read from memory.<p>
1347
1348<h5>Arguments:</h5>
1349
1350The argument to the '<tt>load</tt>' instruction specifies the memory address to load from. The pointer must point to a <a href="t_firstclass">first class</a> type.<p>
1351
1352<h5>Semantics:</h5>
1353
1354The location of memory pointed to is loaded.
1355
1356<h5>Examples:</h5>
1357<pre>
1358 %ptr = <a href="#i_alloca">alloca</a> int <i>; yields {int*}:ptr</i>
1359 <a href="#i_store">store</a> int 3, int* %ptr <i>; yields {void}</i>
1360 %val = load int* %ptr <i>; yields {int}:val = int 3</i>
1361</pre>
1362
1363
1364
1365
1366<!-- _______________________________________________________________________ -->
1367</ul><a name="i_store"><h4><hr size=0>'<tt>store</tt>' Instruction</h4><ul>
1368
1369<h5>Syntax:</h5>
1370<pre>
1371 store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt; <i>; yields {void}</i>
1372</pre>
1373
1374<h5>Overview:</h5>
1375The '<tt>store</tt>' instruction is used to write to memory.<p>
1376
1377<h5>Arguments:</h5>
1378
1379There are two arguments to the '<tt>store</tt>' instruction: a value to store
1380and an address to store it into. The type of the '<tt>&lt;pointer&gt;</tt>'
1381operand must be a pointer to the type of the '<tt>&lt;value&gt;</tt>'
1382operand.<p>
1383
1384<h5>Semantics:</h5> The contents of memory are updated to contain
1385'<tt>&lt;value&gt;</tt>' at the location specified by the
1386'<tt>&lt;pointer&gt;</tt>' operand.<p>
1387
1388<h5>Example:</h5>
1389<pre>
1390 %ptr = <a href="#i_alloca">alloca</a> int <i>; yields {int*}:ptr</i>
1391 <a href="#i_store">store</a> int 3, int* %ptr <i>; yields {void}</i>
1392 %val = load int* %ptr <i>; yields {int}:val = int 3</i>
1393</pre>
1394
1395
1396
1397
1398<!-- _______________________________________________________________________ -->
Chris Lattner7faa8832002-04-14 06:13:44 +00001399</ul><a name="i_getelementptr"><h4><hr size=0>'<tt>getelementptr</tt>' Instruction</h4><ul>
1400
1401<h5>Syntax:</h5>
1402<pre>
1403 &lt;result&gt; = getelementptr &lt;ty&gt;* &lt;ptrval&gt;{, uint &lt;aidx&gt;|, ubyte &lt;sidx&gt;}*
1404</pre>
1405
1406<h5>Overview:</h5>
1407
1408The '<tt>getelementptr</tt>' instruction is used to get the address of a
Chris Lattner6536cfe2002-05-06 22:08:29 +00001409subelement of an aggregate data structure.<p>
Chris Lattner7faa8832002-04-14 06:13:44 +00001410
1411<h5>Arguments:</h5>
1412
1413This instruction takes a list of <tt>uint</tt> values and <tt>ubyte</tt>
1414constants that indicate what form of addressing to perform. The actual types of
1415the arguments provided depend on the type of the first pointer argument. The
1416'<tt>getelementptr</tt>' instruction is used to index down through the type
1417levels of a structure.<p>
1418
Chris Lattner6536cfe2002-05-06 22:08:29 +00001419For example, lets consider a C code fragment and how it gets compiled to
1420LLVM:<p>
1421
1422<pre>
1423struct RT {
1424 char A;
1425 int B[10][20];
1426 char C;
1427};
1428struct ST {
1429 int X;
1430 double Y;
1431 struct RT Z;
1432};
1433
1434int *foo(struct ST *s) {
1435 return &amp;s[1].Z.B[5][13];
1436}
1437</pre>
1438
1439The LLVM code generated by the GCC frontend is:
1440
1441<pre>
1442%RT = type { sbyte, [10 x [20 x int]], sbyte }
1443%ST = type { int, double, %RT }
1444
1445int* "foo"(%ST* %s) {
1446 %reg = getelementptr %ST* %s, uint 1, ubyte 2, ubyte 1, uint 5, uint 13
1447 ret int* %reg
1448}
1449</pre>
Chris Lattner7faa8832002-04-14 06:13:44 +00001450
1451<h5>Semantics:</h5>
1452
Chris Lattner6536cfe2002-05-06 22:08:29 +00001453The index types specified for the '<tt>getelementptr</tt>' instruction depend on
1454the pointer type that is being index into. <a href="t_pointer">Pointer</a> and
1455<a href="t_array">array</a> types require '<tt>uint</tt>' values, and <a
1456href="t_struct">structure</a> types require '<tt>ubyte</tt>'
1457<b>constants</b>.<p>
1458
1459In the example above, the first index is indexing into the '<tt>%ST*</tt>' type,
1460which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ int, double, %RT }</tt>'
1461type, a structure. The second index indexes into the third element of the
1462structure, yielding a '<tt>%RT</tt>' = '<tt>{ sbyte, [10 x [20 x int]], sbyte
1463}</tt>' type, another structure. The third index indexes into the second
1464element of the structure, yielding a '<tt>[10 x [20 x int]]</tt>' type, an
1465array. The two dimensions of the array are subscripted into, yielding an
1466'<tt>int</tt>' type. The '<tt>getelementptr</tt>' instruction return a pointer
1467to this element, thus yielding a '<tt>int*</tt>' type.<p>
1468
1469Note that it is perfectly legal to index partially through a structure,
1470returning a pointer to an inner element. Because of this, the LLVM code for the
1471given testcase is equivalent to:<p>
1472
1473<pre>
1474int* "foo"(%ST* %s) {
1475 %t1 = getelementptr %ST* %s , uint 1 <i>; yields %ST*:%t1</i>
1476 %t2 = getelementptr %ST* %t1, uint 0, ubyte 2 <i>; yields %RT*:%t2</i>
1477 %t3 = getelementptr %RT* %t2, uint 0, ubyte 1 <i>; yields [10 x [20 x int]]*:%t3</i>
1478 %t4 = getelementptr [10 x [20 x int]]* %t3, uint 0, uint 5 <i>; yields [20 x int]*:%t4</i>
1479 %t5 = getelementptr [20 x int]* %t4, uint 0, uint 13 <i>; yields int*:%t5</i>
1480 ret int* %t5
1481}
1482</pre>
1483
1484
Chris Lattner7faa8832002-04-14 06:13:44 +00001485
1486<h5>Example:</h5>
1487<pre>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001488 <i>; yields {[12 x ubyte]*}:aptr</i>
1489 %aptr = getelementptr {int, [12 x ubyte]}* %sptr, uint 0, ubyte 1
Chris Lattner7faa8832002-04-14 06:13:44 +00001490</pre>
1491
1492
1493
Chris Lattner00950542001-06-06 20:29:01 +00001494<!-- ======================================================================= -->
Chris Lattner2b7d3202002-05-06 03:03:22 +00001495</ul><table width="100%" bgcolor="#441188" border=0 cellpadding=4 cellspacing=0>
1496<tr><td>&nbsp;</td><td width="100%">&nbsp; <font color="#EEEEFF" face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +00001497<a name="otherops">Other Operations
1498</b></font></td></tr></table><ul>
1499
1500The instructions in this catagory are the "miscellaneous" functions, that defy better classification.<p>
1501
1502
1503<!-- _______________________________________________________________________ -->
Chris Lattner6536cfe2002-05-06 22:08:29 +00001504</ul><a name="i_phi"><h4><hr size=0>'<tt>phi</tt>' Instruction</h4><ul>
Chris Lattner33ba0d92001-07-09 00:26:23 +00001505
1506<h5>Syntax:</h5>
1507<pre>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001508 &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...
Chris Lattner33ba0d92001-07-09 00:26:23 +00001509</pre>
1510
1511<h5>Overview:</h5>
1512
Chris Lattner6536cfe2002-05-06 22:08:29 +00001513The '<tt>phi</tt>' instruction is used to implement the &phi; node in the SSA
1514graph representing the function.<p>
Chris Lattner33ba0d92001-07-09 00:26:23 +00001515
1516<h5>Arguments:</h5>
1517
Chris Lattner6536cfe2002-05-06 22:08:29 +00001518The type of the incoming values are specified with the first type field. After
1519this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
1520one pair for each predecessor basic block of the current block.<p>
1521
1522There must be no non-phi instructions between the start of a basic block and the
1523PHI instructions: i.e. PHI instructions must be first in a basic block.<p>
Chris Lattner33ba0d92001-07-09 00:26:23 +00001524
1525<h5>Semantics:</h5>
1526
Chris Lattner6536cfe2002-05-06 22:08:29 +00001527At runtime, the '<tt>phi</tt>' instruction logically takes on the value
1528specified by the parameter, depending on which basic block we came from in the
1529last <a href="#terminators">terminator</a> instruction.<p>
1530
1531<h5>Example:</h5>
1532
1533<pre>
1534Loop: ; Infinite loop that counts from 0 on up...
1535 %indvar = phi uint [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
1536 %nextindvar = add uint %indvar, 1
1537 br label %Loop
1538</pre>
1539
1540
1541<!-- _______________________________________________________________________ -->
1542</ul><a name="i_cast"><h4><hr size=0>'<tt>cast .. to</tt>' Instruction</h4><ul>
1543
1544<h5>Syntax:</h5>
1545<pre>
1546 &lt;result&gt; = cast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt; <i>; yields ty2</i>
1547</pre>
1548
1549<h5>Overview:</h5>
1550
1551The '<tt>cast</tt>' instruction is used as the primitive means to convert
1552integers to floating point, change data type sizes, and break type safety (by
1553casting pointers).<p>
1554
1555<h5>Arguments:</h5>
1556
1557The '<tt>cast</tt>' instruction takes a value to case, which must be a first
1558class value, and a type to cast it to, which must also be a first class type.<p>
1559
1560<h5>Semantics:</h5>
1561
1562This instruction follows the C rules for explicit casts when determining how the
1563data being cast must change to fit in its new container.<p>
1564
1565When casting to bool, any value that would be considered true in the context of a C '<tt>if</tt>' condition is converted to the boolean '<tt>true</tt>' values, all else are '<tt>false</tt>'.<p>
Chris Lattner33ba0d92001-07-09 00:26:23 +00001566
1567<h5>Example:</h5>
1568<pre>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001569 %X = cast int 257 to ubyte <i>; yields ubyte:1</i>
1570 %Y = cast int 123 to bool <i>; yields bool::true</i>
Chris Lattner33ba0d92001-07-09 00:26:23 +00001571</pre>
1572
1573
1574
1575<!-- _______________________________________________________________________ -->
Chris Lattner00950542001-06-06 20:29:01 +00001576</ul><a name="i_call"><h4><hr size=0>'<tt>call</tt>' Instruction</h4><ul>
1577
1578<h5>Syntax:</h5>
1579<pre>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001580 &lt;result&gt; = call &lt;ty&gt;* &lt;fnptrval&gt;(&lt;param list&gt;)
Chris Lattner00950542001-06-06 20:29:01 +00001581</pre>
1582
1583<h5>Overview:</h5>
1584
Chris Lattner6536cfe2002-05-06 22:08:29 +00001585The '<tt>call</tt>' instruction represents a simple function call.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001586
1587<h5>Arguments:</h5>
1588
Chris Lattner6536cfe2002-05-06 22:08:29 +00001589This instruction requires several arguments:<p>
1590<ol>
1591
1592<li>'<tt>ty</tt>': shall be the signature of the pointer to function value being
1593invoked. The argument types must match the types implied by this signature.<p>
1594
1595<li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to be
1596invoked. In most cases, this is a direct function invocation, but indirect
1597<tt>call</tt>'s are just as possible, calling an arbitrary pointer to function
1598values.<p>
1599
1600<li>'<tt>function args</tt>': argument list whose types match the function
1601signature argument types. If the function signature indicates the function
1602accepts a variable number of arguments, the extra arguments can be specified.
1603</ol>
Chris Lattner00950542001-06-06 20:29:01 +00001604
1605<h5>Semantics:</h5>
1606
Chris Lattner6536cfe2002-05-06 22:08:29 +00001607The '<tt>call</tt>' instruction is used to cause control flow to transfer to a
1608specified function, with its incoming arguments bound to the specified values.
1609Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called function,
1610control flow continues with the instruction after the function call, and the
1611return value of the function is bound to the result argument. This is a simpler
1612case of the <a href="#i_invoke">invoke</a> instruction.<p>
Chris Lattner00950542001-06-06 20:29:01 +00001613
1614<h5>Example:</h5>
1615<pre>
1616 %retval = call int %test(int %argc)
Chris Lattner6536cfe2002-05-06 22:08:29 +00001617 call int(sbyte*, ...) *%printf(sbyte* %msg, int 12, sbyte 42);
1618
Chris Lattner00950542001-06-06 20:29:01 +00001619</pre>
1620
Chris Lattner6536cfe2002-05-06 22:08:29 +00001621<!--
Chris Lattner00950542001-06-06 20:29:01 +00001622
Chris Lattner6536cfe2002-05-06 22:08:29 +00001623<!x- *********************************************************************** -x>
Chris Lattner2b7d3202002-05-06 03:03:22 +00001624</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
1625<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
Chris Lattner00950542001-06-06 20:29:01 +00001626<a name="related">Related Work
1627</b></font></td></tr></table><ul>
Chris Lattner6536cfe2002-05-06 22:08:29 +00001628<!x- *********************************************************************** -x>
Chris Lattner00950542001-06-06 20:29:01 +00001629
1630
1631Codesigned virtual machines.<p>
1632
1633<dl>
1634<a name="rw_safetsa">
1635<dt>SafeTSA
1636<DD>Description here<p>
1637
1638<a name="rw_java">
1639<dt><a href="http://www.javasoft.com">Java</a>
1640<DD>Desciption here<p>
1641
1642<a name="rw_net">
1643<dt><a href="http://www.microsoft.com/net">Microsoft .net</a>
1644<DD>Desciption here<p>
1645
1646<a name="rw_gccrtl">
1647<dt><a href="http://www.math.umn.edu/systems_guide/gcc-2.95.1/gcc_15.html">GNU RTL Intermediate Representation</a>
1648<DD>Desciption here<p>
1649
1650<a name="rw_ia64">
1651<dt><a href="http://developer.intel.com/design/ia-64/index.htm">IA64 Architecture &amp; Instruction Set</a>
1652<DD>Desciption here<p>
1653
1654<a name="rw_mmix">
1655<dt><a href="http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html">MMIX Instruction Set</a>
1656<DD>Desciption here<p>
1657
1658<a name="rw_stroustrup">
1659<dt><a href="http://www.research.att.com/~bs/devXinterview.html">"Interview With Bjarne Stroustrup"</a>
1660<DD>This interview influenced the design and thought process behind LLVM in several ways, most notably the way that derived types are written in text format. See the question that starts with "you defined the C declarator syntax as an experiment that failed".<p>
1661</dl>
1662
Chris Lattner6536cfe2002-05-06 22:08:29 +00001663<!x- _______________________________________________________________________ -x>
Chris Lattner00950542001-06-06 20:29:01 +00001664</ul><a name="rw_vectorization"><h3><hr size=0>Vectorized Architectures</h3><ul>
1665
1666<dl>
1667<a name="rw_intel_simd">
1668<dt>Intel MMX, MMX2, SSE, SSE2
1669<DD>Description here<p>
1670
1671<a name="rw_amd_simd">
1672<dt><a href="http://www.nondot.org/~sabre/os/H1ChipFeatures/3DNow!TechnologyManual.pdf">AMD 3Dnow!, 3Dnow! 2</a>
1673<DD>Desciption here<p>
1674
1675<a name="rw_sun_simd">
1676<dt><a href="http://www.nondot.org/~sabre/os/H1ChipFeatures/VISInstructionSetUsersManual.pdf">Sun VIS ISA</a>
1677<DD>Desciption here<p>
1678
Chris Lattner6536cfe2002-05-06 22:08:29 +00001679<a name="rw_powerpc_simd">
1680<dt>PowerPC Altivec
1681<DD>Desciption here<p>
Chris Lattner00950542001-06-06 20:29:01 +00001682
1683</dl>
1684
1685more...
1686
Chris Lattner6536cfe2002-05-06 22:08:29 +00001687-->
1688
1689
Chris Lattner00950542001-06-06 20:29:01 +00001690<!-- *********************************************************************** -->
1691</ul>
1692<!-- *********************************************************************** -->
1693
1694
1695<hr>
1696<font size=-1>
1697<address><a href="mailto:sabre@nondot.org">Chris Lattner</a></address>
1698<!-- Created: Tue Jan 23 15:19:28 CST 2001 -->
1699<!-- hhmts start -->
Chris Lattner6536cfe2002-05-06 22:08:29 +00001700Last modified: Mon May 6 17:07:42 CDT 2002
Chris Lattner00950542001-06-06 20:29:01 +00001701<!-- hhmts end -->
1702</font>
1703</body></html>