a6a5fab506ce247e61e5d75fd5874b1cbde81839
[oota-llvm.git] / docs / LangRef.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2                       "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5   <title>LLVM Assembly Language Reference Manual</title>
6   <link rel="stylesheet" href="llvm.css" type="text/css">
7 </head>
8
9 <body>
10
11 <div class="doc_title"> LLVM Language Reference Manual </div>
12 <ol>
13   <li><a href="#abstract">Abstract</a></li>
14   <li><a href="#introduction">Introduction</a></li>
15   <li><a href="#identifiers">Identifiers</a></li>
16   <li><a href="#typesystem">Type System</a>
17     <ol>
18       <li><a href="#t_primitive">Primitive Types</a>    
19         <ol>
20           <li><a href="#t_classifications">Type Classifications</a></li>
21         </ol>
22       </li>
23       <li><a href="#t_derived">Derived Types</a>
24         <ol>
25           <li><a href="#t_array">Array Type</a></li>
26           <li><a href="#t_function">Function Type</a></li>
27           <li><a href="#t_pointer">Pointer Type</a></li>
28           <li><a href="#t_struct">Structure Type</a></li>
29 <!-- <li><a href="#t_packed" >Packed Type</a> -->
30         </ol>
31       </li>
32     </ol>
33   </li>
34   <li><a href="#highlevel">High Level Structure</a>
35     <ol>
36       <li><a href="#modulestructure">Module Structure</a></li>
37       <li><a href="#globalvars">Global Variables</a></li>
38       <li><a href="#functionstructure">Function Structure</a></li>
39     </ol>
40   </li>
41   <li><a href="#instref">Instruction Reference</a>
42     <ol>
43       <li><a href="#terminators">Terminator Instructions</a>
44         <ol>
45           <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li>
46           <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li>
47           <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li>
48           <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li>
49           <li><a href="#i_unwind">'<tt>unwind</tt>'  Instruction</a></li>
50         </ol>
51       </li>
52       <li><a href="#binaryops">Binary Operations</a>
53         <ol>
54           <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li>
55           <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
56           <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
57           <li><a href="#i_div">'<tt>div</tt>' Instruction</a></li>
58           <li><a href="#i_rem">'<tt>rem</tt>' Instruction</a></li>
59           <li><a href="#i_setcc">'<tt>set<i>cc</i></tt>' Instructions</a></li>
60         </ol>
61       </li>
62       <li><a href="#bitwiseops">Bitwise Binary Operations</a>
63         <ol>
64           <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
65           <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
66           <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
67           <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
68           <li><a href="#i_shr">'<tt>shr</tt>' Instruction</a></li>
69         </ol>
70       </li>
71       <li><a href="#memoryops">Memory Access Operations</a>
72         <ol>
73           <li><a href="#i_malloc">'<tt>malloc</tt>'   Instruction</a></li>
74           <li><a href="#i_free">'<tt>free</tt>'     Instruction</a></li>
75           <li><a href="#i_alloca">'<tt>alloca</tt>'   Instruction</a></li>
76          <li><a href="#i_load">'<tt>load</tt>'     Instruction</a></li>
77          <li><a href="#i_store">'<tt>store</tt>'    Instruction</a></li>
78          <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
79         </ol>
80       </li>
81       <li><a href="#otherops">Other Operations</a>
82         <ol>
83           <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
84           <li><a href="#i_cast">'<tt>cast .. to</tt>' Instruction</a></li>
85           <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
86           <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
87           <li><a href="#i_vanext">'<tt>vanext</tt>' Instruction</a></li>
88           <li><a href="#i_vaarg">'<tt>vaarg</tt>'  Instruction</a></li>
89         </ol>
90       </li>
91     </ol>
92   </li>
93   <li><a href="#intrinsics">Intrinsic Functions</a>
94     <ol>
95       <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
96         <ol>
97           <li><a href="#i_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
98           <li><a href="#i_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
99           <li><a href="#i_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
100         </ol>
101       </li>
102       <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
103         <ol>
104           <li><a href="#i_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
105           <li><a href="#i_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
106           <li><a href="#i_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
107         </ol>
108       </li>
109       <li><a href="#int_codegen">Code Generator Intrinsics</a>
110         <ol>
111           <li><a href="#i_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
112           <li><a href="#i_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
113         </ol>
114       </li>
115       <li><a href="#int_os">Operating System Intrinsics</a>
116         <ol>
117           <li><a href="#i_readport">'<tt>llvm.readport</tt>' Intrinsic</a></li>
118           <li><a href="#i_writeport">'<tt>llvm.writeport</tt>' Intrinsic</a></li>
119           <li><a href="#i_readio">'<tt>llvm.readio</tt>'   Intrinsic</a></li>
120           <li><a href="#i_writeio">'<tt>llvm.writeio</tt>'   Intrinsic</a></li>
121         </ol>
122       <li><a href="#int_libc">Standard C Library Intrinsics</a>
123         <ol>
124           <li><a href="#i_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a></li>
125           <li><a href="#i_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a></li>
126           <li><a href="#i_memset">'<tt>llvm.memset</tt>' Intrinsic</a></li>
127           <li><a href="#i_isnan">'<tt>llvm.isnan</tt>' Intrinsic</a></li>
128           <li><a href="#i_isunordered">'<tt>llvm.isunordered</tt>' Intrinsic</a></li>
129         </ol>
130       </li>
131       <li><a href="#int_debugger">Debugger intrinsics</a></li>
132     </ol>
133   </li>
134 </ol>
135
136 <div class="doc_author">
137   <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
138             and <a href="mailto:vadve@cs.uiuc.edu">Vikram Adve</a></p>
139 </div>
140
141 <!-- *********************************************************************** -->
142 <div class="doc_section"> <a name="abstract">Abstract </a></div>
143 <!-- *********************************************************************** -->
144
145 <div class="doc_text">
146 <p>This document is a reference manual for the LLVM assembly language. 
147 LLVM is an SSA based representation that provides type safety,
148 low-level operations, flexibility, and the capability of representing
149 'all' high-level languages cleanly.  It is the common code
150 representation used throughout all phases of the LLVM compilation
151 strategy.</p>
152 </div>
153
154 <!-- *********************************************************************** -->
155 <div class="doc_section"> <a name="introduction">Introduction</a> </div>
156 <!-- *********************************************************************** -->
157
158 <div class="doc_text">
159
160 <p>The LLVM code representation is designed to be used in three
161 different forms: as an in-memory compiler IR, as an on-disk bytecode
162 representation (suitable for fast loading by a Just-In-Time compiler),
163 and as a human readable assembly language representation.  This allows
164 LLVM to provide a powerful intermediate representation for efficient
165 compiler transformations and analysis, while providing a natural means
166 to debug and visualize the transformations.  The three different forms
167 of LLVM are all equivalent.  This document describes the human readable
168 representation and notation.</p>
169
170 <p>The LLVM representation aims to be a light-weight and low-level
171 while being expressive, typed, and extensible at the same time.  It
172 aims to be a "universal IR" of sorts, by being at a low enough level
173 that high-level ideas may be cleanly mapped to it (similar to how
174 microprocessors are "universal IR's", allowing many source languages to
175 be mapped to them).  By providing type information, LLVM can be used as
176 the target of optimizations: for example, through pointer analysis, it
177 can be proven that a C automatic variable is never accessed outside of
178 the current function... allowing it to be promoted to a simple SSA
179 value instead of a memory location.</p>
180
181 </div>
182
183 <!-- _______________________________________________________________________ -->
184 <div class="doc_subsubsection"> <a name="wellformed">Well-Formedness</a> </div>
185
186 <div class="doc_text">
187
188 <p>It is important to note that this document describes 'well formed'
189 LLVM assembly language.  There is a difference between what the parser
190 accepts and what is considered 'well formed'.  For example, the
191 following instruction is syntactically okay, but not well formed:</p>
192
193 <pre>
194   %x = <a href="#i_add">add</a> int 1, %x
195 </pre>
196
197 <p>...because the definition of <tt>%x</tt> does not dominate all of
198 its uses. The LLVM infrastructure provides a verification pass that may
199 be used to verify that an LLVM module is well formed.  This pass is
200 automatically run by the parser after parsing input assembly, and by
201 the optimizer before it outputs bytecode.  The violations pointed out
202 by the verifier pass indicate bugs in transformation passes or input to
203 the parser.</p>
204
205 <!-- Describe the typesetting conventions here. --> </div>
206
207 <!-- *********************************************************************** -->
208 <div class="doc_section"> <a name="identifiers">Identifiers</a> </div>
209 <!-- *********************************************************************** -->
210
211 <div class="doc_text">
212
213 <p>LLVM uses three different forms of identifiers, for different
214 purposes:</p>
215
216 <ol>
217   <li>Numeric constants are represented as you would expect: 12, -3
218 123.421,   etc.  Floating point constants have an optional hexadecimal
219 notation.</li>
220   <li>Named values are represented as a string of characters with a '%'
221 prefix.   For example, %foo, %DivisionByZero,
222 %a.really.long.identifier.  The actual   regular expression used is '<tt>%[a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.
223 Identifiers which require other characters in their names can be
224 surrounded   with quotes.  In this way, anything except a <tt>"</tt>
225 character can be used   in a name.</li>
226   <li>Unnamed values are represented as an unsigned numeric value with
227 a '%'   prefix.  For example, %12, %2, %44.</li>
228 </ol>
229 <p>LLVM requires that values start with a '%' sign for two reasons:
230 Compilers don't need to worry about name clashes with reserved words,
231 and the set of reserved words may be expanded in the future without
232 penalty.  Additionally, unnamed identifiers allow a compiler to quickly
233 come up with a temporary variable without having to avoid symbol table
234 conflicts.</p>
235 <p>Reserved words in LLVM are very similar to reserved words in other
236 languages. There are keywords for different opcodes ('<tt><a
237  href="#i_add">add</a></tt>', '<tt><a href="#i_cast">cast</a></tt>', '<tt><a
238  href="#i_ret">ret</a></tt>', etc...), for primitive type names ('<tt><a
239  href="#t_void">void</a></tt>', '<tt><a href="#t_uint">uint</a></tt>',
240 etc...), and others.  These reserved words cannot conflict with
241 variable names, because none of them start with a '%' character.</p>
242 <p>Here is an example of LLVM code to multiply the integer variable '<tt>%X</tt>'
243 by 8:</p>
244 <p>The easy way:</p>
245 <pre>  %result = <a href="#i_mul">mul</a> uint %X, 8<br></pre>
246 <p>After strength reduction:</p>
247 <pre>  %result = <a href="#i_shl">shl</a> uint %X, ubyte 3<br></pre>
248 <p>And the hard way:</p>
249 <pre>  <a href="#i_add">add</a> uint %X, %X           <i>; yields {uint}:%0</i>
250   <a
251  href="#i_add">add</a> uint %0, %0           <i>; yields {uint}:%1</i>
252   %result = <a
253  href="#i_add">add</a> uint %1, %1<br></pre>
254 <p>This last way of multiplying <tt>%X</tt> by 8 illustrates several
255 important lexical features of LLVM:</p>
256 <ol>
257   <li>Comments are delimited with a '<tt>;</tt>' and go until the end
258 of   line.</li>
259   <li>Unnamed temporaries are created when the result of a computation
260 is not   assigned to a named value.</li>
261   <li>Unnamed temporaries are numbered sequentially</li>
262 </ol>
263 <p>...and it also show a convention that we follow in this document. 
264 When demonstrating instructions, we will follow an instruction with a
265 comment that defines the type and name of value produced.  Comments are
266 shown in italic text.</p>
267 <p>The one non-intuitive notation for constants is the optional
268 hexidecimal form of floating point constants.  For example, the form '<tt>double
269 0x432ff973cafa8000</tt>' is equivalent to (but harder to read than) '<tt>double
270 4.5e+15</tt>' which is also supported by the parser.  The only time
271 hexadecimal floating point constants are useful (and the only time that
272 they are generated by the disassembler) is when an FP constant has to
273 be emitted that is not representable as a decimal floating point number
274 exactly.  For example, NaN's, infinities, and other special cases are
275 represented in their IEEE hexadecimal format so that assembly and
276 disassembly do not cause any bits to change in the constants.</p>
277 </div>
278 <!-- *********************************************************************** -->
279 <div class="doc_section"> <a name="typesystem">Type System</a> </div>
280 <!-- *********************************************************************** -->
281 <div class="doc_text">
282 <p>The LLVM type system is one of the most important features of the
283 intermediate representation.  Being typed enables a number of
284 optimizations to be performed on the IR directly, without having to do
285 extra analyses on the side before the transformation.  A strong type
286 system makes it easier to read the generated code and enables novel
287 analyses and transformations that are not feasible to perform on normal
288 three address code representations.</p>
289 <!-- The written form for the type system was heavily influenced by the
290 syntactic problems with types in the C language<sup><a
291 href="#rw_stroustrup">1</a></sup>.<p> --> </div>
292 <!-- ======================================================================= -->
293 <div class="doc_subsection"> <a name="t_primitive">Primitive Types</a> </div>
294 <div class="doc_text">
295 <p>The primitive types are the fundamental building blocks of the LLVM
296 system. The current set of primitive types are as follows:</p>
297
298 <table border="0" style="align: center">
299   <tbody>
300     <tr>
301       <td>
302       <table border="1" cellspacing="0" cellpadding="4" style="align: center">
303         <tbody>
304           <tr>
305             <td><tt>void</tt></td>
306             <td>No value</td>
307           </tr>
308           <tr>
309             <td><tt>ubyte</tt></td>
310             <td>Unsigned 8 bit value</td>
311           </tr>
312           <tr>
313             <td><tt>ushort</tt></td>
314             <td>Unsigned 16 bit value</td>
315           </tr>
316           <tr>
317             <td><tt>uint</tt></td>
318             <td>Unsigned 32 bit value</td>
319           </tr>
320           <tr>
321             <td><tt>ulong</tt></td>
322             <td>Unsigned 64 bit value</td>
323           </tr>
324           <tr>
325             <td><tt>float</tt></td>
326             <td>32 bit floating point value</td>
327           </tr>
328           <tr>
329             <td><tt>label</tt></td>
330             <td>Branch destination</td>
331           </tr>
332         </tbody>
333       </table>
334       </td>
335       <td valign="top">
336       <table border="1" cellspacing="0" cellpadding="4">
337         <tbody>
338           <tr>
339             <td><tt>bool</tt></td>
340             <td>True or False value</td>
341           </tr>
342           <tr>
343             <td><tt>sbyte</tt></td>
344             <td>Signed 8 bit value</td>
345           </tr>
346           <tr>
347             <td><tt>short</tt></td>
348             <td>Signed 16 bit value</td>
349           </tr>
350           <tr>
351             <td><tt>int</tt></td>
352             <td>Signed 32 bit value</td>
353           </tr>
354           <tr>
355             <td><tt>long</tt></td>
356             <td>Signed 64 bit value</td>
357           </tr>
358           <tr>
359             <td><tt>double</tt></td>
360             <td>64 bit floating point value</td>
361           </tr>
362         </tbody>
363       </table>
364       </td>
365     </tr>
366   </tbody>
367 </table>
368
369 </div>
370 <!-- _______________________________________________________________________ -->
371 <div class="doc_subsubsection"> <a name="t_classifications">Type
372 Classifications</a> </div>
373 <div class="doc_text">
374 <p>These different primitive types fall into a few useful
375 classifications:</p>
376
377 <table border="1" cellspacing="0" cellpadding="4">
378   <tbody>
379     <tr>
380       <td><a name="t_signed">signed</a></td>
381       <td><tt>sbyte, short, int, long, float, double</tt></td>
382     </tr>
383     <tr>
384       <td><a name="t_unsigned">unsigned</a></td>
385       <td><tt>ubyte, ushort, uint, ulong</tt></td>
386     </tr>
387     <tr>
388       <td><a name="t_integer">integer</a></td>
389       <td><tt>ubyte, sbyte, ushort, short, uint, int, ulong, long</tt></td>
390     </tr>
391     <tr>
392       <td><a name="t_integral">integral</a></td>
393       <td><tt>bool, ubyte, sbyte, ushort, short, uint, int, ulong, long</tt></td>
394     </tr>
395     <tr>
396       <td><a name="t_floating">floating point</a></td>
397       <td><tt>float, double</tt></td>
398     </tr>
399     <tr>
400       <td><a name="t_firstclass">first class</a></td>
401       <td><tt>bool, ubyte, sbyte, ushort, short,<br>
402 uint, int, ulong, long, float, double, <a href="#t_pointer">pointer</a></tt></td>
403     </tr>
404   </tbody>
405 </table>
406
407 <p>The <a href="#t_firstclass">first class</a> types are perhaps the
408 most important.  Values of these types are the only ones which can be
409 produced by instructions, passed as arguments, or used as operands to
410 instructions.  This means that all structures and arrays must be
411 manipulated either by pointer or by component.</p>
412 </div>
413 <!-- ======================================================================= -->
414 <div class="doc_subsection"> <a name="t_derived">Derived Types</a> </div>
415 <div class="doc_text">
416 <p>The real power in LLVM comes from the derived types in the system. 
417 This is what allows a programmer to represent arrays, functions,
418 pointers, and other useful types.  Note that these derived types may be
419 recursive: For example, it is possible to have a two dimensional array.</p>
420 </div>
421 <!-- _______________________________________________________________________ -->
422 <div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>
423 <div class="doc_text">
424 <h5>Overview:</h5>
425 <p>The array type is a very simple derived type that arranges elements
426 sequentially in memory.  The array type requires a size (number of
427 elements) and an underlying data type.</p>
428 <h5>Syntax:</h5>
429 <pre>  [&lt;# elements&gt; x &lt;elementtype&gt;]<br></pre>
430 <p>The number of elements is a constant integer value, elementtype may
431 be any type with a size.</p>
432 <h5>Examples:</h5>
433 <p> <tt>[40 x int ]</tt>: Array of 40 integer values.<br>
434 <tt>[41 x int ]</tt>: Array of 41 integer values.<br>
435 <tt>[40 x uint]</tt>: Array of 40 unsigned integer values.</p>
436 <p> </p>
437 <p>Here are some examples of multidimensional arrays:</p>
438
439 <table border="0" cellpadding="0" cellspacing="0">
440   <tbody>
441     <tr>
442       <td><tt>[3 x [4 x int]]</tt></td>
443       <td>: 3x4 array integer values.</td>
444     </tr>
445     <tr>
446       <td><tt>[12 x [10 x float]]</tt></td>
447       <td>: 12x10 array of single precision floating point values.</td>
448     </tr>
449     <tr>
450       <td><tt>[2 x [3 x [4 x uint]]]</tt></td>
451       <td>: 2x3x4 array of unsigned integer values.</td>
452     </tr>
453   </tbody>
454 </table>
455
456 </div>
457 <!-- _______________________________________________________________________ -->
458 <div class="doc_subsubsection"> <a name="t_function">Function Type</a> </div>
459 <div class="doc_text">
460 <h5>Overview:</h5>
461 <p>The function type can be thought of as a function signature.  It
462 consists of a return type and a list of formal parameter types. 
463 Function types are usually used to build virtual function tables
464 (which are structures of pointers to functions), for indirect function
465 calls, and when defining a function.</p>
466 <p>
467 The return type of a function type cannot be an aggregate type.
468 </p>
469 <h5>Syntax:</h5>
470 <pre>  &lt;returntype&gt; (&lt;parameter list&gt;)<br></pre>
471 <p>Where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of
472 type specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
473 which indicates that the function takes a variable number of arguments.
474 Variable argument functions can access their arguments with the <a
475  href="#int_varargs">variable argument handling intrinsic</a> functions.</p>
476 <h5>Examples:</h5>
477
478 <table border="0" cellpadding="0" cellspacing="0">
479   <tbody>
480     <tr>
481       <td><tt>int (int)</tt></td>
482       <td>: function taking an <tt>int</tt>, returning an <tt>int</tt></td>
483     </tr>
484     <tr>
485       <td><tt>float (int, int *) *</tt></td>
486       <td>: <a href="#t_pointer">Pointer</a> to a function that takes
487 an <tt>int</tt> and a <a href="#t_pointer">pointer</a> to <tt>int</tt>,
488 returning <tt>float</tt>.</td>
489     </tr>
490     <tr>
491       <td><tt>int (sbyte *, ...)</tt></td>
492       <td>: A vararg function that takes at least one <a
493  href="#t_pointer">pointer</a> to <tt>sbyte</tt> (signed char in C),
494 which       returns an integer.  This is the signature for <tt>printf</tt>
495 in LLVM.</td>
496     </tr>
497   </tbody>
498 </table>
499
500 </div>
501 <!-- _______________________________________________________________________ -->
502 <div class="doc_subsubsection"> <a name="t_struct">Structure Type</a> </div>
503 <div class="doc_text">
504 <h5>Overview:</h5>
505 <p>The structure type is used to represent a collection of data members
506 together in memory.  The packing of the field types is defined to match
507 the ABI of the underlying processor.  The elements of a structure may
508 be any type that has a size.</p>
509 <p>Structures are accessed using '<tt><a href="#i_load">load</a></tt>
510 and '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a
511 field with the '<tt><a href="#i_getelementptr">getelementptr</a></tt>'
512 instruction.</p>
513 <h5>Syntax:</h5>
514 <pre>  { &lt;type list&gt; }<br></pre>
515 <h5>Examples:</h5>
516
517 <table border="0" cellpadding="0" cellspacing="0">
518   <tbody>
519     <tr>
520       <td><tt>{ int, int, int }</tt></td>
521       <td>: a triple of three <tt>int</tt> values</td>
522     </tr>
523     <tr>
524       <td><tt>{ float, int (int) * }</tt></td>
525       <td>: A pair, where the first element is a <tt>float</tt> and the
526 second       element is a <a href="#t_pointer">pointer</a> to a <a
527  href="#t_function">function</a> that takes an <tt>int</tt>, returning
528 an <tt>int</tt>.</td>
529     </tr>
530   </tbody>
531 </table>
532
533 </div>
534 <!-- _______________________________________________________________________ -->
535 <div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
536 <div class="doc_text">
537 <h5>Overview:</h5>
538 <p>As in many languages, the pointer type represents a pointer or
539 reference to another object, which must live in memory.</p>
540 <h5>Syntax:</h5>
541 <pre>  &lt;type&gt; *<br></pre>
542 <h5>Examples:</h5>
543
544 <table border="0" cellpadding="0" cellspacing="0">
545   <tbody>
546     <tr>
547       <td><tt>[4x int]*</tt></td>
548       <td>: <a href="#t_pointer">pointer</a> to <a href="#t_array">array</a>
549 of four <tt>int</tt> values</td>
550     </tr>
551     <tr>
552       <td><tt>int (int *) *</tt></td>
553       <td>: A <a href="#t_pointer">pointer</a> to a <a
554  href="#t_function">function</a> that takes an <tt>int</tt>, returning
555 an <tt>int</tt>.</td>
556     </tr>
557   </tbody>
558 </table>
559
560 </div>
561 <!-- _______________________________________________________________________ --><!--
562 <div class="doc_subsubsection">
563   <a name="t_packed">Packed Type</a>
564 </div>
565
566 <div class="doc_text">
567
568 Mention/decide that packed types work with saturation or not. Maybe have a packed+saturated type in addition to just a packed type.<p>
569
570 Packed types should be 'nonsaturated' because standard data types are not saturated.  Maybe have a saturated packed type?<p>
571
572 </div>
573
574 --><!-- *********************************************************************** -->
575 <div class="doc_section"> <a name="highlevel">High Level Structure</a> </div>
576 <!-- *********************************************************************** --><!-- ======================================================================= -->
577 <div class="doc_subsection"> <a name="modulestructure">Module Structure</a> </div>
578 <div class="doc_text">
579 <p>LLVM programs are composed of "Module"s, each of which is a
580 translation unit of the input programs.  Each module consists of
581 functions, global variables, and symbol table entries.  Modules may be
582 combined together with the LLVM linker, which merges function (and
583 global variable) definitions, resolves forward declarations, and merges
584 symbol table entries. Here is an example of the "hello world" module:</p>
585 <pre><i>; Declare the string constant as a global constant...</i>
586 <a href="#identifiers">%.LC0</a> = <a href="#linkage_internal">internal</a> <a
587  href="#globalvars">constant</a> <a href="#t_array">[13 x sbyte]</a> c"hello world\0A\00"          <i>; [13 x sbyte]*</i>
588
589 <i>; External declaration of the puts function</i>
590 <a href="#functionstructure">declare</a> int %puts(sbyte*)                                            <i>; int(sbyte*)* </i>
591
592 <i>; Definition of main function</i>
593 int %main() {                                                        <i>; int()* </i>
594         <i>; Convert [13x sbyte]* to sbyte *...</i>
595         %cast210 = <a
596  href="#i_getelementptr">getelementptr</a> [13 x sbyte]* %.LC0, long 0, long 0 <i>; sbyte*</i>
597
598         <i>; Call puts function to write out the string to stdout...</i>
599         <a
600  href="#i_call">call</a> int %puts(sbyte* %cast210)                              <i>; int</i>
601         <a
602  href="#i_ret">ret</a> int 0<br>}<br></pre>
603 <p>This example is made up of a <a href="#globalvars">global variable</a>
604 named "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>"
605 function, and a <a href="#functionstructure">function definition</a>
606 for "<tt>main</tt>".</p>
607 <a name="linkage"> In general, a module is made up of a list of global
608 values, where both functions and global variables are global values. 
609 Global values are represented by a pointer to a memory location (in
610 this case, a pointer to an array of char, and a pointer to a function),
611 and have one of the following linkage types:</a>
612 <p> </p>
613 <dl>
614   <dt><tt><b><a name="linkage_internal">internal</a></b></tt> </dt>
615   <dd>Global values with internal linkage are only directly accessible
616 by objects in the current module.  In particular, linking code into a
617 module with an internal global value may cause the internal to be
618 renamed as necessary to avoid collisions.  Because the symbol is
619 internal to the module, all references can be updated.  This
620 corresponds to the notion of the '<tt>static</tt>' keyword in C, or the
621 idea of "anonymous namespaces" in C++.
622     <p> </p>
623   </dd>
624   <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt>: </dt>
625   <dd>"<tt>linkonce</tt>" linkage is similar to <tt>internal</tt>
626 linkage, with the twist that linking together two modules defining the
627 same <tt>linkonce</tt> globals will cause one of the globals to be
628 discarded.  This is typically used to implement inline functions. 
629 Unreferenced <tt>linkonce</tt> globals are allowed to be discarded.
630     <p> </p>
631   </dd>
632   <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt>
633   <dd>"<tt>weak</tt>" linkage is exactly the same as <tt>linkonce</tt>
634 linkage, except that unreferenced <tt>weak</tt> globals may not be
635 discarded.  This is used to implement constructs in C such as "<tt>int
636 X;</tt>" at global scope.
637     <p> </p>
638   </dd>
639   <dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt>
640   <dd>"<tt>appending</tt>" linkage may only be applied to global
641 variables of pointer to array type.  When two global variables with
642 appending linkage are linked together, the two global arrays are
643 appended together.  This is the LLVM, typesafe, equivalent of having
644 the system linker append together "sections" with identical names when
645 .o files are linked.
646     <p> </p>
647   </dd>
648   <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
649   <dd>If none of the above identifiers are used, the global is
650 externally visible, meaning that it participates in linkage and can be
651 used to resolve external symbol references.
652     <p> </p>
653   </dd>
654 </dl>
655 <p> </p>
656 <p><a name="linkage_external">For example, since the "<tt>.LC0</tt>"
657 variable is defined to be internal, if another module defined a "<tt>.LC0</tt>"
658 variable and was linked with this one, one of the two would be renamed,
659 preventing a collision.  Since "<tt>main</tt>" and "<tt>puts</tt>" are
660 external (i.e., lacking any linkage declarations), they are accessible
661 outside of the current module.  It is illegal for a function <i>declaration</i>
662 to have any linkage type other than "externally visible".</a></p>
663 </div>
664
665 <!-- ======================================================================= -->
666 <div class="doc_subsection">
667   <a name="globalvars">Global Variables</a>
668 </div>
669
670 <div class="doc_text">
671
672 <p>Global variables define regions of memory allocated at compilation
673 time instead of run-time.  Global variables may optionally be
674 initialized.  A variable may be defined as a global "constant", which
675 indicates that the contents of the variable will never be modified
676 (opening options for optimization).</p>
677
678 <p>As SSA values, global variables define pointer values that are in
679 scope (i.e. they dominate) for all basic blocks in the program.  Global
680 variables always define a pointer to their "content" type because they
681 describe a region of memory, and all memory objects in LLVM are
682 accessed through pointers.</p>
683
684 </div>
685
686
687 <!-- ======================================================================= -->
688 <div class="doc_subsection">
689   <a name="functionstructure">Functions</a>
690 </div>
691
692 <div class="doc_text">
693
694 <p>LLVM function definitions are composed of a (possibly empty) argument list,
695 an opening curly brace, a list of basic blocks, and a closing curly brace.  LLVM
696 function declarations are defined with the "<tt>declare</tt>" keyword, a
697 function name, and a function signature.</p>
698
699 <p>A function definition contains a list of basic blocks, forming the CFG for
700 the function.  Each basic block may optionally start with a label (giving the
701 basic block a symbol table entry), contains a list of instructions, and ends
702 with a <a href="#terminators">terminator</a> instruction (such as a branch or
703 function return).</p>
704
705 <p>The first basic block in program is special in two ways: it is immediately
706 executed on entrance to the function, and it is not allowed to have predecessor
707 basic blocks (i.e. there can not be any branches to the entry block of a
708 function).  Because the block can have no predecessors, it also cannot have any
709 <a href="#i_phi">PHI nodes</a>.</p>
710
711 <p>LLVM functions are identified by their name and type signature.  Hence, two
712 functions with the same name but different parameter lists or return values are
713 considered different functions, and LLVM will resolves references to each
714 appropriately.</p>
715
716 </div>
717
718
719 <!-- *********************************************************************** -->
720 <div class="doc_section"> <a name="instref">Instruction Reference</a> </div>
721 <!-- *********************************************************************** -->
722 <div class="doc_text">
723 <p>The LLVM instruction set consists of several different
724 classifications of instructions: <a href="#terminators">terminator
725 instructions</a>, <a href="#binaryops">binary instructions</a>, <a
726  href="#memoryops">memory instructions</a>, and <a href="#otherops">other
727 instructions</a>.</p>
728 </div>
729 <!-- ======================================================================= -->
730 <div class="doc_subsection"> <a name="terminators">Terminator
731 Instructions</a> </div>
732 <div class="doc_text">
733 <p>As mentioned <a href="#functionstructure">previously</a>, every
734 basic block in a program ends with a "Terminator" instruction, which
735 indicates which block should be executed after the current block is
736 finished. These terminator instructions typically yield a '<tt>void</tt>'
737 value: they produce control flow, not values (the one exception being
738 the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
739 <p>There are five different terminator instructions: the '<a
740  href="#i_ret"><tt>ret</tt></a>' instruction, the '<a href="#i_br"><tt>br</tt></a>'
741 instruction, the '<a href="#i_switch"><tt>switch</tt></a>' instruction,
742 the '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, and the '<a
743  href="#i_unwind"><tt>unwind</tt></a>' instruction.</p>
744 </div>
745 <!-- _______________________________________________________________________ -->
746 <div class="doc_subsubsection"> <a name="i_ret">'<tt>ret</tt>'
747 Instruction</a> </div>
748 <div class="doc_text">
749 <h5>Syntax:</h5>
750 <pre>  ret &lt;type&gt; &lt;value&gt;       <i>; Return a value from a non-void function</i>
751   ret void                 <i>; Return from void function</i>
752 </pre>
753 <h5>Overview:</h5>
754 <p>The '<tt>ret</tt>' instruction is used to return control flow (and a
755 value) from a function, back to the caller.</p>
756 <p>There are two forms of the '<tt>ret</tt>' instruction: one that
757 returns a value and then causes control flow, and one that just causes
758 control flow to occur.</p>
759 <h5>Arguments:</h5>
760 <p>The '<tt>ret</tt>' instruction may return any '<a
761  href="#t_firstclass">first class</a>' type.  Notice that a function is
762 not <a href="#wellformed">well formed</a> if there exists a '<tt>ret</tt>'
763 instruction inside of the function that returns a value that does not
764 match the return type of the function.</p>
765 <h5>Semantics:</h5>
766 <p>When the '<tt>ret</tt>' instruction is executed, control flow
767 returns back to the calling function's context.  If the caller is a "<a
768  href="#i_call"><tt>call</tt></a> instruction, execution continues at
769 the instruction after the call.  If the caller was an "<a
770  href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues
771 at the beginning "normal" of the destination block.  If the instruction
772 returns a value, that value shall set the call or invoke instruction's
773 return value.</p>
774 <h5>Example:</h5>
775 <pre>  ret int 5                       <i>; Return an integer value of 5</i>
776   ret void                        <i>; Return from a void function</i>
777 </pre>
778 </div>
779 <!-- _______________________________________________________________________ -->
780 <div class="doc_subsubsection"> <a name="i_br">'<tt>br</tt>' Instruction</a> </div>
781 <div class="doc_text">
782 <h5>Syntax:</h5>
783 <pre>  br bool &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;<br>  br label &lt;dest&gt;          <i>; Unconditional branch</i>
784 </pre>
785 <h5>Overview:</h5>
786 <p>The '<tt>br</tt>' instruction is used to cause control flow to
787 transfer to a different basic block in the current function.  There are
788 two forms of this instruction, corresponding to a conditional branch
789 and an unconditional branch.</p>
790 <h5>Arguments:</h5>
791 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a
792 single '<tt>bool</tt>' value and two '<tt>label</tt>' values.  The
793 unconditional form of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>'
794 value as a target.</p>
795 <h5>Semantics:</h5>
796 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>bool</tt>'
797 argument is evaluated.  If the value is <tt>true</tt>, control flows
798 to the '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
799 control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>
800 <h5>Example:</h5>
801 <pre>Test:<br>  %cond = <a href="#i_setcc">seteq</a> int %a, %b<br>  br bool %cond, label %IfEqual, label %IfUnequal<br>IfEqual:<br>  <a
802  href="#i_ret">ret</a> int 1<br>IfUnequal:<br>  <a href="#i_ret">ret</a> int 0<br></pre>
803 </div>
804 <!-- _______________________________________________________________________ -->
805 <div class="doc_subsubsection">
806    <a name="i_switch">'<tt>switch</tt>' Instruction</a>
807 </div>
808
809 <div class="doc_text">
810 <h5>Syntax:</h5>
811
812 <pre>
813   switch &lt;intty&gt; &lt;value&gt;, label &lt;defaultdest&gt; [ &lt;intty&gt; &lt;val&gt;, label &lt;dest&gt; ... ]
814 </pre>
815
816 <h5>Overview:</h5>
817
818 <p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of
819 several different places.  It is a generalization of the '<tt>br</tt>'
820 instruction, allowing a branch to occur to one of many possible
821 destinations.</p>
822
823
824 <h5>Arguments:</h5>
825
826 <p>The '<tt>switch</tt>' instruction uses three parameters: an integer
827 comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination, and
828 an array of pairs of comparison value constants and '<tt>label</tt>'s.  The
829 table is not allowed to contain duplicate constant entries.</p>
830
831 <h5>Semantics:</h5>
832
833 <p>The <tt>switch</tt> instruction specifies a table of values and
834 destinations. When the '<tt>switch</tt>' instruction is executed, this
835 table is searched for the given value.  If the value is found, the
836 corresponding destination is branched to, otherwise the default value
837 it transfered to.</p>
838
839 <h5>Implementation:</h5>
840
841 <p>Depending on properties of the target machine and the particular
842 <tt>switch</tt> instruction, this instruction may be code generated in different
843 ways, for example as a series of chained conditional branches, or with a lookup
844 table.</p>
845
846 <h5>Example:</h5>
847
848 <pre>
849  <i>; Emulate a conditional br instruction</i>
850  %Val = <a href="#i_cast">cast</a> bool %value to int
851  switch int %Val, label %truedest [int 0, label %falsedest ]
852
853  <i>; Emulate an unconditional br instruction</i>
854  switch uint 0, label %dest [ ]
855
856  <i>; Implement a jump table:</i>
857  switch uint %val, label %otherwise [ uint 0, label %onzero 
858                                       uint 1, label %onone 
859                                       uint 2, label %ontwo ]
860 </pre>
861 </div>
862 <!-- _______________________________________________________________________ -->
863 <div class="doc_subsubsection"> <a name="i_invoke">'<tt>invoke</tt>'
864 Instruction</a> </div>
865 <div class="doc_text">
866 <h5>Syntax:</h5>
867 <pre>  &lt;result&gt; = invoke &lt;ptr to function ty&gt; %&lt;function ptr val&gt;(&lt;function args&gt;)<br>                 to label &lt;normal label&gt; except label &lt;exception label&gt;<br></pre>
868 <h5>Overview:</h5>
869 <p>The '<tt>invoke</tt>' instruction causes control to transfer to a
870 specified function, with the possibility of control flow transfer to
871 either the '<tt>normal</tt>' <tt>label</tt> label or the '<tt>exception</tt>'<tt>label</tt>.
872 If the callee function returns with the "<tt><a href="#i_ret">ret</a></tt>"
873 instruction, control flow will return to the "normal" label.  If the
874 callee (or any indirect callees) returns with the "<a href="#i_unwind"><tt>unwind</tt></a>"
875 instruction, control is interrupted, and continued at the dynamically
876 nearest "except" label.</p>
877 <h5>Arguments:</h5>
878 <p>This instruction requires several arguments:</p>
879 <ol>
880   <li>'<tt>ptr to function ty</tt>': shall be the signature of the
881 pointer to function value being invoked.  In most cases, this is a
882 direct function invocation, but indirect <tt>invoke</tt>s are just as
883 possible, branching off an arbitrary pointer to function value. </li>
884   <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer
885 to a function to be invoked. </li>
886   <li>'<tt>function args</tt>': argument list whose types match the
887 function signature argument types.  If the function signature indicates
888 the function accepts a variable number of arguments, the extra
889 arguments can be specified. </li>
890   <li>'<tt>normal label</tt>': the label reached when the called
891 function executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li>
892   <li>'<tt>exception label</tt>': the label reached when a callee
893 returns with the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li>
894 </ol>
895 <h5>Semantics:</h5>
896 <p>This instruction is designed to operate as a standard '<tt><a
897  href="#i_call">call</a></tt>' instruction in most regards.  The
898 primary difference is that it establishes an association with a label,
899 which is used by the runtime library to unwind the stack.</p>
900 <p>This instruction is used in languages with destructors to ensure
901 that proper cleanup is performed in the case of either a <tt>longjmp</tt>
902 or a thrown exception.  Additionally, this is important for
903 implementation of '<tt>catch</tt>' clauses in high-level languages that
904 support them.</p>
905 <h5>Example:</h5>
906 <pre>  %retval = invoke int %Test(int 15)<br>              to label %Continue<br>              except label %TestCleanup     <i>; {int}:retval set</i>
907 </pre>
908 </div>
909 <!-- _______________________________________________________________________ -->
910 <div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
911 Instruction</a> </div>
912 <div class="doc_text">
913 <h5>Syntax:</h5>
914 <pre>  unwind<br></pre>
915 <h5>Overview:</h5>
916 <p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing
917 control flow at the first callee in the dynamic call stack which used
918 an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the
919 call.  This is primarily used to implement exception handling.</p>
920 <h5>Semantics:</h5>
921 <p>The '<tt>unwind</tt>' intrinsic causes execution of the current
922 function to immediately halt.  The dynamic call stack is then searched
923 for the first <a href="#i_invoke"><tt>invoke</tt></a> instruction on
924 the call stack.  Once found, execution continues at the "exceptional"
925 destination block specified by the <tt>invoke</tt> instruction.  If
926 there is no <tt>invoke</tt> instruction in the dynamic call chain,
927 undefined behavior results.</p>
928 </div>
929 <!-- ======================================================================= -->
930 <div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>
931 <div class="doc_text">
932 <p>Binary operators are used to do most of the computation in a
933 program.  They require two operands, execute an operation on them, and
934 produce a single value. The result value of a binary operator is not
935 necessarily the same type as its operands.</p>
936 <p>There are several different binary operators:</p>
937 </div>
938 <!-- _______________________________________________________________________ -->
939 <div class="doc_subsubsection"> <a name="i_add">'<tt>add</tt>'
940 Instruction</a> </div>
941 <div class="doc_text">
942 <h5>Syntax:</h5>
943 <pre>  &lt;result&gt; = add &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
944 </pre>
945 <h5>Overview:</h5>
946 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
947 <h5>Arguments:</h5>
948 <p>The two arguments to the '<tt>add</tt>' instruction must be either <a
949  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
950 values. Both arguments must have identical types.</p>
951 <h5>Semantics:</h5>
952 <p>The value produced is the integer or floating point sum of the two
953 operands.</p>
954 <h5>Example:</h5>
955 <pre>  &lt;result&gt; = add int 4, %var          <i>; yields {int}:result = 4 + %var</i>
956 </pre>
957 </div>
958 <!-- _______________________________________________________________________ -->
959 <div class="doc_subsubsection"> <a name="i_sub">'<tt>sub</tt>'
960 Instruction</a> </div>
961 <div class="doc_text">
962 <h5>Syntax:</h5>
963 <pre>  &lt;result&gt; = sub &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
964 </pre>
965 <h5>Overview:</h5>
966 <p>The '<tt>sub</tt>' instruction returns the difference of its two
967 operands.</p>
968 <p>Note that the '<tt>sub</tt>' instruction is used to represent the '<tt>neg</tt>'
969 instruction present in most other intermediate representations.</p>
970 <h5>Arguments:</h5>
971 <p>The two arguments to the '<tt>sub</tt>' instruction must be either <a
972  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
973 values. Both arguments must have identical types.</p>
974 <h5>Semantics:</h5>
975 <p>The value produced is the integer or floating point difference of
976 the two operands.</p>
977 <h5>Example:</h5>
978 <pre>  &lt;result&gt; = sub int 4, %var          <i>; yields {int}:result = 4 - %var</i>
979   &lt;result&gt; = sub int 0, %val          <i>; yields {int}:result = -%var</i>
980 </pre>
981 </div>
982 <!-- _______________________________________________________________________ -->
983 <div class="doc_subsubsection"> <a name="i_mul">'<tt>mul</tt>'
984 Instruction</a> </div>
985 <div class="doc_text">
986 <h5>Syntax:</h5>
987 <pre>  &lt;result&gt; = mul &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
988 </pre>
989 <h5>Overview:</h5>
990 <p>The  '<tt>mul</tt>' instruction returns the product of its two
991 operands.</p>
992 <h5>Arguments:</h5>
993 <p>The two arguments to the '<tt>mul</tt>' instruction must be either <a
994  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
995 values. Both arguments must have identical types.</p>
996 <h5>Semantics:</h5>
997 <p>The value produced is the integer or floating point product of the
998 two operands.</p>
999 <p>There is no signed vs unsigned multiplication.  The appropriate
1000 action is taken based on the type of the operand.</p>
1001 <h5>Example:</h5>
1002 <pre>  &lt;result&gt; = mul int 4, %var          <i>; yields {int}:result = 4 * %var</i>
1003 </pre>
1004 </div>
1005 <!-- _______________________________________________________________________ -->
1006 <div class="doc_subsubsection"> <a name="i_div">'<tt>div</tt>'
1007 Instruction</a> </div>
1008 <div class="doc_text">
1009 <h5>Syntax:</h5>
1010 <pre>  &lt;result&gt; = div &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
1011 </pre>
1012 <h5>Overview:</h5>
1013 <p>The '<tt>div</tt>' instruction returns the quotient of its two
1014 operands.</p>
1015 <h5>Arguments:</h5>
1016 <p>The two arguments to the '<tt>div</tt>' instruction must be either <a
1017  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
1018 values. Both arguments must have identical types.</p>
1019 <h5>Semantics:</h5>
1020 <p>The value produced is the integer or floating point quotient of the
1021 two operands.</p>
1022 <h5>Example:</h5>
1023 <pre>  &lt;result&gt; = div int 4, %var          <i>; yields {int}:result = 4 / %var</i>
1024 </pre>
1025 </div>
1026 <!-- _______________________________________________________________________ -->
1027 <div class="doc_subsubsection"> <a name="i_rem">'<tt>rem</tt>'
1028 Instruction</a> </div>
1029 <div class="doc_text">
1030 <h5>Syntax:</h5>
1031 <pre>  &lt;result&gt; = rem &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
1032 </pre>
1033 <h5>Overview:</h5>
1034 <p>The '<tt>rem</tt>' instruction returns the remainder from the
1035 division of its two operands.</p>
1036 <h5>Arguments:</h5>
1037 <p>The two arguments to the '<tt>rem</tt>' instruction must be either <a
1038  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
1039 values. Both arguments must have identical types.</p>
1040 <h5>Semantics:</h5>
1041 <p>This returns the <i>remainder</i> of a division (where the result
1042 has the same sign as the divisor), not the <i>modulus</i> (where the
1043 result has the same sign as the dividend) of a value.  For more
1044 information about the difference, see: <a
1045  href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
1046 Math Forum</a>.</p>
1047 <h5>Example:</h5>
1048 <pre>  &lt;result&gt; = rem int 4, %var          <i>; yields {int}:result = 4 % %var</i>
1049 </pre>
1050 </div>
1051 <!-- _______________________________________________________________________ -->
1052 <div class="doc_subsubsection"> <a name="i_setcc">'<tt>set<i>cc</i></tt>'
1053 Instructions</a> </div>
1054 <div class="doc_text">
1055 <h5>Syntax:</h5>
1056 <pre>  &lt;result&gt; = seteq &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1057   &lt;result&gt; = setne &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1058   &lt;result&gt; = setlt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1059   &lt;result&gt; = setgt &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1060   &lt;result&gt; = setle &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1061   &lt;result&gt; = setge &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {bool}:result</i>
1062 </pre>
1063 <h5>Overview:</h5>
1064 <p>The '<tt>set<i>cc</i></tt>' family of instructions returns a boolean
1065 value based on a comparison of their two operands.</p>
1066 <h5>Arguments:</h5>
1067 <p>The two arguments to the '<tt>set<i>cc</i></tt>' instructions must
1068 be of <a href="#t_firstclass">first class</a> type (it is not possible
1069 to compare '<tt>label</tt>'s, '<tt>array</tt>'s, '<tt>structure</tt>'
1070 or '<tt>void</tt>' values, etc...).  Both arguments must have identical
1071 types.</p>
1072 <h5>Semantics:</h5>
1073 <p>The '<tt>seteq</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1074 value if both operands are equal.<br>
1075 The '<tt>setne</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1076 value if both operands are unequal.<br>
1077 The '<tt>setlt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1078 value if the first operand is less than the second operand.<br>
1079 The '<tt>setgt</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1080 value if the first operand is greater than the second operand.<br>
1081 The '<tt>setle</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1082 value if the first operand is less than or equal to the second operand.<br>
1083 The '<tt>setge</tt>' instruction yields a <tt>true</tt> '<tt>bool</tt>'
1084 value if the first operand is greater than or equal to the second
1085 operand.</p>
1086 <h5>Example:</h5>
1087 <pre>  &lt;result&gt; = seteq int   4, 5        <i>; yields {bool}:result = false</i>
1088   &lt;result&gt; = setne float 4, 5        <i>; yields {bool}:result = true</i>
1089   &lt;result&gt; = setlt uint  4, 5        <i>; yields {bool}:result = true</i>
1090   &lt;result&gt; = setgt sbyte 4, 5        <i>; yields {bool}:result = false</i>
1091   &lt;result&gt; = setle sbyte 4, 5        <i>; yields {bool}:result = true</i>
1092   &lt;result&gt; = setge sbyte 4, 5        <i>; yields {bool}:result = false</i>
1093 </pre>
1094 </div>
1095 <!-- ======================================================================= -->
1096 <div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
1097 Operations</a> </div>
1098 <div class="doc_text">
1099 <p>Bitwise binary operators are used to do various forms of
1100 bit-twiddling in a program.  They are generally very efficient
1101 instructions, and can commonly be strength reduced from other
1102 instructions.  They require two operands, execute an operation on them,
1103 and produce a single value.  The resulting value of the bitwise binary
1104 operators is always the same type as its first operand.</p>
1105 </div>
1106 <!-- _______________________________________________________________________ -->
1107 <div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
1108 Instruction</a> </div>
1109 <div class="doc_text">
1110 <h5>Syntax:</h5>
1111 <pre>  &lt;result&gt; = and &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
1112 </pre>
1113 <h5>Overview:</h5>
1114 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of
1115 its two operands.</p>
1116 <h5>Arguments:</h5>
1117 <p>The two arguments to the '<tt>and</tt>' instruction must be <a
1118  href="#t_integral">integral</a> values.  Both arguments must have
1119 identical types.</p>
1120 <h5>Semantics:</h5>
1121 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
1122 <p> </p>
1123 <div style="align: center">
1124 <table border="1" cellspacing="0" cellpadding="4">
1125   <tbody>
1126     <tr>
1127       <td>In0</td>
1128       <td>In1</td>
1129       <td>Out</td>
1130     </tr>
1131     <tr>
1132       <td>0</td>
1133       <td>0</td>
1134       <td>0</td>
1135     </tr>
1136     <tr>
1137       <td>0</td>
1138       <td>1</td>
1139       <td>0</td>
1140     </tr>
1141     <tr>
1142       <td>1</td>
1143       <td>0</td>
1144       <td>0</td>
1145     </tr>
1146     <tr>
1147       <td>1</td>
1148       <td>1</td>
1149       <td>1</td>
1150     </tr>
1151   </tbody>
1152 </table>
1153 </div>
1154 <h5>Example:</h5>
1155 <pre>  &lt;result&gt; = and int 4, %var         <i>; yields {int}:result = 4 &amp; %var</i>
1156   &lt;result&gt; = and int 15, 40          <i>; yields {int}:result = 8</i>
1157   &lt;result&gt; = and int 4, 8            <i>; yields {int}:result = 0</i>
1158 </pre>
1159 </div>
1160 <!-- _______________________________________________________________________ -->
1161 <div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>
1162 <div class="doc_text">
1163 <h5>Syntax:</h5>
1164 <pre>  &lt;result&gt; = or &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
1165 </pre>
1166 <h5>Overview:</h5>
1167 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive
1168 or of its two operands.</p>
1169 <h5>Arguments:</h5>
1170 <p>The two arguments to the '<tt>or</tt>' instruction must be <a
1171  href="#t_integral">integral</a> values.  Both arguments must have
1172 identical types.</p>
1173 <h5>Semantics:</h5>
1174 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
1175 <p> </p>
1176 <div style="align: center">
1177 <table border="1" cellspacing="0" cellpadding="4">
1178   <tbody>
1179     <tr>
1180       <td>In0</td>
1181       <td>In1</td>
1182       <td>Out</td>
1183     </tr>
1184     <tr>
1185       <td>0</td>
1186       <td>0</td>
1187       <td>0</td>
1188     </tr>
1189     <tr>
1190       <td>0</td>
1191       <td>1</td>
1192       <td>1</td>
1193     </tr>
1194     <tr>
1195       <td>1</td>
1196       <td>0</td>
1197       <td>1</td>
1198     </tr>
1199     <tr>
1200       <td>1</td>
1201       <td>1</td>
1202       <td>1</td>
1203     </tr>
1204   </tbody>
1205 </table>
1206 </div>
1207 <h5>Example:</h5>
1208 <pre>  &lt;result&gt; = or int 4, %var         <i>; yields {int}:result = 4 | %var</i>
1209   &lt;result&gt; = or int 15, 40          <i>; yields {int}:result = 47</i>
1210   &lt;result&gt; = or int 4, 8            <i>; yields {int}:result = 12</i>
1211 </pre>
1212 </div>
1213 <!-- _______________________________________________________________________ -->
1214 <div class="doc_subsubsection"> <a name="i_xor">'<tt>xor</tt>'
1215 Instruction</a> </div>
1216 <div class="doc_text">
1217 <h5>Syntax:</h5>
1218 <pre>  &lt;result&gt; = xor &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
1219 </pre>
1220 <h5>Overview:</h5>
1221 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive
1222 or of its two operands.  The <tt>xor</tt> is used to implement the
1223 "one's complement" operation, which is the "~" operator in C.</p>
1224 <h5>Arguments:</h5>
1225 <p>The two arguments to the '<tt>xor</tt>' instruction must be <a
1226  href="#t_integral">integral</a> values.  Both arguments must have
1227 identical types.</p>
1228 <h5>Semantics:</h5>
1229 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
1230 <p> </p>
1231 <div style="align: center">
1232 <table border="1" cellspacing="0" cellpadding="4">
1233   <tbody>
1234     <tr>
1235       <td>In0</td>
1236       <td>In1</td>
1237       <td>Out</td>
1238     </tr>
1239     <tr>
1240       <td>0</td>
1241       <td>0</td>
1242       <td>0</td>
1243     </tr>
1244     <tr>
1245       <td>0</td>
1246       <td>1</td>
1247       <td>1</td>
1248     </tr>
1249     <tr>
1250       <td>1</td>
1251       <td>0</td>
1252       <td>1</td>
1253     </tr>
1254     <tr>
1255       <td>1</td>
1256       <td>1</td>
1257       <td>0</td>
1258     </tr>
1259   </tbody>
1260 </table>
1261 </div>
1262 <p> </p>
1263 <h5>Example:</h5>
1264 <pre>  &lt;result&gt; = xor int 4, %var         <i>; yields {int}:result = 4 ^ %var</i>
1265   &lt;result&gt; = xor int 15, 40          <i>; yields {int}:result = 39</i>
1266   &lt;result&gt; = xor int 4, 8            <i>; yields {int}:result = 12</i>
1267   &lt;result&gt; = xor int %V, -1          <i>; yields {int}:result = ~%V</i>
1268 </pre>
1269 </div>
1270 <!-- _______________________________________________________________________ -->
1271 <div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
1272 Instruction</a> </div>
1273 <div class="doc_text">
1274 <h5>Syntax:</h5>
1275 <pre>  &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
1276 </pre>
1277 <h5>Overview:</h5>
1278 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to
1279 the left a specified number of bits.</p>
1280 <h5>Arguments:</h5>
1281 <p>The first argument to the '<tt>shl</tt>' instruction must be an <a
1282  href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
1283 type.</p>
1284 <h5>Semantics:</h5>
1285 <p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
1286 <h5>Example:</h5>
1287 <pre>  &lt;result&gt; = shl int 4, ubyte %var   <i>; yields {int}:result = 4 &lt;&lt; %var</i>
1288   &lt;result&gt; = shl int 4, ubyte 2      <i>; yields {int}:result = 16</i>
1289   &lt;result&gt; = shl int 1, ubyte 10     <i>; yields {int}:result = 1024</i>
1290 </pre>
1291 </div>
1292 <!-- _______________________________________________________________________ -->
1293 <div class="doc_subsubsection"> <a name="i_shr">'<tt>shr</tt>'
1294 Instruction</a> </div>
1295 <div class="doc_text">
1296 <h5>Syntax:</h5>
1297 <pre>  &lt;result&gt; = shr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
1298 </pre>
1299 <h5>Overview:</h5>
1300 <p>The '<tt>shr</tt>' instruction returns the first operand shifted to
1301 the right a specified number of bits.</p>
1302 <h5>Arguments:</h5>
1303 <p>The first argument to the '<tt>shr</tt>' instruction must be an <a
1304  href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
1305 type.</p>
1306 <h5>Semantics:</h5>
1307 <p>If the first argument is a <a href="#t_signed">signed</a> type, the
1308 most significant bit is duplicated in the newly free'd bit positions. 
1309 If the first argument is unsigned, zero bits shall fill the empty
1310 positions.</p>
1311 <h5>Example:</h5>
1312 <pre>  &lt;result&gt; = shr int 4, ubyte %var   <i>; yields {int}:result = 4 &gt;&gt; %var</i>
1313   &lt;result&gt; = shr uint 4, ubyte 1     <i>; yields {uint}:result = 2</i>
1314   &lt;result&gt; = shr int 4, ubyte 2      <i>; yields {int}:result = 1</i>
1315   &lt;result&gt; = shr sbyte 4, ubyte 3    <i>; yields {sbyte}:result = 0</i>
1316   &lt;result&gt; = shr sbyte -2, ubyte 1   <i>; yields {sbyte}:result = -1</i>
1317 </pre>
1318 </div>
1319 <!-- ======================================================================= -->
1320 <div class="doc_subsection"> <a name="memoryops">Memory Access
1321 Operations</a></div>
1322 <div class="doc_text">
1323 <p>A key design point of an SSA-based representation is how it
1324 represents memory.  In LLVM, no memory locations are in SSA form, which
1325 makes things very simple.  This section describes how to read, write,
1326 allocate and free memory in LLVM.</p>
1327 </div>
1328 <!-- _______________________________________________________________________ -->
1329 <div class="doc_subsubsection"> <a name="i_malloc">'<tt>malloc</tt>'
1330 Instruction</a> </div>
1331 <div class="doc_text">
1332 <h5>Syntax:</h5>
1333 <pre>  &lt;result&gt; = malloc &lt;type&gt;, uint &lt;NumElements&gt;     <i>; yields {type*}:result</i>
1334   &lt;result&gt; = malloc &lt;type&gt;                         <i>; yields {type*}:result</i>
1335 </pre>
1336 <h5>Overview:</h5>
1337 <p>The '<tt>malloc</tt>' instruction allocates memory from the system
1338 heap and returns a pointer to it.</p>
1339 <h5>Arguments:</h5>
1340 <p>The '<tt>malloc</tt>' instruction allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt>
1341 bytes of memory from the operating system and returns a pointer of the
1342 appropriate type to the program.  The second form of the instruction is
1343 a shorter version of the first instruction that defaults to allocating
1344 one element.</p>
1345 <p>'<tt>type</tt>' must be a sized type.</p>
1346 <h5>Semantics:</h5>
1347 <p>Memory is allocated using the system "<tt>malloc</tt>" function, and
1348 a pointer is returned.</p>
1349 <h5>Example:</h5>
1350 <pre>  %array  = malloc [4 x ubyte ]                    <i>; yields {[%4 x ubyte]*}:array</i>
1351
1352   %size   = <a
1353  href="#i_add">add</a> uint 2, 2                          <i>; yields {uint}:size = uint 4</i>
1354   %array1 = malloc ubyte, uint 4                   <i>; yields {ubyte*}:array1</i>
1355   %array2 = malloc [12 x ubyte], uint %size        <i>; yields {[12 x ubyte]*}:array2</i>
1356 </pre>
1357 </div>
1358 <!-- _______________________________________________________________________ -->
1359 <div class="doc_subsubsection"> <a name="i_free">'<tt>free</tt>'
1360 Instruction</a> </div>
1361 <div class="doc_text">
1362 <h5>Syntax:</h5>
1363 <pre>  free &lt;type&gt; &lt;value&gt;                              <i>; yields {void}</i>
1364 </pre>
1365 <h5>Overview:</h5>
1366 <p>The '<tt>free</tt>' instruction returns memory back to the unused
1367 memory heap, to be reallocated in the future.</p>
1368 <p> </p>
1369 <h5>Arguments:</h5>
1370 <p>'<tt>value</tt>' shall be a pointer value that points to a value
1371 that was allocated with the '<tt><a href="#i_malloc">malloc</a></tt>'
1372 instruction.</p>
1373 <h5>Semantics:</h5>
1374 <p>Access to the memory pointed to by the pointer is not longer defined
1375 after this instruction executes.</p>
1376 <h5>Example:</h5>
1377 <pre>  %array  = <a href="#i_malloc">malloc</a> [4 x ubyte]                    <i>; yields {[4 x ubyte]*}:array</i>
1378             free   [4 x ubyte]* %array
1379 </pre>
1380 </div>
1381 <!-- _______________________________________________________________________ -->
1382 <div class="doc_subsubsection"> <a name="i_alloca">'<tt>alloca</tt>'
1383 Instruction</a> </div>
1384 <div class="doc_text">
1385 <h5>Syntax:</h5>
1386 <pre>  &lt;result&gt; = alloca &lt;type&gt;, uint &lt;NumElements&gt;  <i>; yields {type*}:result</i>
1387   &lt;result&gt; = alloca &lt;type&gt;                      <i>; yields {type*}:result</i>
1388 </pre>
1389 <h5>Overview:</h5>
1390 <p>The '<tt>alloca</tt>' instruction allocates memory on the current
1391 stack frame of the procedure that is live until the current function
1392 returns to its caller.</p>
1393 <h5>Arguments:</h5>
1394 <p>The the '<tt>alloca</tt>' instruction allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt>
1395 bytes of memory on the runtime stack, returning a pointer of the
1396 appropriate type to the program.  The second form of the instruction is
1397 a shorter version of the first that defaults to allocating one element.</p>
1398 <p>'<tt>type</tt>' may be any sized type.</p>
1399 <h5>Semantics:</h5>
1400 <p>Memory is allocated, a pointer is returned.  '<tt>alloca</tt>'d
1401 memory is automatically released when the function returns.  The '<tt>alloca</tt>'
1402 instruction is commonly used to represent automatic variables that must
1403 have an address available.  When the function returns (either with the <tt><a
1404  href="#i_ret">ret</a></tt> or <tt><a href="#i_invoke">invoke</a></tt>
1405 instructions), the memory is reclaimed.</p>
1406 <h5>Example:</h5>
1407 <pre>  %ptr = alloca int                              <i>; yields {int*}:ptr</i>
1408   %ptr = alloca int, uint 4                      <i>; yields {int*}:ptr</i>
1409 </pre>
1410 </div>
1411 <!-- _______________________________________________________________________ -->
1412 <div class="doc_subsubsection"> <a name="i_load">'<tt>load</tt>'
1413 Instruction</a> </div>
1414 <div class="doc_text">
1415 <h5>Syntax:</h5>
1416 <pre>  &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;<br>  &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;<br></pre>
1417 <h5>Overview:</h5>
1418 <p>The '<tt>load</tt>' instruction is used to read from memory.</p>
1419 <h5>Arguments:</h5>
1420 <p>The argument to the '<tt>load</tt>' instruction specifies the memory
1421 address to load from.  The pointer must point to a <a
1422  href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
1423 marked as <tt>volatile</tt> then the optimizer is not allowed to modify
1424 the number or order of execution of this <tt>load</tt> with other
1425 volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
1426 instructions. </p>
1427 <h5>Semantics:</h5>
1428 <p>The location of memory pointed to is loaded.</p>
1429 <h5>Examples:</h5>
1430 <pre>  %ptr = <a href="#i_alloca">alloca</a> int                               <i>; yields {int*}:ptr</i>
1431   <a
1432  href="#i_store">store</a> int 3, int* %ptr                          <i>; yields {void}</i>
1433   %val = load int* %ptr                           <i>; yields {int}:val = int 3</i>
1434 </pre>
1435 </div>
1436 <!-- _______________________________________________________________________ -->
1437 <div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
1438 Instruction</a> </div>
1439 <h5>Syntax:</h5>
1440 <pre>  store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;                   <i>; yields {void}</i>
1441   volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;                   <i>; yields {void}</i>
1442 </pre>
1443 <h5>Overview:</h5>
1444 <p>The '<tt>store</tt>' instruction is used to write to memory.</p>
1445 <h5>Arguments:</h5>
1446 <p>There are two arguments to the '<tt>store</tt>' instruction: a value
1447 to store and an address to store it into.  The type of the '<tt>&lt;pointer&gt;</tt>'
1448 operand must be a pointer to the type of the '<tt>&lt;value&gt;</tt>'
1449 operand. If the <tt>store</tt> is marked as <tt>volatile</tt> then the
1450 optimizer is not allowed to modify the number or order of execution of
1451 this <tt>store</tt> with other volatile <tt>load</tt> and <tt><a
1452  href="#i_store">store</a></tt> instructions.</p>
1453 <h5>Semantics:</h5>
1454 <p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>'
1455 at the location specified by the '<tt>&lt;pointer&gt;</tt>' operand.</p>
1456 <h5>Example:</h5>
1457 <pre>  %ptr = <a href="#i_alloca">alloca</a> int                               <i>; yields {int*}:ptr</i>
1458   <a
1459  href="#i_store">store</a> int 3, int* %ptr                          <i>; yields {void}</i>
1460   %val = load int* %ptr                           <i>; yields {int}:val = int 3</i>
1461 </pre>
1462 <!-- _______________________________________________________________________ -->
1463 <div class="doc_subsubsection">
1464    <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
1465 </div>
1466
1467 <div class="doc_text">
1468 <h5>Syntax:</h5>
1469 <pre>
1470   &lt;result&gt; = getelementptr &lt;ty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
1471 </pre>
1472
1473 <h5>Overview:</h5>
1474
1475 <p>
1476 The '<tt>getelementptr</tt>' instruction is used to get the address of a
1477 subelement of an aggregate data structure.</p>
1478
1479 <h5>Arguments:</h5>
1480
1481 <p>This instruction takes a list of integer constants that indicate what
1482 elements of the aggregate object to index to.  The actual types of the arguments
1483 provided depend on the type of the first pointer argument.  The
1484 '<tt>getelementptr</tt>' instruction is used to index down through the type
1485 levels of a structure.  When indexing into a structure, only <tt>uint</tt>
1486 integer constants are allowed.  When indexing into an array or pointer
1487 <tt>int</tt> and <tt>long</tt> indexes are allowed of any sign.</p>
1488
1489 <p>For example, let's consider a C code fragment and how it gets
1490 compiled to LLVM:</p>
1491
1492 <pre>
1493   struct RT {
1494     char A;
1495     int B[10][20];
1496     char C;
1497   };
1498   struct ST {
1499     int X;
1500     double Y;
1501     struct RT Z;
1502   };
1503
1504   int *foo(struct ST *s) {
1505     return &amp;s[1].Z.B[5][13];
1506   }
1507 </pre>
1508
1509 <p>The LLVM code generated by the GCC frontend is:</p>
1510
1511 <pre>
1512   %RT = type { sbyte, [10 x [20 x int]], sbyte }
1513   %ST = type { int, double, %RT }
1514
1515   int* "foo"(%ST* %s) {
1516     %reg = getelementptr %ST* %s, int 1, uint 2, uint 1, int 5, int 13<br>
1517     ret int* %reg
1518   }
1519 </pre>
1520
1521 <h5>Semantics:</h5>
1522
1523 <p>The index types specified for the '<tt>getelementptr</tt>' instruction depend
1524 on the pointer type that is being index into. <a href="#t_pointer">Pointer</a>
1525 and <a href="#t_array">array</a> types require <tt>uint</tt>, <tt>int</tt>,
1526 <tt>ulong</tt>, or <tt>long</tt> values, and <a href="#t_struct">structure</a>
1527 types require <tt>uint</tt> <b>constants</b>.</p>
1528
1529 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
1530 type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ int, double, %RT
1531 }</tt>' type, a structure.  The second index indexes into the third element of
1532 the structure, yielding a '<tt>%RT</tt>' = '<tt>{ sbyte, [10 x [20 x int]],
1533 sbyte }</tt>' type, another structure.  The third index indexes into the second
1534 element of the structure, yielding a '<tt>[10 x [20 x int]]</tt>' type, an
1535 array.  The two dimensions of the array are subscripted into, yielding an
1536 '<tt>int</tt>' type.  The '<tt>getelementptr</tt>' instruction return a pointer
1537 to this element, thus computing a value of '<tt>int*</tt>' type.</p>
1538
1539 <p>Note that it is perfectly legal to index partially through a
1540 structure, returning a pointer to an inner element.  Because of this,
1541 the LLVM code for the given testcase is equivalent to:</p>
1542
1543 <pre>
1544   int* "foo"(%ST* %s) {
1545     %t1 = getelementptr %ST* %s, int 1                        <i>; yields %ST*:%t1</i>
1546     %t2 = getelementptr %ST* %t1, int 0, uint 2               <i>; yields %RT*:%t2</i>
1547     %t3 = getelementptr %RT* %t2, int 0, uint 1               <i>; yields [10 x [20 x int]]*:%t3</i>
1548     %t4 = getelementptr [10 x [20 x int]]* %t3, int 0, int 5  <i>; yields [20 x int]*:%t4</i>
1549     %t5 = getelementptr [20 x int]* %t4, int 0, int 13        <i>; yields int*:%t5</i>
1550     ret int* %t5
1551   }
1552 </pre>
1553 <h5>Example:</h5>
1554 <pre>
1555     <i>; yields [12 x ubyte]*:aptr</i>
1556     %aptr = getelementptr {int, [12 x ubyte]}* %sptr, long 0, uint 1
1557 </pre>
1558
1559 </div>
1560 <!-- ======================================================================= -->
1561 <div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>
1562 <div class="doc_text">
1563 <p>The instructions in this category are the "miscellaneous"
1564 instructions, which defy better classification.</p>
1565 </div>
1566 <!-- _______________________________________________________________________ -->
1567 <div class="doc_subsubsection"> <a name="i_phi">'<tt>phi</tt>'
1568 Instruction</a> </div>
1569 <div class="doc_text">
1570 <h5>Syntax:</h5>
1571 <pre>  &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...<br></pre>
1572 <h5>Overview:</h5>
1573 <p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in
1574 the SSA graph representing the function.</p>
1575 <h5>Arguments:</h5>
1576 <p>The type of the incoming values are specified with the first type
1577 field. After this, the '<tt>phi</tt>' instruction takes a list of pairs
1578 as arguments, with one pair for each predecessor basic block of the
1579 current block.  Only values of <a href="#t_firstclass">first class</a>
1580 type may be used as the value arguments to the PHI node.  Only labels
1581 may be used as the label arguments.</p>
1582 <p>There must be no non-phi instructions between the start of a basic
1583 block and the PHI instructions: i.e. PHI instructions must be first in
1584 a basic block.</p>
1585 <h5>Semantics:</h5>
1586 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the
1587 value specified by the parameter, depending on which basic block we
1588 came from in the last <a href="#terminators">terminator</a> instruction.</p>
1589 <h5>Example:</h5>
1590 <pre>Loop:       ; Infinite loop that counts from 0 on up...<br>  %indvar = phi uint [ 0, %LoopHeader ], [ %nextindvar, %Loop ]<br>  %nextindvar = add uint %indvar, 1<br>  br label %Loop<br></pre>
1591 </div>
1592
1593 <!-- _______________________________________________________________________ -->
1594 <div class="doc_subsubsection">
1595    <a name="i_cast">'<tt>cast .. to</tt>' Instruction</a>
1596 </div>
1597
1598 <div class="doc_text">
1599
1600 <h5>Syntax:</h5>
1601
1602 <pre>
1603   &lt;result&gt; = cast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
1604 </pre>
1605
1606 <h5>Overview:</h5>
1607
1608 <p>
1609 The '<tt>cast</tt>' instruction is used as the primitive means to convert
1610 integers to floating point, change data type sizes, and break type safety (by
1611 casting pointers).
1612 </p>
1613
1614
1615 <h5>Arguments:</h5>
1616
1617 <p>
1618 The '<tt>cast</tt>' instruction takes a value to cast, which must be a first
1619 class value, and a type to cast it to, which must also be a <a
1620 href="#t_firstclass">first class</a> type.
1621 </p>
1622
1623 <h5>Semantics:</h5>
1624
1625 <p>
1626 This instruction follows the C rules for explicit casts when determining how the
1627 data being cast must change to fit in its new container.
1628 </p>
1629
1630 <p>
1631 When casting to bool, any value that would be considered true in the context of
1632 a C '<tt>if</tt>' condition is converted to the boolean '<tt>true</tt>' values,
1633 all else are '<tt>false</tt>'.
1634 </p>
1635
1636 <p>
1637 When extending an integral value from a type of one signness to another (for
1638 example '<tt>sbyte</tt>' to '<tt>ulong</tt>'), the value is sign-extended if the
1639 <b>source</b> value is signed, and zero-extended if the source value is
1640 unsigned. <tt>bool</tt> values are always zero extended into either zero or
1641 one.
1642 </p>
1643
1644 <h5>Example:</h5>
1645
1646 <pre>
1647   %X = cast int 257 to ubyte              <i>; yields ubyte:1</i>
1648   %Y = cast int 123 to bool               <i>; yields bool:true</i>
1649 </pre>
1650 </div>
1651
1652 <!-- _______________________________________________________________________ -->
1653 <div class="doc_subsubsection">
1654    <a name="i_select">'<tt>select</tt>' Instruction</a>
1655 </div>
1656
1657 <div class="doc_text">
1658
1659 <h5>Syntax:</h5>
1660
1661 <pre>
1662   &lt;result&gt; = select bool &lt;cond&gt;, &lt;ty&gt; &lt;val1&gt;, &lt;ty&gt; &lt;val2&gt;             <i>; yields ty</i>
1663 </pre>
1664
1665 <h5>Overview:</h5>
1666
1667 <p>
1668 The '<tt>select</tt>' instruction is used to choose one value based on a
1669 condition, without branching.
1670 </p>
1671
1672
1673 <h5>Arguments:</h5>
1674
1675 <p>
1676 The '<tt>select</tt>' instruction requires a boolean value indicating the condition, and two values of the same <a href="#t_firstclass">first class</a> type.
1677 </p>
1678
1679 <h5>Semantics:</h5>
1680
1681 <p>
1682 If the boolean condition evaluates to true, the instruction returns the first
1683 value argument, otherwise it returns the second value argument.
1684 </p>
1685
1686 <h5>Example:</h5>
1687
1688 <pre>
1689   %X = select bool true, ubyte 17, ubyte 42          <i>; yields ubyte:17</i>
1690 </pre>
1691 </div>
1692
1693
1694
1695
1696
1697 <!-- _______________________________________________________________________ -->
1698 <div class="doc_subsubsection"> <a name="i_call">'<tt>call</tt>'
1699 Instruction</a> </div>
1700 <div class="doc_text">
1701 <h5>Syntax:</h5>
1702 <pre>  &lt;result&gt; = call &lt;ty&gt;* &lt;fnptrval&gt;(&lt;param list&gt;)<br></pre>
1703 <h5>Overview:</h5>
1704 <p>The '<tt>call</tt>' instruction represents a simple function call.</p>
1705 <h5>Arguments:</h5>
1706 <p>This instruction requires several arguments:</p>
1707 <ol>
1708   <li>
1709     <p>'<tt>ty</tt>': shall be the signature of the pointer to function
1710 value   being invoked.  The argument types must match the types implied
1711 by this   signature.</p>
1712   </li>
1713   <li>
1714     <p>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a
1715 function   to be invoked. In most cases, this is a direct function
1716 invocation, but   indirect <tt>call</tt>s are just as possible,
1717 calling an arbitrary pointer to   function values.</p>
1718   </li>
1719   <li>
1720     <p>'<tt>function args</tt>': argument list whose types match the
1721 function   signature argument types.  If the function signature
1722 indicates the function   accepts a variable number of arguments, the
1723 extra arguments can be   specified.</p>
1724   </li>
1725 </ol>
1726 <h5>Semantics:</h5>
1727 <p>The '<tt>call</tt>' instruction is used to cause control flow to
1728 transfer to a specified function, with its incoming arguments bound to
1729 the specified values. Upon a '<tt><a href="#i_ret">ret</a></tt>'
1730 instruction in the called function, control flow continues with the
1731 instruction after the function call, and the return value of the
1732 function is bound to the result argument.  This is a simpler case of
1733 the <a href="#i_invoke">invoke</a> instruction.</p>
1734 <h5>Example:</h5>
1735 <pre>  %retval = call int %test(int %argc)<br>  call int(sbyte*, ...) *%printf(sbyte* %msg, int 12, sbyte 42);<br></pre>
1736 </div>
1737 <!-- _______________________________________________________________________ -->
1738 <div class="doc_subsubsection"> <a name="i_vanext">'<tt>vanext</tt>'
1739 Instruction</a> </div>
1740 <div class="doc_text">
1741 <h5>Syntax:</h5>
1742 <pre>  &lt;resultarglist&gt; = vanext &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;<br></pre>
1743 <h5>Overview:</h5>
1744 <p>The '<tt>vanext</tt>' instruction is used to access arguments passed
1745 through the "variable argument" area of a function call.  It is used to
1746 implement the <tt>va_arg</tt> macro in C.</p>
1747 <h5>Arguments:</h5>
1748 <p>This instruction takes a <tt>valist</tt> value and the type of the
1749 argument. It returns another <tt>valist</tt>.</p>
1750 <h5>Semantics:</h5>
1751 <p>The '<tt>vanext</tt>' instruction advances the specified <tt>valist</tt>
1752 past an argument of the specified type.  In conjunction with the <a
1753  href="#i_vaarg"><tt>vaarg</tt></a> instruction, it is used to implement
1754 the <tt>va_arg</tt> macro available in C.  For more information, see
1755 the variable argument handling <a href="#int_varargs">Intrinsic
1756 Functions</a>.</p>
1757 <p>It is legal for this instruction to be called in a function which
1758 does not take a variable number of arguments, for example, the <tt>vfprintf</tt>
1759 function.</p>
1760 <p><tt>vanext</tt> is an LLVM instruction instead of an <a
1761  href="#intrinsics">intrinsic function</a> because it takes an type as
1762 an argument.</p>
1763 <h5>Example:</h5>
1764 <p>See the <a href="#int_varargs">variable argument processing</a>
1765 section.</p>
1766 </div>
1767 <!-- _______________________________________________________________________ -->
1768 <div class="doc_subsubsection"> <a name="i_vaarg">'<tt>vaarg</tt>'
1769 Instruction</a> </div>
1770 <div class="doc_text">
1771 <h5>Syntax:</h5>
1772 <pre>  &lt;resultval&gt; = vaarg &lt;va_list&gt; &lt;arglist&gt;, &lt;argty&gt;<br></pre>
1773 <h5>Overview:</h5>
1774 <p>The '<tt>vaarg</tt>' instruction is used to access arguments passed
1775 through the "variable argument" area of a function call.  It is used to
1776 implement the <tt>va_arg</tt> macro in C.</p>
1777 <h5>Arguments:</h5>
1778 <p>This instruction takes a <tt>valist</tt> value and the type of the
1779 argument. It returns a value of the specified argument type.</p>
1780 <h5>Semantics:</h5>
1781 <p>The '<tt>vaarg</tt>' instruction loads an argument of the specified
1782 type from the specified <tt>va_list</tt>.  In conjunction with the <a
1783  href="#i_vanext"><tt>vanext</tt></a> instruction, it is used to
1784 implement the <tt>va_arg</tt> macro available in C.  For more
1785 information, see the variable argument handling <a href="#int_varargs">Intrinsic
1786 Functions</a>.</p>
1787 <p>It is legal for this instruction to be called in a function which
1788 does not take a variable number of arguments, for example, the <tt>vfprintf</tt>
1789 function.</p>
1790 <p><tt>vaarg</tt> is an LLVM instruction instead of an <a
1791  href="#intrinsics">intrinsic function</a> because it takes an type as
1792 an argument.</p>
1793 <h5>Example:</h5>
1794 <p>See the <a href="#int_varargs">variable argument processing</a>
1795 section.</p>
1796 </div>
1797
1798 <!-- *********************************************************************** -->
1799 <div class="doc_section"> <a name="intrinsics">Intrinsic Functions</a> </div>
1800 <!-- *********************************************************************** -->
1801
1802 <div class="doc_text">
1803
1804 <p>LLVM supports the notion of an "intrinsic function".  These functions have
1805 well known names and semantics, and are required to follow certain
1806 restrictions. Overall, these instructions represent an extension mechanism for
1807 the LLVM language that does not require changing all of the transformations in
1808 LLVM to add to the language (or the bytecode reader/writer, the parser,
1809 etc...).</p>
1810
1811 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix, this
1812 prefix is reserved in LLVM for intrinsic names, thus functions may not be named
1813 this.  Intrinsic functions must always be external functions: you cannot define
1814 the body of intrinsic functions.  Intrinsic functions may only be used in call
1815 or invoke instructions: it is illegal to take the address of an intrinsic
1816 function.  Additionally, because intrinsic functions are part of the LLVM
1817 language, it is required that they all be documented here if any are added.</p>
1818
1819
1820 <p>
1821 Adding an intrinsic to LLVM is straight-forward if it is possible to express the
1822 concept in LLVM directly (ie, code generator support is not _required_).  To do
1823 this, extend the default implementation of the IntrinsicLowering class to handle
1824 the intrinsic.  Code generators use this class to lower intrinsics they do not
1825 understand to raw LLVM instructions that they do.
1826 </p>
1827
1828 </div>
1829
1830 <!-- ======================================================================= -->
1831 <div class="doc_subsection">
1832   <a name="int_varargs">Variable Argument Handling Intrinsics</a>
1833 </div>
1834
1835 <div class="doc_text">
1836
1837 <p>Variable argument support is defined in LLVM with the <a
1838  href="#i_vanext"><tt>vanext</tt></a> instruction and these three
1839 intrinsic functions.  These functions are related to the similarly
1840 named macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>
1841
1842 <p>All of these functions operate on arguments that use a
1843 target-specific value type "<tt>va_list</tt>".  The LLVM assembly
1844 language reference manual does not define what this type is, so all
1845 transformations should be prepared to handle intrinsics with any type
1846 used.</p>
1847
1848 <p>This example shows how the <a href="#i_vanext"><tt>vanext</tt></a>
1849 instruction and the variable argument handling intrinsic functions are
1850 used.</p>
1851
1852 <pre>
1853 int %test(int %X, ...) {
1854   ; Initialize variable argument processing
1855   %ap = call sbyte* %<a href="#i_va_start">llvm.va_start</a>()
1856
1857   ; Read a single integer argument
1858   %tmp = vaarg sbyte* %ap, int
1859
1860   ; Advance to the next argument
1861   %ap2 = vanext sbyte* %ap, int
1862
1863   ; Demonstrate usage of llvm.va_copy and llvm.va_end
1864   %aq = call sbyte* %<a href="#i_va_copy">llvm.va_copy</a>(sbyte* %ap2)
1865   call void %<a href="#i_va_end">llvm.va_end</a>(sbyte* %aq)
1866
1867   ; Stop processing of arguments.
1868   call void %<a href="#i_va_end">llvm.va_end</a>(sbyte* %ap2)
1869   ret int %tmp
1870 }
1871 </pre>
1872 </div>
1873
1874 <!-- _______________________________________________________________________ -->
1875 <div class="doc_subsubsection">
1876   <a name="i_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
1877 </div>
1878
1879
1880 <div class="doc_text">
1881 <h5>Syntax:</h5>
1882 <pre>  call va_list ()* %llvm.va_start()<br></pre>
1883 <h5>Overview:</h5>
1884 <p>The '<tt>llvm.va_start</tt>' intrinsic returns a new <tt>&lt;arglist&gt;</tt>
1885 for subsequent use by the variable argument intrinsics.</p>
1886 <h5>Semantics:</h5>
1887 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
1888 macro available in C.  In a target-dependent way, it initializes and
1889 returns a <tt>va_list</tt> element, so that the next <tt>vaarg</tt>
1890 will produce the first variable argument passed to the function.  Unlike
1891 the C <tt>va_start</tt> macro, this intrinsic does not need to know the
1892 last argument of the function, the compiler can figure that out.</p>
1893 <p>Note that this intrinsic function is only legal to be called from
1894 within the body of a variable argument function.</p>
1895 </div>
1896
1897 <!-- _______________________________________________________________________ -->
1898 <div class="doc_subsubsection">
1899  <a name="i_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
1900 </div>
1901
1902 <div class="doc_text">
1903 <h5>Syntax:</h5>
1904 <pre>  call void (va_list)* %llvm.va_end(va_list &lt;arglist&gt;)<br></pre>
1905 <h5>Overview:</h5>
1906 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>&lt;arglist&gt;</tt>
1907 which has been initialized previously with <tt><a href="#i_va_start">llvm.va_start</a></tt>
1908 or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
1909 <h5>Arguments:</h5>
1910 <p>The argument is a <tt>va_list</tt> to destroy.</p>
1911 <h5>Semantics:</h5>
1912 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
1913 macro available in C.  In a target-dependent way, it destroys the <tt>va_list</tt>.
1914 Calls to <a href="#i_va_start"><tt>llvm.va_start</tt></a> and <a
1915  href="#i_va_copy"><tt>llvm.va_copy</tt></a> must be matched exactly
1916 with calls to <tt>llvm.va_end</tt>.</p>
1917 </div>
1918
1919 <!-- _______________________________________________________________________ -->
1920 <div class="doc_subsubsection">
1921   <a name="i_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
1922 </div>
1923
1924 <div class="doc_text">
1925
1926 <h5>Syntax:</h5>
1927
1928 <pre>
1929   call va_list (va_list)* %llvm.va_copy(va_list &lt;destarglist&gt;)
1930 </pre>
1931
1932 <h5>Overview:</h5>
1933
1934 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
1935 from the source argument list to the destination argument list.</p>
1936
1937 <h5>Arguments:</h5>
1938
1939 <p>The argument is the <tt>va_list</tt> to copy.</p>
1940
1941 <h5>Semantics:</h5>
1942
1943 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
1944 macro available in C.  In a target-dependent way, it copies the source
1945 <tt>va_list</tt> element into the returned list.  This intrinsic is necessary
1946 because the <tt><a href="i_va_start">llvm.va_start</a></tt> intrinsic may be
1947 arbitrarily complex and require memory allocation, for example.</p>
1948
1949 </div>
1950
1951 <!-- ======================================================================= -->
1952 <div class="doc_subsection">
1953   <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
1954 </div>
1955
1956 <div class="doc_text">
1957
1958 <p>
1959 LLVM support for <a href="GarbageCollection.html">Accurate Garbage
1960 Collection</a> requires the implementation and generation of these intrinsics.
1961 These intrinsics allow identification of <a href="#i_gcroot">GC roots on the
1962 stack</a>, as well as garbage collector implementations that require <a
1963 href="#i_gcread">read</a> and <a href="#i_gcwrite">write</a> barriers.
1964 Front-ends for type-safe garbage collected languages should generate these
1965 intrinsics to make use of the LLVM garbage collectors.  For more details, see <a
1966 href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>.
1967 </p>
1968 </div>
1969
1970 <!-- _______________________________________________________________________ -->
1971 <div class="doc_subsubsection">
1972   <a name="i_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
1973 </div>
1974
1975 <div class="doc_text">
1976
1977 <h5>Syntax:</h5>
1978
1979 <pre>
1980   call void (&lt;ty&gt;**, &lt;ty2&gt;*)* %llvm.gcroot(&lt;ty&gt;** %ptrloc, &lt;ty2&gt;* %metadata)
1981 </pre>
1982
1983 <h5>Overview:</h5>
1984
1985 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existance of a GC root to
1986 the code generator, and allows some metadata to be associated with it.</p>
1987
1988 <h5>Arguments:</h5>
1989
1990 <p>The first argument specifies the address of a stack object that contains the
1991 root pointer.  The second pointer (which must be either a constant or a global
1992 value address) contains the meta-data to be associated with the root.</p>
1993
1994 <h5>Semantics:</h5>
1995
1996 <p>At runtime, a call to this intrinsics stores a null pointer into the "ptrloc"
1997 location.  At compile-time, the code generator generates information to allow
1998 the runtime to find the pointer at GC safe points.
1999 </p>
2000
2001 </div>
2002
2003
2004 <!-- _______________________________________________________________________ -->
2005 <div class="doc_subsubsection">
2006   <a name="i_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
2007 </div>
2008
2009 <div class="doc_text">
2010
2011 <h5>Syntax:</h5>
2012
2013 <pre>
2014   call sbyte* (sbyte**)* %llvm.gcread(sbyte** %Ptr)
2015 </pre>
2016
2017 <h5>Overview:</h5>
2018
2019 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
2020 locations, allowing garbage collector implementations that require read
2021 barriers.</p>
2022
2023 <h5>Arguments:</h5>
2024
2025 <p>The argument is the address to read from, which should be an address
2026 allocated from the garbage collector.</p>
2027
2028 <h5>Semantics:</h5>
2029
2030 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
2031 instruction, but may be replaced with substantially more complex code by the
2032 garbage collector runtime, as needed.</p>
2033
2034 </div>
2035
2036
2037 <!-- _______________________________________________________________________ -->
2038 <div class="doc_subsubsection">
2039   <a name="i_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
2040 </div>
2041
2042 <div class="doc_text">
2043
2044 <h5>Syntax:</h5>
2045
2046 <pre>
2047   call void (sbyte*, sbyte**)* %llvm.gcwrite(sbyte* %P1, sbyte** %P2)
2048 </pre>
2049
2050 <h5>Overview:</h5>
2051
2052 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
2053 locations, allowing garbage collector implementations that require write
2054 barriers (such as generational or reference counting collectors).</p>
2055
2056 <h5>Arguments:</h5>
2057
2058 <p>The first argument is the reference to store, and the second is the heap
2059 location to store to.</p>
2060
2061 <h5>Semantics:</h5>
2062
2063 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
2064 instruction, but may be replaced with substantially more complex code by the
2065 garbage collector runtime, as needed.</p>
2066
2067 </div>
2068
2069
2070
2071 <!-- ======================================================================= -->
2072 <div class="doc_subsection">
2073   <a name="int_codegen">Code Generator Intrinsics</a>
2074 </div>
2075
2076 <div class="doc_text">
2077 <p>
2078 These intrinsics are provided by LLVM to expose special features that may only
2079 be implemented with code generator support.
2080 </p>
2081
2082 </div>
2083
2084 <!-- _______________________________________________________________________ -->
2085 <div class="doc_subsubsection">
2086   <a name="i_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
2087 </div>
2088
2089 <div class="doc_text">
2090
2091 <h5>Syntax:</h5>
2092 <pre>
2093   call void* ()* %llvm.returnaddress(uint &lt;level&gt;)
2094 </pre>
2095
2096 <h5>Overview:</h5>
2097
2098 <p>
2099 The '<tt>llvm.returnaddress</tt>' intrinsic returns a target-specific value
2100 indicating the return address of the current function or one of its callers.
2101 </p>
2102
2103 <h5>Arguments:</h5>
2104
2105 <p>
2106 The argument to this intrinsic indicates which function to return the address
2107 for.  Zero indicates the calling function, one indicates its caller, etc.  The
2108 argument is <b>required</b> to be a constant integer value.
2109 </p>
2110
2111 <h5>Semantics:</h5>
2112
2113 <p>
2114 The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer indicating
2115 the return address of the specified call frame, or zero if it cannot be
2116 identified.  The value returned by this intrinsic is likely to be incorrect or 0
2117 for arguments other than zero, so it should only be used for debugging purposes.
2118 </p>
2119
2120 <p>
2121 Note that calling this intrinsic does not prevent function inlining or other
2122 aggressive transformations, so the value returned may not that of the obvious
2123 source-language caller.
2124 </p>
2125 </div>
2126
2127
2128 <!-- _______________________________________________________________________ -->
2129 <div class="doc_subsubsection">
2130   <a name="i_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
2131 </div>
2132
2133 <div class="doc_text">
2134
2135 <h5>Syntax:</h5>
2136 <pre>
2137   call void* ()* %llvm.frameaddress(uint &lt;level&gt;)
2138 </pre>
2139
2140 <h5>Overview:</h5>
2141
2142 <p>
2143 The '<tt>llvm.frameaddress</tt>' intrinsic returns the target-specific frame
2144 pointer value for the specified stack frame.
2145 </p>
2146
2147 <h5>Arguments:</h5>
2148
2149 <p>
2150 The argument to this intrinsic indicates which function to return the frame
2151 pointer for.  Zero indicates the calling function, one indicates its caller,
2152 etc.  The argument is <b>required</b> to be a constant integer value.
2153 </p>
2154
2155 <h5>Semantics:</h5>
2156
2157 <p>
2158 The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer indicating
2159 the frame address of the specified call frame, or zero if it cannot be
2160 identified.  The value returned by this intrinsic is likely to be incorrect or 0
2161 for arguments other than zero, so it should only be used for debugging purposes.
2162 </p>
2163
2164 <p>
2165 Note that calling this intrinsic does not prevent function inlining or other
2166 aggressive transformations, so the value returned may not that of the obvious
2167 source-language caller.
2168 </p>
2169 </div>
2170
2171 <!-- ======================================================================= -->
2172 <div class="doc_subsection">
2173   <a name="int_os">Operating System Intrinsics</a>
2174 </div>
2175
2176 <div class="doc_text">
2177 <p>
2178 These intrinsics are provided by LLVM to support the implementation of
2179 operating system level code.
2180 </p>
2181
2182 </div>
2183
2184 <!-- _______________________________________________________________________ -->
2185 <div class="doc_subsubsection">
2186   <a name="i_readport">'<tt>llvm.readport</tt>' Intrinsic</a>
2187 </div>
2188
2189 <div class="doc_text">
2190
2191 <h5>Syntax:</h5>
2192 <pre>
2193   call &lt;integer type&gt; (&lt;integer type&gt;)* %llvm.readport (&lt;integer type&gt; &lt;address&gt;)
2194 </pre>
2195
2196 <h5>Overview:</h5>
2197
2198 <p>
2199 The '<tt>llvm.readport</tt>' intrinsic reads data from the specified hardware
2200 I/O port.
2201 </p>
2202
2203 <h5>Arguments:</h5>
2204
2205 <p>
2206 The argument to this intrinsic indicates the hardware I/O address from which
2207 to read the data.  The address is in the hardware I/O address namespace (as
2208 opposed to being a memory location for memory mapped I/O).
2209 </p>
2210
2211 <h5>Semantics:</h5>
2212
2213 <p>
2214 The '<tt>llvm.readport</tt>' intrinsic reads data from the hardware I/O port
2215 specified by <i>address</i> and returns the value.  The address and return
2216 value must be integers, but the size is dependent upon the platform upon which
2217 the program is code generated.  For example, on x86, the address must be an
2218 unsigned 16 bit value, and the return value must be 8, 16, or 32 bits.
2219 </p>
2220
2221 </div>
2222
2223 <!-- _______________________________________________________________________ -->
2224 <div class="doc_subsubsection">
2225   <a name="i_writeport">'<tt>llvm.writeport</tt>' Intrinsic</a>
2226 </div>
2227
2228 <div class="doc_text">
2229
2230 <h5>Syntax:</h5>
2231 <pre>
2232   call void (&lt;integer type&gt;, &lt;integer type&gt;)* %llvm.writeport (&lt;integer type&gt; &lt;value&gt;, &lt;integer type&gt; &lt;address&gt;)
2233 </pre>
2234
2235 <h5>Overview:</h5>
2236
2237 <p>
2238 The '<tt>llvm.writeport</tt>' intrinsic writes data to the specified hardware
2239 I/O port.
2240 </p>
2241
2242 <h5>Arguments:</h5>
2243
2244 <p>
2245 The first argument is the value to write to the I/O port.
2246 </p>
2247
2248 <p>
2249 The second argument indicates the hardware I/O address to which data should be
2250 written.  The address is in the hardware I/O address namespace (as opposed to
2251 being a memory location for memory mapped I/O).
2252 </p>
2253
2254 <h5>Semantics:</h5>
2255
2256 <p>
2257 The '<tt>llvm.writeport</tt>' intrinsic writes <i>value</i> to the I/O port
2258 specified by <i>address</i>.  The address and value must be integers, but the
2259 size is dependent upon the platform upon which the program is code generated.
2260 For example, on x86, the address must be an unsigned 16 bit value, and the
2261 value written must be 8, 16, or 32 bits in length.
2262 </p>
2263
2264 </div>
2265
2266 <!-- _______________________________________________________________________ -->
2267 <div class="doc_subsubsection">
2268   <a name="i_readio">'<tt>llvm.readio</tt>' Intrinsic</a>
2269 </div>
2270
2271 <div class="doc_text">
2272
2273 <h5>Syntax:</h5>
2274 <pre>
2275   call &lt;result&gt; (&lt;ty&gt;*)* %llvm.readio (&lt;ty&gt; * &lt;pointer&gt;)
2276 </pre>
2277
2278 <h5>Overview:</h5>
2279
2280 <p>
2281 The '<tt>llvm.readio</tt>' intrinsic reads data from a memory mapped I/O
2282 address.
2283 </p>
2284
2285 <h5>Arguments:</h5>
2286
2287 <p>
2288 The argument to this intrinsic is a pointer indicating the memory address from
2289 which to read the data.  The data must be a
2290 <a href="#t_firstclass">first class</a> type.
2291 </p>
2292
2293 <h5>Semantics:</h5>
2294
2295 <p>
2296 The '<tt>llvm.readio</tt>' intrinsic reads data from a memory mapped I/O
2297 location specified by <i>pointer</i> and returns the value.  The argument must
2298 be a pointer, and the return value must be a
2299 <a href="#t_firstclass">first class</a> type.  However, certain architectures
2300 may not support I/O on all first class types.  For example, 32 bit processors
2301 may only support I/O on data types that are 32 bits or less.
2302 </p>
2303
2304 <p>
2305 This intrinsic enforces an in-order memory model for llvm.readio and
2306 llvm.writeio calls on machines that use dynamic scheduling.  Dynamically
2307 scheduled processors may execute loads and stores out of order, re-ordering at
2308 run time accesses to memory mapped I/O registers.  Using these intrinsics
2309 ensures that accesses to memory mapped I/O registers occur in program order.
2310 </p>
2311
2312 </div>
2313
2314 <!-- _______________________________________________________________________ -->
2315 <div class="doc_subsubsection">
2316   <a name="i_writeio">'<tt>llvm.writeio</tt>' Intrinsic</a>
2317 </div>
2318
2319 <div class="doc_text">
2320
2321 <h5>Syntax:</h5>
2322 <pre>
2323   call void (&lt;ty1&gt;, &lt;ty2&gt;*)* %llvm.writeio (&lt;ty1&gt; &lt;value&gt;, &lt;ty2&gt; * &lt;pointer&gt;)
2324 </pre>
2325
2326 <h5>Overview:</h5>
2327
2328 <p>
2329 The '<tt>llvm.writeio</tt>' intrinsic writes data to the specified memory
2330 mapped I/O address.
2331 </p>
2332
2333 <h5>Arguments:</h5>
2334
2335 <p>
2336 The first argument is the value to write to the memory mapped I/O location.
2337 The second argument is a pointer indicating the memory address to which the
2338 data should be written.
2339 </p>
2340
2341 <h5>Semantics:</h5>
2342
2343 <p>
2344 The '<tt>llvm.writeio</tt>' intrinsic writes <i>value</i> to the memory mapped
2345 I/O address specified by <i>pointer</i>.  The value must be a
2346 <a href="#t_firstclass">first class</a> type.  However, certain architectures
2347 may not support I/O on all first class types.  For example, 32 bit processors
2348 may only support I/O on data types that are 32 bits or less.
2349 </p>
2350
2351 <p>
2352 This intrinsic enforces an in-order memory model for llvm.readio and
2353 llvm.writeio calls on machines that use dynamic scheduling.  Dynamically
2354 scheduled processors may execute loads and stores out of order, re-ordering at
2355 run time accesses to memory mapped I/O registers.  Using these intrinsics
2356 ensures that accesses to memory mapped I/O registers occur in program order.
2357 </p>
2358
2359 </div>
2360
2361
2362 <!-- ======================================================================= -->
2363 <div class="doc_subsection">
2364   <a name="int_libc">Standard C Library Intrinsics</a>
2365 </div>
2366
2367 <div class="doc_text">
2368 <p>
2369 LLVM provides intrinsics for a few important standard C library functions.
2370 These intrinsics allow source-language front-ends to pass information about the
2371 alignment of the pointer arguments to the code generator, providing opportunity
2372 for more efficient code generation.
2373 </p>
2374
2375 </div>
2376
2377 <!-- _______________________________________________________________________ -->
2378 <div class="doc_subsubsection">
2379   <a name="i_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
2380 </div>
2381
2382 <div class="doc_text">
2383
2384 <h5>Syntax:</h5>
2385 <pre>
2386   call void (sbyte*, sbyte*, uint, uint)* %llvm.memcpy(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
2387                                                        uint &lt;len&gt;, uint &lt;align&gt;)
2388 </pre>
2389
2390 <h5>Overview:</h5>
2391
2392 <p>
2393 The '<tt>llvm.memcpy</tt>' intrinsic copies a block of memory from the source
2394 location to the destination location.
2395 </p>
2396
2397 <p>
2398 Note that, unlike the standard libc function, the <tt>llvm.memcpy</tt> intrinsic
2399 does not return a value, and takes an extra alignment argument.
2400 </p>
2401
2402 <h5>Arguments:</h5>
2403
2404 <p>
2405 The first argument is a pointer to the destination, the second is a pointer to
2406 the source.  The third argument is an (arbitrarily sized) integer argument
2407 specifying the number of bytes to copy, and the fourth argument is the alignment
2408 of the source and destination locations.
2409 </p>
2410
2411 <p>
2412 If the call to this intrinisic has an alignment value that is not 0 or 1, then
2413 the caller guarantees that the size of the copy is a multiple of the alignment
2414 and that both the source and destination pointers are aligned to that boundary.
2415 </p>
2416
2417 <h5>Semantics:</h5>
2418
2419 <p>
2420 The '<tt>llvm.memcpy</tt>' intrinsic copies a block of memory from the source
2421 location to the destination location, which are not allowed to overlap.  It
2422 copies "len" bytes of memory over.  If the argument is known to be aligned to
2423 some boundary, this can be specified as the fourth argument, otherwise it should
2424 be set to 0 or 1.
2425 </p>
2426 </div>
2427
2428
2429 <!-- _______________________________________________________________________ -->
2430 <div class="doc_subsubsection">
2431   <a name="i_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
2432 </div>
2433
2434 <div class="doc_text">
2435
2436 <h5>Syntax:</h5>
2437 <pre>
2438   call void (sbyte*, sbyte*, uint, uint)* %llvm.memmove(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
2439                                                        uint &lt;len&gt;, uint &lt;align&gt;)
2440 </pre>
2441
2442 <h5>Overview:</h5>
2443
2444 <p>
2445 The '<tt>llvm.memmove</tt>' intrinsic moves a block of memory from the source
2446 location to the destination location. It is similar to the '<tt>llvm.memcpy</tt>' 
2447 intrinsic but allows the two memory locations to overlap.
2448 </p>
2449
2450 <p>
2451 Note that, unlike the standard libc function, the <tt>llvm.memmove</tt> intrinsic
2452 does not return a value, and takes an extra alignment argument.
2453 </p>
2454
2455 <h5>Arguments:</h5>
2456
2457 <p>
2458 The first argument is a pointer to the destination, the second is a pointer to
2459 the source.  The third argument is an (arbitrarily sized) integer argument
2460 specifying the number of bytes to copy, and the fourth argument is the alignment
2461 of the source and destination locations.
2462 </p>
2463
2464 <p>
2465 If the call to this intrinisic has an alignment value that is not 0 or 1, then
2466 the caller guarantees that the size of the copy is a multiple of the alignment
2467 and that both the source and destination pointers are aligned to that boundary.
2468 </p>
2469
2470 <h5>Semantics:</h5>
2471
2472 <p>
2473 The '<tt>llvm.memmove</tt>' intrinsic copies a block of memory from the source
2474 location to the destination location, which may overlap.  It
2475 copies "len" bytes of memory over.  If the argument is known to be aligned to
2476 some boundary, this can be specified as the fourth argument, otherwise it should
2477 be set to 0 or 1.
2478 </p>
2479 </div>
2480
2481
2482 <!-- _______________________________________________________________________ -->
2483 <div class="doc_subsubsection">
2484   <a name="i_memset">'<tt>llvm.memset</tt>' Intrinsic</a>
2485 </div>
2486
2487 <div class="doc_text">
2488
2489 <h5>Syntax:</h5>
2490 <pre>
2491   call void (sbyte*, ubyte, uint, uint)* %llvm.memset(sbyte* &lt;dest&gt;, ubyte &lt;val&gt;,
2492                                                       uint &lt;len&gt;, uint &lt;align&gt;)
2493 </pre>
2494
2495 <h5>Overview:</h5>
2496
2497 <p>
2498 The '<tt>llvm.memset</tt>' intrinsic fills a block of memory with a particular
2499 byte value.
2500 </p>
2501
2502 <p>
2503 Note that, unlike the standard libc function, the <tt>llvm.memset</tt> intrinsic
2504 does not return a value, and takes an extra alignment argument.
2505 </p>
2506
2507 <h5>Arguments:</h5>
2508
2509 <p>
2510 The first argument is a pointer to the destination to fill, the second is the
2511 byte value to fill it with, the third argument is an (arbitrarily sized) integer
2512 argument specifying the number of bytes to fill, and the fourth argument is the
2513 known alignment of destination location.
2514 </p>
2515
2516 <p>
2517 If the call to this intrinisic has an alignment value that is not 0 or 1, then
2518 the caller guarantees that the size of the copy is a multiple of the alignment
2519 and that the destination pointer is aligned to that boundary.
2520 </p>
2521
2522 <h5>Semantics:</h5>
2523
2524 <p>
2525 The '<tt>llvm.memset</tt>' intrinsic fills "len" bytes of memory starting at the
2526 destination location.  If the argument is known to be aligned to some boundary,
2527 this can be specified as the fourth argument, otherwise it should be set to 0 or
2528 1.
2529 </p>
2530 </div>
2531
2532
2533 <!-- _______________________________________________________________________ -->
2534 <div class="doc_subsubsection">
2535   <a name="i_isnan">'<tt>llvm.isnan</tt>' Intrinsic</a>
2536 </div>
2537
2538 <div class="doc_text">
2539
2540 <h5>Syntax:</h5>
2541 <pre>
2542   call bool (&lt;float or double&gt;)* %llvm.isnan(&lt;float or double&gt; Val)
2543 </pre>
2544
2545 <h5>Overview:</h5>
2546
2547 <p>
2548 The '<tt>llvm.isnan</tt>' intrinsic returns true if the specific floating point
2549 value is a NAN.
2550 </p>
2551
2552 <h5>Arguments:</h5>
2553
2554 <p>
2555 The argument is a floating point number.
2556 </p>
2557
2558 <h5>Semantics:</h5>
2559
2560 <p>
2561 If the argument is a SNAN or QNAN, it returns true, otherwise false.
2562 </p>
2563 </div>
2564
2565
2566
2567
2568 <!-- ======================================================================= -->
2569 <div class="doc_subsection">
2570   <a name="int_debugger">Debugger Intrinsics</a>
2571 </div>
2572
2573 <div class="doc_text">
2574 <p>
2575 The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt> prefix),
2576 are described in the <a
2577 href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source Level
2578 Debugging</a> document.
2579 </p>
2580 </div>
2581
2582
2583 <!-- *********************************************************************** -->
2584 <hr>
2585 <address>
2586   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
2587   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
2588   <a href="http://validator.w3.org/check/referer"><img
2589   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
2590
2591   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
2592   <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
2593   Last modified: $Date$
2594 </address>
2595 </body>
2596 </html>