Remove all references to MallocInst and FreeInst
[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   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7   <meta name="author" content="Chris Lattner">
8   <meta name="description" 
9   content="LLVM Assembly Language Reference Manual.">
10   <link rel="stylesheet" href="llvm.css" type="text/css">
11 </head>
12
13 <body>
14
15 <div class="doc_title"> LLVM Language Reference Manual </div>
16 <ol>
17   <li><a href="#abstract">Abstract</a></li>
18   <li><a href="#introduction">Introduction</a></li>
19   <li><a href="#identifiers">Identifiers</a></li>
20   <li><a href="#highlevel">High Level Structure</a>
21     <ol>
22       <li><a href="#modulestructure">Module Structure</a></li>
23       <li><a href="#linkage">Linkage Types</a>
24         <ol>
25           <li><a href="#linkage_private">'<tt>private</tt>' Linkage</a></li>
26           <li><a href="#linkage_linker_private">'<tt>linker_private</tt>' Linkage</a></li>
27           <li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
28           <li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
29           <li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
30           <li><a href="#linkage_common">'<tt>common</tt>' Linkage</a></li>
31           <li><a href="#linkage_weak">'<tt>weak</tt>' Linkage</a></li>
32           <li><a href="#linkage_appending">'<tt>appending</tt>' Linkage</a></li>
33           <li><a href="#linkage_externweak">'<tt>extern_weak</tt>' Linkage</a></li>
34           <li><a href="#linkage_linkonce_odr">'<tt>linkonce_odr</tt>' Linkage</a></li>
35           <li><a href="#linkage_weak">'<tt>weak_odr</tt>' Linkage</a></li>
36           <li><a href="#linkage_external">'<tt>externally visible</tt>' Linkage</a></li>
37           <li><a href="#linkage_dllimport">'<tt>dllimport</tt>' Linkage</a></li>
38           <li><a href="#linkage_dllexport">'<tt>dllexport</tt>' Linkage</a></li>
39         </ol>
40       </li>
41       <li><a href="#callingconv">Calling Conventions</a></li>
42       <li><a href="#namedtypes">Named Types</a></li>
43       <li><a href="#globalvars">Global Variables</a></li>
44       <li><a href="#functionstructure">Functions</a></li>
45       <li><a href="#aliasstructure">Aliases</a></li>
46       <li><a href="#paramattrs">Parameter Attributes</a></li>
47       <li><a href="#fnattrs">Function Attributes</a></li>
48       <li><a href="#gc">Garbage Collector Names</a></li>
49       <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
50       <li><a href="#datalayout">Data Layout</a></li>
51       <li><a href="#pointeraliasing">Pointer Aliasing Rules</a></li>
52     </ol>
53   </li>
54   <li><a href="#typesystem">Type System</a>
55     <ol>
56       <li><a href="#t_classifications">Type Classifications</a></li>
57       <li><a href="#t_primitive">Primitive Types</a>    
58         <ol>
59           <li><a href="#t_integer">Integer Type</a></li>
60           <li><a href="#t_floating">Floating Point Types</a></li>
61           <li><a href="#t_void">Void Type</a></li>
62           <li><a href="#t_label">Label Type</a></li>
63           <li><a href="#t_metadata">Metadata Type</a></li>
64         </ol>
65       </li>
66       <li><a href="#t_derived">Derived Types</a>
67         <ol>
68           <li><a href="#t_array">Array Type</a></li>
69           <li><a href="#t_function">Function Type</a></li>
70           <li><a href="#t_pointer">Pointer Type</a></li>
71           <li><a href="#t_struct">Structure Type</a></li>
72           <li><a href="#t_pstruct">Packed Structure Type</a></li>
73           <li><a href="#t_vector">Vector Type</a></li>
74           <li><a href="#t_opaque">Opaque Type</a></li>
75         </ol>
76       </li>
77       <li><a href="#t_uprefs">Type Up-references</a></li>
78     </ol>
79   </li>
80   <li><a href="#constants">Constants</a>
81     <ol>
82       <li><a href="#simpleconstants">Simple Constants</a></li>
83       <li><a href="#complexconstants">Complex Constants</a></li>
84       <li><a href="#globalconstants">Global Variable and Function Addresses</a></li>
85       <li><a href="#undefvalues">Undefined Values</a></li>
86       <li><a href="#constantexprs">Constant Expressions</a></li>
87       <li><a href="#metadata">Embedded Metadata</a></li>
88     </ol>
89   </li>
90   <li><a href="#othervalues">Other Values</a>
91     <ol>
92       <li><a href="#inlineasm">Inline Assembler Expressions</a></li>
93     </ol>
94   </li>
95   <li><a href="#intrinsic_globals">Intrinsic Global Variables</a>
96     <ol>
97       <li><a href="#intg_used">The '<tt>llvm.used</tt>' Global Variable</a></li>
98       <li><a href="#intg_compiler_used">The '<tt>llvm.compiler.used</tt>'
99           Global Variable</a></li>
100       <li><a href="#intg_global_ctors">The '<tt>llvm.global_ctors</tt>'
101          Global Variable</a></li>
102       <li><a href="#intg_global_dtors">The '<tt>llvm.global_dtors</tt>'
103          Global Variable</a></li>
104     </ol>
105   </li>
106   <li><a href="#instref">Instruction Reference</a>
107     <ol>
108       <li><a href="#terminators">Terminator Instructions</a>
109         <ol>
110           <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li>
111           <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li>
112           <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li>
113           <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li>
114           <li><a href="#i_unwind">'<tt>unwind</tt>'  Instruction</a></li>
115           <li><a href="#i_unreachable">'<tt>unreachable</tt>' Instruction</a></li>
116         </ol>
117       </li>
118       <li><a href="#binaryops">Binary Operations</a>
119         <ol>
120           <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li>
121           <li><a href="#i_fadd">'<tt>fadd</tt>' Instruction</a></li>
122           <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
123           <li><a href="#i_fsub">'<tt>fsub</tt>' Instruction</a></li>
124           <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
125           <li><a href="#i_fmul">'<tt>fmul</tt>' Instruction</a></li>
126           <li><a href="#i_udiv">'<tt>udiv</tt>' Instruction</a></li>
127           <li><a href="#i_sdiv">'<tt>sdiv</tt>' Instruction</a></li>
128           <li><a href="#i_fdiv">'<tt>fdiv</tt>' Instruction</a></li>
129           <li><a href="#i_urem">'<tt>urem</tt>' Instruction</a></li>
130           <li><a href="#i_srem">'<tt>srem</tt>' Instruction</a></li>
131           <li><a href="#i_frem">'<tt>frem</tt>' Instruction</a></li>
132         </ol>
133       </li>
134       <li><a href="#bitwiseops">Bitwise Binary Operations</a>
135         <ol>
136           <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
137           <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
138           <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
139           <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
140           <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
141           <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
142         </ol>
143       </li>
144       <li><a href="#vectorops">Vector Operations</a>
145         <ol>
146           <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li>
147           <li><a href="#i_insertelement">'<tt>insertelement</tt>' Instruction</a></li>
148           <li><a href="#i_shufflevector">'<tt>shufflevector</tt>' Instruction</a></li>
149         </ol>
150       </li>
151       <li><a href="#aggregateops">Aggregate Operations</a>
152         <ol>
153           <li><a href="#i_extractvalue">'<tt>extractvalue</tt>' Instruction</a></li>
154           <li><a href="#i_insertvalue">'<tt>insertvalue</tt>' Instruction</a></li>
155         </ol>
156       </li>
157       <li><a href="#memoryops">Memory Access and Addressing Operations</a>
158         <ol>
159           <li><a href="#i_alloca">'<tt>alloca</tt>'   Instruction</a></li>
160          <li><a href="#i_load">'<tt>load</tt>'     Instruction</a></li>
161          <li><a href="#i_store">'<tt>store</tt>'    Instruction</a></li>
162          <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
163         </ol>
164       </li>
165       <li><a href="#convertops">Conversion Operations</a>
166         <ol>
167           <li><a href="#i_trunc">'<tt>trunc .. to</tt>' Instruction</a></li>
168           <li><a href="#i_zext">'<tt>zext .. to</tt>' Instruction</a></li>
169           <li><a href="#i_sext">'<tt>sext .. to</tt>' Instruction</a></li>
170           <li><a href="#i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a></li>
171           <li><a href="#i_fpext">'<tt>fpext .. to</tt>' Instruction</a></li>
172           <li><a href="#i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a></li>
173           <li><a href="#i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a></li>
174           <li><a href="#i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a></li>
175           <li><a href="#i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a></li>
176           <li><a href="#i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a></li>
177           <li><a href="#i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a></li>
178           <li><a href="#i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a></li>
179         </ol>
180       </li>
181       <li><a href="#otherops">Other Operations</a>
182         <ol>
183           <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li>
184           <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li>
185           <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
186           <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
187           <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
188           <li><a href="#i_va_arg">'<tt>va_arg</tt>'  Instruction</a></li>
189         </ol>
190       </li>
191     </ol>
192   </li>
193   <li><a href="#intrinsics">Intrinsic Functions</a>
194     <ol>
195       <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
196         <ol>
197           <li><a href="#int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
198           <li><a href="#int_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
199           <li><a href="#int_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
200         </ol>
201       </li>
202       <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
203         <ol>
204           <li><a href="#int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
205           <li><a href="#int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
206           <li><a href="#int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
207         </ol>
208       </li>
209       <li><a href="#int_codegen">Code Generator Intrinsics</a>
210         <ol>
211           <li><a href="#int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
212           <li><a href="#int_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
213           <li><a href="#int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li>
214           <li><a href="#int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li>
215           <li><a href="#int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
216           <li><a href="#int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
217           <li><a href="#int_readcyclecounter"><tt>llvm.readcyclecounter</tt>' Intrinsic</a></li>
218         </ol>
219       </li>
220       <li><a href="#int_libc">Standard C Library Intrinsics</a>
221         <ol>
222           <li><a href="#int_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li>
223           <li><a href="#int_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li>
224           <li><a href="#int_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li>
225           <li><a href="#int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li>
226           <li><a href="#int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a></li>
227           <li><a href="#int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a></li>
228           <li><a href="#int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a></li>
229           <li><a href="#int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a></li>
230         </ol>
231       </li>
232       <li><a href="#int_manip">Bit Manipulation Intrinsics</a>
233         <ol>
234           <li><a href="#int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a></li>
235           <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li>
236           <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li>
237           <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li>
238         </ol>
239       </li>
240       <li><a href="#int_overflow">Arithmetic with Overflow Intrinsics</a>
241         <ol>
242           <li><a href="#int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt> Intrinsics</a></li>
243           <li><a href="#int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt> Intrinsics</a></li>
244           <li><a href="#int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt> Intrinsics</a></li>
245           <li><a href="#int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt> Intrinsics</a></li>
246           <li><a href="#int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt> Intrinsics</a></li>
247           <li><a href="#int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt> Intrinsics</a></li>
248         </ol>
249       </li>
250       <li><a href="#int_debugger">Debugger intrinsics</a></li>
251       <li><a href="#int_eh">Exception Handling intrinsics</a></li>
252       <li><a href="#int_trampoline">Trampoline Intrinsic</a>
253         <ol>
254           <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
255         </ol>
256       </li>
257       <li><a href="#int_atomics">Atomic intrinsics</a>
258         <ol>
259           <li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
260           <li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li>
261           <li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
262           <li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li>
263           <li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li>
264           <li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li>
265           <li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li>
266           <li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li>
267           <li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li>
268           <li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li>
269           <li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li>
270           <li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li>
271           <li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li>
272         </ol>
273       </li>
274       <li><a href="#int_memorymarkers">Memory Use Markers</a>
275         <ol>
276           <li><a href="#int_lifetime_start"><tt>llvm.lifetime.start</tt></a></li>
277           <li><a href="#int_lifetime_end"><tt>llvm.lifetime.end</tt></a></li>
278           <li><a href="#int_invariant_start"><tt>llvm.invariant.start</tt></a></li>
279           <li><a href="#int_invariant_end"><tt>llvm.invariant.end</tt></a></li>
280         </ol>
281       </li>
282       <li><a href="#int_general">General intrinsics</a>
283         <ol>
284           <li><a href="#int_var_annotation">
285             '<tt>llvm.var.annotation</tt>' Intrinsic</a></li>
286           <li><a href="#int_annotation">
287             '<tt>llvm.annotation.*</tt>' Intrinsic</a></li>
288           <li><a href="#int_trap">
289             '<tt>llvm.trap</tt>' Intrinsic</a></li>
290           <li><a href="#int_stackprotector">
291             '<tt>llvm.stackprotector</tt>' Intrinsic</a></li>
292         </ol>
293       </li>
294     </ol>
295   </li>
296 </ol>
297
298 <div class="doc_author">
299   <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
300             and <a href="mailto:vadve@cs.uiuc.edu">Vikram Adve</a></p>
301 </div>
302
303 <!-- *********************************************************************** -->
304 <div class="doc_section"> <a name="abstract">Abstract </a></div>
305 <!-- *********************************************************************** -->
306
307 <div class="doc_text">
308
309 <p>This document is a reference manual for the LLVM assembly language. LLVM is
310    a Static Single Assignment (SSA) based representation that provides type
311    safety, low-level operations, flexibility, and the capability of representing
312    'all' high-level languages cleanly.  It is the common code representation
313    used throughout all phases of the LLVM compilation strategy.</p>
314
315 </div>
316
317 <!-- *********************************************************************** -->
318 <div class="doc_section"> <a name="introduction">Introduction</a> </div>
319 <!-- *********************************************************************** -->
320
321 <div class="doc_text">
322
323 <p>The LLVM code representation is designed to be used in three different forms:
324    as an in-memory compiler IR, as an on-disk bitcode representation (suitable
325    for fast loading by a Just-In-Time compiler), and as a human readable
326    assembly language representation.  This allows LLVM to provide a powerful
327    intermediate representation for efficient compiler transformations and
328    analysis, while providing a natural means to debug and visualize the
329    transformations.  The three different forms of LLVM are all equivalent.  This
330    document describes the human readable representation and notation.</p>
331
332 <p>The LLVM representation aims to be light-weight and low-level while being
333    expressive, typed, and extensible at the same time.  It aims to be a
334    "universal IR" of sorts, by being at a low enough level that high-level ideas
335    may be cleanly mapped to it (similar to how microprocessors are "universal
336    IR's", allowing many source languages to be mapped to them).  By providing
337    type information, LLVM can be used as the target of optimizations: for
338    example, through pointer analysis, it can be proven that a C automatic
339    variable is never accessed outside of the current function... allowing it to
340    be promoted to a simple SSA value instead of a memory location.</p>
341
342 </div>
343
344 <!-- _______________________________________________________________________ -->
345 <div class="doc_subsubsection"> <a name="wellformed">Well-Formedness</a> </div>
346
347 <div class="doc_text">
348
349 <p>It is important to note that this document describes 'well formed' LLVM
350    assembly language.  There is a difference between what the parser accepts and
351    what is considered 'well formed'.  For example, the following instruction is
352    syntactically okay, but not well formed:</p>
353
354 <div class="doc_code">
355 <pre>
356 %x = <a href="#i_add">add</a> i32 1, %x
357 </pre>
358 </div>
359
360 <p>...because the definition of <tt>%x</tt> does not dominate all of its
361    uses. The LLVM infrastructure provides a verification pass that may be used
362    to verify that an LLVM module is well formed.  This pass is automatically run
363    by the parser after parsing input assembly and by the optimizer before it
364    outputs bitcode.  The violations pointed out by the verifier pass indicate
365    bugs in transformation passes or input to the parser.</p>
366
367 </div>
368
369 <!-- Describe the typesetting conventions here. -->
370
371 <!-- *********************************************************************** -->
372 <div class="doc_section"> <a name="identifiers">Identifiers</a> </div>
373 <!-- *********************************************************************** -->
374
375 <div class="doc_text">
376
377 <p>LLVM identifiers come in two basic types: global and local. Global
378    identifiers (functions, global variables) begin with the <tt>'@'</tt>
379    character. Local identifiers (register names, types) begin with
380    the <tt>'%'</tt> character. Additionally, there are three different formats
381    for identifiers, for different purposes:</p>
382
383 <ol>
384   <li>Named values are represented as a string of characters with their prefix.
385       For example, <tt>%foo</tt>, <tt>@DivisionByZero</tt>,
386       <tt>%a.really.long.identifier</tt>. The actual regular expression used is
387       '<tt>[%@][a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.  Identifiers which require
388       other characters in their names can be surrounded with quotes. Special
389       characters may be escaped using <tt>"\xx"</tt> where <tt>xx</tt> is the
390       ASCII code for the character in hexadecimal.  In this way, any character
391       can be used in a name value, even quotes themselves.</li>
392
393   <li>Unnamed values are represented as an unsigned numeric value with their
394       prefix.  For example, <tt>%12</tt>, <tt>@2</tt>, <tt>%44</tt>.</li>
395
396   <li>Constants, which are described in a <a href="#constants">section about
397       constants</a>, below.</li>
398 </ol>
399
400 <p>LLVM requires that values start with a prefix for two reasons: Compilers
401    don't need to worry about name clashes with reserved words, and the set of
402    reserved words may be expanded in the future without penalty.  Additionally,
403    unnamed identifiers allow a compiler to quickly come up with a temporary
404    variable without having to avoid symbol table conflicts.</p>
405
406 <p>Reserved words in LLVM are very similar to reserved words in other
407    languages. There are keywords for different opcodes
408    ('<tt><a href="#i_add">add</a></tt>',
409    '<tt><a href="#i_bitcast">bitcast</a></tt>',
410    '<tt><a href="#i_ret">ret</a></tt>', etc...), for primitive type names
411    ('<tt><a href="#t_void">void</a></tt>',
412    '<tt><a href="#t_primitive">i32</a></tt>', etc...), and others.  These
413    reserved words cannot conflict with variable names, because none of them
414    start with a prefix character (<tt>'%'</tt> or <tt>'@'</tt>).</p>
415
416 <p>Here is an example of LLVM code to multiply the integer variable
417    '<tt>%X</tt>' by 8:</p>
418
419 <p>The easy way:</p>
420
421 <div class="doc_code">
422 <pre>
423 %result = <a href="#i_mul">mul</a> i32 %X, 8
424 </pre>
425 </div>
426
427 <p>After strength reduction:</p>
428
429 <div class="doc_code">
430 <pre>
431 %result = <a href="#i_shl">shl</a> i32 %X, i8 3
432 </pre>
433 </div>
434
435 <p>And the hard way:</p>
436
437 <div class="doc_code">
438 <pre>
439 <a href="#i_add">add</a> i32 %X, %X           <i>; yields {i32}:%0</i>
440 <a href="#i_add">add</a> i32 %0, %0           <i>; yields {i32}:%1</i>
441 %result = <a href="#i_add">add</a> i32 %1, %1
442 </pre>
443 </div>
444
445 <p>This last way of multiplying <tt>%X</tt> by 8 illustrates several important
446    lexical features of LLVM:</p>
447
448 <ol>
449   <li>Comments are delimited with a '<tt>;</tt>' and go until the end of
450       line.</li>
451
452   <li>Unnamed temporaries are created when the result of a computation is not
453       assigned to a named value.</li>
454
455   <li>Unnamed temporaries are numbered sequentially</li>
456 </ol>
457
458 <p>...and it also shows a convention that we follow in this document.  When
459    demonstrating instructions, we will follow an instruction with a comment that
460    defines the type and name of value produced.  Comments are shown in italic
461    text.</p>
462
463 </div>
464
465 <!-- *********************************************************************** -->
466 <div class="doc_section"> <a name="highlevel">High Level Structure</a> </div>
467 <!-- *********************************************************************** -->
468
469 <!-- ======================================================================= -->
470 <div class="doc_subsection"> <a name="modulestructure">Module Structure</a>
471 </div>
472
473 <div class="doc_text">
474
475 <p>LLVM programs are composed of "Module"s, each of which is a translation unit
476    of the input programs.  Each module consists of functions, global variables,
477    and symbol table entries.  Modules may be combined together with the LLVM
478    linker, which merges function (and global variable) definitions, resolves
479    forward declarations, and merges symbol table entries. Here is an example of
480    the "hello world" module:</p>
481
482 <div class="doc_code">
483 <pre><i>; Declare the string constant as a global constant...</i>
484 <a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a
485  href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00"          <i>; [13 x i8]*</i>
486
487 <i>; External declaration of the puts function</i>
488 <a href="#functionstructure">declare</a> i32 @puts(i8 *)                                           <i>; i32(i8 *)* </i>
489
490 <i>; Definition of main function</i>
491 define i32 @main() {                                              <i>; i32()* </i>
492         <i>; Convert [13 x i8]* to i8  *...</i>
493         %cast210 = <a
494  href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0   <i>; i8 *</i>
495
496         <i>; Call puts function to write out the string to stdout...</i>
497         <a
498  href="#i_call">call</a> i32 @puts(i8 * %cast210)                             <i>; i32</i>
499         <a
500  href="#i_ret">ret</a> i32 0<br>}<br>
501 </pre>
502 </div>
503
504 <p>This example is made up of a <a href="#globalvars">global variable</a> named
505    "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function, and
506    a <a href="#functionstructure">function definition</a> for
507    "<tt>main</tt>".</p>
508
509 <p>In general, a module is made up of a list of global values, where both
510    functions and global variables are global values.  Global values are
511    represented by a pointer to a memory location (in this case, a pointer to an
512    array of char, and a pointer to a function), and have one of the
513    following <a href="#linkage">linkage types</a>.</p>
514
515 </div>
516
517 <!-- ======================================================================= -->
518 <div class="doc_subsection">
519   <a name="linkage">Linkage Types</a>
520 </div>
521
522 <div class="doc_text">
523
524 <p>All Global Variables and Functions have one of the following types of
525    linkage:</p>
526
527 <dl>
528   <dt><tt><b><a name="linkage_private">private</a></b></tt>: </dt>
529   <dd>Global values with private linkage are only directly accessible by objects
530       in the current module.  In particular, linking code into a module with an
531       private global value may cause the private to be renamed as necessary to
532       avoid collisions.  Because the symbol is private to the module, all
533       references can be updated. This doesn't show up in any symbol table in the
534       object file.</dd>
535
536   <dt><tt><b><a name="linkage_linker_private">linker_private</a></b></tt>: </dt>
537   <dd>Similar to private, but the symbol is passed through the assembler and
538       removed by the linker after evaluation.  Note that (unlike private
539       symbols) linker_private symbols are subject to coalescing by the linker:
540       weak symbols get merged and redefinitions are rejected.  However, unlike
541       normal strong symbols, they are removed by the linker from the final
542       linked image (executable or dynamic library).</dd>
543
544   <dt><tt><b><a name="linkage_internal">internal</a></b></tt>: </dt>
545   <dd>Similar to private, but the value shows as a local symbol
546       (<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
547       corresponds to the notion of the '<tt>static</tt>' keyword in C.</dd>
548
549   <dt><tt><b><a name="linkage_available_externally">available_externally</a></b></tt>: </dt>
550   <dd>Globals with "<tt>available_externally</tt>" linkage are never emitted
551       into the object file corresponding to the LLVM module.  They exist to
552       allow inlining and other optimizations to take place given knowledge of
553       the definition of the global, which is known to be somewhere outside the
554       module.  Globals with <tt>available_externally</tt> linkage are allowed to
555       be discarded at will, and are otherwise the same as <tt>linkonce_odr</tt>.
556       This linkage type is only allowed on definitions, not declarations.</dd>
557
558   <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt>: </dt>
559   <dd>Globals with "<tt>linkonce</tt>" linkage are merged with other globals of
560       the same name when linkage occurs.  This is typically used to implement
561       inline functions, templates, or other code which must be generated in each
562       translation unit that uses it.  Unreferenced <tt>linkonce</tt> globals are
563       allowed to be discarded.</dd>
564
565   <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt>
566   <dd>"<tt>weak</tt>" linkage has the same merging semantics as
567       <tt>linkonce</tt> linkage, except that unreferenced globals with
568       <tt>weak</tt> linkage may not be discarded.  This is used for globals that
569       are declared "weak" in C source code.</dd>
570
571   <dt><tt><b><a name="linkage_common">common</a></b></tt>: </dt>
572   <dd>"<tt>common</tt>" linkage is most similar to "<tt>weak</tt>" linkage, but
573       they are used for tentative definitions in C, such as "<tt>int X;</tt>" at
574       global scope.
575       Symbols with "<tt>common</tt>" linkage are merged in the same way as
576       <tt>weak symbols</tt>, and they may not be deleted if unreferenced.
577       <tt>common</tt> symbols may not have an explicit section,
578       must have a zero initializer, and may not be marked '<a 
579       href="#globalvars"><tt>constant</tt></a>'.  Functions and aliases may not
580       have common linkage.</dd>
581
582
583   <dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt>
584   <dd>"<tt>appending</tt>" linkage may only be applied to global variables of
585       pointer to array type.  When two global variables with appending linkage
586       are linked together, the two global arrays are appended together.  This is
587       the LLVM, typesafe, equivalent of having the system linker append together
588       "sections" with identical names when .o files are linked.</dd>
589
590   <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt>: </dt>
591   <dd>The semantics of this linkage follow the ELF object file model: the symbol
592       is weak until linked, if not linked, the symbol becomes null instead of
593       being an undefined reference.</dd>
594
595   <dt><tt><b><a name="linkage_linkonce_odr">linkonce_odr</a></b></tt>: </dt>
596   <dt><tt><b><a name="linkage_weak_odr">weak_odr</a></b></tt>: </dt>
597   <dd>Some languages allow differing globals to be merged, such as two functions
598       with different semantics.  Other languages, such as <tt>C++</tt>, ensure
599       that only equivalent globals are ever merged (the "one definition rule" -
600       "ODR").  Such languages can use the <tt>linkonce_odr</tt>
601       and <tt>weak_odr</tt> linkage types to indicate that the global will only
602       be merged with equivalent globals.  These linkage types are otherwise the
603       same as their non-<tt>odr</tt> versions.</dd>
604
605   <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
606   <dd>If none of the above identifiers are used, the global is externally
607       visible, meaning that it participates in linkage and can be used to
608       resolve external symbol references.</dd>
609 </dl>
610
611 <p>The next two types of linkage are targeted for Microsoft Windows platform
612    only. They are designed to support importing (exporting) symbols from (to)
613    DLLs (Dynamic Link Libraries).</p>
614
615 <dl>
616   <dt><tt><b><a name="linkage_dllimport">dllimport</a></b></tt>: </dt>
617   <dd>"<tt>dllimport</tt>" linkage causes the compiler to reference a function
618       or variable via a global pointer to a pointer that is set up by the DLL
619       exporting the symbol. On Microsoft Windows targets, the pointer name is
620       formed by combining <code>__imp_</code> and the function or variable
621       name.</dd>
622
623   <dt><tt><b><a name="linkage_dllexport">dllexport</a></b></tt>: </dt>
624   <dd>"<tt>dllexport</tt>" linkage causes the compiler to provide a global
625       pointer to a pointer in a DLL, so that it can be referenced with the
626       <tt>dllimport</tt> attribute. On Microsoft Windows targets, the pointer
627       name is formed by combining <code>__imp_</code> and the function or
628       variable name.</dd>
629 </dl>
630
631 <p>For example, since the "<tt>.LC0</tt>" variable is defined to be internal, if
632    another module defined a "<tt>.LC0</tt>" variable and was linked with this
633    one, one of the two would be renamed, preventing a collision.  Since
634    "<tt>main</tt>" and "<tt>puts</tt>" are external (i.e., lacking any linkage
635    declarations), they are accessible outside of the current module.</p>
636
637 <p>It is illegal for a function <i>declaration</i> to have any linkage type
638    other than "externally visible", <tt>dllimport</tt>
639    or <tt>extern_weak</tt>.</p>
640
641 <p>Aliases can have only <tt>external</tt>, <tt>internal</tt>, <tt>weak</tt>
642    or <tt>weak_odr</tt> linkages.</p>
643
644 </div>
645
646 <!-- ======================================================================= -->
647 <div class="doc_subsection">
648   <a name="callingconv">Calling Conventions</a>
649 </div>
650
651 <div class="doc_text">
652
653 <p>LLVM <a href="#functionstructure">functions</a>, <a href="#i_call">calls</a>
654    and <a href="#i_invoke">invokes</a> can all have an optional calling
655    convention specified for the call.  The calling convention of any pair of
656    dynamic caller/callee must match, or the behavior of the program is
657    undefined.  The following calling conventions are supported by LLVM, and more
658    may be added in the future:</p>
659
660 <dl>
661   <dt><b>"<tt>ccc</tt>" - The C calling convention</b>:</dt>
662   <dd>This calling convention (the default if no other calling convention is
663       specified) matches the target C calling conventions.  This calling
664       convention supports varargs function calls and tolerates some mismatch in
665       the declared prototype and implemented declaration of the function (as
666       does normal C).</dd>
667
668   <dt><b>"<tt>fastcc</tt>" - The fast calling convention</b>:</dt>
669   <dd>This calling convention attempts to make calls as fast as possible
670       (e.g. by passing things in registers).  This calling convention allows the
671       target to use whatever tricks it wants to produce fast code for the
672       target, without having to conform to an externally specified ABI
673       (Application Binary Interface).  Implementations of this convention should
674       allow arbitrary <a href="CodeGenerator.html#tailcallopt">tail call
675       optimization</a> to be supported.  This calling convention does not
676       support varargs and requires the prototype of all callees to exactly match
677       the prototype of the function definition.</dd>
678
679   <dt><b>"<tt>coldcc</tt>" - The cold calling convention</b>:</dt>
680   <dd>This calling convention attempts to make code in the caller as efficient
681       as possible under the assumption that the call is not commonly executed.
682       As such, these calls often preserve all registers so that the call does
683       not break any live ranges in the caller side.  This calling convention
684       does not support varargs and requires the prototype of all callees to
685       exactly match the prototype of the function definition.</dd>
686
687   <dt><b>"<tt>cc &lt;<em>n</em>&gt;</tt>" - Numbered convention</b>:</dt>
688   <dd>Any calling convention may be specified by number, allowing
689       target-specific calling conventions to be used.  Target specific calling
690       conventions start at 64.</dd>
691 </dl>
692
693 <p>More calling conventions can be added/defined on an as-needed basis, to
694    support Pascal conventions or any other well-known target-independent
695    convention.</p>
696
697 </div>
698
699 <!-- ======================================================================= -->
700 <div class="doc_subsection">
701   <a name="visibility">Visibility Styles</a>
702 </div>
703
704 <div class="doc_text">
705
706 <p>All Global Variables and Functions have one of the following visibility
707    styles:</p>
708
709 <dl>
710   <dt><b>"<tt>default</tt>" - Default style</b>:</dt>
711   <dd>On targets that use the ELF object file format, default visibility means
712       that the declaration is visible to other modules and, in shared libraries,
713       means that the declared entity may be overridden. On Darwin, default
714       visibility means that the declaration is visible to other modules. Default
715       visibility corresponds to "external linkage" in the language.</dd>
716
717   <dt><b>"<tt>hidden</tt>" - Hidden style</b>:</dt>
718   <dd>Two declarations of an object with hidden visibility refer to the same
719       object if they are in the same shared object. Usually, hidden visibility
720       indicates that the symbol will not be placed into the dynamic symbol
721       table, so no other module (executable or shared library) can reference it
722       directly.</dd>
723
724   <dt><b>"<tt>protected</tt>" - Protected style</b>:</dt>
725   <dd>On ELF, protected visibility indicates that the symbol will be placed in
726       the dynamic symbol table, but that references within the defining module
727       will bind to the local symbol. That is, the symbol cannot be overridden by
728       another module.</dd>
729 </dl>
730
731 </div>
732
733 <!-- ======================================================================= -->
734 <div class="doc_subsection">
735   <a name="namedtypes">Named Types</a>
736 </div>
737
738 <div class="doc_text">
739
740 <p>LLVM IR allows you to specify name aliases for certain types.  This can make
741    it easier to read the IR and make the IR more condensed (particularly when
742    recursive types are involved).  An example of a name specification is:</p>
743
744 <div class="doc_code">
745 <pre>
746 %mytype = type { %mytype*, i32 }
747 </pre>
748 </div>
749
750 <p>You may give a name to any <a href="#typesystem">type</a> except
751    "<a href="t_void">void</a>".  Type name aliases may be used anywhere a type
752    is expected with the syntax "%mytype".</p>
753
754 <p>Note that type names are aliases for the structural type that they indicate,
755    and that you can therefore specify multiple names for the same type.  This
756    often leads to confusing behavior when dumping out a .ll file.  Since LLVM IR
757    uses structural typing, the name is not part of the type.  When printing out
758    LLVM IR, the printer will pick <em>one name</em> to render all types of a
759    particular shape.  This means that if you have code where two different
760    source types end up having the same LLVM type, that the dumper will sometimes
761    print the "wrong" or unexpected type.  This is an important design point and
762    isn't going to change.</p>
763
764 </div>
765
766 <!-- ======================================================================= -->
767 <div class="doc_subsection">
768   <a name="globalvars">Global Variables</a>
769 </div>
770
771 <div class="doc_text">
772
773 <p>Global variables define regions of memory allocated at compilation time
774    instead of run-time.  Global variables may optionally be initialized, may
775    have an explicit section to be placed in, and may have an optional explicit
776    alignment specified.  A variable may be defined as "thread_local", which
777    means that it will not be shared by threads (each thread will have a
778    separated copy of the variable).  A variable may be defined as a global
779    "constant," which indicates that the contents of the variable
780    will <b>never</b> be modified (enabling better optimization, allowing the
781    global data to be placed in the read-only section of an executable, etc).
782    Note that variables that need runtime initialization cannot be marked
783    "constant" as there is a store to the variable.</p>
784
785 <p>LLVM explicitly allows <em>declarations</em> of global variables to be marked
786    constant, even if the final definition of the global is not.  This capability
787    can be used to enable slightly better optimization of the program, but
788    requires the language definition to guarantee that optimizations based on the
789    'constantness' are valid for the translation units that do not include the
790    definition.</p>
791
792 <p>As SSA values, global variables define pointer values that are in scope
793    (i.e. they dominate) all basic blocks in the program.  Global variables
794    always define a pointer to their "content" type because they describe a
795    region of memory, and all memory objects in LLVM are accessed through
796    pointers.</p>
797
798 <p>A global variable may be declared to reside in a target-specific numbered
799    address space. For targets that support them, address spaces may affect how
800    optimizations are performed and/or what target instructions are used to
801    access the variable. The default address space is zero. The address space
802    qualifier must precede any other attributes.</p>
803
804 <p>LLVM allows an explicit section to be specified for globals.  If the target
805    supports it, it will emit globals to the section specified.</p>
806
807 <p>An explicit alignment may be specified for a global.  If not present, or if
808    the alignment is set to zero, the alignment of the global is set by the
809    target to whatever it feels convenient.  If an explicit alignment is
810    specified, the global is forced to have at least that much alignment.  All
811    alignments must be a power of 2.</p>
812
813 <p>For example, the following defines a global in a numbered address space with
814    an initializer, section, and alignment:</p>
815
816 <div class="doc_code">
817 <pre>
818 @G = addrspace(5) constant float 1.0, section "foo", align 4
819 </pre>
820 </div>
821
822 </div>
823
824
825 <!-- ======================================================================= -->
826 <div class="doc_subsection">
827   <a name="functionstructure">Functions</a>
828 </div>
829
830 <div class="doc_text">
831
832 <p>LLVM function definitions consist of the "<tt>define</tt>" keyord, an
833    optional <a href="#linkage">linkage type</a>, an optional
834    <a href="#visibility">visibility style</a>, an optional
835    <a href="#callingconv">calling convention</a>, a return type, an optional
836    <a href="#paramattrs">parameter attribute</a> for the return type, a function
837    name, a (possibly empty) argument list (each with optional
838    <a href="#paramattrs">parameter attributes</a>), optional
839    <a href="#fnattrs">function attributes</a>, an optional section, an optional
840    alignment, an optional <a href="#gc">garbage collector name</a>, an opening
841    curly brace, a list of basic blocks, and a closing curly brace.</p>
842
843 <p>LLVM function declarations consist of the "<tt>declare</tt>" keyword, an
844    optional <a href="#linkage">linkage type</a>, an optional
845    <a href="#visibility">visibility style</a>, an optional 
846    <a href="#callingconv">calling convention</a>, a return type, an optional
847    <a href="#paramattrs">parameter attribute</a> for the return type, a function
848    name, a possibly empty list of arguments, an optional alignment, and an
849    optional <a href="#gc">garbage collector name</a>.</p>
850
851 <p>A function definition contains a list of basic blocks, forming the CFG
852    (Control Flow Graph) for the function.  Each basic block may optionally start
853    with a label (giving the basic block a symbol table entry), contains a list
854    of instructions, and ends with a <a href="#terminators">terminator</a>
855    instruction (such as a branch or function return).</p>
856
857 <p>The first basic block in a function is special in two ways: it is immediately
858    executed on entrance to the function, and it is not allowed to have
859    predecessor basic blocks (i.e. there can not be any branches to the entry
860    block of a function).  Because the block can have no predecessors, it also
861    cannot have any <a href="#i_phi">PHI nodes</a>.</p>
862
863 <p>LLVM allows an explicit section to be specified for functions.  If the target
864    supports it, it will emit functions to the section specified.</p>
865
866 <p>An explicit alignment may be specified for a function.  If not present, or if
867    the alignment is set to zero, the alignment of the function is set by the
868    target to whatever it feels convenient.  If an explicit alignment is
869    specified, the function is forced to have at least that much alignment.  All
870    alignments must be a power of 2.</p>
871
872 <h5>Syntax:</h5>
873 <div class="doc_code">
874 <pre>
875 define [<a href="#linkage">linkage</a>] [<a href="#visibility">visibility</a>]
876        [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>]
877        &lt;ResultType&gt; @&lt;FunctionName&gt; ([argument list])
878        [<a href="#fnattrs">fn Attrs</a>] [section "name"] [align N]
879        [<a href="#gc">gc</a>] { ... }
880 </pre>
881 </div>
882
883 </div>
884
885 <!-- ======================================================================= -->
886 <div class="doc_subsection">
887   <a name="aliasstructure">Aliases</a>
888 </div>
889
890 <div class="doc_text">
891
892 <p>Aliases act as "second name" for the aliasee value (which can be either
893    function, global variable, another alias or bitcast of global value). Aliases
894    may have an optional <a href="#linkage">linkage type</a>, and an
895    optional <a href="#visibility">visibility style</a>.</p>
896
897 <h5>Syntax:</h5>
898 <div class="doc_code">
899 <pre>
900 @&lt;Name&gt; = alias [Linkage] [Visibility] &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
901 </pre>
902 </div>
903
904 </div>
905
906 <!-- ======================================================================= -->
907 <div class="doc_subsection"><a name="paramattrs">Parameter Attributes</a></div>
908
909 <div class="doc_text">
910
911 <p>The return type and each parameter of a function type may have a set of
912    <i>parameter attributes</i> associated with them. Parameter attributes are
913    used to communicate additional information about the result or parameters of
914    a function. Parameter attributes are considered to be part of the function,
915    not of the function type, so functions with different parameter attributes
916    can have the same function type.</p>
917
918 <p>Parameter attributes are simple keywords that follow the type specified. If
919    multiple parameter attributes are needed, they are space separated. For
920    example:</p>
921
922 <div class="doc_code">
923 <pre>
924 declare i32 @printf(i8* noalias nocapture, ...)
925 declare i32 @atoi(i8 zeroext)
926 declare signext i8 @returns_signed_char()
927 </pre>
928 </div>
929
930 <p>Note that any attributes for the function result (<tt>nounwind</tt>,
931    <tt>readonly</tt>) come immediately after the argument list.</p>
932
933 <p>Currently, only the following parameter attributes are defined:</p>
934
935 <dl>
936   <dt><tt>zeroext</tt></dt>
937   <dd>This indicates to the code generator that the parameter or return value
938       should be zero-extended to a 32-bit value by the caller (for a parameter)
939       or the callee (for a return value).</dd>
940
941   <dt><tt>signext</tt></dt>
942   <dd>This indicates to the code generator that the parameter or return value
943       should be sign-extended to a 32-bit value by the caller (for a parameter)
944       or the callee (for a return value).</dd>
945
946   <dt><tt>inreg</tt></dt>
947   <dd>This indicates that this parameter or return value should be treated in a
948       special target-dependent fashion during while emitting code for a function
949       call or return (usually, by putting it in a register as opposed to memory,
950       though some targets use it to distinguish between two different kinds of
951       registers).  Use of this attribute is target-specific.</dd>
952
953   <dt><tt><a name="byval">byval</a></tt></dt>
954   <dd>This indicates that the pointer parameter should really be passed by value
955       to the function.  The attribute implies that a hidden copy of the pointee
956       is made between the caller and the callee, so the callee is unable to
957       modify the value in the callee.  This attribute is only valid on LLVM
958       pointer arguments.  It is generally used to pass structs and arrays by
959       value, but is also valid on pointers to scalars.  The copy is considered
960       to belong to the caller not the callee (for example,
961       <tt><a href="#readonly">readonly</a></tt> functions should not write to
962       <tt>byval</tt> parameters). This is not a valid attribute for return
963       values.  The byval attribute also supports specifying an alignment with
964       the align attribute.  This has a target-specific effect on the code
965       generator that usually indicates a desired alignment for the synthesized
966       stack slot.</dd>
967
968   <dt><tt>sret</tt></dt>
969   <dd>This indicates that the pointer parameter specifies the address of a
970       structure that is the return value of the function in the source program.
971       This pointer must be guaranteed by the caller to be valid: loads and
972       stores to the structure may be assumed by the callee to not to trap.  This
973       may only be applied to the first parameter. This is not a valid attribute
974       for return values. </dd>
975
976   <dt><tt>noalias</tt></dt>
977   <dd>This indicates that the pointer does not alias any global or any other
978       parameter.  The caller is responsible for ensuring that this is the
979       case. On a function return value, <tt>noalias</tt> additionally indicates
980       that the pointer does not alias any other pointers visible to the
981       caller. For further details, please see the discussion of the NoAlias
982       response in
983       <a href="http://llvm.org/docs/AliasAnalysis.html#MustMayNo">alias
984       analysis</a>.</dd>
985
986   <dt><tt>nocapture</tt></dt>
987   <dd>This indicates that the callee does not make any copies of the pointer
988       that outlive the callee itself. This is not a valid attribute for return
989       values.</dd>
990
991   <dt><tt>nest</tt></dt>
992   <dd>This indicates that the pointer parameter can be excised using the
993       <a href="#int_trampoline">trampoline intrinsics</a>. This is not a valid
994       attribute for return values.</dd>
995 </dl>
996
997 </div>
998
999 <!-- ======================================================================= -->
1000 <div class="doc_subsection">
1001   <a name="gc">Garbage Collector Names</a>
1002 </div>
1003
1004 <div class="doc_text">
1005
1006 <p>Each function may specify a garbage collector name, which is simply a
1007    string:</p>
1008
1009 <div class="doc_code">
1010 <pre>
1011 define void @f() gc "name" { ...
1012 </pre>
1013 </div>
1014
1015 <p>The compiler declares the supported values of <i>name</i>. Specifying a
1016    collector which will cause the compiler to alter its output in order to
1017    support the named garbage collection algorithm.</p>
1018
1019 </div>
1020
1021 <!-- ======================================================================= -->
1022 <div class="doc_subsection">
1023   <a name="fnattrs">Function Attributes</a>
1024 </div>
1025
1026 <div class="doc_text">
1027
1028 <p>Function attributes are set to communicate additional information about a
1029    function. Function attributes are considered to be part of the function, not
1030    of the function type, so functions with different parameter attributes can
1031    have the same function type.</p>
1032
1033 <p>Function attributes are simple keywords that follow the type specified. If
1034    multiple attributes are needed, they are space separated. For example:</p>
1035
1036 <div class="doc_code">
1037 <pre>
1038 define void @f() noinline { ... }
1039 define void @f() alwaysinline { ... }
1040 define void @f() alwaysinline optsize { ... }
1041 define void @f() optsize
1042 </pre>
1043 </div>
1044
1045 <dl>
1046   <dt><tt>alwaysinline</tt></dt>
1047   <dd>This attribute indicates that the inliner should attempt to inline this
1048       function into callers whenever possible, ignoring any active inlining size
1049       threshold for this caller.</dd>
1050
1051   <dt><tt>inlinehint</tt></dt>
1052   <dd>This attribute indicates that the source code contained a hint that inlining
1053       this function is desirable (such as the "inline" keyword in C/C++).  It
1054       is just a hint; it imposes no requirements on the inliner.</dd>
1055
1056   <dt><tt>noinline</tt></dt>
1057   <dd>This attribute indicates that the inliner should never inline this
1058       function in any situation. This attribute may not be used together with
1059       the <tt>alwaysinline</tt> attribute.</dd>
1060
1061   <dt><tt>optsize</tt></dt>
1062   <dd>This attribute suggests that optimization passes and code generator passes
1063       make choices that keep the code size of this function low, and otherwise
1064       do optimizations specifically to reduce code size.</dd>
1065
1066   <dt><tt>noreturn</tt></dt>
1067   <dd>This function attribute indicates that the function never returns
1068       normally.  This produces undefined behavior at runtime if the function
1069       ever does dynamically return.</dd>
1070
1071   <dt><tt>nounwind</tt></dt>
1072   <dd>This function attribute indicates that the function never returns with an
1073       unwind or exceptional control flow.  If the function does unwind, its
1074       runtime behavior is undefined.</dd>
1075
1076   <dt><tt>readnone</tt></dt>
1077   <dd>This attribute indicates that the function computes its result (or decides
1078       to unwind an exception) based strictly on its arguments, without
1079       dereferencing any pointer arguments or otherwise accessing any mutable
1080       state (e.g. memory, control registers, etc) visible to caller functions.
1081       It does not write through any pointer arguments
1082       (including <tt><a href="#byval">byval</a></tt> arguments) and never
1083       changes any state visible to callers.  This means that it cannot unwind
1084       exceptions by calling the <tt>C++</tt> exception throwing methods, but
1085       could use the <tt>unwind</tt> instruction.</dd>
1086
1087   <dt><tt><a name="readonly">readonly</a></tt></dt>
1088   <dd>This attribute indicates that the function does not write through any
1089       pointer arguments (including <tt><a href="#byval">byval</a></tt>
1090       arguments) or otherwise modify any state (e.g. memory, control registers,
1091       etc) visible to caller functions.  It may dereference pointer arguments
1092       and read state that may be set in the caller.  A readonly function always
1093       returns the same value (or unwinds an exception identically) when called
1094       with the same set of arguments and global state.  It cannot unwind an
1095       exception by calling the <tt>C++</tt> exception throwing methods, but may
1096       use the <tt>unwind</tt> instruction.</dd>
1097
1098   <dt><tt><a name="ssp">ssp</a></tt></dt>
1099   <dd>This attribute indicates that the function should emit a stack smashing
1100       protector. It is in the form of a "canary"&mdash;a random value placed on
1101       the stack before the local variables that's checked upon return from the
1102       function to see if it has been overwritten. A heuristic is used to
1103       determine if a function needs stack protectors or not.<br>
1104 <br>
1105       If a function that has an <tt>ssp</tt> attribute is inlined into a
1106       function that doesn't have an <tt>ssp</tt> attribute, then the resulting
1107       function will have an <tt>ssp</tt> attribute.</dd>
1108
1109   <dt><tt>sspreq</tt></dt>
1110   <dd>This attribute indicates that the function should <em>always</em> emit a
1111       stack smashing protector. This overrides
1112       the <tt><a href="#ssp">ssp</a></tt> function attribute.<br>
1113 <br>
1114       If a function that has an <tt>sspreq</tt> attribute is inlined into a
1115       function that doesn't have an <tt>sspreq</tt> attribute or which has
1116       an <tt>ssp</tt> attribute, then the resulting function will have
1117       an <tt>sspreq</tt> attribute.</dd>
1118
1119   <dt><tt>noredzone</tt></dt>
1120   <dd>This attribute indicates that the code generator should not use a red
1121       zone, even if the target-specific ABI normally permits it.</dd>
1122
1123   <dt><tt>noimplicitfloat</tt></dt>
1124   <dd>This attributes disables implicit floating point instructions.</dd>
1125
1126   <dt><tt>naked</tt></dt>
1127   <dd>This attribute disables prologue / epilogue emission for the function.
1128       This can have very system-specific consequences.</dd>
1129 </dl>
1130
1131 </div>
1132
1133 <!-- ======================================================================= -->
1134 <div class="doc_subsection">
1135   <a name="moduleasm">Module-Level Inline Assembly</a>
1136 </div>
1137
1138 <div class="doc_text">
1139
1140 <p>Modules may contain "module-level inline asm" blocks, which corresponds to
1141    the GCC "file scope inline asm" blocks.  These blocks are internally
1142    concatenated by LLVM and treated as a single unit, but may be separated in
1143    the <tt>.ll</tt> file if desired.  The syntax is very simple:</p>
1144
1145 <div class="doc_code">
1146 <pre>
1147 module asm "inline asm code goes here"
1148 module asm "more can go here"
1149 </pre>
1150 </div>
1151
1152 <p>The strings can contain any character by escaping non-printable characters.
1153    The escape sequence used is simply "\xx" where "xx" is the two digit hex code
1154    for the number.</p>
1155
1156 <p>The inline asm code is simply printed to the machine code .s file when
1157    assembly code is generated.</p>
1158
1159 </div>
1160
1161 <!-- ======================================================================= -->
1162 <div class="doc_subsection">
1163   <a name="datalayout">Data Layout</a>
1164 </div>
1165
1166 <div class="doc_text">
1167
1168 <p>A module may specify a target specific data layout string that specifies how
1169    data is to be laid out in memory. The syntax for the data layout is
1170    simply:</p>
1171
1172 <div class="doc_code">
1173 <pre>
1174 target datalayout = "<i>layout specification</i>"
1175 </pre>
1176 </div>
1177
1178 <p>The <i>layout specification</i> consists of a list of specifications
1179    separated by the minus sign character ('-').  Each specification starts with
1180    a letter and may include other information after the letter to define some
1181    aspect of the data layout.  The specifications accepted are as follows:</p>
1182
1183 <dl>
1184   <dt><tt>E</tt></dt>
1185   <dd>Specifies that the target lays out data in big-endian form. That is, the
1186       bits with the most significance have the lowest address location.</dd>
1187
1188   <dt><tt>e</tt></dt>
1189   <dd>Specifies that the target lays out data in little-endian form. That is,
1190       the bits with the least significance have the lowest address
1191       location.</dd>
1192
1193   <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1194   <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and 
1195       <i>preferred</i> alignments. All sizes are in bits. Specifying
1196       the <i>pref</i> alignment is optional. If omitted, the
1197       preceding <tt>:</tt> should be omitted too.</dd>
1198
1199   <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1200   <dd>This specifies the alignment for an integer type of a given bit
1201       <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd>
1202
1203   <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1204   <dd>This specifies the alignment for a vector type of a given bit 
1205       <i>size</i>.</dd>
1206
1207   <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1208   <dd>This specifies the alignment for a floating point type of a given bit 
1209       <i>size</i>. The value of <i>size</i> must be either 32 (float) or 64
1210       (double).</dd>
1211
1212   <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1213   <dd>This specifies the alignment for an aggregate type of a given bit
1214       <i>size</i>.</dd>
1215
1216   <dt><tt>s<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1217   <dd>This specifies the alignment for a stack object of a given bit
1218       <i>size</i>.</dd>
1219 </dl>
1220
1221 <p>When constructing the data layout for a given target, LLVM starts with a
1222    default set of specifications which are then (possibly) overriden by the
1223    specifications in the <tt>datalayout</tt> keyword. The default specifications
1224    are given in this list:</p>
1225
1226 <ul>
1227   <li><tt>E</tt> - big endian</li>
1228   <li><tt>p:32:64:64</tt> - 32-bit pointers with 64-bit alignment</li>
1229   <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li>
1230   <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li>
1231   <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li>
1232   <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li>
1233   <li><tt>i64:32:64</tt> - i64 has ABI alignment of 32-bits but preferred
1234   alignment of 64-bits</li>
1235   <li><tt>f32:32:32</tt> - float is 32-bit aligned</li>
1236   <li><tt>f64:64:64</tt> - double is 64-bit aligned</li>
1237   <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li>
1238   <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li>
1239   <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li>
1240   <li><tt>s0:64:64</tt> - stack objects are 64-bit aligned</li>
1241 </ul>
1242
1243 <p>When LLVM is determining the alignment for a given type, it uses the
1244    following rules:</p>
1245
1246 <ol>
1247   <li>If the type sought is an exact match for one of the specifications, that
1248       specification is used.</li>
1249
1250   <li>If no match is found, and the type sought is an integer type, then the
1251       smallest integer type that is larger than the bitwidth of the sought type
1252       is used. If none of the specifications are larger than the bitwidth then
1253       the the largest integer type is used. For example, given the default
1254       specifications above, the i7 type will use the alignment of i8 (next
1255       largest) while both i65 and i256 will use the alignment of i64 (largest
1256       specified).</li>
1257
1258   <li>If no match is found, and the type sought is a vector type, then the
1259       largest vector type that is smaller than the sought vector type will be
1260       used as a fall back.  This happens because &lt;128 x double&gt; can be
1261       implemented in terms of 64 &lt;2 x double&gt;, for example.</li>
1262 </ol>
1263
1264 </div>
1265
1266 <!-- ======================================================================= -->
1267 <div class="doc_subsection">
1268   <a name="pointeraliasing">Pointer Aliasing Rules</a>
1269 </div>
1270
1271 <div class="doc_text">
1272
1273 <p>Any memory access must be done through a pointer value associated
1274 with an address range of the memory access, otherwise the behavior
1275 is undefined. Pointer values are associated with address ranges
1276 according to the following rules:</p>
1277
1278 <ul>
1279   <li>A pointer value formed from a
1280       <tt><a href="#i_getelementptr">getelementptr</a></tt> instruction
1281       is associated with the addresses associated with the first operand
1282       of the <tt>getelementptr</tt>.</li>
1283   <li>An address of a global variable is associated with the address
1284       range of the variable's storage.</li>
1285   <li>The result value of an allocation instruction is associated with
1286       the address range of the allocated storage.</li>
1287   <li>A null pointer in the default address-space is associated with
1288       no address.</li>
1289   <li>A pointer value formed by an
1290       <tt><a href="#i_inttoptr">inttoptr</a></tt> is associated with all
1291       address ranges of all pointer values that contribute (directly or
1292       indirectly) to the computation of the pointer's value.</li>
1293   <li>The result value of a
1294       <tt><a href="#i_bitcast">bitcast</a></tt> is associated with all
1295       addresses associated with the operand of the <tt>bitcast</tt>.</li>
1296   <li>An integer constant other than zero or a pointer value returned
1297       from a function not defined within LLVM may be associated with address
1298       ranges allocated through mechanisms other than those provided by
1299       LLVM. Such ranges shall not overlap with any ranges of addresses
1300       allocated by mechanisms provided by LLVM.</li>
1301   </ul>
1302
1303 <p>LLVM IR does not associate types with memory. The result type of a
1304 <tt><a href="#i_load">load</a></tt> merely indicates the size and
1305 alignment of the memory from which to load, as well as the
1306 interpretation of the value. The first operand of a
1307 <tt><a href="#i_store">store</a></tt> similarly only indicates the size
1308 and alignment of the store.</p>
1309
1310 <p>Consequently, type-based alias analysis, aka TBAA, aka
1311 <tt>-fstrict-aliasing</tt>, is not applicable to general unadorned
1312 LLVM IR. <a href="#metadata">Metadata</a> may be used to encode
1313 additional information which specialized optimization passes may use
1314 to implement type-based alias analysis.</p>
1315
1316 </div>
1317
1318 <!-- *********************************************************************** -->
1319 <div class="doc_section"> <a name="typesystem">Type System</a> </div>
1320 <!-- *********************************************************************** -->
1321
1322 <div class="doc_text">
1323
1324 <p>The LLVM type system is one of the most important features of the
1325    intermediate representation.  Being typed enables a number of optimizations
1326    to be performed on the intermediate representation directly, without having
1327    to do extra analyses on the side before the transformation.  A strong type
1328    system makes it easier to read the generated code and enables novel analyses
1329    and transformations that are not feasible to perform on normal three address
1330    code representations.</p>
1331
1332 </div>
1333
1334 <!-- ======================================================================= -->
1335 <div class="doc_subsection"> <a name="t_classifications">Type
1336 Classifications</a> </div>
1337
1338 <div class="doc_text">
1339
1340 <p>The types fall into a few useful classifications:</p>
1341
1342 <table border="1" cellspacing="0" cellpadding="4">
1343   <tbody>
1344     <tr><th>Classification</th><th>Types</th></tr>
1345     <tr>
1346       <td><a href="#t_integer">integer</a></td>
1347       <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td>
1348     </tr>
1349     <tr>
1350       <td><a href="#t_floating">floating point</a></td>
1351       <td><tt>float, double, x86_fp80, fp128, ppc_fp128</tt></td>
1352     </tr>
1353     <tr>
1354       <td><a name="t_firstclass">first class</a></td>
1355       <td><a href="#t_integer">integer</a>,
1356           <a href="#t_floating">floating point</a>,
1357           <a href="#t_pointer">pointer</a>,
1358           <a href="#t_vector">vector</a>,
1359           <a href="#t_struct">structure</a>,
1360           <a href="#t_array">array</a>,
1361           <a href="#t_label">label</a>,
1362           <a href="#t_metadata">metadata</a>.
1363       </td>
1364     </tr>
1365     <tr>
1366       <td><a href="#t_primitive">primitive</a></td>
1367       <td><a href="#t_label">label</a>,
1368           <a href="#t_void">void</a>,
1369           <a href="#t_floating">floating point</a>,
1370           <a href="#t_metadata">metadata</a>.</td>
1371     </tr>
1372     <tr>
1373       <td><a href="#t_derived">derived</a></td>
1374       <td><a href="#t_integer">integer</a>,
1375           <a href="#t_array">array</a>,
1376           <a href="#t_function">function</a>,
1377           <a href="#t_pointer">pointer</a>,
1378           <a href="#t_struct">structure</a>,
1379           <a href="#t_pstruct">packed structure</a>,
1380           <a href="#t_vector">vector</a>,
1381           <a href="#t_opaque">opaque</a>.
1382       </td>
1383     </tr>
1384   </tbody>
1385 </table>
1386
1387 <p>The <a href="#t_firstclass">first class</a> types are perhaps the most
1388    important.  Values of these types are the only ones which can be produced by
1389    instructions.</p>
1390
1391 </div>
1392
1393 <!-- ======================================================================= -->
1394 <div class="doc_subsection"> <a name="t_primitive">Primitive Types</a> </div>
1395
1396 <div class="doc_text">
1397
1398 <p>The primitive types are the fundamental building blocks of the LLVM
1399    system.</p>
1400
1401 </div>
1402
1403 <!-- _______________________________________________________________________ -->
1404 <div class="doc_subsubsection"> <a name="t_integer">Integer Type</a> </div>
1405
1406 <div class="doc_text">
1407
1408 <h5>Overview:</h5>
1409 <p>The integer type is a very simple type that simply specifies an arbitrary
1410    bit width for the integer type desired. Any bit width from 1 bit to
1411    2<sup>23</sup>-1 (about 8 million) can be specified.</p>
1412
1413 <h5>Syntax:</h5>
1414 <pre>
1415   iN
1416 </pre>
1417
1418 <p>The number of bits the integer will occupy is specified by the <tt>N</tt>
1419    value.</p>
1420
1421 <h5>Examples:</h5>
1422 <table class="layout">
1423   <tr class="layout">
1424     <td class="left"><tt>i1</tt></td>
1425     <td class="left">a single-bit integer.</td>
1426   </tr>
1427   <tr class="layout">
1428     <td class="left"><tt>i32</tt></td>
1429     <td class="left">a 32-bit integer.</td>
1430   </tr>
1431   <tr class="layout">
1432     <td class="left"><tt>i1942652</tt></td>
1433     <td class="left">a really big integer of over 1 million bits.</td>
1434   </tr>
1435 </table>
1436
1437 <p>Note that the code generator does not yet support large integer types to be
1438    used as function return types. The specific limit on how large a return type
1439    the code generator can currently handle is target-dependent; currently it's
1440    often 64 bits for 32-bit targets and 128 bits for 64-bit targets.</p>
1441
1442 </div>
1443
1444 <!-- _______________________________________________________________________ -->
1445 <div class="doc_subsubsection"> <a name="t_floating">Floating Point Types</a> </div>
1446
1447 <div class="doc_text">
1448
1449 <table>
1450   <tbody>
1451     <tr><th>Type</th><th>Description</th></tr>
1452     <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
1453     <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
1454     <tr><td><tt>fp128</tt></td><td>128-bit floating point value (112-bit mantissa)</td></tr>
1455     <tr><td><tt>x86_fp80</tt></td><td>80-bit floating point value (X87)</td></tr>
1456     <tr><td><tt>ppc_fp128</tt></td><td>128-bit floating point value (two 64-bits)</td></tr>
1457   </tbody>
1458 </table>
1459
1460 </div>
1461
1462 <!-- _______________________________________________________________________ -->
1463 <div class="doc_subsubsection"> <a name="t_void">Void Type</a> </div>
1464
1465 <div class="doc_text">
1466
1467 <h5>Overview:</h5>
1468 <p>The void type does not represent any value and has no size.</p>
1469
1470 <h5>Syntax:</h5>
1471 <pre>
1472   void
1473 </pre>
1474
1475 </div>
1476
1477 <!-- _______________________________________________________________________ -->
1478 <div class="doc_subsubsection"> <a name="t_label">Label Type</a> </div>
1479
1480 <div class="doc_text">
1481
1482 <h5>Overview:</h5>
1483 <p>The label type represents code labels.</p>
1484
1485 <h5>Syntax:</h5>
1486 <pre>
1487   label
1488 </pre>
1489
1490 </div>
1491
1492 <!-- _______________________________________________________________________ -->
1493 <div class="doc_subsubsection"> <a name="t_metadata">Metadata Type</a> </div>
1494
1495 <div class="doc_text">
1496
1497 <h5>Overview:</h5>
1498 <p>The metadata type represents embedded metadata. No derived types may be
1499    created from metadata except for <a href="#t_function">function</a>
1500    arguments.
1501
1502 <h5>Syntax:</h5>
1503 <pre>
1504   metadata
1505 </pre>
1506
1507 </div>
1508
1509
1510 <!-- ======================================================================= -->
1511 <div class="doc_subsection"> <a name="t_derived">Derived Types</a> </div>
1512
1513 <div class="doc_text">
1514
1515 <p>The real power in LLVM comes from the derived types in the system.  This is
1516    what allows a programmer to represent arrays, functions, pointers, and other
1517    useful types.  Each of these types contain one or more element types which
1518    may be a primitive type, or another derived type.  For example, it is
1519    possible to have a two dimensional array, using an array as the element type
1520    of another array.</p>
1521
1522 </div>
1523
1524 <!-- _______________________________________________________________________ -->
1525 <div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>
1526
1527 <div class="doc_text">
1528
1529 <h5>Overview:</h5>
1530 <p>The array type is a very simple derived type that arranges elements
1531    sequentially in memory.  The array type requires a size (number of elements)
1532    and an underlying data type.</p>
1533
1534 <h5>Syntax:</h5>
1535 <pre>
1536   [&lt;# elements&gt; x &lt;elementtype&gt;]
1537 </pre>
1538
1539 <p>The number of elements is a constant integer value; <tt>elementtype</tt> may
1540    be any type with a size.</p>
1541
1542 <h5>Examples:</h5>
1543 <table class="layout">
1544   <tr class="layout">
1545     <td class="left"><tt>[40 x i32]</tt></td>
1546     <td class="left">Array of 40 32-bit integer values.</td>
1547   </tr>
1548   <tr class="layout">
1549     <td class="left"><tt>[41 x i32]</tt></td>
1550     <td class="left">Array of 41 32-bit integer values.</td>
1551   </tr>
1552   <tr class="layout">
1553     <td class="left"><tt>[4 x i8]</tt></td>
1554     <td class="left">Array of 4 8-bit integer values.</td>
1555   </tr>
1556 </table>
1557 <p>Here are some examples of multidimensional arrays:</p>
1558 <table class="layout">
1559   <tr class="layout">
1560     <td class="left"><tt>[3 x [4 x i32]]</tt></td>
1561     <td class="left">3x4 array of 32-bit integer values.</td>
1562   </tr>
1563   <tr class="layout">
1564     <td class="left"><tt>[12 x [10 x float]]</tt></td>
1565     <td class="left">12x10 array of single precision floating point values.</td>
1566   </tr>
1567   <tr class="layout">
1568     <td class="left"><tt>[2 x [3 x [4 x i16]]]</tt></td>
1569     <td class="left">2x3x4 array of 16-bit integer  values.</td>
1570   </tr>
1571 </table>
1572
1573 <p>Note that 'variable sized arrays' can be implemented in LLVM with a zero
1574    length array.  Normally, accesses past the end of an array are undefined in
1575    LLVM (e.g. it is illegal to access the 5th element of a 3 element array).  As
1576    a special case, however, zero length arrays are recognized to be variable
1577    length.  This allows implementation of 'pascal style arrays' with the LLVM
1578    type "<tt>{ i32, [0 x float]}</tt>", for example.</p>
1579
1580 <p>Note that the code generator does not yet support large aggregate types to be
1581    used as function return types. The specific limit on how large an aggregate
1582    return type the code generator can currently handle is target-dependent, and
1583    also dependent on the aggregate element types.</p>
1584
1585 </div>
1586
1587 <!-- _______________________________________________________________________ -->
1588 <div class="doc_subsubsection"> <a name="t_function">Function Type</a> </div>
1589
1590 <div class="doc_text">
1591
1592 <h5>Overview:</h5>
1593 <p>The function type can be thought of as a function signature.  It consists of
1594    a return type and a list of formal parameter types. The return type of a
1595    function type is a scalar type, a void type, or a struct type.  If the return
1596    type is a struct type then all struct elements must be of first class types,
1597    and the struct must have at least one element.</p>
1598
1599 <h5>Syntax:</h5>
1600 <pre>
1601   &lt;returntype&gt; (&lt;parameter list&gt;)
1602 </pre>
1603
1604 <p>...where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of type
1605    specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
1606    which indicates that the function takes a variable number of arguments.
1607    Variable argument functions can access their arguments with
1608    the <a href="#int_varargs">variable argument handling intrinsic</a>
1609    functions.  '<tt>&lt;returntype&gt;</tt>' is a any type except
1610    <a href="#t_label">label</a>.</p>
1611
1612 <h5>Examples:</h5>
1613 <table class="layout">
1614   <tr class="layout">
1615     <td class="left"><tt>i32 (i32)</tt></td>
1616     <td class="left">function taking an <tt>i32</tt>, returning an <tt>i32</tt>
1617     </td>
1618   </tr><tr class="layout">
1619     <td class="left"><tt>float&nbsp;(i16&nbsp;signext,&nbsp;i32&nbsp;*)&nbsp;*
1620     </tt></td>
1621     <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes 
1622       an <tt>i16</tt> that should be sign extended and a 
1623       <a href="#t_pointer">pointer</a> to <tt>i32</tt>, returning 
1624       <tt>float</tt>.
1625     </td>
1626   </tr><tr class="layout">
1627     <td class="left"><tt>i32 (i8*, ...)</tt></td>
1628     <td class="left">A vararg function that takes at least one 
1629       <a href="#t_pointer">pointer</a> to <tt>i8 </tt> (char in C), 
1630       which returns an integer.  This is the signature for <tt>printf</tt> in 
1631       LLVM.
1632     </td>
1633   </tr><tr class="layout">
1634     <td class="left"><tt>{i32, i32} (i32)</tt></td>
1635     <td class="left">A function taking an <tt>i32</tt>, returning a
1636         <a href="#t_struct">structure</a> containing two <tt>i32</tt> values
1637     </td>
1638   </tr>
1639 </table>
1640
1641 </div>
1642
1643 <!-- _______________________________________________________________________ -->
1644 <div class="doc_subsubsection"> <a name="t_struct">Structure Type</a> </div>
1645
1646 <div class="doc_text">
1647
1648 <h5>Overview:</h5>
1649 <p>The structure type is used to represent a collection of data members together
1650    in memory.  The packing of the field types is defined to match the ABI of the
1651    underlying processor.  The elements of a structure may be any type that has a
1652    size.</p>
1653
1654 <p>Structures are accessed using '<tt><a href="#i_load">load</a></tt> and
1655    '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
1656    the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
1657
1658 <h5>Syntax:</h5>
1659 <pre>
1660   { &lt;type list&gt; }
1661 </pre>
1662
1663 <h5>Examples:</h5>
1664 <table class="layout">
1665   <tr class="layout">
1666     <td class="left"><tt>{ i32, i32, i32 }</tt></td>
1667     <td class="left">A triple of three <tt>i32</tt> values</td>
1668   </tr><tr class="layout">
1669     <td class="left"><tt>{&nbsp;float,&nbsp;i32&nbsp;(i32)&nbsp;*&nbsp;}</tt></td>
1670     <td class="left">A pair, where the first element is a <tt>float</tt> and the
1671       second element is a <a href="#t_pointer">pointer</a> to a
1672       <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
1673       an <tt>i32</tt>.</td>
1674   </tr>
1675 </table>
1676
1677 <p>Note that the code generator does not yet support large aggregate types to be
1678    used as function return types. The specific limit on how large an aggregate
1679    return type the code generator can currently handle is target-dependent, and
1680    also dependent on the aggregate element types.</p>
1681
1682 </div>
1683
1684 <!-- _______________________________________________________________________ -->
1685 <div class="doc_subsubsection"> <a name="t_pstruct">Packed Structure Type</a>
1686 </div>
1687
1688 <div class="doc_text">
1689
1690 <h5>Overview:</h5>
1691 <p>The packed structure type is used to represent a collection of data members
1692    together in memory.  There is no padding between fields.  Further, the
1693    alignment of a packed structure is 1 byte.  The elements of a packed
1694    structure may be any type that has a size.</p>
1695
1696 <p>Structures are accessed using '<tt><a href="#i_load">load</a></tt> and
1697    '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
1698    the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
1699
1700 <h5>Syntax:</h5>
1701 <pre>
1702   &lt; { &lt;type list&gt; } &gt;
1703 </pre>
1704
1705 <h5>Examples:</h5>
1706 <table class="layout">
1707   <tr class="layout">
1708     <td class="left"><tt>&lt; { i32, i32, i32 } &gt;</tt></td>
1709     <td class="left">A triple of three <tt>i32</tt> values</td>
1710   </tr><tr class="layout">
1711   <td class="left">
1712 <tt>&lt;&nbsp;{&nbsp;float,&nbsp;i32&nbsp;(i32)*&nbsp;}&nbsp;&gt;</tt></td>
1713     <td class="left">A pair, where the first element is a <tt>float</tt> and the
1714       second element is a <a href="#t_pointer">pointer</a> to a
1715       <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
1716       an <tt>i32</tt>.</td>
1717   </tr>
1718 </table>
1719
1720 </div>
1721
1722 <!-- _______________________________________________________________________ -->
1723 <div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
1724
1725 <div class="doc_text">
1726
1727 <h5>Overview:</h5>
1728 <p>As in many languages, the pointer type represents a pointer or reference to
1729    another object, which must live in memory. Pointer types may have an optional
1730    address space attribute defining the target-specific numbered address space
1731    where the pointed-to object resides. The default address space is zero.</p>
1732
1733 <p>Note that LLVM does not permit pointers to void (<tt>void*</tt>) nor does it
1734    permit pointers to labels (<tt>label*</tt>).  Use <tt>i8*</tt> instead.</p>
1735
1736 <h5>Syntax:</h5>
1737 <pre>
1738   &lt;type&gt; *
1739 </pre>
1740
1741 <h5>Examples:</h5>
1742 <table class="layout">
1743   <tr class="layout">
1744     <td class="left"><tt>[4 x i32]*</tt></td>
1745     <td class="left">A <a href="#t_pointer">pointer</a> to <a
1746                     href="#t_array">array</a> of four <tt>i32</tt> values.</td>
1747   </tr>
1748   <tr class="layout">
1749     <td class="left"><tt>i32 (i32 *) *</tt></td>
1750     <td class="left"> A <a href="#t_pointer">pointer</a> to a <a
1751       href="#t_function">function</a> that takes an <tt>i32*</tt>, returning an
1752       <tt>i32</tt>.</td>
1753   </tr>
1754   <tr class="layout">
1755     <td class="left"><tt>i32 addrspace(5)*</tt></td>
1756     <td class="left">A <a href="#t_pointer">pointer</a> to an <tt>i32</tt> value
1757      that resides in address space #5.</td>
1758   </tr>
1759 </table>
1760
1761 </div>
1762
1763 <!-- _______________________________________________________________________ -->
1764 <div class="doc_subsubsection"> <a name="t_vector">Vector Type</a> </div>
1765
1766 <div class="doc_text">
1767
1768 <h5>Overview:</h5>
1769 <p>A vector type is a simple derived type that represents a vector of elements.
1770    Vector types are used when multiple primitive data are operated in parallel
1771    using a single instruction (SIMD).  A vector type requires a size (number of
1772    elements) and an underlying primitive data type.  Vectors must have a power
1773    of two length (1, 2, 4, 8, 16 ...).  Vector types are considered
1774    <a href="#t_firstclass">first class</a>.</p>
1775
1776 <h5>Syntax:</h5>
1777 <pre>
1778   &lt; &lt;# elements&gt; x &lt;elementtype&gt; &gt;
1779 </pre>
1780
1781 <p>The number of elements is a constant integer value; elementtype may be any
1782    integer or floating point type.</p>
1783
1784 <h5>Examples:</h5>
1785 <table class="layout">
1786   <tr class="layout">
1787     <td class="left"><tt>&lt;4 x i32&gt;</tt></td>
1788     <td class="left">Vector of 4 32-bit integer values.</td>
1789   </tr>
1790   <tr class="layout">
1791     <td class="left"><tt>&lt;8 x float&gt;</tt></td>
1792     <td class="left">Vector of 8 32-bit floating-point values.</td>
1793   </tr>
1794   <tr class="layout">
1795     <td class="left"><tt>&lt;2 x i64&gt;</tt></td>
1796     <td class="left">Vector of 2 64-bit integer values.</td>
1797   </tr>
1798 </table>
1799
1800 <p>Note that the code generator does not yet support large vector types to be
1801    used as function return types. The specific limit on how large a vector
1802    return type codegen can currently handle is target-dependent; currently it's
1803    often a few times longer than a hardware vector register.</p>
1804
1805 </div>
1806
1807 <!-- _______________________________________________________________________ -->
1808 <div class="doc_subsubsection"> <a name="t_opaque">Opaque Type</a> </div>
1809 <div class="doc_text">
1810
1811 <h5>Overview:</h5>
1812 <p>Opaque types are used to represent unknown types in the system.  This
1813    corresponds (for example) to the C notion of a forward declared structure
1814    type.  In LLVM, opaque types can eventually be resolved to any type (not just
1815    a structure type).</p>
1816
1817 <h5>Syntax:</h5>
1818 <pre>
1819   opaque
1820 </pre>
1821
1822 <h5>Examples:</h5>
1823 <table class="layout">
1824   <tr class="layout">
1825     <td class="left"><tt>opaque</tt></td>
1826     <td class="left">An opaque type.</td>
1827   </tr>
1828 </table>
1829
1830 </div>
1831
1832 <!-- ======================================================================= -->
1833 <div class="doc_subsection">
1834   <a name="t_uprefs">Type Up-references</a>
1835 </div>
1836
1837 <div class="doc_text">
1838
1839 <h5>Overview:</h5>
1840 <p>An "up reference" allows you to refer to a lexically enclosing type without
1841    requiring it to have a name. For instance, a structure declaration may
1842    contain a pointer to any of the types it is lexically a member of.  Example
1843    of up references (with their equivalent as named type declarations)
1844    include:</p>
1845
1846 <pre>
1847    { \2 * }                %x = type { %x* }
1848    { \2 }*                 %y = type { %y }*
1849    \1*                     %z = type %z*
1850 </pre>
1851
1852 <p>An up reference is needed by the asmprinter for printing out cyclic types
1853    when there is no declared name for a type in the cycle.  Because the
1854    asmprinter does not want to print out an infinite type string, it needs a
1855    syntax to handle recursive types that have no names (all names are optional
1856    in llvm IR).</p>
1857
1858 <h5>Syntax:</h5>
1859 <pre>
1860    \&lt;level&gt;
1861 </pre>
1862
1863 <p>The level is the count of the lexical type that is being referred to.</p>
1864
1865 <h5>Examples:</h5>
1866 <table class="layout">
1867   <tr class="layout">
1868     <td class="left"><tt>\1*</tt></td>
1869     <td class="left">Self-referential pointer.</td>
1870   </tr>
1871   <tr class="layout">
1872     <td class="left"><tt>{ { \3*, i8 }, i32 }</tt></td>
1873     <td class="left">Recursive structure where the upref refers to the out-most
1874                      structure.</td>
1875   </tr>
1876 </table>
1877
1878 </div>
1879
1880 <!-- *********************************************************************** -->
1881 <div class="doc_section"> <a name="constants">Constants</a> </div>
1882 <!-- *********************************************************************** -->
1883
1884 <div class="doc_text">
1885
1886 <p>LLVM has several different basic types of constants.  This section describes
1887    them all and their syntax.</p>
1888
1889 </div>
1890
1891 <!-- ======================================================================= -->
1892 <div class="doc_subsection"><a name="simpleconstants">Simple Constants</a></div>
1893
1894 <div class="doc_text">
1895
1896 <dl>
1897   <dt><b>Boolean constants</b></dt>
1898   <dd>The two strings '<tt>true</tt>' and '<tt>false</tt>' are both valid
1899       constants of the <tt><a href="#t_integer">i1</a></tt> type.</dd>
1900
1901   <dt><b>Integer constants</b></dt>
1902   <dd>Standard integers (such as '4') are constants of
1903       the <a href="#t_integer">integer</a> type.  Negative numbers may be used
1904       with integer types.</dd>
1905
1906   <dt><b>Floating point constants</b></dt>
1907   <dd>Floating point constants use standard decimal notation (e.g. 123.421),
1908       exponential notation (e.g. 1.23421e+2), or a more precise hexadecimal
1909       notation (see below).  The assembler requires the exact decimal value of a
1910       floating-point constant.  For example, the assembler accepts 1.25 but
1911       rejects 1.3 because 1.3 is a repeating decimal in binary.  Floating point
1912       constants must have a <a href="#t_floating">floating point</a> type. </dd>
1913
1914   <dt><b>Null pointer constants</b></dt>
1915   <dd>The identifier '<tt>null</tt>' is recognized as a null pointer constant
1916       and must be of <a href="#t_pointer">pointer type</a>.</dd>
1917 </dl>
1918
1919 <p>The one non-intuitive notation for constants is the hexadecimal form of
1920    floating point constants.  For example, the form '<tt>double
1921    0x432ff973cafa8000</tt>' is equivalent to (but harder to read than)
1922    '<tt>double 4.5e+15</tt>'.  The only time hexadecimal floating point
1923    constants are required (and the only time that they are generated by the
1924    disassembler) is when a floating point constant must be emitted but it cannot
1925    be represented as a decimal floating point number in a reasonable number of
1926    digits.  For example, NaN's, infinities, and other special values are
1927    represented in their IEEE hexadecimal format so that assembly and disassembly
1928    do not cause any bits to change in the constants.</p>
1929
1930 <p>When using the hexadecimal form, constants of types float and double are
1931    represented using the 16-digit form shown above (which matches the IEEE754
1932    representation for double); float values must, however, be exactly
1933    representable as IEE754 single precision.  Hexadecimal format is always used
1934    for long double, and there are three forms of long double.  The 80-bit format
1935    used by x86 is represented as <tt>0xK</tt> followed by 20 hexadecimal digits.
1936    The 128-bit format used by PowerPC (two adjacent doubles) is represented
1937    by <tt>0xM</tt> followed by 32 hexadecimal digits.  The IEEE 128-bit format
1938    is represented by <tt>0xL</tt> followed by 32 hexadecimal digits; no
1939    currently supported target uses this format.  Long doubles will only work if
1940    they match the long double format on your target.  All hexadecimal formats
1941    are big-endian (sign bit at the left).</p>
1942
1943 </div>
1944
1945 <!-- ======================================================================= -->
1946 <div class="doc_subsection">
1947 <a name="aggregateconstants"></a> <!-- old anchor -->
1948 <a name="complexconstants">Complex Constants</a>
1949 </div>
1950
1951 <div class="doc_text">
1952
1953 <p>Complex constants are a (potentially recursive) combination of simple
1954    constants and smaller complex constants.</p>
1955
1956 <dl>
1957   <dt><b>Structure constants</b></dt>
1958   <dd>Structure constants are represented with notation similar to structure
1959       type definitions (a comma separated list of elements, surrounded by braces
1960       (<tt>{}</tt>)).  For example: "<tt>{ i32 4, float 17.0, i32* @G }</tt>",
1961       where "<tt>@G</tt>" is declared as "<tt>@G = external global i32</tt>".
1962       Structure constants must have <a href="#t_struct">structure type</a>, and
1963       the number and types of elements must match those specified by the
1964       type.</dd>
1965
1966   <dt><b>Array constants</b></dt>
1967   <dd>Array constants are represented with notation similar to array type
1968      definitions (a comma separated list of elements, surrounded by square
1969      brackets (<tt>[]</tt>)).  For example: "<tt>[ i32 42, i32 11, i32 74
1970      ]</tt>".  Array constants must have <a href="#t_array">array type</a>, and
1971      the number and types of elements must match those specified by the
1972      type.</dd>
1973
1974   <dt><b>Vector constants</b></dt>
1975   <dd>Vector constants are represented with notation similar to vector type
1976       definitions (a comma separated list of elements, surrounded by
1977       less-than/greater-than's (<tt>&lt;&gt;</tt>)).  For example: "<tt>&lt; i32
1978       42, i32 11, i32 74, i32 100 &gt;</tt>".  Vector constants must
1979       have <a href="#t_vector">vector type</a>, and the number and types of
1980       elements must match those specified by the type.</dd>
1981
1982   <dt><b>Zero initialization</b></dt>
1983   <dd>The string '<tt>zeroinitializer</tt>' can be used to zero initialize a
1984       value to zero of <em>any</em> type, including scalar and aggregate types.
1985       This is often used to avoid having to print large zero initializers
1986       (e.g. for large arrays) and is always exactly equivalent to using explicit
1987       zero initializers.</dd>
1988
1989   <dt><b>Metadata node</b></dt>
1990   <dd>A metadata node is a structure-like constant with
1991       <a href="#t_metadata">metadata type</a>.  For example: "<tt>metadata !{
1992       i32 0, metadata !"test" }</tt>".  Unlike other constants that are meant to
1993       be interpreted as part of the instruction stream, metadata is a place to
1994       attach additional information such as debug info.</dd>
1995 </dl>
1996
1997 </div>
1998
1999 <!-- ======================================================================= -->
2000 <div class="doc_subsection">
2001   <a name="globalconstants">Global Variable and Function Addresses</a>
2002 </div>
2003
2004 <div class="doc_text">
2005
2006 <p>The addresses of <a href="#globalvars">global variables</a>
2007    and <a href="#functionstructure">functions</a> are always implicitly valid
2008    (link-time) constants.  These constants are explicitly referenced when
2009    the <a href="#identifiers">identifier for the global</a> is used and always
2010    have <a href="#t_pointer">pointer</a> type. For example, the following is a
2011    legal LLVM file:</p>
2012
2013 <div class="doc_code">
2014 <pre>
2015 @X = global i32 17
2016 @Y = global i32 42
2017 @Z = global [2 x i32*] [ i32* @X, i32* @Y ]
2018 </pre>
2019 </div>
2020
2021 </div>
2022
2023 <!-- ======================================================================= -->
2024 <div class="doc_subsection"><a name="undefvalues">Undefined Values</a></div>
2025 <div class="doc_text">
2026
2027 <p>The string '<tt>undef</tt>' can be used anywhere a constant is expected, and
2028    indicates that the user of the value may receive an unspecified bit-pattern.
2029    Undefined values may be of any type (other than label or void) and be used
2030    anywhere a constant is permitted.</p>
2031
2032 <p>Undefined values are useful because they indicate to the compiler that the
2033    program is well defined no matter what value is used.  This gives the
2034    compiler more freedom to optimize.  Here are some examples of (potentially
2035    surprising) transformations that are valid (in pseudo IR):</p>
2036
2037
2038 <div class="doc_code">
2039 <pre>
2040   %A = add %X, undef
2041   %B = sub %X, undef
2042   %C = xor %X, undef
2043 Safe:
2044   %A = undef
2045   %B = undef
2046   %C = undef
2047 </pre>
2048 </div>
2049
2050 <p>This is safe because all of the output bits are affected by the undef bits.
2051 Any output bit can have a zero or one depending on the input bits.</p>
2052
2053 <div class="doc_code">
2054 <pre>
2055   %A = or %X, undef
2056   %B = and %X, undef
2057 Safe:
2058   %A = -1
2059   %B = 0
2060 Unsafe:
2061   %A = undef
2062   %B = undef
2063 </pre>
2064 </div>
2065
2066 <p>These logical operations have bits that are not always affected by the input.
2067 For example, if "%X" has a zero bit, then the output of the 'and' operation will
2068 always be a zero, no matter what the corresponding bit from the undef is.  As
2069 such, it is unsafe to optimize or assume that the result of the and is undef.
2070 However, it is safe to assume that all bits of the undef could be 0, and 
2071 optimize the and to 0.  Likewise, it is safe to assume that all the bits of 
2072 the undef operand to the or could be set, allowing the or to be folded to 
2073 -1.</p>
2074
2075 <div class="doc_code">
2076 <pre>
2077   %A = select undef, %X, %Y
2078   %B = select undef, 42, %Y
2079   %C = select %X, %Y, undef
2080 Safe:
2081   %A = %X     (or %Y)
2082   %B = 42     (or %Y)
2083   %C = %Y
2084 Unsafe:
2085   %A = undef
2086   %B = undef
2087   %C = undef
2088 </pre>
2089 </div>
2090
2091 <p>This set of examples show that undefined select (and conditional branch)
2092 conditions can go "either way" but they have to come from one of the two
2093 operands.  In the %A example, if %X and %Y were both known to have a clear low
2094 bit, then %A would have to have a cleared low bit.  However, in the %C example,
2095 the optimizer is allowed to assume that the undef operand could be the same as
2096 %Y, allowing the whole select to be eliminated.</p>
2097
2098
2099 <div class="doc_code">
2100 <pre>
2101   %A = xor undef, undef
2102   
2103   %B = undef
2104   %C = xor %B, %B
2105
2106   %D = undef
2107   %E = icmp lt %D, 4
2108   %F = icmp gte %D, 4
2109
2110 Safe:
2111   %A = undef
2112   %B = undef
2113   %C = undef
2114   %D = undef
2115   %E = undef
2116   %F = undef
2117 </pre>
2118 </div>
2119
2120 <p>This example points out that two undef operands are not necessarily the same.
2121 This can be surprising to people (and also matches C semantics) where they
2122 assume that "X^X" is always zero, even if X is undef.  This isn't true for a
2123 number of reasons, but the short answer is that an undef "variable" can
2124 arbitrarily change its value over its "live range".  This is true because the
2125 "variable" doesn't actually <em>have a live range</em>.  Instead, the value is
2126 logically read from arbitrary registers that happen to be around when needed,
2127 so the value is not necessarily consistent over time.  In fact, %A and %C need
2128 to have the same semantics or the core LLVM "replace all uses with" concept
2129 would not hold.</p>
2130
2131 <div class="doc_code">
2132 <pre>
2133   %A = fdiv undef, %X
2134   %B = fdiv %X, undef
2135 Safe:
2136   %A = undef
2137 b: unreachable
2138 </pre>
2139 </div>
2140
2141 <p>These examples show the crucial difference between an <em>undefined
2142 value</em> and <em>undefined behavior</em>.  An undefined value (like undef) is
2143 allowed to have an arbitrary bit-pattern.  This means that the %A operation
2144 can be constant folded to undef because the undef could be an SNaN, and fdiv is
2145 not (currently) defined on SNaN's.  However, in the second example, we can make
2146 a more aggressive assumption: because the undef is allowed to be an arbitrary
2147 value, we are allowed to assume that it could be zero.  Since a divide by zero
2148 has <em>undefined behavior</em>, we are allowed to assume that the operation
2149 does not execute at all.  This allows us to delete the divide and all code after
2150 it: since the undefined operation "can't happen", the optimizer can assume that
2151 it occurs in dead code.
2152 </p>
2153  
2154 <div class="doc_code">
2155 <pre>
2156 a:  store undef -> %X
2157 b:  store %X -> undef
2158 Safe:
2159 a: &lt;deleted&gt;
2160 b: unreachable
2161 </pre>
2162 </div>
2163
2164 <p>These examples reiterate the fdiv example: a store "of" an undefined value
2165 can be assumed to not have any effect: we can assume that the value is 
2166 overwritten with bits that happen to match what was already there.  However, a
2167 store "to" an undefined location could clobber arbitrary memory, therefore, it
2168 has undefined behavior.</p>
2169
2170 </div>
2171
2172 <!-- ======================================================================= -->
2173 <div class="doc_subsection"><a name="constantexprs">Constant Expressions</a>
2174 </div>
2175
2176 <div class="doc_text">
2177
2178 <p>Constant expressions are used to allow expressions involving other constants
2179    to be used as constants.  Constant expressions may be of
2180    any <a href="#t_firstclass">first class</a> type and may involve any LLVM
2181    operation that does not have side effects (e.g. load and call are not
2182    supported).  The following is the syntax for constant expressions:</p>
2183
2184 <dl>
2185   <dt><b><tt>trunc ( CST to TYPE )</tt></b></dt>
2186   <dd>Truncate a constant to another type. The bit size of CST must be larger
2187       than the bit size of TYPE. Both types must be integers.</dd>
2188
2189   <dt><b><tt>zext ( CST to TYPE )</tt></b></dt>
2190   <dd>Zero extend a constant to another type. The bit size of CST must be
2191       smaller or equal to the bit size of TYPE.  Both types must be
2192       integers.</dd>
2193
2194   <dt><b><tt>sext ( CST to TYPE )</tt></b></dt>
2195   <dd>Sign extend a constant to another type. The bit size of CST must be
2196       smaller or equal to the bit size of TYPE.  Both types must be
2197       integers.</dd>
2198
2199   <dt><b><tt>fptrunc ( CST to TYPE )</tt></b></dt>
2200   <dd>Truncate a floating point constant to another floating point type. The
2201       size of CST must be larger than the size of TYPE. Both types must be
2202       floating point.</dd>
2203
2204   <dt><b><tt>fpext ( CST to TYPE )</tt></b></dt>
2205   <dd>Floating point extend a constant to another type. The size of CST must be
2206       smaller or equal to the size of TYPE. Both types must be floating
2207       point.</dd>
2208
2209   <dt><b><tt>fptoui ( CST to TYPE )</tt></b></dt>
2210   <dd>Convert a floating point constant to the corresponding unsigned integer
2211       constant. TYPE must be a scalar or vector integer type. CST must be of
2212       scalar or vector floating point type. Both CST and TYPE must be scalars,
2213       or vectors of the same number of elements. If the value won't fit in the
2214       integer type, the results are undefined.</dd>
2215
2216   <dt><b><tt>fptosi ( CST to TYPE )</tt></b></dt>
2217   <dd>Convert a floating point constant to the corresponding signed integer
2218       constant.  TYPE must be a scalar or vector integer type. CST must be of
2219       scalar or vector floating point type. Both CST and TYPE must be scalars,
2220       or vectors of the same number of elements. If the value won't fit in the
2221       integer type, the results are undefined.</dd>
2222
2223   <dt><b><tt>uitofp ( CST to TYPE )</tt></b></dt>
2224   <dd>Convert an unsigned integer constant to the corresponding floating point
2225       constant. TYPE must be a scalar or vector floating point type. CST must be
2226       of scalar or vector integer type. Both CST and TYPE must be scalars, or
2227       vectors of the same number of elements. If the value won't fit in the
2228       floating point type, the results are undefined.</dd>
2229
2230   <dt><b><tt>sitofp ( CST to TYPE )</tt></b></dt>
2231   <dd>Convert a signed integer constant to the corresponding floating point
2232       constant. TYPE must be a scalar or vector floating point type. CST must be
2233       of scalar or vector integer type. Both CST and TYPE must be scalars, or
2234       vectors of the same number of elements. If the value won't fit in the
2235       floating point type, the results are undefined.</dd>
2236
2237   <dt><b><tt>ptrtoint ( CST to TYPE )</tt></b></dt>
2238   <dd>Convert a pointer typed constant to the corresponding integer constant
2239       <tt>TYPE</tt> must be an integer type. <tt>CST</tt> must be of pointer
2240       type. The <tt>CST</tt> value is zero extended, truncated, or unchanged to
2241       make it fit in <tt>TYPE</tt>.</dd>
2242
2243   <dt><b><tt>inttoptr ( CST to TYPE )</tt></b></dt>
2244   <dd>Convert a integer constant to a pointer constant.  TYPE must be a pointer
2245       type.  CST must be of integer type. The CST value is zero extended,
2246       truncated, or unchanged to make it fit in a pointer size. This one is
2247       <i>really</i> dangerous!</dd>
2248
2249   <dt><b><tt>bitcast ( CST to TYPE )</tt></b></dt>
2250   <dd>Convert a constant, CST, to another TYPE. The constraints of the operands
2251       are the same as those for the <a href="#i_bitcast">bitcast
2252       instruction</a>.</dd>
2253
2254   <dt><b><tt>getelementptr ( CSTPTR, IDX0, IDX1, ... )</tt></b></dt>
2255   <dt><b><tt>getelementptr inbounds ( CSTPTR, IDX0, IDX1, ... )</tt></b></dt>
2256   <dd>Perform the <a href="#i_getelementptr">getelementptr operation</a> on
2257       constants.  As with the <a href="#i_getelementptr">getelementptr</a>
2258       instruction, the index list may have zero or more indexes, which are
2259       required to make sense for the type of "CSTPTR".</dd>
2260
2261   <dt><b><tt>select ( COND, VAL1, VAL2 )</tt></b></dt>
2262   <dd>Perform the <a href="#i_select">select operation</a> on constants.</dd>
2263
2264   <dt><b><tt>icmp COND ( VAL1, VAL2 )</tt></b></dt>
2265   <dd>Performs the <a href="#i_icmp">icmp operation</a> on constants.</dd>
2266
2267   <dt><b><tt>fcmp COND ( VAL1, VAL2 )</tt></b></dt>
2268   <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd>
2269
2270   <dt><b><tt>extractelement ( VAL, IDX )</tt></b></dt>
2271   <dd>Perform the <a href="#i_extractelement">extractelement operation</a> on
2272       constants.</dd>
2273
2274   <dt><b><tt>insertelement ( VAL, ELT, IDX )</tt></b></dt>
2275   <dd>Perform the <a href="#i_insertelement">insertelement operation</a> on
2276     constants.</dd>
2277
2278   <dt><b><tt>shufflevector ( VEC1, VEC2, IDXMASK )</tt></b></dt>
2279   <dd>Perform the <a href="#i_shufflevector">shufflevector operation</a> on
2280       constants.</dd>
2281
2282   <dt><b><tt>OPCODE ( LHS, RHS )</tt></b></dt>
2283   <dd>Perform the specified operation of the LHS and RHS constants. OPCODE may
2284       be any of the <a href="#binaryops">binary</a>
2285       or <a href="#bitwiseops">bitwise binary</a> operations.  The constraints
2286       on operands are the same as those for the corresponding instruction
2287       (e.g. no bitwise operations on floating point values are allowed).</dd>
2288 </dl>
2289
2290 </div>
2291
2292 <!-- ======================================================================= -->
2293 <div class="doc_subsection"><a name="metadata">Embedded Metadata</a>
2294 </div>
2295
2296 <div class="doc_text">
2297
2298 <p>Embedded metadata provides a way to attach arbitrary data to the instruction
2299    stream without affecting the behaviour of the program.  There are two
2300    metadata primitives, strings and nodes. All metadata has the
2301    <tt>metadata</tt> type and is identified in syntax by a preceding exclamation
2302    point ('<tt>!</tt>').</p>
2303
2304 <p>A metadata string is a string surrounded by double quotes.  It can contain
2305    any character by escaping non-printable characters with "\xx" where "xx" is
2306    the two digit hex code.  For example: "<tt>!"test\00"</tt>".</p>
2307
2308 <p>Metadata nodes are represented with notation similar to structure constants
2309    (a comma separated list of elements, surrounded by braces and preceded by an
2310    exclamation point).  For example: "<tt>!{ metadata !"test\00", i32
2311    10}</tt>".</p>
2312
2313 <p>A metadata node will attempt to track changes to the values it holds. In the
2314    event that a value is deleted, it will be replaced with a typeless
2315    "<tt>null</tt>", such as "<tt>metadata !{null, i32 10}</tt>".</p>
2316
2317 <p>Optimizations may rely on metadata to provide additional information about
2318    the program that isn't available in the instructions, or that isn't easily
2319    computable. Similarly, the code generator may expect a certain metadata
2320    format to be used to express debugging information.</p>
2321
2322 </div>
2323
2324 <!-- *********************************************************************** -->
2325 <div class="doc_section"> <a name="othervalues">Other Values</a> </div>
2326 <!-- *********************************************************************** -->
2327
2328 <!-- ======================================================================= -->
2329 <div class="doc_subsection">
2330 <a name="inlineasm">Inline Assembler Expressions</a>
2331 </div>
2332
2333 <div class="doc_text">
2334
2335 <p>LLVM supports inline assembler expressions (as opposed
2336    to <a href="#moduleasm"> Module-Level Inline Assembly</a>) through the use of
2337    a special value.  This value represents the inline assembler as a string
2338    (containing the instructions to emit), a list of operand constraints (stored
2339    as a string), a flag that indicates whether or not the inline asm
2340    expression has side effects, and a flag indicating whether the function
2341    containing the asm needs to align its stack conservatively.  An example
2342    inline assembler expression is:</p>
2343
2344 <div class="doc_code">
2345 <pre>
2346 i32 (i32) asm "bswap $0", "=r,r"
2347 </pre>
2348 </div>
2349
2350 <p>Inline assembler expressions may <b>only</b> be used as the callee operand of
2351    a <a href="#i_call"><tt>call</tt> instruction</a>.  Thus, typically we
2352    have:</p>
2353
2354 <div class="doc_code">
2355 <pre>
2356 %X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
2357 </pre>
2358 </div>
2359
2360 <p>Inline asms with side effects not visible in the constraint list must be
2361    marked as having side effects.  This is done through the use of the
2362    '<tt>sideeffect</tt>' keyword, like so:</p>
2363
2364 <div class="doc_code">
2365 <pre>
2366 call void asm sideeffect "eieio", ""()
2367 </pre>
2368 </div>
2369
2370 <p>In some cases inline asms will contain code that will not work unless the
2371    stack is aligned in some way, such as calls or SSE instructions on x86,
2372    yet will not contain code that does that alignment within the asm.
2373    The compiler should make conservative assumptions about what the asm might
2374    contain and should generate its usual stack alignment code in the prologue
2375    if the '<tt>alignstack</tt>' keyword is present:</p>
2376
2377 <div class="doc_code">
2378 <pre>
2379 call void asm alignstack "eieio", ""()
2380 </pre>
2381 </div>
2382
2383 <p>If both keywords appear the '<tt>sideeffect</tt>' keyword must come
2384    first.</p>
2385
2386 <p>TODO: The format of the asm and constraints string still need to be
2387    documented here.  Constraints on what can be done (e.g. duplication, moving,
2388    etc need to be documented).  This is probably best done by reference to
2389    another document that covers inline asm from a holistic perspective.</p>
2390
2391 </div>
2392
2393
2394 <!-- *********************************************************************** -->
2395 <div class="doc_section">
2396   <a name="intrinsic_globals">Intrinsic Global Variables</a>
2397 </div>
2398 <!-- *********************************************************************** -->
2399
2400 <p>LLVM has a number of "magic" global variables that contain data that affect
2401 code generation or other IR semantics.  These are documented here.  All globals
2402 of this sort should have a section specified as "<tt>llvm.metadata</tt>".  This
2403 section and all globals that start with "<tt>llvm.</tt>" are reserved for use
2404 by LLVM.</p>
2405
2406 <!-- ======================================================================= -->
2407 <div class="doc_subsection">
2408 <a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a>
2409 </div>
2410
2411 <div class="doc_text">
2412
2413 <p>The <tt>@llvm.used</tt> global is an array with i8* element type which has <a
2414 href="#linkage_appending">appending linkage</a>.  This array contains a list of
2415 pointers to global variables and functions which may optionally have a pointer
2416 cast formed of bitcast or getelementptr.  For example, a legal use of it is:</p>
2417
2418 <pre>
2419   @X = global i8 4
2420   @Y = global i32 123
2421
2422   @llvm.used = appending global [2 x i8*] [
2423      i8* @X,
2424      i8* bitcast (i32* @Y to i8*)
2425   ], section "llvm.metadata"
2426 </pre>
2427
2428 <p>If a global variable appears in the <tt>@llvm.used</tt> list, then the
2429 compiler, assembler, and linker are required to treat the symbol as if there is
2430 a reference to the global that it cannot see.  For example, if a variable has
2431 internal linkage and no references other than that from the <tt>@llvm.used</tt>
2432 list, it cannot be deleted.  This is commonly used to represent references from
2433 inline asms and other things the compiler cannot "see", and corresponds to
2434 "attribute((used))" in GNU C.</p>
2435
2436 <p>On some targets, the code generator must emit a directive to the assembler or
2437 object file to prevent the assembler and linker from molesting the symbol.</p>
2438
2439 </div>
2440
2441 <!-- ======================================================================= -->
2442 <div class="doc_subsection">
2443 <a name="intg_compiler_used">The '<tt>llvm.compiler.used</tt>' Global Variable</a>
2444 </div>
2445
2446 <div class="doc_text">
2447
2448 <p>The <tt>@llvm.compiler.used</tt> directive is the same as the
2449 <tt>@llvm.used</tt> directive, except that it only prevents the compiler from
2450 touching the symbol.  On targets that support it, this allows an intelligent
2451 linker to optimize references to the symbol without being impeded as it would be
2452 by <tt>@llvm.used</tt>.</p>
2453
2454 <p>This is a rare construct that should only be used in rare circumstances, and
2455 should not be exposed to source languages.</p>
2456
2457 </div>
2458
2459 <!-- ======================================================================= -->
2460 <div class="doc_subsection">
2461 <a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a>
2462 </div>
2463
2464 <div class="doc_text">
2465
2466 <p>TODO: Describe this.</p>
2467
2468 </div>
2469
2470 <!-- ======================================================================= -->
2471 <div class="doc_subsection">
2472 <a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a>
2473 </div>
2474
2475 <div class="doc_text">
2476
2477 <p>TODO: Describe this.</p>
2478
2479 </div>
2480
2481
2482 <!-- *********************************************************************** -->
2483 <div class="doc_section"> <a name="instref">Instruction Reference</a> </div>
2484 <!-- *********************************************************************** -->
2485
2486 <div class="doc_text">
2487
2488 <p>The LLVM instruction set consists of several different classifications of
2489    instructions: <a href="#terminators">terminator
2490    instructions</a>, <a href="#binaryops">binary instructions</a>,
2491    <a href="#bitwiseops">bitwise binary instructions</a>,
2492    <a href="#memoryops">memory instructions</a>, and
2493    <a href="#otherops">other instructions</a>.</p>
2494
2495 </div>
2496
2497 <!-- ======================================================================= -->
2498 <div class="doc_subsection"> <a name="terminators">Terminator
2499 Instructions</a> </div>
2500
2501 <div class="doc_text">
2502
2503 <p>As mentioned <a href="#functionstructure">previously</a>, every basic block
2504    in a program ends with a "Terminator" instruction, which indicates which
2505    block should be executed after the current block is finished. These
2506    terminator instructions typically yield a '<tt>void</tt>' value: they produce
2507    control flow, not values (the one exception being the
2508    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
2509
2510 <p>There are six different terminator instructions: the
2511    '<a href="#i_ret"><tt>ret</tt></a>' instruction, the
2512    '<a href="#i_br"><tt>br</tt></a>' instruction, the
2513    '<a href="#i_switch"><tt>switch</tt></a>' instruction, the
2514    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, the
2515    '<a href="#i_unwind"><tt>unwind</tt></a>' instruction, and the
2516    '<a href="#i_unreachable"><tt>unreachable</tt></a>' instruction.</p>
2517
2518 </div>
2519
2520 <!-- _______________________________________________________________________ -->
2521 <div class="doc_subsubsection"> <a name="i_ret">'<tt>ret</tt>'
2522 Instruction</a> </div>
2523
2524 <div class="doc_text">
2525
2526 <h5>Syntax:</h5>
2527 <pre>
2528   ret &lt;type&gt; &lt;value&gt;       <i>; Return a value from a non-void function</i>
2529   ret void                 <i>; Return from void function</i>
2530 </pre>
2531
2532 <h5>Overview:</h5>
2533 <p>The '<tt>ret</tt>' instruction is used to return control flow (and optionally
2534    a value) from a function back to the caller.</p>
2535
2536 <p>There are two forms of the '<tt>ret</tt>' instruction: one that returns a
2537    value and then causes control flow, and one that just causes control flow to
2538    occur.</p>
2539
2540 <h5>Arguments:</h5>
2541 <p>The '<tt>ret</tt>' instruction optionally accepts a single argument, the
2542    return value. The type of the return value must be a
2543    '<a href="#t_firstclass">first class</a>' type.</p>
2544
2545 <p>A function is not <a href="#wellformed">well formed</a> if it it has a
2546    non-void return type and contains a '<tt>ret</tt>' instruction with no return
2547    value or a return value with a type that does not match its type, or if it
2548    has a void return type and contains a '<tt>ret</tt>' instruction with a
2549    return value.</p>
2550
2551 <h5>Semantics:</h5>
2552 <p>When the '<tt>ret</tt>' instruction is executed, control flow returns back to
2553    the calling function's context.  If the caller is a
2554    "<a href="#i_call"><tt>call</tt></a>" instruction, execution continues at the
2555    instruction after the call.  If the caller was an
2556    "<a href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues at
2557    the beginning of the "normal" destination block.  If the instruction returns
2558    a value, that value shall set the call or invoke instruction's return
2559    value.</p>
2560
2561 <h5>Example:</h5>
2562 <pre>
2563   ret i32 5                       <i>; Return an integer value of 5</i>
2564   ret void                        <i>; Return from a void function</i>
2565   ret { i32, i8 } { i32 4, i8 2 } <i>; Return a struct of values 4 and 2</i>
2566 </pre>
2567
2568 <p>Note that the code generator does not yet fully support large
2569    return values. The specific sizes that are currently supported are
2570    dependent on the target. For integers, on 32-bit targets the limit
2571    is often 64 bits, and on 64-bit targets the limit is often 128 bits.
2572    For aggregate types, the current limits are dependent on the element
2573    types; for example targets are often limited to 2 total integer
2574    elements and 2 total floating-point elements.</p>
2575
2576 </div>
2577 <!-- _______________________________________________________________________ -->
2578 <div class="doc_subsubsection"> <a name="i_br">'<tt>br</tt>' Instruction</a> </div>
2579
2580 <div class="doc_text">
2581
2582 <h5>Syntax:</h5>
2583 <pre>
2584   br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;<br>  br label &lt;dest&gt;          <i>; Unconditional branch</i>
2585 </pre>
2586
2587 <h5>Overview:</h5>
2588 <p>The '<tt>br</tt>' instruction is used to cause control flow to transfer to a
2589    different basic block in the current function.  There are two forms of this
2590    instruction, corresponding to a conditional branch and an unconditional
2591    branch.</p>
2592
2593 <h5>Arguments:</h5>
2594 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a single
2595    '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The unconditional form
2596    of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a
2597    target.</p>
2598
2599 <h5>Semantics:</h5>
2600 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
2601    argument is evaluated.  If the value is <tt>true</tt>, control flows to the
2602    '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
2603    control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>
2604
2605 <h5>Example:</h5>
2606 <pre>
2607 Test:
2608   %cond = <a href="#i_icmp">icmp</a> eq i32 %a, %b
2609   br i1 %cond, label %IfEqual, label %IfUnequal
2610 IfEqual:
2611   <a href="#i_ret">ret</a> i32 1
2612 IfUnequal:
2613   <a href="#i_ret">ret</a> i32 0
2614 </pre>
2615
2616 </div>
2617
2618 <!-- _______________________________________________________________________ -->
2619 <div class="doc_subsubsection">
2620    <a name="i_switch">'<tt>switch</tt>' Instruction</a>
2621 </div>
2622
2623 <div class="doc_text">
2624
2625 <h5>Syntax:</h5>
2626 <pre>
2627   switch &lt;intty&gt; &lt;value&gt;, label &lt;defaultdest&gt; [ &lt;intty&gt; &lt;val&gt;, label &lt;dest&gt; ... ]
2628 </pre>
2629
2630 <h5>Overview:</h5>
2631 <p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of
2632    several different places.  It is a generalization of the '<tt>br</tt>'
2633    instruction, allowing a branch to occur to one of many possible
2634    destinations.</p>
2635
2636 <h5>Arguments:</h5>
2637 <p>The '<tt>switch</tt>' instruction uses three parameters: an integer
2638    comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination,
2639    and an array of pairs of comparison value constants and '<tt>label</tt>'s.
2640    The table is not allowed to contain duplicate constant entries.</p>
2641
2642 <h5>Semantics:</h5>
2643 <p>The <tt>switch</tt> instruction specifies a table of values and
2644    destinations. When the '<tt>switch</tt>' instruction is executed, this table
2645    is searched for the given value.  If the value is found, control flow is
2646    transferred to the corresponding destination; otherwise, control flow is
2647    transferred to the default destination.</p>
2648
2649 <h5>Implementation:</h5>
2650 <p>Depending on properties of the target machine and the particular
2651    <tt>switch</tt> instruction, this instruction may be code generated in
2652    different ways.  For example, it could be generated as a series of chained
2653    conditional branches or with a lookup table.</p>
2654
2655 <h5>Example:</h5>
2656 <pre>
2657  <i>; Emulate a conditional br instruction</i>
2658  %Val = <a href="#i_zext">zext</a> i1 %value to i32
2659  switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
2660
2661  <i>; Emulate an unconditional br instruction</i>
2662  switch i32 0, label %dest [ ]
2663
2664  <i>; Implement a jump table:</i>
2665  switch i32 %val, label %otherwise [ i32 0, label %onzero
2666                                      i32 1, label %onone
2667                                      i32 2, label %ontwo ]
2668 </pre>
2669
2670 </div>
2671
2672 <!-- _______________________________________________________________________ -->
2673 <div class="doc_subsubsection">
2674   <a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
2675 </div>
2676
2677 <div class="doc_text">
2678
2679 <h5>Syntax:</h5>
2680 <pre>
2681   &lt;result&gt; = invoke [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>] &lt;ptr to function ty&gt; &lt;function ptr val&gt;(&lt;function args&gt;) [<a href="#fnattrs">fn attrs</a>]
2682                 to label &lt;normal label&gt; unwind label &lt;exception label&gt;
2683 </pre>
2684
2685 <h5>Overview:</h5>
2686 <p>The '<tt>invoke</tt>' instruction causes control to transfer to a specified
2687    function, with the possibility of control flow transfer to either the
2688    '<tt>normal</tt>' label or the '<tt>exception</tt>' label.  If the callee
2689    function returns with the "<tt><a href="#i_ret">ret</a></tt>" instruction,
2690    control flow will return to the "normal" label.  If the callee (or any
2691    indirect callees) returns with the "<a href="#i_unwind"><tt>unwind</tt></a>"
2692    instruction, control is interrupted and continued at the dynamically nearest
2693    "exception" label.</p>
2694
2695 <h5>Arguments:</h5>
2696 <p>This instruction requires several arguments:</p>
2697
2698 <ol>
2699   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
2700       convention</a> the call should use.  If none is specified, the call
2701       defaults to using C calling conventions.</li>
2702
2703   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
2704       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
2705       '<tt>inreg</tt>' attributes are valid here.</li>
2706
2707   <li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
2708       function value being invoked.  In most cases, this is a direct function
2709       invocation, but indirect <tt>invoke</tt>s are just as possible, branching
2710       off an arbitrary pointer to function value.</li>
2711
2712   <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
2713       function to be invoked. </li>
2714
2715   <li>'<tt>function args</tt>': argument list whose types match the function
2716       signature argument types.  If the function signature indicates the
2717       function accepts a variable number of arguments, the extra arguments can
2718       be specified.</li>
2719
2720   <li>'<tt>normal label</tt>': the label reached when the called function
2721       executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li>
2722
2723   <li>'<tt>exception label</tt>': the label reached when a callee returns with
2724       the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li>
2725
2726   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
2727       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
2728       '<tt>readnone</tt>' attributes are valid here.</li>
2729 </ol>
2730
2731 <h5>Semantics:</h5>
2732 <p>This instruction is designed to operate as a standard
2733    '<tt><a href="#i_call">call</a></tt>' instruction in most regards.  The
2734    primary difference is that it establishes an association with a label, which
2735    is used by the runtime library to unwind the stack.</p>
2736
2737 <p>This instruction is used in languages with destructors to ensure that proper
2738    cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown
2739    exception.  Additionally, this is important for implementation of
2740    '<tt>catch</tt>' clauses in high-level languages that support them.</p>
2741
2742 <p>For the purposes of the SSA form, the definition of the value returned by the
2743    '<tt>invoke</tt>' instruction is deemed to occur on the edge from the current
2744    block to the "normal" label. If the callee unwinds then no return value is
2745    available.</p>
2746
2747 <h5>Example:</h5>
2748 <pre>
2749   %retval = invoke i32 @Test(i32 15) to label %Continue
2750               unwind label %TestCleanup              <i>; {i32}:retval set</i>
2751   %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue
2752               unwind label %TestCleanup              <i>; {i32}:retval set</i>
2753 </pre>
2754
2755 </div>
2756
2757 <!-- _______________________________________________________________________ -->
2758
2759 <div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
2760 Instruction</a> </div>
2761
2762 <div class="doc_text">
2763
2764 <h5>Syntax:</h5>
2765 <pre>
2766   unwind
2767 </pre>
2768
2769 <h5>Overview:</h5>
2770 <p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow
2771    at the first callee in the dynamic call stack which used
2772    an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call.
2773    This is primarily used to implement exception handling.</p>
2774
2775 <h5>Semantics:</h5>
2776 <p>The '<tt>unwind</tt>' instruction causes execution of the current function to
2777    immediately halt.  The dynamic call stack is then searched for the
2778    first <a href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack.
2779    Once found, execution continues at the "exceptional" destination block
2780    specified by the <tt>invoke</tt> instruction.  If there is no <tt>invoke</tt>
2781    instruction in the dynamic call chain, undefined behavior results.</p>
2782
2783 </div>
2784
2785 <!-- _______________________________________________________________________ -->
2786
2787 <div class="doc_subsubsection"> <a name="i_unreachable">'<tt>unreachable</tt>'
2788 Instruction</a> </div>
2789
2790 <div class="doc_text">
2791
2792 <h5>Syntax:</h5>
2793 <pre>
2794   unreachable
2795 </pre>
2796
2797 <h5>Overview:</h5>
2798 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
2799    instruction is used to inform the optimizer that a particular portion of the
2800    code is not reachable.  This can be used to indicate that the code after a
2801    no-return function cannot be reached, and other facts.</p>
2802
2803 <h5>Semantics:</h5>
2804 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>
2805
2806 </div>
2807
2808 <!-- ======================================================================= -->
2809 <div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>
2810
2811 <div class="doc_text">
2812
2813 <p>Binary operators are used to do most of the computation in a program.  They
2814    require two operands of the same type, execute an operation on them, and
2815    produce a single value.  The operands might represent multiple data, as is
2816    the case with the <a href="#t_vector">vector</a> data type.  The result value
2817    has the same type as its operands.</p>
2818
2819 <p>There are several different binary operators:</p>
2820
2821 </div>
2822
2823 <!-- _______________________________________________________________________ -->
2824 <div class="doc_subsubsection">
2825   <a name="i_add">'<tt>add</tt>' Instruction</a>
2826 </div>
2827
2828 <div class="doc_text">
2829
2830 <h5>Syntax:</h5>
2831 <pre>
2832   &lt;result&gt; = add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2833   &lt;result&gt; = add nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2834   &lt;result&gt; = add nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2835   &lt;result&gt; = add nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2836 </pre>
2837
2838 <h5>Overview:</h5>
2839 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
2840
2841 <h5>Arguments:</h5>
2842 <p>The two arguments to the '<tt>add</tt>' instruction must
2843    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
2844    integer values. Both arguments must have identical types.</p>
2845
2846 <h5>Semantics:</h5>
2847 <p>The value produced is the integer sum of the two operands.</p>
2848
2849 <p>If the sum has unsigned overflow, the result returned is the mathematical
2850    result modulo 2<sup>n</sup>, where n is the bit width of the result.</p>
2851
2852 <p>Because LLVM integers use a two's complement representation, this instruction
2853    is appropriate for both signed and unsigned integers.</p>
2854
2855 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
2856    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
2857    <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt>
2858    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
2859
2860 <h5>Example:</h5>
2861 <pre>
2862   &lt;result&gt; = add i32 4, %var          <i>; yields {i32}:result = 4 + %var</i>
2863 </pre>
2864
2865 </div>
2866
2867 <!-- _______________________________________________________________________ -->
2868 <div class="doc_subsubsection">
2869   <a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
2870 </div>
2871
2872 <div class="doc_text">
2873
2874 <h5>Syntax:</h5>
2875 <pre>
2876   &lt;result&gt; = fadd &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2877 </pre>
2878
2879 <h5>Overview:</h5>
2880 <p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p>
2881
2882 <h5>Arguments:</h5>
2883 <p>The two arguments to the '<tt>fadd</tt>' instruction must be
2884    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2885    floating point values. Both arguments must have identical types.</p>
2886
2887 <h5>Semantics:</h5>
2888 <p>The value produced is the floating point sum of the two operands.</p>
2889
2890 <h5>Example:</h5>
2891 <pre>
2892   &lt;result&gt; = fadd float 4.0, %var          <i>; yields {float}:result = 4.0 + %var</i>
2893 </pre>
2894
2895 </div>
2896
2897 <!-- _______________________________________________________________________ -->
2898 <div class="doc_subsubsection">
2899    <a name="i_sub">'<tt>sub</tt>' Instruction</a>
2900 </div>
2901
2902 <div class="doc_text">
2903
2904 <h5>Syntax:</h5>
2905 <pre>
2906   &lt;result&gt; = sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2907   &lt;result&gt; = sub nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2908   &lt;result&gt; = sub nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2909   &lt;result&gt; = sub nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2910 </pre>
2911
2912 <h5>Overview:</h5>
2913 <p>The '<tt>sub</tt>' instruction returns the difference of its two
2914    operands.</p>
2915
2916 <p>Note that the '<tt>sub</tt>' instruction is used to represent the
2917    '<tt>neg</tt>' instruction present in most other intermediate
2918    representations.</p>
2919
2920 <h5>Arguments:</h5>
2921 <p>The two arguments to the '<tt>sub</tt>' instruction must
2922    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
2923    integer values.  Both arguments must have identical types.</p>
2924
2925 <h5>Semantics:</h5>
2926 <p>The value produced is the integer difference of the two operands.</p>
2927
2928 <p>If the difference has unsigned overflow, the result returned is the
2929    mathematical result modulo 2<sup>n</sup>, where n is the bit width of the
2930    result.</p>
2931
2932 <p>Because LLVM integers use a two's complement representation, this instruction
2933    is appropriate for both signed and unsigned integers.</p>
2934
2935 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
2936    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
2937    <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt>
2938    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
2939
2940 <h5>Example:</h5>
2941 <pre>
2942   &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
2943   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
2944 </pre>
2945
2946 </div>
2947
2948 <!-- _______________________________________________________________________ -->
2949 <div class="doc_subsubsection">
2950    <a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
2951 </div>
2952
2953 <div class="doc_text">
2954
2955 <h5>Syntax:</h5>
2956 <pre>
2957   &lt;result&gt; = fsub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2958 </pre>
2959
2960 <h5>Overview:</h5>
2961 <p>The '<tt>fsub</tt>' instruction returns the difference of its two
2962    operands.</p>
2963
2964 <p>Note that the '<tt>fsub</tt>' instruction is used to represent the
2965    '<tt>fneg</tt>' instruction present in most other intermediate
2966    representations.</p>
2967
2968 <h5>Arguments:</h5>
2969 <p>The two arguments to the '<tt>fsub</tt>' instruction must be
2970    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2971    floating point values.  Both arguments must have identical types.</p>
2972
2973 <h5>Semantics:</h5>
2974 <p>The value produced is the floating point difference of the two operands.</p>
2975
2976 <h5>Example:</h5>
2977 <pre>
2978   &lt;result&gt; = fsub float 4.0, %var           <i>; yields {float}:result = 4.0 - %var</i>
2979   &lt;result&gt; = fsub float -0.0, %val          <i>; yields {float}:result = -%var</i>
2980 </pre>
2981
2982 </div>
2983
2984 <!-- _______________________________________________________________________ -->
2985 <div class="doc_subsubsection">
2986   <a name="i_mul">'<tt>mul</tt>' Instruction</a>
2987 </div>
2988
2989 <div class="doc_text">
2990
2991 <h5>Syntax:</h5>
2992 <pre>
2993   &lt;result&gt; = mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2994   &lt;result&gt; = mul nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2995   &lt;result&gt; = mul nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2996   &lt;result&gt; = mul nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2997 </pre>
2998
2999 <h5>Overview:</h5>
3000 <p>The '<tt>mul</tt>' instruction returns the product of its two operands.</p>
3001
3002 <h5>Arguments:</h5>
3003 <p>The two arguments to the '<tt>mul</tt>' instruction must
3004    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3005    integer values.  Both arguments must have identical types.</p>
3006  
3007 <h5>Semantics:</h5>
3008 <p>The value produced is the integer product of the two operands.</p>
3009
3010 <p>If the result of the multiplication has unsigned overflow, the result
3011    returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit
3012    width of the result.</p>
3013
3014 <p>Because LLVM integers use a two's complement representation, and the result
3015    is the same width as the operands, this instruction returns the correct
3016    result for both signed and unsigned integers.  If a full product
3017    (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should
3018    be sign-extended or zero-extended as appropriate to the width of the full
3019    product.</p>
3020
3021 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3022    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3023    <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt>
3024    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
3025
3026 <h5>Example:</h5>
3027 <pre>
3028   &lt;result&gt; = mul i32 4, %var          <i>; yields {i32}:result = 4 * %var</i>
3029 </pre>
3030
3031 </div>
3032
3033 <!-- _______________________________________________________________________ -->
3034 <div class="doc_subsubsection">
3035   <a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
3036 </div>
3037
3038 <div class="doc_text">
3039
3040 <h5>Syntax:</h5>
3041 <pre>
3042   &lt;result&gt; = fmul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3043 </pre>
3044
3045 <h5>Overview:</h5>
3046 <p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p>
3047
3048 <h5>Arguments:</h5>
3049 <p>The two arguments to the '<tt>fmul</tt>' instruction must be
3050    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3051    floating point values.  Both arguments must have identical types.</p>
3052
3053 <h5>Semantics:</h5>
3054 <p>The value produced is the floating point product of the two operands.</p>
3055
3056 <h5>Example:</h5>
3057 <pre>
3058   &lt;result&gt; = fmul float 4.0, %var          <i>; yields {float}:result = 4.0 * %var</i>
3059 </pre>
3060
3061 </div>
3062
3063 <!-- _______________________________________________________________________ -->
3064 <div class="doc_subsubsection"> <a name="i_udiv">'<tt>udiv</tt>' Instruction
3065 </a></div>
3066
3067 <div class="doc_text">
3068
3069 <h5>Syntax:</h5>
3070 <pre>
3071   &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3072 </pre>
3073
3074 <h5>Overview:</h5>
3075 <p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p>
3076
3077 <h5>Arguments:</h5>
3078 <p>The two arguments to the '<tt>udiv</tt>' instruction must be 
3079    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3080    values.  Both arguments must have identical types.</p>
3081
3082 <h5>Semantics:</h5>
3083 <p>The value produced is the unsigned integer quotient of the two operands.</p>
3084
3085 <p>Note that unsigned integer division and signed integer division are distinct
3086    operations; for signed integer division, use '<tt>sdiv</tt>'.</p>
3087
3088 <p>Division by zero leads to undefined behavior.</p>
3089
3090 <h5>Example:</h5>
3091 <pre>
3092   &lt;result&gt; = udiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3093 </pre>
3094
3095 </div>
3096
3097 <!-- _______________________________________________________________________ -->
3098 <div class="doc_subsubsection"> <a name="i_sdiv">'<tt>sdiv</tt>' Instruction
3099 </a> </div>
3100
3101 <div class="doc_text">
3102
3103 <h5>Syntax:</h5>
3104 <pre>
3105   &lt;result&gt; = sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3106   &lt;result&gt; = sdiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3107 </pre>
3108
3109 <h5>Overview:</h5>
3110 <p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p>
3111
3112 <h5>Arguments:</h5>
3113 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be 
3114    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3115    values.  Both arguments must have identical types.</p>
3116
3117 <h5>Semantics:</h5>
3118 <p>The value produced is the signed integer quotient of the two operands rounded
3119    towards zero.</p>
3120
3121 <p>Note that signed integer division and unsigned integer division are distinct
3122    operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>
3123
3124 <p>Division by zero leads to undefined behavior. Overflow also leads to
3125    undefined behavior; this is a rare case, but can occur, for example, by doing
3126    a 32-bit division of -2147483648 by -1.</p>
3127
3128 <p>If the <tt>exact</tt> keyword is present, the result value of the
3129    <tt>sdiv</tt> is undefined if the result would be rounded or if overflow
3130    would occur.</p>
3131
3132 <h5>Example:</h5>
3133 <pre>
3134   &lt;result&gt; = sdiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3135 </pre>
3136
3137 </div>
3138
3139 <!-- _______________________________________________________________________ -->
3140 <div class="doc_subsubsection"> <a name="i_fdiv">'<tt>fdiv</tt>'
3141 Instruction</a> </div>
3142
3143 <div class="doc_text">
3144
3145 <h5>Syntax:</h5>
3146 <pre>
3147   &lt;result&gt; = fdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3148 </pre>
3149
3150 <h5>Overview:</h5>
3151 <p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p>
3152
3153 <h5>Arguments:</h5>
3154 <p>The two arguments to the '<tt>fdiv</tt>' instruction must be
3155    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3156    floating point values.  Both arguments must have identical types.</p>
3157
3158 <h5>Semantics:</h5>
3159 <p>The value produced is the floating point quotient of the two operands.</p>
3160
3161 <h5>Example:</h5>
3162 <pre>
3163   &lt;result&gt; = fdiv float 4.0, %var          <i>; yields {float}:result = 4.0 / %var</i>
3164 </pre>
3165
3166 </div>
3167
3168 <!-- _______________________________________________________________________ -->
3169 <div class="doc_subsubsection"> <a name="i_urem">'<tt>urem</tt>' Instruction</a>
3170 </div>
3171
3172 <div class="doc_text">
3173
3174 <h5>Syntax:</h5>
3175 <pre>
3176   &lt;result&gt; = urem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3177 </pre>
3178
3179 <h5>Overview:</h5>
3180 <p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned
3181    division of its two arguments.</p>
3182
3183 <h5>Arguments:</h5>
3184 <p>The two arguments to the '<tt>urem</tt>' instruction must be 
3185    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3186    values.  Both arguments must have identical types.</p>
3187
3188 <h5>Semantics:</h5>
3189 <p>This instruction returns the unsigned integer <i>remainder</i> of a division.
3190    This instruction always performs an unsigned division to get the
3191    remainder.</p>
3192
3193 <p>Note that unsigned integer remainder and signed integer remainder are
3194    distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>
3195
3196 <p>Taking the remainder of a division by zero leads to undefined behavior.</p>
3197
3198 <h5>Example:</h5>
3199 <pre>
3200   &lt;result&gt; = urem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3201 </pre>
3202
3203 </div>
3204
3205 <!-- _______________________________________________________________________ -->
3206 <div class="doc_subsubsection">
3207   <a name="i_srem">'<tt>srem</tt>' Instruction</a>
3208 </div>
3209
3210 <div class="doc_text">
3211
3212 <h5>Syntax:</h5>
3213 <pre>
3214   &lt;result&gt; = srem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3215 </pre>
3216
3217 <h5>Overview:</h5>
3218 <p>The '<tt>srem</tt>' instruction returns the remainder from the signed
3219    division of its two operands. This instruction can also take
3220    <a href="#t_vector">vector</a> versions of the values in which case the
3221    elements must be integers.</p>
3222
3223 <h5>Arguments:</h5>
3224 <p>The two arguments to the '<tt>srem</tt>' instruction must be 
3225    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3226    values.  Both arguments must have identical types.</p>
3227
3228 <h5>Semantics:</h5>
3229 <p>This instruction returns the <i>remainder</i> of a division (where the result
3230    has the same sign as the dividend, <tt>op1</tt>), not the <i>modulo</i>
3231    operator (where the result has the same sign as the divisor, <tt>op2</tt>) of
3232    a value.  For more information about the difference,
3233    see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
3234    Math Forum</a>. For a table of how this is implemented in various languages,
3235    please see <a href="http://en.wikipedia.org/wiki/Modulo_operation">
3236    Wikipedia: modulo operation</a>.</p>
3237
3238 <p>Note that signed integer remainder and unsigned integer remainder are
3239    distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>
3240
3241 <p>Taking the remainder of a division by zero leads to undefined behavior.
3242    Overflow also leads to undefined behavior; this is a rare case, but can
3243    occur, for example, by taking the remainder of a 32-bit division of
3244    -2147483648 by -1.  (The remainder doesn't actually overflow, but this rule
3245    lets srem be implemented using instructions that return both the result of
3246    the division and the remainder.)</p>
3247
3248 <h5>Example:</h5>
3249 <pre>
3250   &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3251 </pre>
3252
3253 </div>
3254
3255 <!-- _______________________________________________________________________ -->
3256 <div class="doc_subsubsection">
3257   <a name="i_frem">'<tt>frem</tt>' Instruction</a> </div>
3258
3259 <div class="doc_text">
3260
3261 <h5>Syntax:</h5>
3262 <pre>
3263   &lt;result&gt; = frem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3264 </pre>
3265
3266 <h5>Overview:</h5>
3267 <p>The '<tt>frem</tt>' instruction returns the remainder from the division of
3268    its two operands.</p>
3269
3270 <h5>Arguments:</h5>
3271 <p>The two arguments to the '<tt>frem</tt>' instruction must be
3272    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3273    floating point values.  Both arguments must have identical types.</p>
3274
3275 <h5>Semantics:</h5>
3276 <p>This instruction returns the <i>remainder</i> of a division.  The remainder
3277    has the same sign as the dividend.</p>
3278
3279 <h5>Example:</h5>
3280 <pre>
3281   &lt;result&gt; = frem float 4.0, %var          <i>; yields {float}:result = 4.0 % %var</i>
3282 </pre>
3283
3284 </div>
3285
3286 <!-- ======================================================================= -->
3287 <div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
3288 Operations</a> </div>
3289
3290 <div class="doc_text">
3291
3292 <p>Bitwise binary operators are used to do various forms of bit-twiddling in a
3293    program.  They are generally very efficient instructions and can commonly be
3294    strength reduced from other instructions.  They require two operands of the
3295    same type, execute an operation on them, and produce a single value.  The
3296    resulting value is the same type as its operands.</p>
3297
3298 </div>
3299
3300 <!-- _______________________________________________________________________ -->
3301 <div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
3302 Instruction</a> </div>
3303
3304 <div class="doc_text">
3305
3306 <h5>Syntax:</h5>
3307 <pre>
3308   &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3309 </pre>
3310
3311 <h5>Overview:</h5>
3312 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left
3313    a specified number of bits.</p>
3314
3315 <h5>Arguments:</h5>
3316 <p>Both arguments to the '<tt>shl</tt>' instruction must be the
3317     same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3318     integer type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3319  
3320 <h5>Semantics:</h5>
3321 <p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod
3322    2<sup>n</sup>, where <tt>n</tt> is the width of the result.  If <tt>op2</tt>
3323    is (statically or dynamically) negative or equal to or larger than the number
3324    of bits in <tt>op1</tt>, the result is undefined.  If the arguments are
3325    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3326    shift amount in <tt>op2</tt>.</p>
3327
3328 <h5>Example:</h5>
3329 <pre>
3330   &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
3331   &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
3332   &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
3333   &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
3334   &lt;result&gt; = shl &lt;2 x i32&gt; &lt; i32 1, i32 1&gt;, &lt; i32 1, i32 2&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 2, i32 4&gt;</i>
3335 </pre>
3336
3337 </div>
3338
3339 <!-- _______________________________________________________________________ -->
3340 <div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
3341 Instruction</a> </div>
3342
3343 <div class="doc_text">
3344
3345 <h5>Syntax:</h5>
3346 <pre>
3347   &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3348 </pre>
3349
3350 <h5>Overview:</h5>
3351 <p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
3352    operand shifted to the right a specified number of bits with zero fill.</p>
3353
3354 <h5>Arguments:</h5>
3355 <p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 
3356    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3357    type. '<tt>op2</tt>' is treated as an unsigned value.</p>
3358
3359 <h5>Semantics:</h5>
3360 <p>This instruction always performs a logical shift right operation. The most
3361    significant bits of the result will be filled with zero bits after the shift.
3362    If <tt>op2</tt> is (statically or dynamically) equal to or larger than the
3363    number of bits in <tt>op1</tt>, the result is undefined. If the arguments are
3364    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3365    shift amount in <tt>op2</tt>.</p>
3366
3367 <h5>Example:</h5>
3368 <pre>
3369   &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
3370   &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
3371   &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
3372   &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
3373   &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
3374   &lt;result&gt; = lshr &lt;2 x i32&gt; &lt; i32 -2, i32 4&gt;, &lt; i32 1, i32 2&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 0x7FFFFFFF, i32 1&gt;</i>
3375 </pre>
3376
3377 </div>
3378
3379 <!-- _______________________________________________________________________ -->
3380 <div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
3381 Instruction</a> </div>
3382 <div class="doc_text">
3383
3384 <h5>Syntax:</h5>
3385 <pre>
3386   &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3387 </pre>
3388
3389 <h5>Overview:</h5>
3390 <p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
3391    operand shifted to the right a specified number of bits with sign
3392    extension.</p>
3393
3394 <h5>Arguments:</h5>
3395 <p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 
3396    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3397    type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3398
3399 <h5>Semantics:</h5>
3400 <p>This instruction always performs an arithmetic shift right operation, The
3401    most significant bits of the result will be filled with the sign bit
3402    of <tt>op1</tt>.  If <tt>op2</tt> is (statically or dynamically) equal to or
3403    larger than the number of bits in <tt>op1</tt>, the result is undefined. If
3404    the arguments are vectors, each vector element of <tt>op1</tt> is shifted by
3405    the corresponding shift amount in <tt>op2</tt>.</p>
3406
3407 <h5>Example:</h5>
3408 <pre>
3409   &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
3410   &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
3411   &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
3412   &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
3413   &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
3414   &lt;result&gt; = ashr &lt;2 x i32&gt; &lt; i32 -2, i32 4&gt;, &lt; i32 1, i32 3&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 -1, i32 0&gt;</i>
3415 </pre>
3416
3417 </div>
3418
3419 <!-- _______________________________________________________________________ -->
3420 <div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
3421 Instruction</a> </div>
3422
3423 <div class="doc_text">
3424
3425 <h5>Syntax:</h5>
3426 <pre>
3427   &lt;result&gt; = and &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3428 </pre>
3429
3430 <h5>Overview:</h5>
3431 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two
3432    operands.</p>
3433
3434 <h5>Arguments:</h5>
3435 <p>The two arguments to the '<tt>and</tt>' instruction must be 
3436    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3437    values.  Both arguments must have identical types.</p>
3438
3439 <h5>Semantics:</h5>
3440 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
3441
3442 <table border="1" cellspacing="0" cellpadding="4">
3443   <tbody>
3444     <tr>
3445       <td>In0</td>
3446       <td>In1</td>
3447       <td>Out</td>
3448     </tr>
3449     <tr>
3450       <td>0</td>
3451       <td>0</td>
3452       <td>0</td>
3453     </tr>
3454     <tr>
3455       <td>0</td>
3456       <td>1</td>
3457       <td>0</td>
3458     </tr>
3459     <tr>
3460       <td>1</td>
3461       <td>0</td>
3462       <td>0</td>
3463     </tr>
3464     <tr>
3465       <td>1</td>
3466       <td>1</td>
3467       <td>1</td>
3468     </tr>
3469   </tbody>
3470 </table>
3471
3472 <h5>Example:</h5>
3473 <pre>
3474   &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
3475   &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
3476   &lt;result&gt; = and i32 4, 8            <i>; yields {i32}:result = 0</i>
3477 </pre>
3478 </div>
3479 <!-- _______________________________________________________________________ -->
3480 <div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>
3481
3482 <div class="doc_text">
3483
3484 <h5>Syntax:</h5>
3485 <pre>
3486   &lt;result&gt; = or &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3487 </pre>
3488
3489 <h5>Overview:</h5>
3490 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its
3491    two operands.</p>
3492
3493 <h5>Arguments:</h5>
3494 <p>The two arguments to the '<tt>or</tt>' instruction must be 
3495    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3496    values.  Both arguments must have identical types.</p>
3497
3498 <h5>Semantics:</h5>
3499 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
3500
3501 <table border="1" cellspacing="0" cellpadding="4">
3502   <tbody>
3503     <tr>
3504       <td>In0</td>
3505       <td>In1</td>
3506       <td>Out</td>
3507     </tr>
3508     <tr>
3509       <td>0</td>
3510       <td>0</td>
3511       <td>0</td>
3512     </tr>
3513     <tr>
3514       <td>0</td>
3515       <td>1</td>
3516       <td>1</td>
3517     </tr>
3518     <tr>
3519       <td>1</td>
3520       <td>0</td>
3521       <td>1</td>
3522     </tr>
3523     <tr>
3524       <td>1</td>
3525       <td>1</td>
3526       <td>1</td>
3527     </tr>
3528   </tbody>
3529 </table>
3530
3531 <h5>Example:</h5>
3532 <pre>
3533   &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
3534   &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
3535   &lt;result&gt; = or i32 4, 8            <i>; yields {i32}:result = 12</i>
3536 </pre>
3537
3538 </div>
3539
3540 <!-- _______________________________________________________________________ -->
3541 <div class="doc_subsubsection"> <a name="i_xor">'<tt>xor</tt>'
3542 Instruction</a> </div>
3543
3544 <div class="doc_text">
3545
3546 <h5>Syntax:</h5>
3547 <pre>
3548   &lt;result&gt; = xor &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3549 </pre>
3550
3551 <h5>Overview:</h5>
3552 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of
3553    its two operands.  The <tt>xor</tt> is used to implement the "one's
3554    complement" operation, which is the "~" operator in C.</p>
3555
3556 <h5>Arguments:</h5>
3557 <p>The two arguments to the '<tt>xor</tt>' instruction must be 
3558    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3559    values.  Both arguments must have identical types.</p>
3560
3561 <h5>Semantics:</h5>
3562 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
3563
3564 <table border="1" cellspacing="0" cellpadding="4">
3565   <tbody>
3566     <tr>
3567       <td>In0</td>
3568       <td>In1</td>
3569       <td>Out</td>
3570     </tr>
3571     <tr>
3572       <td>0</td>
3573       <td>0</td>
3574       <td>0</td>
3575     </tr>
3576     <tr>
3577       <td>0</td>
3578       <td>1</td>
3579       <td>1</td>
3580     </tr>
3581     <tr>
3582       <td>1</td>
3583       <td>0</td>
3584       <td>1</td>
3585     </tr>
3586     <tr>
3587       <td>1</td>
3588       <td>1</td>
3589       <td>0</td>
3590     </tr>
3591   </tbody>
3592 </table>
3593
3594 <h5>Example:</h5>
3595 <pre>
3596   &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
3597   &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
3598   &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
3599   &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
3600 </pre>
3601
3602 </div>
3603
3604 <!-- ======================================================================= -->
3605 <div class="doc_subsection"> 
3606   <a name="vectorops">Vector Operations</a>
3607 </div>
3608
3609 <div class="doc_text">
3610
3611 <p>LLVM supports several instructions to represent vector operations in a
3612    target-independent manner.  These instructions cover the element-access and
3613    vector-specific operations needed to process vectors effectively.  While LLVM
3614    does directly support these vector operations, many sophisticated algorithms
3615    will want to use target-specific intrinsics to take full advantage of a
3616    specific target.</p>
3617
3618 </div>
3619
3620 <!-- _______________________________________________________________________ -->
3621 <div class="doc_subsubsection">
3622    <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
3623 </div>
3624
3625 <div class="doc_text">
3626
3627 <h5>Syntax:</h5>
3628 <pre>
3629   &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</i>
3630 </pre>
3631
3632 <h5>Overview:</h5>
3633 <p>The '<tt>extractelement</tt>' instruction extracts a single scalar element
3634    from a vector at a specified index.</p>
3635
3636
3637 <h5>Arguments:</h5>
3638 <p>The first operand of an '<tt>extractelement</tt>' instruction is a value
3639    of <a href="#t_vector">vector</a> type.  The second operand is an index
3640    indicating the position from which to extract the element.  The index may be
3641    a variable.</p>
3642
3643 <h5>Semantics:</h5>
3644 <p>The result is a scalar of the same type as the element type of
3645    <tt>val</tt>.  Its value is the value at position <tt>idx</tt> of
3646    <tt>val</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
3647    results are undefined.</p>
3648
3649 <h5>Example:</h5>
3650 <pre>
3651   %result = extractelement &lt;4 x i32&gt; %vec, i32 0    <i>; yields i32</i>
3652 </pre>
3653
3654 </div>
3655
3656 <!-- _______________________________________________________________________ -->
3657 <div class="doc_subsubsection">
3658    <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
3659 </div>
3660
3661 <div class="doc_text">
3662
3663 <h5>Syntax:</h5>
3664 <pre>
3665   &lt;result&gt; = insertelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, &lt;ty&gt; &lt;elt&gt;, i32 &lt;idx&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</i>
3666 </pre>
3667
3668 <h5>Overview:</h5>
3669 <p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a
3670    vector at a specified index.</p>
3671
3672 <h5>Arguments:</h5>
3673 <p>The first operand of an '<tt>insertelement</tt>' instruction is a value
3674    of <a href="#t_vector">vector</a> type.  The second operand is a scalar value
3675    whose type must equal the element type of the first operand.  The third
3676    operand is an index indicating the position at which to insert the value.
3677    The index may be a variable.</p>
3678
3679 <h5>Semantics:</h5>
3680 <p>The result is a vector of the same type as <tt>val</tt>.  Its element values
3681    are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the
3682    value <tt>elt</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
3683    results are undefined.</p>
3684
3685 <h5>Example:</h5>
3686 <pre>
3687   %result = insertelement &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</i>
3688 </pre>
3689
3690 </div>
3691
3692 <!-- _______________________________________________________________________ -->
3693 <div class="doc_subsubsection">
3694    <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
3695 </div>
3696
3697 <div class="doc_text">
3698
3699 <h5>Syntax:</h5>
3700 <pre>
3701   &lt;result&gt; = shufflevector &lt;n x &lt;ty&gt;&gt; &lt;v1&gt;, &lt;n x &lt;ty&gt;&gt; &lt;v2&gt;, &lt;m x i32&gt; &lt;mask&gt;    <i>; yields &lt;m x &lt;ty&gt;&gt;</i>
3702 </pre>
3703
3704 <h5>Overview:</h5>
3705 <p>The '<tt>shufflevector</tt>' instruction constructs a permutation of elements
3706    from two input vectors, returning a vector with the same element type as the
3707    input and length that is the same as the shuffle mask.</p>
3708
3709 <h5>Arguments:</h5>
3710 <p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
3711    with types that match each other. The third argument is a shuffle mask whose
3712    element type is always 'i32'.  The result of the instruction is a vector
3713    whose length is the same as the shuffle mask and whose element type is the
3714    same as the element type of the first two operands.</p>
3715
3716 <p>The shuffle mask operand is required to be a constant vector with either
3717    constant integer or undef values.</p>
3718
3719 <h5>Semantics:</h5>
3720 <p>The elements of the two input vectors are numbered from left to right across
3721    both of the vectors.  The shuffle mask operand specifies, for each element of
3722    the result vector, which element of the two input vectors the result element
3723    gets.  The element selector may be undef (meaning "don't care") and the
3724    second operand may be undef if performing a shuffle from only one vector.</p>
3725
3726 <h5>Example:</h5>
3727 <pre>
3728   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
3729                           &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
3730   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef, 
3731                           &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i> - Identity shuffle.
3732   %result = shufflevector &lt;8 x i32&gt; %v1, &lt;8 x i32&gt; undef, 
3733                           &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i>
3734   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
3735                           &lt;8 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 &gt;  <i>; yields &lt;8 x i32&gt;</i>
3736 </pre>
3737
3738 </div>
3739
3740 <!-- ======================================================================= -->
3741 <div class="doc_subsection"> 
3742   <a name="aggregateops">Aggregate Operations</a>
3743 </div>
3744
3745 <div class="doc_text">
3746
3747 <p>LLVM supports several instructions for working with aggregate values.</p>
3748
3749 </div>
3750
3751 <!-- _______________________________________________________________________ -->
3752 <div class="doc_subsubsection">
3753    <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
3754 </div>
3755
3756 <div class="doc_text">
3757
3758 <h5>Syntax:</h5>
3759 <pre>
3760   &lt;result&gt; = extractvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;idx&gt;{, &lt;idx&gt;}*
3761 </pre>
3762
3763 <h5>Overview:</h5>
3764 <p>The '<tt>extractvalue</tt>' instruction extracts the value of a struct field
3765    or array element from an aggregate value.</p>
3766
3767 <h5>Arguments:</h5>
3768 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
3769    of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
3770    operands are constant indices to specify which value to extract in a similar
3771    manner as indices in a
3772    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
3773
3774 <h5>Semantics:</h5>
3775 <p>The result is the value at the position in the aggregate specified by the
3776    index operands.</p>
3777
3778 <h5>Example:</h5>
3779 <pre>
3780   %result = extractvalue {i32, float} %agg, 0    <i>; yields i32</i>
3781 </pre>
3782
3783 </div>
3784
3785 <!-- _______________________________________________________________________ -->
3786 <div class="doc_subsubsection">
3787    <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
3788 </div>
3789
3790 <div class="doc_text">
3791
3792 <h5>Syntax:</h5>
3793 <pre>
3794   &lt;result&gt; = insertvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;ty&gt; &lt;val&gt;, &lt;idx&gt;    <i>; yields &lt;n x &lt;ty&gt;&gt;</i>
3795 </pre>
3796
3797 <h5>Overview:</h5>
3798 <p>The '<tt>insertvalue</tt>' instruction inserts a value into a struct field or
3799    array element in an aggregate.</p>
3800
3801
3802 <h5>Arguments:</h5>
3803 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
3804    of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
3805    second operand is a first-class value to insert.  The following operands are
3806    constant indices indicating the position at which to insert the value in a
3807    similar manner as indices in a
3808    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.  The
3809    value to insert must have the same type as the value identified by the
3810    indices.</p>
3811
3812 <h5>Semantics:</h5>
3813 <p>The result is an aggregate of the same type as <tt>val</tt>.  Its value is
3814    that of <tt>val</tt> except that the value at the position specified by the
3815    indices is that of <tt>elt</tt>.</p>
3816
3817 <h5>Example:</h5>
3818 <pre>
3819   %result = insertvalue {i32, float} %agg, i32 1, 0    <i>; yields {i32, float}</i>
3820 </pre>
3821
3822 </div>
3823
3824
3825 <!-- ======================================================================= -->
3826 <div class="doc_subsection"> 
3827   <a name="memoryops">Memory Access and Addressing Operations</a>
3828 </div>
3829
3830 <div class="doc_text">
3831
3832 <p>A key design point of an SSA-based representation is how it represents
3833    memory.  In LLVM, no memory locations are in SSA form, which makes things
3834    very simple.  This section describes how to read, write, and allocate
3835    memory in LLVM.</p>
3836
3837 </div>
3838
3839 <!-- _______________________________________________________________________ -->
3840 <div class="doc_subsubsection">
3841   <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
3842 </div>
3843
3844 <div class="doc_text">
3845
3846 <h5>Syntax:</h5>
3847 <pre>
3848   &lt;result&gt; = alloca &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
3849 </pre>
3850
3851 <h5>Overview:</h5>
3852 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
3853    currently executing function, to be automatically released when this function
3854    returns to its caller. The object is always allocated in the generic address
3855    space (address space zero).</p>
3856
3857 <h5>Arguments:</h5>
3858 <p>The '<tt>alloca</tt>' instruction
3859    allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the
3860    runtime stack, returning a pointer of the appropriate type to the program.
3861    If "NumElements" is specified, it is the number of elements allocated,
3862    otherwise "NumElements" is defaulted to be one.  If a constant alignment is
3863    specified, the value result of the allocation is guaranteed to be aligned to
3864    at least that boundary.  If not specified, or if zero, the target can choose
3865    to align the allocation on any convenient boundary compatible with the
3866    type.</p>
3867
3868 <p>'<tt>type</tt>' may be any sized type.</p>
3869
3870 <h5>Semantics:</h5>
3871 <p>Memory is allocated; a pointer is returned.  The operation is undefined if
3872    there is insufficient stack space for the allocation.  '<tt>alloca</tt>'d
3873    memory is automatically released when the function returns.  The
3874    '<tt>alloca</tt>' instruction is commonly used to represent automatic
3875    variables that must have an address available.  When the function returns
3876    (either with the <tt><a href="#i_ret">ret</a></tt>
3877    or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is
3878    reclaimed.  Allocating zero bytes is legal, but the result is undefined.</p>
3879
3880 <h5>Example:</h5>
3881 <pre>
3882   %ptr = alloca i32                             <i>; yields {i32*}:ptr</i>
3883   %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
3884   %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
3885   %ptr = alloca i32, align 1024                 <i>; yields {i32*}:ptr</i>
3886 </pre>
3887
3888 </div>
3889
3890 <!-- _______________________________________________________________________ -->
3891 <div class="doc_subsubsection"> <a name="i_load">'<tt>load</tt>'
3892 Instruction</a> </div>
3893
3894 <div class="doc_text">
3895
3896 <h5>Syntax:</h5>
3897 <pre>
3898   &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
3899   &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
3900 </pre>
3901
3902 <h5>Overview:</h5>
3903 <p>The '<tt>load</tt>' instruction is used to read from memory.</p>
3904
3905 <h5>Arguments:</h5>
3906 <p>The argument to the '<tt>load</tt>' instruction specifies the memory address
3907    from which to load.  The pointer must point to
3908    a <a href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
3909    marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the
3910    number or order of execution of this <tt>load</tt> with other
3911    volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
3912    instructions. </p>
3913
3914 <p>The optional constant "align" argument specifies the alignment of the
3915    operation (that is, the alignment of the memory address). A value of 0 or an
3916    omitted "align" argument means that the operation has the preferential
3917    alignment for the target. It is the responsibility of the code emitter to
3918    ensure that the alignment information is correct. Overestimating the
3919    alignment results in an undefined behavior. Underestimating the alignment may
3920    produce less efficient code. An alignment of 1 is always safe.</p>
3921
3922 <h5>Semantics:</h5>
3923 <p>The location of memory pointed to is loaded.  If the value being loaded is of
3924    scalar type then the number of bytes read does not exceed the minimum number
3925    of bytes needed to hold all bits of the type.  For example, loading an
3926    <tt>i24</tt> reads at most three bytes.  When loading a value of a type like
3927    <tt>i20</tt> with a size that is not an integral number of bytes, the result
3928    is undefined if the value was not originally written using a store of the
3929    same type.</p>
3930
3931 <h5>Examples:</h5>
3932 <pre>
3933   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
3934   <a href="#i_store">store</a> i32 3, i32* %ptr                          <i>; yields {void}</i>
3935   %val = load i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
3936 </pre>
3937
3938 </div>
3939
3940 <!-- _______________________________________________________________________ -->
3941 <div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
3942 Instruction</a> </div>
3943
3944 <div class="doc_text">
3945
3946 <h5>Syntax:</h5>
3947 <pre>
3948   store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]                   <i>; yields {void}</i>
3949   volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]          <i>; yields {void}</i>
3950 </pre>
3951
3952 <h5>Overview:</h5>
3953 <p>The '<tt>store</tt>' instruction is used to write to memory.</p>
3954
3955 <h5>Arguments:</h5>
3956 <p>There are two arguments to the '<tt>store</tt>' instruction: a value to store
3957    and an address at which to store it.  The type of the
3958    '<tt>&lt;pointer&gt;</tt>' operand must be a pointer to
3959    the <a href="#t_firstclass">first class</a> type of the
3960    '<tt>&lt;value&gt;</tt>' operand. If the <tt>store</tt> is marked
3961    as <tt>volatile</tt>, then the optimizer is not allowed to modify the number
3962    or order of execution of this <tt>store</tt> with other
3963    volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
3964    instructions.</p>
3965
3966 <p>The optional constant "align" argument specifies the alignment of the
3967    operation (that is, the alignment of the memory address). A value of 0 or an
3968    omitted "align" argument means that the operation has the preferential
3969    alignment for the target. It is the responsibility of the code emitter to
3970    ensure that the alignment information is correct. Overestimating the
3971    alignment results in an undefined behavior. Underestimating the alignment may
3972    produce less efficient code. An alignment of 1 is always safe.</p>
3973
3974 <h5>Semantics:</h5>
3975 <p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>' at the
3976    location specified by the '<tt>&lt;pointer&gt;</tt>' operand.  If
3977    '<tt>&lt;value&gt;</tt>' is of scalar type then the number of bytes written
3978    does not exceed the minimum number of bytes needed to hold all bits of the
3979    type.  For example, storing an <tt>i24</tt> writes at most three bytes.  When
3980    writing a value of a type like <tt>i20</tt> with a size that is not an
3981    integral number of bytes, it is unspecified what happens to the extra bits
3982    that do not belong to the type, but they will typically be overwritten.</p>
3983
3984 <h5>Example:</h5>
3985 <pre>
3986   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
3987   store i32 3, i32* %ptr                          <i>; yields {void}</i>
3988   %val = <a href="#i_load">load</a> i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
3989 </pre>
3990
3991 </div>
3992
3993 <!-- _______________________________________________________________________ -->
3994 <div class="doc_subsubsection">
3995    <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
3996 </div>
3997
3998 <div class="doc_text">
3999
4000 <h5>Syntax:</h5>
4001 <pre>
4002   &lt;result&gt; = getelementptr &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4003   &lt;result&gt; = getelementptr inbounds &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4004 </pre>
4005
4006 <h5>Overview:</h5>
4007 <p>The '<tt>getelementptr</tt>' instruction is used to get the address of a
4008    subelement of an aggregate data structure. It performs address calculation
4009    only and does not access memory.</p>
4010
4011 <h5>Arguments:</h5>
4012 <p>The first argument is always a pointer, and forms the basis of the
4013    calculation. The remaining arguments are indices that indicate which of the
4014    elements of the aggregate object are indexed. The interpretation of each
4015    index is dependent on the type being indexed into. The first index always
4016    indexes the pointer value given as the first argument, the second index
4017    indexes a value of the type pointed to (not necessarily the value directly
4018    pointed to, since the first index can be non-zero), etc. The first type
4019    indexed into must be a pointer value, subsequent types can be arrays, vectors
4020    and structs. Note that subsequent types being indexed into can never be
4021    pointers, since that would require loading the pointer before continuing
4022    calculation.</p>
4023
4024 <p>The type of each index argument depends on the type it is indexing into.
4025    When indexing into a (optionally packed) structure, only <tt>i32</tt> integer
4026    <b>constants</b> are allowed.  When indexing into an array, pointer or
4027    vector, integers of any width are allowed, and they are not required to be
4028    constant.</p>
4029
4030 <p>For example, let's consider a C code fragment and how it gets compiled to
4031    LLVM:</p>
4032
4033 <div class="doc_code">
4034 <pre>
4035 struct RT {
4036   char A;
4037   int B[10][20];
4038   char C;
4039 };
4040 struct ST {
4041   int X;
4042   double Y;
4043   struct RT Z;
4044 };
4045
4046 int *foo(struct ST *s) {
4047   return &amp;s[1].Z.B[5][13];
4048 }
4049 </pre>
4050 </div>
4051
4052 <p>The LLVM code generated by the GCC frontend is:</p>
4053
4054 <div class="doc_code">
4055 <pre>
4056 %RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8  }
4057 %ST = <a href="#namedtypes">type</a> { i32, double, %RT }
4058
4059 define i32* @foo(%ST* %s) {
4060 entry:
4061   %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
4062   ret i32* %reg
4063 }
4064 </pre>
4065 </div>
4066
4067 <h5>Semantics:</h5>
4068 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
4069    type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
4070    }</tt>' type, a structure.  The second index indexes into the third element
4071    of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
4072    i8 }</tt>' type, another structure.  The third index indexes into the second
4073    element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
4074    array.  The two dimensions of the array are subscripted into, yielding an
4075    '<tt>i32</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a
4076    pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p>
4077
4078 <p>Note that it is perfectly legal to index partially through a structure,
4079    returning a pointer to an inner element.  Because of this, the LLVM code for
4080    the given testcase is equivalent to:</p>
4081
4082 <pre>
4083   define i32* @foo(%ST* %s) {
4084     %t1 = getelementptr %ST* %s, i32 1                        <i>; yields %ST*:%t1</i>
4085     %t2 = getelementptr %ST* %t1, i32 0, i32 2                <i>; yields %RT*:%t2</i>
4086     %t3 = getelementptr %RT* %t2, i32 0, i32 1                <i>; yields [10 x [20 x i32]]*:%t3</i>
4087     %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  <i>; yields [20 x i32]*:%t4</i>
4088     %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        <i>; yields i32*:%t5</i>
4089     ret i32* %t5
4090   }
4091 </pre>
4092
4093 <p>If the <tt>inbounds</tt> keyword is present, the result value of the
4094    <tt>getelementptr</tt> is undefined if the base pointer is not an
4095    <i>in bounds</i> address of an allocated object, or if any of the addresses
4096    that would be formed by successive addition of the offsets implied by the
4097    indices to the base address with infinitely precise arithmetic are not an
4098    <i>in bounds</i> address of that allocated object.
4099    The <i>in bounds</i> addresses for an allocated object are all the addresses
4100    that point into the object, plus the address one byte past the end.</p>
4101
4102 <p>If the <tt>inbounds</tt> keyword is not present, the offsets are added to
4103    the base address with silently-wrapping two's complement arithmetic, and
4104    the result value of the <tt>getelementptr</tt> may be outside the object
4105    pointed to by the base pointer. The result value may not necessarily be
4106    used to access memory though, even if it happens to point into allocated
4107    storage. See the <a href="#pointeraliasing">Pointer Aliasing Rules</a>
4108    section for more information.</p>
4109
4110 <p>The getelementptr instruction is often confusing.  For some more insight into
4111    how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p>
4112
4113 <h5>Example:</h5>
4114 <pre>
4115     <i>; yields [12 x i8]*:aptr</i>
4116     %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
4117     <i>; yields i8*:vptr</i>
4118     %vptr = getelementptr {i32, &lt;2 x i8&gt;}* %svptr, i64 0, i32 1, i32 1
4119     <i>; yields i8*:eptr</i>
4120     %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
4121     <i>; yields i32*:iptr</i>
4122     %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
4123 </pre>
4124
4125 </div>
4126
4127 <!-- ======================================================================= -->
4128 <div class="doc_subsection"> <a name="convertops">Conversion Operations</a>
4129 </div>
4130
4131 <div class="doc_text">
4132
4133 <p>The instructions in this category are the conversion instructions (casting)
4134    which all take a single operand and a type. They perform various bit
4135    conversions on the operand.</p>
4136
4137 </div>
4138
4139 <!-- _______________________________________________________________________ -->
4140 <div class="doc_subsubsection">
4141    <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
4142 </div>
4143 <div class="doc_text">
4144
4145 <h5>Syntax:</h5>
4146 <pre>
4147   &lt;result&gt; = trunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4148 </pre>
4149
4150 <h5>Overview:</h5>
4151 <p>The '<tt>trunc</tt>' instruction truncates its operand to the
4152    type <tt>ty2</tt>.</p>
4153
4154 <h5>Arguments:</h5>
4155 <p>The '<tt>trunc</tt>' instruction takes a <tt>value</tt> to trunc, which must
4156    be an <a href="#t_integer">integer</a> type, and a type that specifies the
4157    size and type of the result, which must be
4158    an <a href="#t_integer">integer</a> type. The bit size of <tt>value</tt> must
4159    be larger than the bit size of <tt>ty2</tt>. Equal sized types are not
4160    allowed.</p>
4161
4162 <h5>Semantics:</h5>
4163 <p>The '<tt>trunc</tt>' instruction truncates the high order bits
4164    in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the
4165    source size must be larger than the destination size, <tt>trunc</tt> cannot
4166    be a <i>no-op cast</i>.  It will always truncate bits.</p>
4167
4168 <h5>Example:</h5>
4169 <pre>
4170   %X = trunc i32 257 to i8              <i>; yields i8:1</i>
4171   %Y = trunc i32 123 to i1              <i>; yields i1:true</i>
4172   %Y = trunc i32 122 to i1              <i>; yields i1:false</i>
4173 </pre>
4174
4175 </div>
4176
4177 <!-- _______________________________________________________________________ -->
4178 <div class="doc_subsubsection">
4179    <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
4180 </div>
4181 <div class="doc_text">
4182
4183 <h5>Syntax:</h5>
4184 <pre>
4185   &lt;result&gt; = zext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4186 </pre>
4187
4188 <h5>Overview:</h5>
4189 <p>The '<tt>zext</tt>' instruction zero extends its operand to type 
4190    <tt>ty2</tt>.</p>
4191
4192
4193 <h5>Arguments:</h5>
4194 <p>The '<tt>zext</tt>' instruction takes a value to cast, which must be of 
4195    <a href="#t_integer">integer</a> type, and a type to cast it to, which must
4196    also be of <a href="#t_integer">integer</a> type. The bit size of the
4197    <tt>value</tt> must be smaller than the bit size of the destination type, 
4198    <tt>ty2</tt>.</p>
4199
4200 <h5>Semantics:</h5>
4201 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
4202    bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>
4203
4204 <p>When zero extending from i1, the result will always be either 0 or 1.</p>
4205
4206 <h5>Example:</h5>
4207 <pre>
4208   %X = zext i32 257 to i64              <i>; yields i64:257</i>
4209   %Y = zext i1 true to i32              <i>; yields i32:1</i>
4210 </pre>
4211
4212 </div>
4213
4214 <!-- _______________________________________________________________________ -->
4215 <div class="doc_subsubsection">
4216    <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
4217 </div>
4218 <div class="doc_text">
4219
4220 <h5>Syntax:</h5>
4221 <pre>
4222   &lt;result&gt; = sext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4223 </pre>
4224
4225 <h5>Overview:</h5>
4226 <p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>
4227
4228 <h5>Arguments:</h5>
4229 <p>The '<tt>sext</tt>' instruction takes a value to cast, which must be of 
4230    <a href="#t_integer">integer</a> type, and a type to cast it to, which must
4231    also be of <a href="#t_integer">integer</a> type.  The bit size of the
4232    <tt>value</tt> must be smaller than the bit size of the destination type, 
4233    <tt>ty2</tt>.</p>
4234
4235 <h5>Semantics:</h5>
4236 <p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
4237    bit (highest order bit) of the <tt>value</tt> until it reaches the bit size
4238    of the type <tt>ty2</tt>.</p>
4239
4240 <p>When sign extending from i1, the extension always results in -1 or 0.</p>
4241
4242 <h5>Example:</h5>
4243 <pre>
4244   %X = sext i8  -1 to i16              <i>; yields i16   :65535</i>
4245   %Y = sext i1 true to i32             <i>; yields i32:-1</i>
4246 </pre>
4247
4248 </div>
4249
4250 <!-- _______________________________________________________________________ -->
4251 <div class="doc_subsubsection">
4252    <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
4253 </div>
4254
4255 <div class="doc_text">
4256
4257 <h5>Syntax:</h5>
4258 <pre>
4259   &lt;result&gt; = fptrunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4260 </pre>
4261
4262 <h5>Overview:</h5>
4263 <p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
4264    <tt>ty2</tt>.</p>
4265
4266 <h5>Arguments:</h5>
4267 <p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
4268    point</a> value to cast and a <a href="#t_floating">floating point</a> type
4269    to cast it to. The size of <tt>value</tt> must be larger than the size of
4270    <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a 
4271    <i>no-op cast</i>.</p>
4272
4273 <h5>Semantics:</h5>
4274 <p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
4275    <a href="#t_floating">floating point</a> type to a smaller 
4276    <a href="#t_floating">floating point</a> type.  If the value cannot fit
4277    within the destination type, <tt>ty2</tt>, then the results are
4278    undefined.</p>
4279
4280 <h5>Example:</h5>
4281 <pre>
4282   %X = fptrunc double 123.0 to float         <i>; yields float:123.0</i>
4283   %Y = fptrunc double 1.0E+300 to float      <i>; yields undefined</i>
4284 </pre>
4285
4286 </div>
4287
4288 <!-- _______________________________________________________________________ -->
4289 <div class="doc_subsubsection">
4290    <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
4291 </div>
4292 <div class="doc_text">
4293
4294 <h5>Syntax:</h5>
4295 <pre>
4296   &lt;result&gt; = fpext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4297 </pre>
4298
4299 <h5>Overview:</h5>
4300 <p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
4301    floating point value.</p>
4302
4303 <h5>Arguments:</h5>
4304 <p>The '<tt>fpext</tt>' instruction takes a 
4305    <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and
4306    a <a href="#t_floating">floating point</a> type to cast it to. The source
4307    type must be smaller than the destination type.</p>
4308
4309 <h5>Semantics:</h5>
4310 <p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
4311    <a href="#t_floating">floating point</a> type to a larger
4312    <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
4313    used to make a <i>no-op cast</i> because it always changes bits. Use
4314    <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>
4315
4316 <h5>Example:</h5>
4317 <pre>
4318   %X = fpext float 3.1415 to double        <i>; yields double:3.1415</i>
4319   %Y = fpext float 1.0 to float            <i>; yields float:1.0 (no-op)</i>
4320 </pre>
4321
4322 </div>
4323
4324 <!-- _______________________________________________________________________ -->
4325 <div class="doc_subsubsection">
4326    <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
4327 </div>
4328 <div class="doc_text">
4329
4330 <h5>Syntax:</h5>
4331 <pre>
4332   &lt;result&gt; = fptoui &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4333 </pre>
4334
4335 <h5>Overview:</h5>
4336 <p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its
4337    unsigned integer equivalent of type <tt>ty2</tt>.</p>
4338
4339 <h5>Arguments:</h5>
4340 <p>The '<tt>fptoui</tt>' instruction takes a value to cast, which must be a
4341    scalar or vector <a href="#t_floating">floating point</a> value, and a type
4342    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
4343    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
4344    vector integer type with the same number of elements as <tt>ty</tt></p>
4345
4346 <h5>Semantics:</h5>
4347 <p>The '<tt>fptoui</tt>' instruction converts its 
4348    <a href="#t_floating">floating point</a> operand into the nearest (rounding
4349    towards zero) unsigned integer value. If the value cannot fit
4350    in <tt>ty2</tt>, the results are undefined.</p>
4351
4352 <h5>Example:</h5>
4353 <pre>
4354   %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
4355   %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
4356   %X = fptoui float 1.04E+17 to i8     <i>; yields undefined:1</i>
4357 </pre>
4358
4359 </div>
4360
4361 <!-- _______________________________________________________________________ -->
4362 <div class="doc_subsubsection">
4363    <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
4364 </div>
4365 <div class="doc_text">
4366
4367 <h5>Syntax:</h5>
4368 <pre>
4369   &lt;result&gt; = fptosi &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4370 </pre>
4371
4372 <h5>Overview:</h5>
4373 <p>The '<tt>fptosi</tt>' instruction converts 
4374    <a href="#t_floating">floating point</a> <tt>value</tt> to
4375    type <tt>ty2</tt>.</p>
4376
4377 <h5>Arguments:</h5>
4378 <p>The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a
4379    scalar or vector <a href="#t_floating">floating point</a> value, and a type
4380    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
4381    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
4382    vector integer type with the same number of elements as <tt>ty</tt></p>
4383
4384 <h5>Semantics:</h5>
4385 <p>The '<tt>fptosi</tt>' instruction converts its 
4386    <a href="#t_floating">floating point</a> operand into the nearest (rounding
4387    towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
4388    the results are undefined.</p>
4389
4390 <h5>Example:</h5>
4391 <pre>
4392   %X = fptosi double -123.0 to i32      <i>; yields i32:-123</i>
4393   %Y = fptosi float 1.0E-247 to i1      <i>; yields undefined:1</i>
4394   %X = fptosi float 1.04E+17 to i8      <i>; yields undefined:1</i>
4395 </pre>
4396
4397 </div>
4398
4399 <!-- _______________________________________________________________________ -->
4400 <div class="doc_subsubsection">
4401    <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
4402 </div>
4403 <div class="doc_text">
4404
4405 <h5>Syntax:</h5>
4406 <pre>
4407   &lt;result&gt; = uitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4408 </pre>
4409
4410 <h5>Overview:</h5>
4411 <p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
4412    integer and converts that value to the <tt>ty2</tt> type.</p>
4413
4414 <h5>Arguments:</h5>
4415 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be a
4416    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
4417    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
4418    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
4419    floating point type with the same number of elements as <tt>ty</tt></p>
4420
4421 <h5>Semantics:</h5>
4422 <p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
4423    integer quantity and converts it to the corresponding floating point
4424    value. If the value cannot fit in the floating point value, the results are
4425    undefined.</p>
4426
4427 <h5>Example:</h5>
4428 <pre>
4429   %X = uitofp i32 257 to float         <i>; yields float:257.0</i>
4430   %Y = uitofp i8 -1 to double          <i>; yields double:255.0</i>
4431 </pre>
4432
4433 </div>
4434
4435 <!-- _______________________________________________________________________ -->
4436 <div class="doc_subsubsection">
4437    <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
4438 </div>
4439 <div class="doc_text">
4440
4441 <h5>Syntax:</h5>
4442 <pre>
4443   &lt;result&gt; = sitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4444 </pre>
4445
4446 <h5>Overview:</h5>
4447 <p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer
4448    and converts that value to the <tt>ty2</tt> type.</p>
4449
4450 <h5>Arguments:</h5>
4451 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be a
4452    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
4453    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
4454    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
4455    floating point type with the same number of elements as <tt>ty</tt></p>
4456
4457 <h5>Semantics:</h5>
4458 <p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer
4459    quantity and converts it to the corresponding floating point value. If the
4460    value cannot fit in the floating point value, the results are undefined.</p>
4461
4462 <h5>Example:</h5>
4463 <pre>
4464   %X = sitofp i32 257 to float         <i>; yields float:257.0</i>
4465   %Y = sitofp i8 -1 to double          <i>; yields double:-1.0</i>
4466 </pre>
4467
4468 </div>
4469
4470 <!-- _______________________________________________________________________ -->
4471 <div class="doc_subsubsection">
4472    <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
4473 </div>
4474 <div class="doc_text">
4475
4476 <h5>Syntax:</h5>
4477 <pre>
4478   &lt;result&gt; = ptrtoint &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4479 </pre>
4480
4481 <h5>Overview:</h5>
4482 <p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
4483    the integer type <tt>ty2</tt>.</p>
4484
4485 <h5>Arguments:</h5>
4486 <p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which
4487    must be a <a href="#t_pointer">pointer</a> value, and a type to cast it to
4488    <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.</p>
4489
4490 <h5>Semantics:</h5>
4491 <p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
4492    <tt>ty2</tt> by interpreting the pointer value as an integer and either
4493    truncating or zero extending that value to the size of the integer type. If
4494    <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
4495    <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
4496    are the same size, then nothing is done (<i>no-op cast</i>) other than a type
4497    change.</p>
4498
4499 <h5>Example:</h5>
4500 <pre>
4501   %X = ptrtoint i32* %X to i8           <i>; yields truncation on 32-bit architecture</i>
4502   %Y = ptrtoint i32* %x to i64          <i>; yields zero extension on 32-bit architecture</i>
4503 </pre>
4504
4505 </div>
4506
4507 <!-- _______________________________________________________________________ -->
4508 <div class="doc_subsubsection">
4509    <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
4510 </div>
4511 <div class="doc_text">
4512
4513 <h5>Syntax:</h5>
4514 <pre>
4515   &lt;result&gt; = inttoptr &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4516 </pre>
4517
4518 <h5>Overview:</h5>
4519 <p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to a
4520    pointer type, <tt>ty2</tt>.</p>
4521
4522 <h5>Arguments:</h5>
4523 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a>
4524    value to cast, and a type to cast it to, which must be a
4525    <a href="#t_pointer">pointer</a> type.</p>
4526
4527 <h5>Semantics:</h5>
4528 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
4529    <tt>ty2</tt> by applying either a zero extension or a truncation depending on
4530    the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the
4531    size of a pointer then a truncation is done. If <tt>value</tt> is smaller
4532    than the size of a pointer then a zero extension is done. If they are the
4533    same size, nothing is done (<i>no-op cast</i>).</p>
4534
4535 <h5>Example:</h5>
4536 <pre>
4537   %X = inttoptr i32 255 to i32*          <i>; yields zero extension on 64-bit architecture</i>
4538   %X = inttoptr i32 255 to i32*          <i>; yields no-op on 32-bit architecture</i>
4539   %Y = inttoptr i64 0 to i32*            <i>; yields truncation on 32-bit architecture</i>
4540 </pre>
4541
4542 </div>
4543
4544 <!-- _______________________________________________________________________ -->
4545 <div class="doc_subsubsection">
4546    <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
4547 </div>
4548 <div class="doc_text">
4549
4550 <h5>Syntax:</h5>
4551 <pre>
4552   &lt;result&gt; = bitcast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4553 </pre>
4554
4555 <h5>Overview:</h5>
4556 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
4557    <tt>ty2</tt> without changing any bits.</p>
4558
4559 <h5>Arguments:</h5>
4560 <p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a
4561    non-aggregate first class value, and a type to cast it to, which must also be
4562    a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes
4563    of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be
4564    identical. If the source type is a pointer, the destination type must also be
4565    a pointer.  This instruction supports bitwise conversion of vectors to
4566    integers and to vectors of other types (as long as they have the same
4567    size).</p>
4568
4569 <h5>Semantics:</h5>
4570 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
4571    <tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with
4572    this conversion.  The conversion is done as if the <tt>value</tt> had been
4573    stored to memory and read back as type <tt>ty2</tt>. Pointer types may only
4574    be converted to other pointer types with this instruction. To convert
4575    pointers to other types, use the <a href="#i_inttoptr">inttoptr</a> or
4576    <a href="#i_ptrtoint">ptrtoint</a> instructions first.</p>
4577
4578 <h5>Example:</h5>
4579 <pre>
4580   %X = bitcast i8 255 to i8              <i>; yields i8 :-1</i>
4581   %Y = bitcast i32* %x to sint*          <i>; yields sint*:%x</i>
4582   %Z = bitcast &lt;2 x int&gt; %V to i64;      <i>; yields i64: %V</i>   
4583 </pre>
4584
4585 </div>
4586
4587 <!-- ======================================================================= -->
4588 <div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>
4589
4590 <div class="doc_text">
4591
4592 <p>The instructions in this category are the "miscellaneous" instructions, which
4593    defy better classification.</p>
4594
4595 </div>
4596
4597 <!-- _______________________________________________________________________ -->
4598 <div class="doc_subsubsection"><a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
4599 </div>
4600
4601 <div class="doc_text">
4602
4603 <h5>Syntax:</h5>
4604 <pre>
4605   &lt;result&gt; = icmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {i1} or {&lt;N x i1&gt;}:result</i>
4606 </pre>
4607
4608 <h5>Overview:</h5>
4609 <p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of
4610    boolean values based on comparison of its two integer, integer vector, or
4611    pointer operands.</p>
4612
4613 <h5>Arguments:</h5>
4614 <p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
4615    the condition code indicating the kind of comparison to perform. It is not a
4616    value, just a keyword. The possible condition code are:</p>
4617
4618 <ol>
4619   <li><tt>eq</tt>: equal</li>
4620   <li><tt>ne</tt>: not equal </li>
4621   <li><tt>ugt</tt>: unsigned greater than</li>
4622   <li><tt>uge</tt>: unsigned greater or equal</li>
4623   <li><tt>ult</tt>: unsigned less than</li>
4624   <li><tt>ule</tt>: unsigned less or equal</li>
4625   <li><tt>sgt</tt>: signed greater than</li>
4626   <li><tt>sge</tt>: signed greater or equal</li>
4627   <li><tt>slt</tt>: signed less than</li>
4628   <li><tt>sle</tt>: signed less or equal</li>
4629 </ol>
4630
4631 <p>The remaining two arguments must be <a href="#t_integer">integer</a> or
4632    <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a>
4633    typed.  They must also be identical types.</p>
4634
4635 <h5>Semantics:</h5>
4636 <p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the
4637    condition code given as <tt>cond</tt>. The comparison performed always yields
4638    either an <a href="#t_integer"><tt>i1</tt></a> or vector of <tt>i1</tt>
4639    result, as follows:</p>
4640
4641 <ol>
4642   <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal, 
4643       <tt>false</tt> otherwise. No sign interpretation is necessary or
4644       performed.</li>
4645
4646   <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal, 
4647       <tt>false</tt> otherwise. No sign interpretation is necessary or
4648       performed.</li>
4649
4650   <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
4651       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4652
4653   <li><tt>uge</tt>: interprets the operands as unsigned values and yields
4654       <tt>true</tt> if <tt>op1</tt> is greater than or equal
4655       to <tt>op2</tt>.</li>
4656
4657   <li><tt>ult</tt>: interprets the operands as unsigned values and yields
4658       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
4659
4660   <li><tt>ule</tt>: interprets the operands as unsigned values and yields
4661       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4662
4663   <li><tt>sgt</tt>: interprets the operands as signed values and yields
4664       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4665
4666   <li><tt>sge</tt>: interprets the operands as signed values and yields
4667       <tt>true</tt> if <tt>op1</tt> is greater than or equal
4668       to <tt>op2</tt>.</li>
4669
4670   <li><tt>slt</tt>: interprets the operands as signed values and yields
4671       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
4672
4673   <li><tt>sle</tt>: interprets the operands as signed values and yields
4674       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4675 </ol>
4676
4677 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
4678    values are compared as if they were integers.</p>
4679
4680 <p>If the operands are integer vectors, then they are compared element by
4681    element. The result is an <tt>i1</tt> vector with the same number of elements
4682    as the values being compared.  Otherwise, the result is an <tt>i1</tt>.</p>
4683
4684 <h5>Example:</h5>
4685 <pre>
4686   &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
4687   &lt;result&gt; = icmp ne float* %X, %X     <i>; yields: result=false</i>
4688   &lt;result&gt; = icmp ult i16  4, 5        <i>; yields: result=true</i>
4689   &lt;result&gt; = icmp sgt i16  4, 5        <i>; yields: result=false</i>
4690   &lt;result&gt; = icmp ule i16 -4, 5        <i>; yields: result=false</i>
4691   &lt;result&gt; = icmp sge i16  4, 5        <i>; yields: result=false</i>
4692 </pre>
4693
4694 <p>Note that the code generator does not yet support vector types with
4695    the <tt>icmp</tt> instruction.</p>
4696
4697 </div>
4698
4699 <!-- _______________________________________________________________________ -->
4700 <div class="doc_subsubsection"><a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
4701 </div>
4702
4703 <div class="doc_text">
4704
4705 <h5>Syntax:</h5>
4706 <pre>
4707   &lt;result&gt; = fcmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;     <i>; yields {i1} or {&lt;N x i1&gt;}:result</i>
4708 </pre>
4709
4710 <h5>Overview:</h5>
4711 <p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean
4712    values based on comparison of its operands.</p>
4713
4714 <p>If the operands are floating point scalars, then the result type is a boolean
4715 (<a href="#t_integer"><tt>i1</tt></a>).</p>
4716
4717 <p>If the operands are floating point vectors, then the result type is a vector
4718    of boolean with the same number of elements as the operands being
4719    compared.</p>
4720
4721 <h5>Arguments:</h5>
4722 <p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
4723    the condition code indicating the kind of comparison to perform. It is not a
4724    value, just a keyword. The possible condition code are:</p>
4725
4726 <ol>
4727   <li><tt>false</tt>: no comparison, always returns false</li>
4728   <li><tt>oeq</tt>: ordered and equal</li>
4729   <li><tt>ogt</tt>: ordered and greater than </li>
4730   <li><tt>oge</tt>: ordered and greater than or equal</li>
4731   <li><tt>olt</tt>: ordered and less than </li>
4732   <li><tt>ole</tt>: ordered and less than or equal</li>
4733   <li><tt>one</tt>: ordered and not equal</li>
4734   <li><tt>ord</tt>: ordered (no nans)</li>
4735   <li><tt>ueq</tt>: unordered or equal</li>
4736   <li><tt>ugt</tt>: unordered or greater than </li>
4737   <li><tt>uge</tt>: unordered or greater than or equal</li>
4738   <li><tt>ult</tt>: unordered or less than </li>
4739   <li><tt>ule</tt>: unordered or less than or equal</li>
4740   <li><tt>une</tt>: unordered or not equal</li>
4741   <li><tt>uno</tt>: unordered (either nans)</li>
4742   <li><tt>true</tt>: no comparison, always returns true</li>
4743 </ol>
4744
4745 <p><i>Ordered</i> means that neither operand is a QNAN while
4746    <i>unordered</i> means that either operand may be a QNAN.</p>
4747
4748 <p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either
4749    a <a href="#t_floating">floating point</a> type or
4750    a <a href="#t_vector">vector</a> of floating point type.  They must have
4751    identical types.</p>
4752
4753 <h5>Semantics:</h5>
4754 <p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
4755    according to the condition code given as <tt>cond</tt>.  If the operands are
4756    vectors, then the vectors are compared element by element.  Each comparison
4757    performed always yields an <a href="#t_integer">i1</a> result, as
4758    follows:</p>
4759
4760 <ol>
4761   <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>
4762
4763   <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4764       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
4765
4766   <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
4767       <tt>op1</tt> is greather than <tt>op2</tt>.</li>
4768
4769   <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4770       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
4771
4772   <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4773       <tt>op1</tt> is less than <tt>op2</tt>.</li>
4774
4775   <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4776       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4777
4778   <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4779       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
4780
4781   <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>
4782
4783   <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4784       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
4785
4786   <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4787       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4788
4789   <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4790       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
4791
4792   <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4793       <tt>op1</tt> is less than <tt>op2</tt>.</li>
4794
4795   <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4796       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4797
4798   <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4799       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
4800
4801   <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
4802
4803   <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
4804 </ol>
4805
4806 <h5>Example:</h5>
4807 <pre>
4808   &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
4809   &lt;result&gt; = fcmp one float 4.0, 5.0    <i>; yields: result=true</i>
4810   &lt;result&gt; = fcmp olt float 4.0, 5.0    <i>; yields: result=true</i>
4811   &lt;result&gt; = fcmp ueq double 1.0, 2.0   <i>; yields: result=false</i>
4812 </pre>
4813
4814 <p>Note that the code generator does not yet support vector types with
4815    the <tt>fcmp</tt> instruction.</p>
4816
4817 </div>
4818
4819 <!-- _______________________________________________________________________ -->
4820 <div class="doc_subsubsection">
4821   <a name="i_phi">'<tt>phi</tt>' Instruction</a>
4822 </div>
4823
4824 <div class="doc_text">
4825
4826 <h5>Syntax:</h5>
4827 <pre>
4828   &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...
4829 </pre>
4830
4831 <h5>Overview:</h5>
4832 <p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in the
4833    SSA graph representing the function.</p>
4834
4835 <h5>Arguments:</h5>
4836 <p>The type of the incoming values is specified with the first type field. After
4837    this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
4838    one pair for each predecessor basic block of the current block.  Only values
4839    of <a href="#t_firstclass">first class</a> type may be used as the value
4840    arguments to the PHI node.  Only labels may be used as the label
4841    arguments.</p>
4842
4843 <p>There must be no non-phi instructions between the start of a basic block and
4844    the PHI instructions: i.e. PHI instructions must be first in a basic
4845    block.</p>
4846
4847 <p>For the purposes of the SSA form, the use of each incoming value is deemed to
4848    occur on the edge from the corresponding predecessor block to the current
4849    block (but after any definition of an '<tt>invoke</tt>' instruction's return
4850    value on the same edge).</p>
4851
4852 <h5>Semantics:</h5>
4853 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
4854    specified by the pair corresponding to the predecessor basic block that
4855    executed just prior to the current block.</p>
4856
4857 <h5>Example:</h5>
4858 <pre>
4859 Loop:       ; Infinite loop that counts from 0 on up...
4860   %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
4861   %nextindvar = add i32 %indvar, 1
4862   br label %Loop
4863 </pre>
4864
4865 </div>
4866
4867 <!-- _______________________________________________________________________ -->
4868 <div class="doc_subsubsection">
4869    <a name="i_select">'<tt>select</tt>' Instruction</a>
4870 </div>
4871
4872 <div class="doc_text">
4873
4874 <h5>Syntax:</h5>
4875 <pre>
4876   &lt;result&gt; = select <i>selty</i> &lt;cond&gt;, &lt;ty&gt; &lt;val1&gt;, &lt;ty&gt; &lt;val2&gt;             <i>; yields ty</i>
4877
4878   <i>selty</i> is either i1 or {&lt;N x i1&gt;}
4879 </pre>
4880
4881 <h5>Overview:</h5>
4882 <p>The '<tt>select</tt>' instruction is used to choose one value based on a
4883    condition, without branching.</p>
4884
4885
4886 <h5>Arguments:</h5>
4887 <p>The '<tt>select</tt>' instruction requires an 'i1' value or a vector of 'i1'
4888    values indicating the condition, and two values of the
4889    same <a href="#t_firstclass">first class</a> type.  If the val1/val2 are
4890    vectors and the condition is a scalar, then entire vectors are selected, not
4891    individual elements.</p>
4892
4893 <h5>Semantics:</h5>
4894 <p>If the condition is an i1 and it evaluates to 1, the instruction returns the
4895    first value argument; otherwise, it returns the second value argument.</p>
4896
4897 <p>If the condition is a vector of i1, then the value arguments must be vectors
4898    of the same size, and the selection is done element by element.</p>
4899
4900 <h5>Example:</h5>
4901 <pre>
4902   %X = select i1 true, i8 17, i8 42          <i>; yields i8:17</i>
4903 </pre>
4904
4905 <p>Note that the code generator does not yet support conditions
4906    with vector type.</p>
4907
4908 </div>
4909
4910 <!-- _______________________________________________________________________ -->
4911 <div class="doc_subsubsection">
4912   <a name="i_call">'<tt>call</tt>' Instruction</a>
4913 </div>
4914
4915 <div class="doc_text">
4916
4917 <h5>Syntax:</h5>
4918 <pre>
4919   &lt;result&gt; = [tail] call [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>] &lt;ty&gt; [&lt;fnty&gt;*] &lt;fnptrval&gt;(&lt;function args&gt;) [<a href="#fnattrs">fn attrs</a>]
4920 </pre>
4921
4922 <h5>Overview:</h5>
4923 <p>The '<tt>call</tt>' instruction represents a simple function call.</p>
4924
4925 <h5>Arguments:</h5>
4926 <p>This instruction requires several arguments:</p>
4927
4928 <ol>
4929   <li>The optional "tail" marker indicates whether the callee function accesses
4930       any allocas or varargs in the caller.  If the "tail" marker is present,
4931       the function call is eligible for tail call optimization.  Note that calls
4932       may be marked "tail" even if they do not occur before
4933       a <a href="#i_ret"><tt>ret</tt></a> instruction.</li>
4934
4935   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
4936       convention</a> the call should use.  If none is specified, the call
4937       defaults to using C calling conventions.</li>
4938
4939   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
4940       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
4941       '<tt>inreg</tt>' attributes are valid here.</li>
4942
4943   <li>'<tt>ty</tt>': the type of the call instruction itself which is also the
4944       type of the return value.  Functions that return no value are marked
4945       <tt><a href="#t_void">void</a></tt>.</li>
4946
4947   <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value
4948       being invoked.  The argument types must match the types implied by this
4949       signature.  This type can be omitted if the function is not varargs and if
4950       the function type does not return a pointer to a function.</li>
4951
4952   <li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to
4953       be invoked. In most cases, this is a direct function invocation, but
4954       indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer
4955       to function value.</li>
4956
4957   <li>'<tt>function args</tt>': argument list whose types match the function
4958       signature argument types. All arguments must be of
4959       <a href="#t_firstclass">first class</a> type. If the function signature
4960       indicates the function accepts a variable number of arguments, the extra
4961       arguments can be specified.</li>
4962
4963   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
4964       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
4965       '<tt>readnone</tt>' attributes are valid here.</li>
4966 </ol>
4967
4968 <h5>Semantics:</h5>
4969 <p>The '<tt>call</tt>' instruction is used to cause control flow to transfer to
4970    a specified function, with its incoming arguments bound to the specified
4971    values. Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called
4972    function, control flow continues with the instruction after the function
4973    call, and the return value of the function is bound to the result
4974    argument.</p>
4975
4976 <h5>Example:</h5>
4977 <pre>
4978   %retval = call i32 @test(i32 %argc)
4979   call i32 (i8 *, ...)* @printf(i8 * %msg, i32 12, i8 42)      <i>; yields i32</i>
4980   %X = tail call i32 @foo()                                    <i>; yields i32</i>
4981   %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo()  <i>; yields i32</i>
4982   call void %foo(i8 97 signext)
4983
4984   %struct.A = type { i32, i8 }
4985   %r = call %struct.A @foo()                        <i>; yields { 32, i8 }</i>
4986   %gr = extractvalue %struct.A %r, 0                <i>; yields i32</i>
4987   %gr1 = extractvalue %struct.A %r, 1               <i>; yields i8</i>
4988   %Z = call void @foo() noreturn                    <i>; indicates that %foo never returns normally</i>
4989   %ZZ = call zeroext i32 @bar()                     <i>; Return value is %zero extended</i>
4990 </pre>
4991
4992 <p>llvm treats calls to some functions with names and arguments that match the
4993 standard C99 library as being the C99 library functions, and may perform
4994 optimizations or generate code for them under that assumption.  This is
4995 something we'd like to change in the future to provide better support for
4996 freestanding environments and non-C-based langauges.</p>
4997
4998 </div>
4999
5000 <!-- _______________________________________________________________________ -->
5001 <div class="doc_subsubsection">
5002   <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
5003 </div>
5004
5005 <div class="doc_text">
5006
5007 <h5>Syntax:</h5>
5008 <pre>
5009   &lt;resultval&gt; = va_arg &lt;va_list*&gt; &lt;arglist&gt;, &lt;argty&gt;
5010 </pre>
5011
5012 <h5>Overview:</h5>
5013 <p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through
5014    the "variable argument" area of a function call.  It is used to implement the
5015    <tt>va_arg</tt> macro in C.</p>
5016
5017 <h5>Arguments:</h5>
5018 <p>This instruction takes a <tt>va_list*</tt> value and the type of the
5019    argument. It returns a value of the specified argument type and increments
5020    the <tt>va_list</tt> to point to the next argument.  The actual type
5021    of <tt>va_list</tt> is target specific.</p>
5022
5023 <h5>Semantics:</h5>
5024 <p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type
5025    from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point
5026    to the next argument.  For more information, see the variable argument
5027    handling <a href="#int_varargs">Intrinsic Functions</a>.</p>
5028
5029 <p>It is legal for this instruction to be called in a function which does not
5030    take a variable number of arguments, for example, the <tt>vfprintf</tt>
5031    function.</p>
5032
5033 <p><tt>va_arg</tt> is an LLVM instruction instead of
5034    an <a href="#intrinsics">intrinsic function</a> because it takes a type as an
5035    argument.</p>
5036
5037 <h5>Example:</h5>
5038 <p>See the <a href="#int_varargs">variable argument processing</a> section.</p>
5039
5040 <p>Note that the code generator does not yet fully support va_arg on many
5041    targets. Also, it does not currently support va_arg with aggregate types on
5042    any target.</p>
5043
5044 </div>
5045
5046 <!-- *********************************************************************** -->
5047 <div class="doc_section"> <a name="intrinsics">Intrinsic Functions</a> </div>
5048 <!-- *********************************************************************** -->
5049
5050 <div class="doc_text">
5051
5052 <p>LLVM supports the notion of an "intrinsic function".  These functions have
5053    well known names and semantics and are required to follow certain
5054    restrictions.  Overall, these intrinsics represent an extension mechanism for
5055    the LLVM language that does not require changing all of the transformations
5056    in LLVM when adding to the language (or the bitcode reader/writer, the
5057    parser, etc...).</p>
5058
5059 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This
5060    prefix is reserved in LLVM for intrinsic names; thus, function names may not
5061    begin with this prefix.  Intrinsic functions must always be external
5062    functions: you cannot define the body of intrinsic functions.  Intrinsic
5063    functions may only be used in call or invoke instructions: it is illegal to
5064    take the address of an intrinsic function.  Additionally, because intrinsic
5065    functions are part of the LLVM language, it is required if any are added that
5066    they be documented here.</p>
5067
5068 <p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents a
5069    family of functions that perform the same operation but on different data
5070    types. Because LLVM can represent over 8 million different integer types,
5071    overloading is used commonly to allow an intrinsic function to operate on any
5072    integer type. One or more of the argument types or the result type can be
5073    overloaded to accept any integer type. Argument types may also be defined as
5074    exactly matching a previous argument's type or the result type. This allows
5075    an intrinsic function which accepts multiple arguments, but needs all of them
5076    to be of the same type, to only be overloaded with respect to a single
5077    argument or the result.</p>
5078
5079 <p>Overloaded intrinsics will have the names of its overloaded argument types
5080    encoded into its function name, each preceded by a period. Only those types
5081    which are overloaded result in a name suffix. Arguments whose type is matched
5082    against another type do not. For example, the <tt>llvm.ctpop</tt> function
5083    can take an integer of any width and returns an integer of exactly the same
5084    integer width. This leads to a family of functions such as
5085    <tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29
5086    %val)</tt>.  Only one type, the return type, is overloaded, and only one type
5087    suffix is required. Because the argument's type is matched against the return
5088    type, it does not require its own name suffix.</p>
5089
5090 <p>To learn how to add an intrinsic function, please see the 
5091    <a href="ExtendingLLVM.html">Extending LLVM Guide</a>.</p>
5092
5093 </div>
5094
5095 <!-- ======================================================================= -->
5096 <div class="doc_subsection">
5097   <a name="int_varargs">Variable Argument Handling Intrinsics</a>
5098 </div>
5099
5100 <div class="doc_text">
5101
5102 <p>Variable argument support is defined in LLVM with
5103    the <a href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three
5104    intrinsic functions.  These functions are related to the similarly named
5105    macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>
5106
5107 <p>All of these functions operate on arguments that use a target-specific value
5108    type "<tt>va_list</tt>".  The LLVM assembly language reference manual does
5109    not define what this type is, so all transformations should be prepared to
5110    handle these functions regardless of the type used.</p>
5111
5112 <p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
5113    instruction and the variable argument handling intrinsic functions are
5114    used.</p>
5115
5116 <div class="doc_code">
5117 <pre>
5118 define i32 @test(i32 %X, ...) {
5119   ; Initialize variable argument processing
5120   %ap = alloca i8*
5121   %ap2 = bitcast i8** %ap to i8*
5122   call void @llvm.va_start(i8* %ap2)
5123
5124   ; Read a single integer argument
5125   %tmp = va_arg i8** %ap, i32
5126
5127   ; Demonstrate usage of llvm.va_copy and llvm.va_end
5128   %aq = alloca i8*
5129   %aq2 = bitcast i8** %aq to i8*
5130   call void @llvm.va_copy(i8* %aq2, i8* %ap2)
5131   call void @llvm.va_end(i8* %aq2)
5132
5133   ; Stop processing of arguments.
5134   call void @llvm.va_end(i8* %ap2)
5135   ret i32 %tmp
5136 }
5137
5138 declare void @llvm.va_start(i8*)
5139 declare void @llvm.va_copy(i8*, i8*)
5140 declare void @llvm.va_end(i8*)
5141 </pre>
5142 </div>
5143
5144 </div>
5145
5146 <!-- _______________________________________________________________________ -->
5147 <div class="doc_subsubsection">
5148   <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
5149 </div>
5150
5151
5152 <div class="doc_text">
5153
5154 <h5>Syntax:</h5>
5155 <pre>
5156   declare void %llvm.va_start(i8* &lt;arglist&gt;)
5157 </pre>
5158
5159 <h5>Overview:</h5>
5160 <p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*&lt;arglist&gt;</tt>
5161    for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p>
5162
5163 <h5>Arguments:</h5>
5164 <p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>
5165
5166 <h5>Semantics:</h5>
5167 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
5168    macro available in C.  In a target-dependent way, it initializes
5169    the <tt>va_list</tt> element to which the argument points, so that the next
5170    call to <tt>va_arg</tt> will produce the first variable argument passed to
5171    the function.  Unlike the C <tt>va_start</tt> macro, this intrinsic does not
5172    need to know the last argument of the function as the compiler can figure
5173    that out.</p>
5174
5175 </div>
5176
5177 <!-- _______________________________________________________________________ -->
5178 <div class="doc_subsubsection">
5179  <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
5180 </div>
5181
5182 <div class="doc_text">
5183
5184 <h5>Syntax:</h5>
5185 <pre>
5186   declare void @llvm.va_end(i8* &lt;arglist&gt;)
5187 </pre>
5188
5189 <h5>Overview:</h5>
5190 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*&lt;arglist&gt;</tt>,
5191    which has been initialized previously
5192    with <tt><a href="#int_va_start">llvm.va_start</a></tt>
5193    or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
5194
5195 <h5>Arguments:</h5>
5196 <p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p>
5197
5198 <h5>Semantics:</h5>
5199 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
5200    macro available in C.  In a target-dependent way, it destroys
5201    the <tt>va_list</tt> element to which the argument points.  Calls
5202    to <a href="#int_va_start"><tt>llvm.va_start</tt></a>
5203    and <a href="#int_va_copy"> <tt>llvm.va_copy</tt></a> must be matched exactly
5204    with calls to <tt>llvm.va_end</tt>.</p>
5205
5206 </div>
5207
5208 <!-- _______________________________________________________________________ -->
5209 <div class="doc_subsubsection">
5210   <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
5211 </div>
5212
5213 <div class="doc_text">
5214
5215 <h5>Syntax:</h5>
5216 <pre>
5217   declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
5218 </pre>
5219
5220 <h5>Overview:</h5>
5221 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
5222    from the source argument list to the destination argument list.</p>
5223
5224 <h5>Arguments:</h5>
5225 <p>The first argument is a pointer to a <tt>va_list</tt> element to initialize.
5226    The second argument is a pointer to a <tt>va_list</tt> element to copy
5227    from.</p>
5228
5229 <h5>Semantics:</h5>
5230 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
5231    macro available in C.  In a target-dependent way, it copies the
5232    source <tt>va_list</tt> element into the destination <tt>va_list</tt>
5233    element.  This intrinsic is necessary because
5234    the <tt><a href="#int_va_start"> llvm.va_start</a></tt> intrinsic may be
5235    arbitrarily complex and require, for example, memory allocation.</p>
5236
5237 </div>
5238
5239 <!-- ======================================================================= -->
5240 <div class="doc_subsection">
5241   <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
5242 </div>
5243
5244 <div class="doc_text">
5245
5246 <p>LLVM support for <a href="GarbageCollection.html">Accurate Garbage
5247 Collection</a> (GC) requires the implementation and generation of these
5248 intrinsics. These intrinsics allow identification of <a href="#int_gcroot">GC
5249 roots on the stack</a>, as well as garbage collector implementations that
5250 require <a href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a>
5251 barriers.  Front-ends for type-safe garbage collected languages should generate
5252 these intrinsics to make use of the LLVM garbage collectors.  For more details,
5253 see <a href="GarbageCollection.html">Accurate Garbage Collection with
5254 LLVM</a>.</p>
5255
5256 <p>The garbage collection intrinsics only operate on objects in the generic
5257    address space (address space zero).</p>
5258
5259 </div>
5260
5261 <!-- _______________________________________________________________________ -->
5262 <div class="doc_subsubsection">
5263   <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
5264 </div>
5265
5266 <div class="doc_text">
5267
5268 <h5>Syntax:</h5>
5269 <pre>
5270   declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
5271 </pre>
5272
5273 <h5>Overview:</h5>
5274 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to
5275    the code generator, and allows some metadata to be associated with it.</p>
5276
5277 <h5>Arguments:</h5>
5278 <p>The first argument specifies the address of a stack object that contains the
5279    root pointer.  The second pointer (which must be either a constant or a
5280    global value address) contains the meta-data to be associated with the
5281    root.</p>
5282
5283 <h5>Semantics:</h5>
5284 <p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc"
5285    location.  At compile-time, the code generator generates information to allow
5286    the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>'
5287    intrinsic may only be used in a function which <a href="#gc">specifies a GC
5288    algorithm</a>.</p>
5289
5290 </div>
5291
5292 <!-- _______________________________________________________________________ -->
5293 <div class="doc_subsubsection">
5294   <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
5295 </div>
5296
5297 <div class="doc_text">
5298
5299 <h5>Syntax:</h5>
5300 <pre>
5301   declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
5302 </pre>
5303
5304 <h5>Overview:</h5>
5305 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
5306    locations, allowing garbage collector implementations that require read
5307    barriers.</p>
5308
5309 <h5>Arguments:</h5>
5310 <p>The second argument is the address to read from, which should be an address
5311    allocated from the garbage collector.  The first object is a pointer to the
5312    start of the referenced object, if needed by the language runtime (otherwise
5313    null).</p>
5314
5315 <h5>Semantics:</h5>
5316 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
5317    instruction, but may be replaced with substantially more complex code by the
5318    garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic
5319    may only be used in a function which <a href="#gc">specifies a GC
5320    algorithm</a>.</p>
5321
5322 </div>
5323
5324 <!-- _______________________________________________________________________ -->
5325 <div class="doc_subsubsection">
5326   <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
5327 </div>
5328
5329 <div class="doc_text">
5330
5331 <h5>Syntax:</h5>
5332 <pre>
5333   declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
5334 </pre>
5335
5336 <h5>Overview:</h5>
5337 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
5338    locations, allowing garbage collector implementations that require write
5339    barriers (such as generational or reference counting collectors).</p>
5340
5341 <h5>Arguments:</h5>
5342 <p>The first argument is the reference to store, the second is the start of the
5343    object to store it to, and the third is the address of the field of Obj to
5344    store to.  If the runtime does not require a pointer to the object, Obj may
5345    be null.</p>
5346
5347 <h5>Semantics:</h5>
5348 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
5349    instruction, but may be replaced with substantially more complex code by the
5350    garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic
5351    may only be used in a function which <a href="#gc">specifies a GC
5352    algorithm</a>.</p>
5353
5354 </div>
5355
5356 <!-- ======================================================================= -->
5357 <div class="doc_subsection">
5358   <a name="int_codegen">Code Generator Intrinsics</a>
5359 </div>
5360
5361 <div class="doc_text">
5362
5363 <p>These intrinsics are provided by LLVM to expose special features that may
5364    only be implemented with code generator support.</p>
5365
5366 </div>
5367
5368 <!-- _______________________________________________________________________ -->
5369 <div class="doc_subsubsection">
5370   <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
5371 </div>
5372
5373 <div class="doc_text">
5374
5375 <h5>Syntax:</h5>
5376 <pre>
5377   declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
5378 </pre>
5379
5380 <h5>Overview:</h5>
5381 <p>The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a
5382    target-specific value indicating the return address of the current function
5383    or one of its callers.</p>
5384
5385 <h5>Arguments:</h5>
5386 <p>The argument to this intrinsic indicates which function to return the address
5387    for.  Zero indicates the calling function, one indicates its caller, etc.
5388    The argument is <b>required</b> to be a constant integer value.</p>
5389
5390 <h5>Semantics:</h5>
5391 <p>The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer
5392    indicating the return address of the specified call frame, or zero if it
5393    cannot be identified.  The value returned by this intrinsic is likely to be
5394    incorrect or 0 for arguments other than zero, so it should only be used for
5395    debugging purposes.</p>
5396
5397 <p>Note that calling this intrinsic does not prevent function inlining or other
5398    aggressive transformations, so the value returned may not be that of the
5399    obvious source-language caller.</p>
5400
5401 </div>
5402
5403 <!-- _______________________________________________________________________ -->
5404 <div class="doc_subsubsection">
5405   <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
5406 </div>
5407
5408 <div class="doc_text">
5409
5410 <h5>Syntax:</h5>
5411 <pre>
5412   declare i8 *@llvm.frameaddress(i32 &lt;level&gt;)
5413 </pre>
5414
5415 <h5>Overview:</h5>
5416 <p>The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the
5417    target-specific frame pointer value for the specified stack frame.</p>
5418
5419 <h5>Arguments:</h5>
5420 <p>The argument to this intrinsic indicates which function to return the frame
5421    pointer for.  Zero indicates the calling function, one indicates its caller,
5422    etc.  The argument is <b>required</b> to be a constant integer value.</p>
5423
5424 <h5>Semantics:</h5>
5425 <p>The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer
5426    indicating the frame address of the specified call frame, or zero if it
5427    cannot be identified.  The value returned by this intrinsic is likely to be
5428    incorrect or 0 for arguments other than zero, so it should only be used for
5429    debugging purposes.</p>
5430
5431 <p>Note that calling this intrinsic does not prevent function inlining or other
5432    aggressive transformations, so the value returned may not be that of the
5433    obvious source-language caller.</p>
5434
5435 </div>
5436
5437 <!-- _______________________________________________________________________ -->
5438 <div class="doc_subsubsection">
5439   <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
5440 </div>
5441
5442 <div class="doc_text">
5443
5444 <h5>Syntax:</h5>
5445 <pre>
5446   declare i8 *@llvm.stacksave()
5447 </pre>
5448
5449 <h5>Overview:</h5>
5450 <p>The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state
5451    of the function stack, for use
5452    with <a href="#int_stackrestore"> <tt>llvm.stackrestore</tt></a>.  This is
5453    useful for implementing language features like scoped automatic variable
5454    sized arrays in C99.</p>
5455
5456 <h5>Semantics:</h5>
5457 <p>This intrinsic returns a opaque pointer value that can be passed
5458    to <a href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>.  When
5459    an <tt>llvm.stackrestore</tt> intrinsic is executed with a value saved
5460    from <tt>llvm.stacksave</tt>, it effectively restores the state of the stack
5461    to the state it was in when the <tt>llvm.stacksave</tt> intrinsic executed.
5462    In practice, this pops any <a href="#i_alloca">alloca</a> blocks from the
5463    stack that were allocated after the <tt>llvm.stacksave</tt> was executed.</p>
5464
5465 </div>
5466
5467 <!-- _______________________________________________________________________ -->
5468 <div class="doc_subsubsection">
5469   <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
5470 </div>
5471
5472 <div class="doc_text">
5473
5474 <h5>Syntax:</h5>
5475 <pre>
5476   declare void @llvm.stackrestore(i8 * %ptr)
5477 </pre>
5478
5479 <h5>Overview:</h5>
5480 <p>The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of
5481    the function stack to the state it was in when the
5482    corresponding <a href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic
5483    executed.  This is useful for implementing language features like scoped
5484    automatic variable sized arrays in C99.</p>
5485
5486 <h5>Semantics:</h5>
5487 <p>See the description
5488    for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.</p>
5489
5490 </div>
5491
5492 <!-- _______________________________________________________________________ -->
5493 <div class="doc_subsubsection">
5494   <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
5495 </div>
5496
5497 <div class="doc_text">
5498
5499 <h5>Syntax:</h5>
5500 <pre>
5501   declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;)
5502 </pre>
5503
5504 <h5>Overview:</h5>
5505 <p>The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to
5506    insert a prefetch instruction if supported; otherwise, it is a noop.
5507    Prefetches have no effect on the behavior of the program but can change its
5508    performance characteristics.</p>
5509
5510 <h5>Arguments:</h5>
5511 <p><tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the
5512    specifier determining if the fetch should be for a read (0) or write (1),
5513    and <tt>locality</tt> is a temporal locality specifier ranging from (0) - no
5514    locality, to (3) - extremely local keep in cache.  The <tt>rw</tt>
5515    and <tt>locality</tt> arguments must be constant integers.</p>
5516
5517 <h5>Semantics:</h5>
5518 <p>This intrinsic does not modify the behavior of the program.  In particular,
5519    prefetches cannot trap and do not produce a value.  On targets that support
5520    this intrinsic, the prefetch can provide hints to the processor cache for
5521    better performance.</p>
5522
5523 </div>
5524
5525 <!-- _______________________________________________________________________ -->
5526 <div class="doc_subsubsection">
5527   <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
5528 </div>
5529
5530 <div class="doc_text">
5531
5532 <h5>Syntax:</h5>
5533 <pre>
5534   declare void @llvm.pcmarker(i32 &lt;id&gt;)
5535 </pre>
5536
5537 <h5>Overview:</h5>
5538 <p>The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program
5539    Counter (PC) in a region of code to simulators and other tools.  The method
5540    is target specific, but it is expected that the marker will use exported
5541    symbols to transmit the PC of the marker.  The marker makes no guarantees
5542    that it will remain with any specific instruction after optimizations.  It is
5543    possible that the presence of a marker will inhibit optimizations.  The
5544    intended use is to be inserted after optimizations to allow correlations of
5545    simulation runs.</p>
5546
5547 <h5>Arguments:</h5>
5548 <p><tt>id</tt> is a numerical id identifying the marker.</p>
5549
5550 <h5>Semantics:</h5>
5551 <p>This intrinsic does not modify the behavior of the program.  Backends that do
5552    not support this intrinisic may ignore it.</p>
5553
5554 </div>
5555
5556 <!-- _______________________________________________________________________ -->
5557 <div class="doc_subsubsection">
5558   <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
5559 </div>
5560
5561 <div class="doc_text">
5562
5563 <h5>Syntax:</h5>
5564 <pre>
5565   declare i64 @llvm.readcyclecounter( )
5566 </pre>
5567
5568 <h5>Overview:</h5>
5569 <p>The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle
5570    counter register (or similar low latency, high accuracy clocks) on those
5571    targets that support it.  On X86, it should map to RDTSC.  On Alpha, it
5572    should map to RPCC.  As the backing counters overflow quickly (on the order
5573    of 9 seconds on alpha), this should only be used for small timings.</p>
5574
5575 <h5>Semantics:</h5>
5576 <p>When directly supported, reading the cycle counter should not modify any
5577    memory.  Implementations are allowed to either return a application specific
5578    value or a system wide value.  On backends without support, this is lowered
5579    to a constant 0.</p>
5580
5581 </div>
5582
5583 <!-- ======================================================================= -->
5584 <div class="doc_subsection">
5585   <a name="int_libc">Standard C Library Intrinsics</a>
5586 </div>
5587
5588 <div class="doc_text">
5589
5590 <p>LLVM provides intrinsics for a few important standard C library functions.
5591    These intrinsics allow source-language front-ends to pass information about
5592    the alignment of the pointer arguments to the code generator, providing
5593    opportunity for more efficient code generation.</p>
5594
5595 </div>
5596
5597 <!-- _______________________________________________________________________ -->
5598 <div class="doc_subsubsection">
5599   <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
5600 </div>
5601
5602 <div class="doc_text">
5603
5604 <h5>Syntax:</h5>
5605 <p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any
5606    integer bit width. Not all targets support all bit widths however.</p>
5607
5608 <pre>
5609   declare void @llvm.memcpy.i8(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5610                                i8 &lt;len&gt;, i32 &lt;align&gt;)
5611   declare void @llvm.memcpy.i16(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5612                                 i16 &lt;len&gt;, i32 &lt;align&gt;)
5613   declare void @llvm.memcpy.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5614                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
5615   declare void @llvm.memcpy.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5616                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
5617 </pre>
5618
5619 <h5>Overview:</h5>
5620 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
5621    source location to the destination location.</p>
5622
5623 <p>Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt>
5624    intrinsics do not return a value, and takes an extra alignment argument.</p>
5625
5626 <h5>Arguments:</h5>
5627 <p>The first argument is a pointer to the destination, the second is a pointer
5628    to the source.  The third argument is an integer argument specifying the
5629    number of bytes to copy, and the fourth argument is the alignment of the
5630    source and destination locations.</p>
5631
5632 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5633    then the caller guarantees that both the source and destination pointers are
5634    aligned to that boundary.</p>
5635
5636 <h5>Semantics:</h5>
5637 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
5638    source location to the destination location, which are not allowed to
5639    overlap.  It copies "len" bytes of memory over.  If the argument is known to
5640    be aligned to some boundary, this can be specified as the fourth argument,
5641    otherwise it should be set to 0 or 1.</p>
5642
5643 </div>
5644
5645 <!-- _______________________________________________________________________ -->
5646 <div class="doc_subsubsection">
5647   <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
5648 </div>
5649
5650 <div class="doc_text">
5651
5652 <h5>Syntax:</h5>
5653 <p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
5654    width. Not all targets support all bit widths however.</p>
5655
5656 <pre>
5657   declare void @llvm.memmove.i8(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5658                                 i8 &lt;len&gt;, i32 &lt;align&gt;)
5659   declare void @llvm.memmove.i16(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5660                                  i16 &lt;len&gt;, i32 &lt;align&gt;)
5661   declare void @llvm.memmove.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5662                                  i32 &lt;len&gt;, i32 &lt;align&gt;)
5663   declare void @llvm.memmove.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5664                                  i64 &lt;len&gt;, i32 &lt;align&gt;)
5665 </pre>
5666
5667 <h5>Overview:</h5>
5668 <p>The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the
5669    source location to the destination location. It is similar to the
5670    '<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to
5671    overlap.</p>
5672
5673 <p>Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt>
5674    intrinsics do not return a value, and takes an extra alignment argument.</p>
5675
5676 <h5>Arguments:</h5>
5677 <p>The first argument is a pointer to the destination, the second is a pointer
5678    to the source.  The third argument is an integer argument specifying the
5679    number of bytes to copy, and the fourth argument is the alignment of the
5680    source and destination locations.</p>
5681
5682 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5683    then the caller guarantees that the source and destination pointers are
5684    aligned to that boundary.</p>
5685
5686 <h5>Semantics:</h5>
5687 <p>The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the
5688    source location to the destination location, which may overlap.  It copies
5689    "len" bytes of memory over.  If the argument is known to be aligned to some
5690    boundary, this can be specified as the fourth argument, otherwise it should
5691    be set to 0 or 1.</p>
5692
5693 </div>
5694
5695 <!-- _______________________________________________________________________ -->
5696 <div class="doc_subsubsection">
5697   <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
5698 </div>
5699
5700 <div class="doc_text">
5701
5702 <h5>Syntax:</h5>
5703 <p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
5704    width. Not all targets support all bit widths however.</p>
5705
5706 <pre>
5707   declare void @llvm.memset.i8(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5708                                i8 &lt;len&gt;, i32 &lt;align&gt;)
5709   declare void @llvm.memset.i16(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5710                                 i16 &lt;len&gt;, i32 &lt;align&gt;)
5711   declare void @llvm.memset.i32(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5712                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
5713   declare void @llvm.memset.i64(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5714                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
5715 </pre>
5716
5717 <h5>Overview:</h5>
5718 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a
5719    particular byte value.</p>
5720
5721 <p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt>
5722    intrinsic does not return a value, and takes an extra alignment argument.</p>
5723
5724 <h5>Arguments:</h5>
5725 <p>The first argument is a pointer to the destination to fill, the second is the
5726    byte value to fill it with, the third argument is an integer argument
5727    specifying the number of bytes to fill, and the fourth argument is the known
5728    alignment of destination location.</p>
5729
5730 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5731    then the caller guarantees that the destination pointer is aligned to that
5732    boundary.</p>
5733
5734 <h5>Semantics:</h5>
5735 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting
5736    at the destination location.  If the argument is known to be aligned to some
5737    boundary, this can be specified as the fourth argument, otherwise it should
5738    be set to 0 or 1.</p>
5739
5740 </div>
5741
5742 <!-- _______________________________________________________________________ -->
5743 <div class="doc_subsubsection">
5744   <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
5745 </div>
5746
5747 <div class="doc_text">
5748
5749 <h5>Syntax:</h5>
5750 <p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any
5751    floating point or vector of floating point type. Not all targets support all
5752    types however.</p>
5753
5754 <pre>
5755   declare float     @llvm.sqrt.f32(float %Val)
5756   declare double    @llvm.sqrt.f64(double %Val)
5757   declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
5758   declare fp128     @llvm.sqrt.f128(fp128 %Val)
5759   declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
5760 </pre>
5761
5762 <h5>Overview:</h5>
5763 <p>The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand,
5764    returning the same value as the libm '<tt>sqrt</tt>' functions would.
5765    Unlike <tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined
5766    behavior for negative numbers other than -0.0 (which allows for better
5767    optimization, because there is no need to worry about errno being
5768    set).  <tt>llvm.sqrt(-0.0)</tt> is defined to return -0.0 like IEEE sqrt.</p>
5769
5770 <h5>Arguments:</h5>
5771 <p>The argument and return value are floating point numbers of the same
5772    type.</p>
5773
5774 <h5>Semantics:</h5>
5775 <p>This function returns the sqrt of the specified operand if it is a
5776    nonnegative floating point number.</p>
5777
5778 </div>
5779
5780 <!-- _______________________________________________________________________ -->
5781 <div class="doc_subsubsection">
5782   <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
5783 </div>
5784
5785 <div class="doc_text">
5786
5787 <h5>Syntax:</h5>
5788 <p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any
5789    floating point or vector of floating point type. Not all targets support all
5790    types however.</p>
5791
5792 <pre>
5793   declare float     @llvm.powi.f32(float  %Val, i32 %power)
5794   declare double    @llvm.powi.f64(double %Val, i32 %power)
5795   declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
5796   declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
5797   declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
5798 </pre>
5799
5800 <h5>Overview:</h5>
5801 <p>The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the
5802    specified (positive or negative) power.  The order of evaluation of
5803    multiplications is not defined.  When a vector of floating point type is
5804    used, the second argument remains a scalar integer value.</p>
5805
5806 <h5>Arguments:</h5>
5807 <p>The second argument is an integer power, and the first is a value to raise to
5808    that power.</p>
5809
5810 <h5>Semantics:</h5>
5811 <p>This function returns the first value raised to the second power with an
5812    unspecified sequence of rounding operations.</p>
5813
5814 </div>
5815
5816 <!-- _______________________________________________________________________ -->
5817 <div class="doc_subsubsection">
5818   <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
5819 </div>
5820
5821 <div class="doc_text">
5822
5823 <h5>Syntax:</h5>
5824 <p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any
5825    floating point or vector of floating point type. Not all targets support all
5826    types however.</p>
5827
5828 <pre>
5829   declare float     @llvm.sin.f32(float  %Val)
5830   declare double    @llvm.sin.f64(double %Val)
5831   declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
5832   declare fp128     @llvm.sin.f128(fp128 %Val)
5833   declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
5834 </pre>
5835
5836 <h5>Overview:</h5>
5837 <p>The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.</p>
5838
5839 <h5>Arguments:</h5>
5840 <p>The argument and return value are floating point numbers of the same
5841    type.</p>
5842
5843 <h5>Semantics:</h5>
5844 <p>This function returns the sine of the specified operand, returning the same
5845    values as the libm <tt>sin</tt> functions would, and handles error conditions
5846    in the same way.</p>
5847
5848 </div>
5849
5850 <!-- _______________________________________________________________________ -->
5851 <div class="doc_subsubsection">
5852   <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
5853 </div>
5854
5855 <div class="doc_text">
5856
5857 <h5>Syntax:</h5>
5858 <p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any
5859    floating point or vector of floating point type. Not all targets support all
5860    types however.</p>
5861
5862 <pre>
5863   declare float     @llvm.cos.f32(float  %Val)
5864   declare double    @llvm.cos.f64(double %Val)
5865   declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
5866   declare fp128     @llvm.cos.f128(fp128 %Val)
5867   declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
5868 </pre>
5869
5870 <h5>Overview:</h5>
5871 <p>The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.</p>
5872
5873 <h5>Arguments:</h5>
5874 <p>The argument and return value are floating point numbers of the same
5875    type.</p>
5876
5877 <h5>Semantics:</h5>
5878 <p>This function returns the cosine of the specified operand, returning the same
5879    values as the libm <tt>cos</tt> functions would, and handles error conditions
5880    in the same way.</p>
5881
5882 </div>
5883
5884 <!-- _______________________________________________________________________ -->
5885 <div class="doc_subsubsection">
5886   <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
5887 </div>
5888
5889 <div class="doc_text">
5890
5891 <h5>Syntax:</h5>
5892 <p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any
5893    floating point or vector of floating point type. Not all targets support all
5894    types however.</p>
5895
5896 <pre>
5897   declare float     @llvm.pow.f32(float  %Val, float %Power)
5898   declare double    @llvm.pow.f64(double %Val, double %Power)
5899   declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
5900   declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
5901   declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
5902 </pre>
5903
5904 <h5>Overview:</h5>
5905 <p>The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the
5906    specified (positive or negative) power.</p>
5907
5908 <h5>Arguments:</h5>
5909 <p>The second argument is a floating point power, and the first is a value to
5910    raise to that power.</p>
5911
5912 <h5>Semantics:</h5>
5913 <p>This function returns the first value raised to the second power, returning
5914    the same values as the libm <tt>pow</tt> functions would, and handles error
5915    conditions in the same way.</p>
5916
5917 </div>
5918
5919 <!-- ======================================================================= -->
5920 <div class="doc_subsection">
5921   <a name="int_manip">Bit Manipulation Intrinsics</a>
5922 </div>
5923
5924 <div class="doc_text">
5925
5926 <p>LLVM provides intrinsics for a few important bit manipulation operations.
5927    These allow efficient code generation for some algorithms.</p>
5928
5929 </div>
5930
5931 <!-- _______________________________________________________________________ -->
5932 <div class="doc_subsubsection">
5933   <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
5934 </div>
5935
5936 <div class="doc_text">
5937
5938 <h5>Syntax:</h5>
5939 <p>This is an overloaded intrinsic function. You can use bswap on any integer
5940    type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p>
5941
5942 <pre>
5943   declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
5944   declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
5945   declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
5946 </pre>
5947
5948 <h5>Overview:</h5>
5949 <p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
5950    values with an even number of bytes (positive multiple of 16 bits).  These
5951    are useful for performing operations on data that is not in the target's
5952    native byte order.</p>
5953
5954 <h5>Semantics:</h5>
5955 <p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
5956    and low byte of the input i16 swapped.  Similarly,
5957    the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four
5958    bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1,
5959    2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order.
5960    The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics
5961    extend this concept to additional even-byte lengths (6 bytes, 8 bytes and
5962    more, respectively).</p>
5963
5964 </div>
5965
5966 <!-- _______________________________________________________________________ -->
5967 <div class="doc_subsubsection">
5968   <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
5969 </div>
5970
5971 <div class="doc_text">
5972
5973 <h5>Syntax:</h5>
5974 <p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
5975    width. Not all targets support all bit widths however.</p>
5976
5977 <pre>
5978   declare i8 @llvm.ctpop.i8(i8  &lt;src&gt;)
5979   declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
5980   declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
5981   declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
5982   declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
5983 </pre>
5984
5985 <h5>Overview:</h5>
5986 <p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set
5987    in a value.</p>
5988
5989 <h5>Arguments:</h5>
5990 <p>The only argument is the value to be counted.  The argument may be of any
5991    integer type.  The return type must match the argument type.</p>
5992
5993 <h5>Semantics:</h5>
5994 <p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.</p>
5995
5996 </div>
5997
5998 <!-- _______________________________________________________________________ -->
5999 <div class="doc_subsubsection">
6000   <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
6001 </div>
6002
6003 <div class="doc_text">
6004
6005 <h5>Syntax:</h5>
6006 <p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
6007    integer bit width. Not all targets support all bit widths however.</p>
6008
6009 <pre>
6010   declare i8 @llvm.ctlz.i8 (i8  &lt;src&gt;)
6011   declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
6012   declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
6013   declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
6014   declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
6015 </pre>
6016
6017 <h5>Overview:</h5>
6018 <p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
6019    leading zeros in a variable.</p>
6020
6021 <h5>Arguments:</h5>
6022 <p>The only argument is the value to be counted.  The argument may be of any
6023    integer type. The return type must match the argument type.</p>
6024
6025 <h5>Semantics:</h5>
6026 <p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant)
6027    zeros in a variable.  If the src == 0 then the result is the size in bits of
6028    the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p>
6029
6030 </div>
6031
6032 <!-- _______________________________________________________________________ -->
6033 <div class="doc_subsubsection">
6034   <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
6035 </div>
6036
6037 <div class="doc_text">
6038
6039 <h5>Syntax:</h5>
6040 <p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
6041    integer bit width. Not all targets support all bit widths however.</p>
6042
6043 <pre>
6044   declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
6045   declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
6046   declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
6047   declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
6048   declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
6049 </pre>
6050
6051 <h5>Overview:</h5>
6052 <p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of
6053    trailing zeros.</p>
6054
6055 <h5>Arguments:</h5>
6056 <p>The only argument is the value to be counted.  The argument may be of any
6057    integer type.  The return type must match the argument type.</p>
6058
6059 <h5>Semantics:</h5>
6060 <p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant)
6061    zeros in a variable.  If the src == 0 then the result is the size in bits of
6062    the type of src.  For example, <tt>llvm.cttz(2) = 1</tt>.</p>
6063
6064 </div>
6065
6066 <!-- ======================================================================= -->
6067 <div class="doc_subsection">
6068   <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
6069 </div>
6070
6071 <div class="doc_text">
6072
6073 <p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>
6074
6075 </div>
6076
6077 <!-- _______________________________________________________________________ -->
6078 <div class="doc_subsubsection">
6079   <a name="int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics</a>
6080 </div>
6081
6082 <div class="doc_text">
6083
6084 <h5>Syntax:</h5>
6085 <p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt>
6086    on any integer bit width.</p>
6087
6088 <pre>
6089   declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
6090   declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
6091   declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
6092 </pre>
6093
6094 <h5>Overview:</h5>
6095 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
6096    a signed addition of the two arguments, and indicate whether an overflow
6097    occurred during the signed summation.</p>
6098
6099 <h5>Arguments:</h5>
6100 <p>The arguments (%a and %b) and the first element of the result structure may
6101    be of integer types of any bit width, but they must have the same bit
6102    width. The second element of the result structure must be of
6103    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6104    undergo signed addition.</p>
6105
6106 <h5>Semantics:</h5>
6107 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
6108    a signed addition of the two variables. They return a structure &mdash; the
6109    first element of which is the signed summation, and the second element of
6110    which is a bit specifying if the signed summation resulted in an
6111    overflow.</p>
6112
6113 <h5>Examples:</h5>
6114 <pre>
6115   %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
6116   %sum = extractvalue {i32, i1} %res, 0
6117   %obit = extractvalue {i32, i1} %res, 1
6118   br i1 %obit, label %overflow, label %normal
6119 </pre>
6120
6121 </div>
6122
6123 <!-- _______________________________________________________________________ -->
6124 <div class="doc_subsubsection">
6125   <a name="int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics</a>
6126 </div>
6127
6128 <div class="doc_text">
6129
6130 <h5>Syntax:</h5>
6131 <p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt>
6132    on any integer bit width.</p>
6133
6134 <pre>
6135   declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
6136   declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
6137   declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
6138 </pre>
6139
6140 <h5>Overview:</h5>
6141 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
6142    an unsigned addition of the two arguments, and indicate whether a carry
6143    occurred during the unsigned summation.</p>
6144
6145 <h5>Arguments:</h5>
6146 <p>The arguments (%a and %b) and the first element of the result structure may
6147    be of integer types of any bit width, but they must have the same bit
6148    width. The second element of the result structure must be of
6149    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6150    undergo unsigned addition.</p>
6151
6152 <h5>Semantics:</h5>
6153 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
6154    an unsigned addition of the two arguments. They return a structure &mdash;
6155    the first element of which is the sum, and the second element of which is a
6156    bit specifying if the unsigned summation resulted in a carry.</p>
6157
6158 <h5>Examples:</h5>
6159 <pre>
6160   %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
6161   %sum = extractvalue {i32, i1} %res, 0
6162   %obit = extractvalue {i32, i1} %res, 1
6163   br i1 %obit, label %carry, label %normal
6164 </pre>
6165
6166 </div>
6167
6168 <!-- _______________________________________________________________________ -->
6169 <div class="doc_subsubsection">
6170   <a name="int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics</a>
6171 </div>
6172
6173 <div class="doc_text">
6174
6175 <h5>Syntax:</h5>
6176 <p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt>
6177    on any integer bit width.</p>
6178
6179 <pre>
6180   declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
6181   declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
6182   declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
6183 </pre>
6184
6185 <h5>Overview:</h5>
6186 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
6187    a signed subtraction of the two arguments, and indicate whether an overflow
6188    occurred during the signed subtraction.</p>
6189
6190 <h5>Arguments:</h5>
6191 <p>The arguments (%a and %b) and the first element of the result structure may
6192    be of integer types of any bit width, but they must have the same bit
6193    width. The second element of the result structure must be of
6194    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6195    undergo signed subtraction.</p>
6196
6197 <h5>Semantics:</h5>
6198 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
6199    a signed subtraction of the two arguments. They return a structure &mdash;
6200    the first element of which is the subtraction, and the second element of
6201    which is a bit specifying if the signed subtraction resulted in an
6202    overflow.</p>
6203
6204 <h5>Examples:</h5>
6205 <pre>
6206   %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
6207   %sum = extractvalue {i32, i1} %res, 0
6208   %obit = extractvalue {i32, i1} %res, 1
6209   br i1 %obit, label %overflow, label %normal
6210 </pre>
6211
6212 </div>
6213
6214 <!-- _______________________________________________________________________ -->
6215 <div class="doc_subsubsection">
6216   <a name="int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt>' Intrinsics</a>
6217 </div>
6218
6219 <div class="doc_text">
6220
6221 <h5>Syntax:</h5>
6222 <p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt>
6223    on any integer bit width.</p>
6224
6225 <pre>
6226   declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
6227   declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
6228   declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
6229 </pre>
6230
6231 <h5>Overview:</h5>
6232 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
6233    an unsigned subtraction of the two arguments, and indicate whether an
6234    overflow occurred during the unsigned subtraction.</p>
6235
6236 <h5>Arguments:</h5>
6237 <p>The arguments (%a and %b) and the first element of the result structure may
6238    be of integer types of any bit width, but they must have the same bit
6239    width. The second element of the result structure must be of
6240    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6241    undergo unsigned subtraction.</p>
6242
6243 <h5>Semantics:</h5>
6244 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
6245    an unsigned subtraction of the two arguments. They return a structure &mdash;
6246    the first element of which is the subtraction, and the second element of
6247    which is a bit specifying if the unsigned subtraction resulted in an
6248    overflow.</p>
6249
6250 <h5>Examples:</h5>
6251 <pre>
6252   %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
6253   %sum = extractvalue {i32, i1} %res, 0
6254   %obit = extractvalue {i32, i1} %res, 1
6255   br i1 %obit, label %overflow, label %normal
6256 </pre>
6257
6258 </div>
6259
6260 <!-- _______________________________________________________________________ -->
6261 <div class="doc_subsubsection">
6262   <a name="int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt>' Intrinsics</a>
6263 </div>
6264
6265 <div class="doc_text">
6266
6267 <h5>Syntax:</h5>
6268 <p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt>
6269    on any integer bit width.</p>
6270
6271 <pre>
6272   declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
6273   declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
6274   declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
6275 </pre>
6276
6277 <h5>Overview:</h5>
6278
6279 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
6280    a signed multiplication of the two arguments, and indicate whether an
6281    overflow occurred during the signed multiplication.</p>
6282
6283 <h5>Arguments:</h5>
6284 <p>The arguments (%a and %b) and the first element of the result structure may
6285    be of integer types of any bit width, but they must have the same bit
6286    width. The second element of the result structure must be of
6287    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6288    undergo signed multiplication.</p>
6289
6290 <h5>Semantics:</h5>
6291 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
6292    a signed multiplication of the two arguments. They return a structure &mdash;
6293    the first element of which is the multiplication, and the second element of
6294    which is a bit specifying if the signed multiplication resulted in an
6295    overflow.</p>
6296
6297 <h5>Examples:</h5>
6298 <pre>
6299   %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
6300   %sum = extractvalue {i32, i1} %res, 0
6301   %obit = extractvalue {i32, i1} %res, 1
6302   br i1 %obit, label %overflow, label %normal
6303 </pre>
6304
6305 </div>
6306
6307 <!-- _______________________________________________________________________ -->
6308 <div class="doc_subsubsection">
6309   <a name="int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt>' Intrinsics</a>
6310 </div>
6311
6312 <div class="doc_text">
6313
6314 <h5>Syntax:</h5>
6315 <p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt>
6316    on any integer bit width.</p>
6317
6318 <pre>
6319   declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
6320   declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
6321   declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
6322 </pre>
6323
6324 <h5>Overview:</h5>
6325 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
6326    a unsigned multiplication of the two arguments, and indicate whether an
6327    overflow occurred during the unsigned multiplication.</p>
6328
6329 <h5>Arguments:</h5>
6330 <p>The arguments (%a and %b) and the first element of the result structure may
6331    be of integer types of any bit width, but they must have the same bit
6332    width. The second element of the result structure must be of
6333    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6334    undergo unsigned multiplication.</p>
6335
6336 <h5>Semantics:</h5>
6337 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
6338    an unsigned multiplication of the two arguments. They return a structure
6339    &mdash; the first element of which is the multiplication, and the second
6340    element of which is a bit specifying if the unsigned multiplication resulted
6341    in an overflow.</p>
6342
6343 <h5>Examples:</h5>
6344 <pre>
6345   %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
6346   %sum = extractvalue {i32, i1} %res, 0
6347   %obit = extractvalue {i32, i1} %res, 1
6348   br i1 %obit, label %overflow, label %normal
6349 </pre>
6350
6351 </div>
6352
6353 <!-- ======================================================================= -->
6354 <div class="doc_subsection">
6355   <a name="int_debugger">Debugger Intrinsics</a>
6356 </div>
6357
6358 <div class="doc_text">
6359
6360 <p>The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt>
6361    prefix), are described in
6362    the <a href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source
6363    Level Debugging</a> document.</p>
6364
6365 </div>
6366
6367 <!-- ======================================================================= -->
6368 <div class="doc_subsection">
6369   <a name="int_eh">Exception Handling Intrinsics</a>
6370 </div>
6371
6372 <div class="doc_text">
6373
6374 <p>The LLVM exception handling intrinsics (which all start with
6375    <tt>llvm.eh.</tt> prefix), are described in
6376    the <a href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
6377    Handling</a> document.</p>
6378
6379 </div>
6380
6381 <!-- ======================================================================= -->
6382 <div class="doc_subsection">
6383   <a name="int_trampoline">Trampoline Intrinsic</a>
6384 </div>
6385
6386 <div class="doc_text">
6387
6388 <p>This intrinsic makes it possible to excise one parameter, marked with
6389    the <tt>nest</tt> attribute, from a function.  The result is a callable
6390    function pointer lacking the nest parameter - the caller does not need to
6391    provide a value for it.  Instead, the value to use is stored in advance in a
6392    "trampoline", a block of memory usually allocated on the stack, which also
6393    contains code to splice the nest value into the argument list.  This is used
6394    to implement the GCC nested function address extension.</p>
6395
6396 <p>For example, if the function is
6397    <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
6398    pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
6399    follows:</p>
6400
6401 <div class="doc_code">
6402 <pre>
6403   %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
6404   %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
6405   %p = call i8* @llvm.init.trampoline( i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval )
6406   %fp = bitcast i8* %p to i32 (i32, i32)*
6407 </pre>
6408 </div>
6409
6410 <p>The call <tt>%val = call i32 %fp( i32 %x, i32 %y )</tt> is then equivalent
6411    to <tt>%val = call i32 %f( i8* %nval, i32 %x, i32 %y )</tt>.</p>
6412
6413 </div>
6414
6415 <!-- _______________________________________________________________________ -->
6416 <div class="doc_subsubsection">
6417   <a name="int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a>
6418 </div>
6419
6420 <div class="doc_text">
6421
6422 <h5>Syntax:</h5>
6423 <pre>
6424   declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
6425 </pre>
6426
6427 <h5>Overview:</h5>
6428 <p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a
6429    function pointer suitable for executing it.</p>
6430
6431 <h5>Arguments:</h5>
6432 <p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
6433    pointers.  The <tt>tramp</tt> argument must point to a sufficiently large and
6434    sufficiently aligned block of memory; this memory is written to by the
6435    intrinsic.  Note that the size and the alignment are target-specific - LLVM
6436    currently provides no portable way of determining them, so a front-end that
6437    generates this intrinsic needs to have some target-specific knowledge.
6438    The <tt>func</tt> argument must hold a function bitcast to
6439    an <tt>i8*</tt>.</p>
6440
6441 <h5>Semantics:</h5>
6442 <p>The block of memory pointed to by <tt>tramp</tt> is filled with target
6443    dependent code, turning it into a function.  A pointer to this function is
6444    returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate
6445    function pointer type</a> before being called.  The new function's signature
6446    is the same as that of <tt>func</tt> with any arguments marked with
6447    the <tt>nest</tt> attribute removed.  At most one such <tt>nest</tt> argument
6448    is allowed, and it must be of pointer type.  Calling the new function is
6449    equivalent to calling <tt>func</tt> with the same argument list, but
6450    with <tt>nval</tt> used for the missing <tt>nest</tt> argument.  If, after
6451    calling <tt>llvm.init.trampoline</tt>, the memory pointed to
6452    by <tt>tramp</tt> is modified, then the effect of any later call to the
6453    returned function pointer is undefined.</p>
6454
6455 </div>
6456
6457 <!-- ======================================================================= -->
6458 <div class="doc_subsection">
6459   <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
6460 </div>
6461
6462 <div class="doc_text">
6463
6464 <p>These intrinsic functions expand the "universal IR" of LLVM to represent
6465    hardware constructs for atomic operations and memory synchronization.  This
6466    provides an interface to the hardware, not an interface to the programmer. It
6467    is aimed at a low enough level to allow any programming models or APIs
6468    (Application Programming Interfaces) which need atomic behaviors to map
6469    cleanly onto it. It is also modeled primarily on hardware behavior. Just as
6470    hardware provides a "universal IR" for source languages, it also provides a
6471    starting point for developing a "universal" atomic operation and
6472    synchronization IR.</p>
6473
6474 <p>These do <em>not</em> form an API such as high-level threading libraries,
6475    software transaction memory systems, atomic primitives, and intrinsic
6476    functions as found in BSD, GNU libc, atomic_ops, APR, and other system and
6477    application libraries.  The hardware interface provided by LLVM should allow
6478    a clean implementation of all of these APIs and parallel programming models.
6479    No one model or paradigm should be selected above others unless the hardware
6480    itself ubiquitously does so.</p>
6481
6482 </div>
6483
6484 <!-- _______________________________________________________________________ -->
6485 <div class="doc_subsubsection">
6486   <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
6487 </div>
6488 <div class="doc_text">
6489 <h5>Syntax:</h5>
6490 <pre>
6491   declare void @llvm.memory.barrier( i1 &lt;ll&gt;, i1 &lt;ls&gt;, i1 &lt;sl&gt;, i1 &lt;ss&gt;, i1 &lt;device&gt; )
6492 </pre>
6493
6494 <h5>Overview:</h5>
6495 <p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between
6496    specific pairs of memory access types.</p>
6497
6498 <h5>Arguments:</h5>
6499 <p>The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments.
6500    The first four arguments enables a specific barrier as listed below.  The
6501    fith argument specifies that the barrier applies to io or device or uncached
6502    memory.</p>
6503
6504 <ul>
6505   <li><tt>ll</tt>: load-load barrier</li>
6506   <li><tt>ls</tt>: load-store barrier</li>
6507   <li><tt>sl</tt>: store-load barrier</li>
6508   <li><tt>ss</tt>: store-store barrier</li>
6509   <li><tt>device</tt>: barrier applies to device and uncached memory also.</li>
6510 </ul>
6511
6512 <h5>Semantics:</h5>
6513 <p>This intrinsic causes the system to enforce some ordering constraints upon
6514    the loads and stores of the program. This barrier does not
6515    indicate <em>when</em> any events will occur, it only enforces
6516    an <em>order</em> in which they occur. For any of the specified pairs of load
6517    and store operations (f.ex.  load-load, or store-load), all of the first
6518    operations preceding the barrier will complete before any of the second
6519    operations succeeding the barrier begin. Specifically the semantics for each
6520    pairing is as follows:</p>
6521
6522 <ul>
6523   <li><tt>ll</tt>: All loads before the barrier must complete before any load
6524       after the barrier begins.</li>
6525   <li><tt>ls</tt>: All loads before the barrier must complete before any 
6526       store after the barrier begins.</li>
6527   <li><tt>ss</tt>: All stores before the barrier must complete before any 
6528       store after the barrier begins.</li>
6529   <li><tt>sl</tt>: All stores before the barrier must complete before any 
6530       load after the barrier begins.</li>
6531 </ul>
6532
6533 <p>These semantics are applied with a logical "and" behavior when more than one
6534    is enabled in a single memory barrier intrinsic.</p>
6535
6536 <p>Backends may implement stronger barriers than those requested when they do
6537    not support as fine grained a barrier as requested.  Some architectures do
6538    not need all types of barriers and on such architectures, these become
6539    noops.</p>
6540
6541 <h5>Example:</h5>
6542 <pre>
6543 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6544 %ptr      = bitcast i8* %mallocP to i32*
6545             store i32 4, %ptr
6546
6547 %result1  = load i32* %ptr      <i>; yields {i32}:result1 = 4</i>
6548             call void @llvm.memory.barrier( i1 false, i1 true, i1 false, i1 false )
6549                                 <i>; guarantee the above finishes</i>
6550             store i32 8, %ptr   <i>; before this begins</i>
6551 </pre>
6552
6553 </div>
6554
6555 <!-- _______________________________________________________________________ -->
6556 <div class="doc_subsubsection">
6557   <a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a>
6558 </div>
6559
6560 <div class="doc_text">
6561
6562 <h5>Syntax:</h5>
6563 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on
6564    any integer bit width and for different address spaces. Not all targets
6565    support all bit widths however.</p>
6566
6567 <pre>
6568   declare i8 @llvm.atomic.cmp.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt; )
6569   declare i16 @llvm.atomic.cmp.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt; )
6570   declare i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt; )
6571   declare i64 @llvm.atomic.cmp.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt; )
6572 </pre>
6573
6574 <h5>Overview:</h5>
6575 <p>This loads a value in memory and compares it to a given value. If they are
6576    equal, it stores a new value into the memory.</p>
6577
6578 <h5>Arguments:</h5>
6579 <p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result
6580    as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the
6581    same bit width. The <tt>ptr</tt> argument must be a pointer to a value of
6582    this integer type. While any bit width integer may be used, targets may only
6583    lower representations they support in hardware.</p>
6584
6585 <h5>Semantics:</h5>
6586 <p>This entire intrinsic must be executed atomically. It first loads the value
6587    in memory pointed to by <tt>ptr</tt> and compares it with the
6588    value <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the
6589    memory. The loaded value is yielded in all cases. This provides the
6590    equivalent of an atomic compare-and-swap operation within the SSA
6591    framework.</p>
6592
6593 <h5>Examples:</h5>
6594 <pre>
6595 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6596 %ptr      = bitcast i8* %mallocP to i32*
6597             store i32 4, %ptr
6598
6599 %val1     = add i32 4, 4
6600 %result1  = call i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* %ptr, i32 4, %val1 )
6601                                           <i>; yields {i32}:result1 = 4</i>
6602 %stored1  = icmp eq i32 %result1, 4       <i>; yields {i1}:stored1 = true</i>
6603 %memval1  = load i32* %ptr                <i>; yields {i32}:memval1 = 8</i>
6604
6605 %val2     = add i32 1, 1
6606 %result2  = call i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* %ptr, i32 5, %val2 )
6607                                           <i>; yields {i32}:result2 = 8</i>
6608 %stored2  = icmp eq i32 %result2, 5       <i>; yields {i1}:stored2 = false</i>
6609
6610 %memval2  = load i32* %ptr                <i>; yields {i32}:memval2 = 8</i>
6611 </pre>
6612
6613 </div>
6614
6615 <!-- _______________________________________________________________________ -->
6616 <div class="doc_subsubsection">
6617   <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
6618 </div>
6619 <div class="doc_text">
6620 <h5>Syntax:</h5>
6621
6622 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any
6623    integer bit width. Not all targets support all bit widths however.</p>
6624
6625 <pre>
6626   declare i8 @llvm.atomic.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;val&gt; )
6627   declare i16 @llvm.atomic.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;val&gt; )
6628   declare i32 @llvm.atomic.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;val&gt; )
6629   declare i64 @llvm.atomic.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;val&gt; )
6630 </pre>
6631
6632 <h5>Overview:</h5>
6633 <p>This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields
6634    the value from memory. It then stores the value in <tt>val</tt> in the memory
6635    at <tt>ptr</tt>.</p>
6636
6637 <h5>Arguments:</h5>
6638 <p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both
6639   the <tt>val</tt> argument and the result must be integers of the same bit
6640   width.  The first argument, <tt>ptr</tt>, must be a pointer to a value of this
6641   integer type. The targets may only lower integer representations they
6642   support.</p>
6643
6644 <h5>Semantics:</h5>
6645 <p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and
6646    stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the
6647    equivalent of an atomic swap operation within the SSA framework.</p>
6648
6649 <h5>Examples:</h5>
6650 <pre>
6651 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6652 %ptr      = bitcast i8* %mallocP to i32*
6653             store i32 4, %ptr
6654
6655 %val1     = add i32 4, 4
6656 %result1  = call i32 @llvm.atomic.swap.i32.p0i32( i32* %ptr, i32 %val1 )
6657                                         <i>; yields {i32}:result1 = 4</i>
6658 %stored1  = icmp eq i32 %result1, 4     <i>; yields {i1}:stored1 = true</i>
6659 %memval1  = load i32* %ptr              <i>; yields {i32}:memval1 = 8</i>
6660
6661 %val2     = add i32 1, 1
6662 %result2  = call i32 @llvm.atomic.swap.i32.p0i32( i32* %ptr, i32 %val2 )
6663                                         <i>; yields {i32}:result2 = 8</i>
6664
6665 %stored2  = icmp eq i32 %result2, 8     <i>; yields {i1}:stored2 = true</i>
6666 %memval2  = load i32* %ptr              <i>; yields {i32}:memval2 = 2</i>
6667 </pre>
6668
6669 </div>
6670
6671 <!-- _______________________________________________________________________ -->
6672 <div class="doc_subsubsection">
6673   <a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a>
6674
6675 </div>
6676
6677 <div class="doc_text">
6678
6679 <h5>Syntax:</h5>
6680 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on
6681    any integer bit width. Not all targets support all bit widths however.</p>
6682
6683 <pre>
6684   declare i8 @llvm.atomic.load.add.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6685   declare i16 @llvm.atomic.load.add.i16..p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6686   declare i32 @llvm.atomic.load.add.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6687   declare i64 @llvm.atomic.load.add.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6688 </pre>
6689
6690 <h5>Overview:</h5>
6691 <p>This intrinsic adds <tt>delta</tt> to the value stored in memory
6692    at <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
6693
6694 <h5>Arguments:</h5>
6695 <p>The intrinsic takes two arguments, the first a pointer to an integer value
6696    and the second an integer value. The result is also an integer value. These
6697    integer types can have any bit width, but they must all have the same bit
6698    width. The targets may only lower integer representations they support.</p>
6699
6700 <h5>Semantics:</h5>
6701 <p>This intrinsic does a series of operations atomically. It first loads the
6702    value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result
6703    to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p>
6704
6705 <h5>Examples:</h5>
6706 <pre>
6707 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6708 %ptr      = bitcast i8* %mallocP to i32*
6709             store i32 4, %ptr
6710 %result1  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 4 )
6711                                 <i>; yields {i32}:result1 = 4</i>
6712 %result2  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 2 )
6713                                 <i>; yields {i32}:result2 = 8</i>
6714 %result3  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 5 )
6715                                 <i>; yields {i32}:result3 = 10</i>
6716 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
6717 </pre>
6718
6719 </div>
6720
6721 <!-- _______________________________________________________________________ -->
6722 <div class="doc_subsubsection">
6723   <a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a>
6724
6725 </div>
6726
6727 <div class="doc_text">
6728
6729 <h5>Syntax:</h5>
6730 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on
6731    any integer bit width and for different address spaces. Not all targets
6732    support all bit widths however.</p>
6733
6734 <pre>
6735   declare i8 @llvm.atomic.load.sub.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6736   declare i16 @llvm.atomic.load.sub.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6737   declare i32 @llvm.atomic.load.sub.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6738   declare i64 @llvm.atomic.load.sub.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6739 </pre>
6740
6741 <h5>Overview:</h5>
6742 <p>This intrinsic subtracts <tt>delta</tt> to the value stored in memory at 
6743    <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
6744
6745 <h5>Arguments:</h5>
6746 <p>The intrinsic takes two arguments, the first a pointer to an integer value
6747    and the second an integer value. The result is also an integer value. These
6748    integer types can have any bit width, but they must all have the same bit
6749    width. The targets may only lower integer representations they support.</p>
6750
6751 <h5>Semantics:</h5>
6752 <p>This intrinsic does a series of operations atomically. It first loads the
6753    value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the
6754    result to <tt>ptr</tt>. It yields the original value stored
6755    at <tt>ptr</tt>.</p>
6756
6757 <h5>Examples:</h5>
6758 <pre>
6759 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6760 %ptr      = bitcast i8* %mallocP to i32*
6761             store i32 8, %ptr
6762 %result1  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 4 )
6763                                 <i>; yields {i32}:result1 = 8</i>
6764 %result2  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 2 )
6765                                 <i>; yields {i32}:result2 = 4</i>
6766 %result3  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 5 )
6767                                 <i>; yields {i32}:result3 = 2</i>
6768 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = -3</i>
6769 </pre>
6770
6771 </div>
6772
6773 <!-- _______________________________________________________________________ -->
6774 <div class="doc_subsubsection">
6775   <a name="int_atomic_load_and">'<tt>llvm.atomic.load.and.*</tt>' Intrinsic</a><br>
6776   <a name="int_atomic_load_nand">'<tt>llvm.atomic.load.nand.*</tt>' Intrinsic</a><br>
6777   <a name="int_atomic_load_or">'<tt>llvm.atomic.load.or.*</tt>' Intrinsic</a><br>
6778   <a name="int_atomic_load_xor">'<tt>llvm.atomic.load.xor.*</tt>' Intrinsic</a><br>
6779 </div>
6780
6781 <div class="doc_text">
6782
6783 <h5>Syntax:</h5>
6784 <p>These are overloaded intrinsics. You can
6785   use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>,
6786   <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer
6787   bit width and for different address spaces. Not all targets support all bit
6788   widths however.</p>
6789
6790 <pre>
6791   declare i8 @llvm.atomic.load.and.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6792   declare i16 @llvm.atomic.load.and.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6793   declare i32 @llvm.atomic.load.and.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6794   declare i64 @llvm.atomic.load.and.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6795 </pre>
6796
6797 <pre>
6798   declare i8 @llvm.atomic.load.or.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6799   declare i16 @llvm.atomic.load.or.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6800   declare i32 @llvm.atomic.load.or.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6801   declare i64 @llvm.atomic.load.or.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6802 </pre>
6803
6804 <pre>
6805   declare i8 @llvm.atomic.load.nand.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6806   declare i16 @llvm.atomic.load.nand.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6807   declare i32 @llvm.atomic.load.nand.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6808   declare i64 @llvm.atomic.load.nand.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6809 </pre>
6810
6811 <pre>
6812   declare i8 @llvm.atomic.load.xor.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6813   declare i16 @llvm.atomic.load.xor.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6814   declare i32 @llvm.atomic.load.xor.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6815   declare i64 @llvm.atomic.load.xor.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6816 </pre>
6817
6818 <h5>Overview:</h5>
6819 <p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to
6820    the value stored in memory at <tt>ptr</tt>. It yields the original value
6821    at <tt>ptr</tt>.</p>
6822
6823 <h5>Arguments:</h5>
6824 <p>These intrinsics take two arguments, the first a pointer to an integer value
6825    and the second an integer value. The result is also an integer value. These
6826    integer types can have any bit width, but they must all have the same bit
6827    width. The targets may only lower integer representations they support.</p>
6828
6829 <h5>Semantics:</h5>
6830 <p>These intrinsics does a series of operations atomically. They first load the
6831    value stored at <tt>ptr</tt>. They then do the bitwise
6832    operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the
6833    original value stored at <tt>ptr</tt>.</p>
6834
6835 <h5>Examples:</h5>
6836 <pre>
6837 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6838 %ptr      = bitcast i8* %mallocP to i32*
6839             store i32 0x0F0F, %ptr
6840 %result0  = call i32 @llvm.atomic.load.nand.i32.p0i32( i32* %ptr, i32 0xFF )
6841                                 <i>; yields {i32}:result0 = 0x0F0F</i>
6842 %result1  = call i32 @llvm.atomic.load.and.i32.p0i32( i32* %ptr, i32 0xFF )
6843                                 <i>; yields {i32}:result1 = 0xFFFFFFF0</i>
6844 %result2  = call i32 @llvm.atomic.load.or.i32.p0i32( i32* %ptr, i32 0F )
6845                                 <i>; yields {i32}:result2 = 0xF0</i>
6846 %result3  = call i32 @llvm.atomic.load.xor.i32.p0i32( i32* %ptr, i32 0F )
6847                                 <i>; yields {i32}:result3 = FF</i>
6848 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = F0</i>
6849 </pre>
6850
6851 </div>
6852
6853 <!-- _______________________________________________________________________ -->
6854 <div class="doc_subsubsection">
6855   <a name="int_atomic_load_max">'<tt>llvm.atomic.load.max.*</tt>' Intrinsic</a><br>
6856   <a name="int_atomic_load_min">'<tt>llvm.atomic.load.min.*</tt>' Intrinsic</a><br>
6857   <a name="int_atomic_load_umax">'<tt>llvm.atomic.load.umax.*</tt>' Intrinsic</a><br>
6858   <a name="int_atomic_load_umin">'<tt>llvm.atomic.load.umin.*</tt>' Intrinsic</a><br>
6859 </div>
6860
6861 <div class="doc_text">
6862
6863 <h5>Syntax:</h5>
6864 <p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>,
6865    <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and
6866    <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different
6867    address spaces. Not all targets support all bit widths however.</p>
6868
6869 <pre>
6870   declare i8 @llvm.atomic.load.max.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6871   declare i16 @llvm.atomic.load.max.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6872   declare i32 @llvm.atomic.load.max.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6873   declare i64 @llvm.atomic.load.max.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6874 </pre>
6875
6876 <pre>
6877   declare i8 @llvm.atomic.load.min.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6878   declare i16 @llvm.atomic.load.min.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6879   declare i32 @llvm.atomic.load.min.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6880   declare i64 @llvm.atomic.load.min.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6881 </pre>
6882
6883 <pre>
6884   declare i8 @llvm.atomic.load.umax.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6885   declare i16 @llvm.atomic.load.umax.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6886   declare i32 @llvm.atomic.load.umax.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6887   declare i64 @llvm.atomic.load.umax.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6888 </pre>
6889
6890 <pre>
6891   declare i8 @llvm.atomic.load.umin.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6892   declare i16 @llvm.atomic.load.umin.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6893   declare i32 @llvm.atomic.load.umin.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6894   declare i64 @llvm.atomic.load.umin.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6895 </pre>
6896
6897 <h5>Overview:</h5>
6898 <p>These intrinsics takes the signed or unsigned minimum or maximum of 
6899    <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the
6900    original value at <tt>ptr</tt>.</p>
6901
6902 <h5>Arguments:</h5>
6903 <p>These intrinsics take two arguments, the first a pointer to an integer value
6904    and the second an integer value. The result is also an integer value. These
6905    integer types can have any bit width, but they must all have the same bit
6906    width. The targets may only lower integer representations they support.</p>
6907
6908 <h5>Semantics:</h5>
6909 <p>These intrinsics does a series of operations atomically. They first load the
6910    value stored at <tt>ptr</tt>. They then do the signed or unsigned min or
6911    max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They
6912    yield the original value stored at <tt>ptr</tt>.</p>
6913
6914 <h5>Examples:</h5>
6915 <pre>
6916 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
6917 %ptr      = bitcast i8* %mallocP to i32*
6918             store i32 7, %ptr
6919 %result0  = call i32 @llvm.atomic.load.min.i32.p0i32( i32* %ptr, i32 -2 )
6920                                 <i>; yields {i32}:result0 = 7</i>
6921 %result1  = call i32 @llvm.atomic.load.max.i32.p0i32( i32* %ptr, i32 8 )
6922                                 <i>; yields {i32}:result1 = -2</i>
6923 %result2  = call i32 @llvm.atomic.load.umin.i32.p0i32( i32* %ptr, i32 10 )
6924                                 <i>; yields {i32}:result2 = 8</i>
6925 %result3  = call i32 @llvm.atomic.load.umax.i32.p0i32( i32* %ptr, i32 30 )
6926                                 <i>; yields {i32}:result3 = 8</i>
6927 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 30</i>
6928 </pre>
6929
6930 </div>
6931
6932
6933 <!-- ======================================================================= -->
6934 <div class="doc_subsection">
6935   <a name="int_memorymarkers">Memory Use Markers</a>
6936 </div>
6937
6938 <div class="doc_text">
6939
6940 <p>This class of intrinsics exists to information about the lifetime of memory
6941    objects and ranges where variables are immutable.</p>
6942
6943 </div>
6944
6945 <!-- _______________________________________________________________________ -->
6946 <div class="doc_subsubsection">
6947   <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
6948 </div>
6949
6950 <div class="doc_text">
6951
6952 <h5>Syntax:</h5>
6953 <pre>
6954   declare void @llvm.lifetime.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
6955 </pre>
6956
6957 <h5>Overview:</h5>
6958 <p>The '<tt>llvm.lifetime.start</tt>' intrinsic specifies the start of a memory
6959    object's lifetime.</p>
6960
6961 <h5>Arguments:</h5>
6962 <p>The first argument is a constant integer representing the size of the
6963    object, or -1 if it is variable sized.  The second argument is a pointer to
6964    the object.</p>
6965
6966 <h5>Semantics:</h5>
6967 <p>This intrinsic indicates that before this point in the code, the value of the
6968    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
6969    never be used and has an undefined value.  A load from the pointer that is
6970    preceded by this intrinsic can be replaced with
6971    <tt>'<a href="#undefvalues">undef</a>'</tt>.</p>
6972
6973 </div>
6974
6975 <!-- _______________________________________________________________________ -->
6976 <div class="doc_subsubsection">
6977   <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
6978 </div>
6979
6980 <div class="doc_text">
6981
6982 <h5>Syntax:</h5>
6983 <pre>
6984   declare void @llvm.lifetime.end(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
6985 </pre>
6986
6987 <h5>Overview:</h5>
6988 <p>The '<tt>llvm.lifetime.end</tt>' intrinsic specifies the end of a memory
6989    object's lifetime.</p>
6990
6991 <h5>Arguments:</h5>
6992 <p>The first argument is a constant integer representing the size of the
6993    object, or -1 if it is variable sized.  The second argument is a pointer to
6994    the object.</p>
6995
6996 <h5>Semantics:</h5>
6997 <p>This intrinsic indicates that after this point in the code, the value of the
6998    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
6999    never be used and has an undefined value.  Any stores into the memory object
7000    following this intrinsic may be removed as dead.
7001
7002 </div>
7003
7004 <!-- _______________________________________________________________________ -->
7005 <div class="doc_subsubsection">
7006   <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
7007 </div>
7008
7009 <div class="doc_text">
7010
7011 <h5>Syntax:</h5>
7012 <pre>
7013   declare {}* @llvm.invariant.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;) readonly
7014 </pre>
7015
7016 <h5>Overview:</h5>
7017 <p>The '<tt>llvm.invariant.start</tt>' intrinsic specifies that the contents of
7018    a memory object will not change.</p>
7019
7020 <h5>Arguments:</h5>
7021 <p>The first argument is a constant integer representing the size of the
7022    object, or -1 if it is variable sized.  The second argument is a pointer to
7023    the object.</p>
7024
7025 <h5>Semantics:</h5>
7026 <p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses
7027    the return value, the referenced memory location is constant and
7028    unchanging.</p>
7029
7030 </div>
7031
7032 <!-- _______________________________________________________________________ -->
7033 <div class="doc_subsubsection">
7034   <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
7035 </div>
7036
7037 <div class="doc_text">
7038
7039 <h5>Syntax:</h5>
7040 <pre>
7041   declare void @llvm.invariant.end({}* &lt;start&gt;, i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
7042 </pre>
7043
7044 <h5>Overview:</h5>
7045 <p>The '<tt>llvm.invariant.end</tt>' intrinsic specifies that the contents of
7046    a memory object are mutable.</p>
7047
7048 <h5>Arguments:</h5>
7049 <p>The first argument is the matching <tt>llvm.invariant.start</tt> intrinsic.
7050    The second argument is a constant integer representing the size of the
7051    object, or -1 if it is variable sized and the third argument is a pointer
7052    to the object.</p>
7053
7054 <h5>Semantics:</h5>
7055 <p>This intrinsic indicates that the memory is mutable again.</p>
7056
7057 </div>
7058
7059 <!-- ======================================================================= -->
7060 <div class="doc_subsection">
7061   <a name="int_general">General Intrinsics</a>
7062 </div>
7063
7064 <div class="doc_text">
7065
7066 <p>This class of intrinsics is designed to be generic and has no specific
7067    purpose.</p>
7068
7069 </div>
7070
7071 <!-- _______________________________________________________________________ -->
7072 <div class="doc_subsubsection">
7073   <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
7074 </div>
7075
7076 <div class="doc_text">
7077
7078 <h5>Syntax:</h5>
7079 <pre>
7080   declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7081 </pre>
7082
7083 <h5>Overview:</h5>
7084 <p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p>
7085
7086 <h5>Arguments:</h5>
7087 <p>The first argument is a pointer to a value, the second is a pointer to a
7088    global string, the third is a pointer to a global string which is the source
7089    file name, and the last argument is the line number.</p>
7090
7091 <h5>Semantics:</h5>
7092 <p>This intrinsic allows annotation of local variables with arbitrary strings.
7093    This can be useful for special purpose optimizations that want to look for
7094    these annotations.  These have no other defined use, they are ignored by code
7095    generation and optimization.</p>
7096
7097 </div>
7098
7099 <!-- _______________________________________________________________________ -->
7100 <div class="doc_subsubsection">
7101   <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
7102 </div>
7103
7104 <div class="doc_text">
7105
7106 <h5>Syntax:</h5>
7107 <p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on
7108    any integer bit width.</p>
7109
7110 <pre>
7111   declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7112   declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7113   declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7114   declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7115   declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
7116 </pre>
7117
7118 <h5>Overview:</h5>
7119 <p>The '<tt>llvm.annotation</tt>' intrinsic.</p>
7120
7121 <h5>Arguments:</h5>
7122 <p>The first argument is an integer value (result of some expression), the
7123    second is a pointer to a global string, the third is a pointer to a global
7124    string which is the source file name, and the last argument is the line
7125    number.  It returns the value of the first argument.</p>
7126
7127 <h5>Semantics:</h5>
7128 <p>This intrinsic allows annotations to be put on arbitrary expressions with
7129    arbitrary strings.  This can be useful for special purpose optimizations that
7130    want to look for these annotations.  These have no other defined use, they
7131    are ignored by code generation and optimization.</p>
7132
7133 </div>
7134
7135 <!-- _______________________________________________________________________ -->
7136 <div class="doc_subsubsection">
7137   <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
7138 </div>
7139
7140 <div class="doc_text">
7141
7142 <h5>Syntax:</h5>
7143 <pre>
7144   declare void @llvm.trap()
7145 </pre>
7146
7147 <h5>Overview:</h5>
7148 <p>The '<tt>llvm.trap</tt>' intrinsic.</p>
7149
7150 <h5>Arguments:</h5>
7151 <p>None.</p>
7152
7153 <h5>Semantics:</h5>
7154 <p>This intrinsics is lowered to the target dependent trap instruction. If the
7155    target does not have a trap instruction, this intrinsic will be lowered to
7156    the call of the <tt>abort()</tt> function.</p>
7157
7158 </div>
7159
7160 <!-- _______________________________________________________________________ -->
7161 <div class="doc_subsubsection">
7162   <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
7163 </div>
7164
7165 <div class="doc_text">
7166
7167 <h5>Syntax:</h5>
7168 <pre>
7169   declare void @llvm.stackprotector( i8* &lt;guard&gt;, i8** &lt;slot&gt; )
7170 </pre>
7171
7172 <h5>Overview:</h5>
7173 <p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and
7174    stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to
7175    ensure that it is placed on the stack before local variables.</p>
7176
7177 <h5>Arguments:</h5>
7178 <p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer
7179    arguments. The first argument is the value loaded from the stack
7180    guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt>
7181    that has enough space to hold the value of the guard.</p>
7182
7183 <h5>Semantics:</h5>
7184 <p>This intrinsic causes the prologue/epilogue inserter to force the position of
7185    the <tt>AllocaInst</tt> stack slot to be before local variables on the
7186    stack. This is to ensure that if a local variable on the stack is
7187    overwritten, it will destroy the value of the guard. When the function exits,
7188    the guard on the stack is checked against the original guard. If they're
7189    different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
7190    function.</p>
7191
7192 </div>
7193
7194 <!-- *********************************************************************** -->
7195 <hr>
7196 <address>
7197   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
7198   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
7199   <a href="http://validator.w3.org/check/referer"><img
7200   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
7201
7202   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
7203   <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
7204   Last modified: $Date$
7205 </address>
7206
7207 </body>
7208 </html>