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