Fix typo.
[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   <dd>Perform the <a href="#i_getelementptr">getelementptr operation</a> on
2095       constants.  As with the <a href="#i_getelementptr">getelementptr</a>
2096       instruction, the index list may have zero or more indexes, which are
2097       required to make sense for the type of "CSTPTR".</dd>
2098
2099   <dt><b><tt>select ( COND, VAL1, VAL2 )</tt></b></dt>
2100   <dd>Perform the <a href="#i_select">select operation</a> on constants.</dd>
2101
2102   <dt><b><tt>icmp COND ( VAL1, VAL2 )</tt></b></dt>
2103   <dd>Performs the <a href="#i_icmp">icmp operation</a> on constants.</dd>
2104
2105   <dt><b><tt>fcmp COND ( VAL1, VAL2 )</tt></b></dt>
2106   <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd>
2107
2108   <dt><b><tt>extractelement ( VAL, IDX )</tt></b></dt>
2109   <dd>Perform the <a href="#i_extractelement">extractelement operation</a> on
2110       constants.</dd>
2111
2112   <dt><b><tt>insertelement ( VAL, ELT, IDX )</tt></b></dt>
2113   <dd>Perform the <a href="#i_insertelement">insertelement operation</a> on
2114     constants.</dd>
2115
2116   <dt><b><tt>shufflevector ( VEC1, VEC2, IDXMASK )</tt></b></dt>
2117   <dd>Perform the <a href="#i_shufflevector">shufflevector operation</a> on
2118       constants.</dd>
2119
2120   <dt><b><tt>OPCODE ( LHS, RHS )</tt></b></dt>
2121   <dd>Perform the specified operation of the LHS and RHS constants. OPCODE may
2122       be any of the <a href="#binaryops">binary</a>
2123       or <a href="#bitwiseops">bitwise binary</a> operations.  The constraints
2124       on operands are the same as those for the corresponding instruction
2125       (e.g. no bitwise operations on floating point values are allowed).</dd>
2126 </dl>
2127
2128 </div>
2129
2130 <!-- ======================================================================= -->
2131 <div class="doc_subsection"><a name="metadata">Embedded Metadata</a>
2132 </div>
2133
2134 <div class="doc_text">
2135
2136 <p>Embedded metadata provides a way to attach arbitrary data to the instruction
2137    stream without affecting the behaviour of the program.  There are two
2138    metadata primitives, strings and nodes. All metadata has the
2139    <tt>metadata</tt> type and is identified in syntax by a preceding exclamation
2140    point ('<tt>!</tt>').</p>
2141
2142 <p>A metadata string is a string surrounded by double quotes.  It can contain
2143    any character by escaping non-printable characters with "\xx" where "xx" is
2144    the two digit hex code.  For example: "<tt>!"test\00"</tt>".</p>
2145
2146 <p>Metadata nodes are represented with notation similar to structure constants
2147    (a comma separated list of elements, surrounded by braces and preceeded by an
2148    exclamation point).  For example: "<tt>!{ metadata !"test\00", i32
2149    10}</tt>".</p>
2150
2151 <p>A metadata node will attempt to track changes to the values it holds. In the
2152    event that a value is deleted, it will be replaced with a typeless
2153    "<tt>null</tt>", such as "<tt>metadata !{null, i32 10}</tt>".</p>
2154
2155 <p>Optimizations may rely on metadata to provide additional information about
2156    the program that isn't available in the instructions, or that isn't easily
2157    computable. Similarly, the code generator may expect a certain metadata
2158    format to be used to express debugging information.</p>
2159
2160 </div>
2161
2162 <!-- *********************************************************************** -->
2163 <div class="doc_section"> <a name="othervalues">Other Values</a> </div>
2164 <!-- *********************************************************************** -->
2165
2166 <!-- ======================================================================= -->
2167 <div class="doc_subsection">
2168 <a name="inlineasm">Inline Assembler Expressions</a>
2169 </div>
2170
2171 <div class="doc_text">
2172
2173 <p>LLVM supports inline assembler expressions (as opposed
2174    to <a href="#moduleasm"> Module-Level Inline Assembly</a>) through the use of
2175    a special value.  This value represents the inline assembler as a string
2176    (containing the instructions to emit), a list of operand constraints (stored
2177    as a string), and a flag that indicates whether or not the inline asm
2178    expression has side effects.  An example inline assembler expression is:</p>
2179
2180 <div class="doc_code">
2181 <pre>
2182 i32 (i32) asm "bswap $0", "=r,r"
2183 </pre>
2184 </div>
2185
2186 <p>Inline assembler expressions may <b>only</b> be used as the callee operand of
2187    a <a href="#i_call"><tt>call</tt> instruction</a>.  Thus, typically we
2188    have:</p>
2189
2190 <div class="doc_code">
2191 <pre>
2192 %X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
2193 </pre>
2194 </div>
2195
2196 <p>Inline asms with side effects not visible in the constraint list must be
2197    marked as having side effects.  This is done through the use of the
2198    '<tt>sideeffect</tt>' keyword, like so:</p>
2199
2200 <div class="doc_code">
2201 <pre>
2202 call void asm sideeffect "eieio", ""()
2203 </pre>
2204 </div>
2205
2206 <p>TODO: The format of the asm and constraints string still need to be
2207    documented here.  Constraints on what can be done (e.g. duplication, moving,
2208    etc need to be documented).  This is probably best done by reference to
2209    another document that covers inline asm from a holistic perspective.</p>
2210
2211 </div>
2212
2213
2214 <!-- *********************************************************************** -->
2215 <div class="doc_section">
2216   <a name="intrinsic_globals">Intrinsic Global Variables</a>
2217 </div>
2218 <!-- *********************************************************************** -->
2219
2220 <p>LLVM has a number of "magic" global variables that contain data that affect
2221 code generation or other IR semantics.  These are documented here.  All globals
2222 of this sort should have a section specified as "<tt>llvm.metadata</tt>".  This
2223 section and all globals that start with "<tt>llvm.</tt>" are reserved for use
2224 by LLVM.</p>
2225
2226 <!-- ======================================================================= -->
2227 <div class="doc_subsection">
2228 <a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a>
2229 </div>
2230
2231 <div class="doc_text">
2232
2233 <p>The <tt>@llvm.used</tt> global is an array with i8* element type which has <a
2234 href="#linkage_appending">appending linkage</a>.  This array contains a list of
2235 pointers to global variables and functions which may optionally have a pointer
2236 cast formed of bitcast or getelementptr.  For example, a legal use of it is:</p>
2237
2238 <pre>
2239   @X = global i8 4
2240   @Y = global i32 123
2241
2242   @llvm.used = appending global [2 x i8*] [
2243      i8* @X,
2244      i8* bitcast (i32* @Y to i8*)
2245   ], section "llvm.metadata"
2246 </pre>
2247
2248 <p>If a global variable appears in the <tt>@llvm.used</tt> list, then the
2249 compiler, assembler, and linker are required to treat the symbol as if there is
2250 a reference to the global that it cannot see.  For example, if a variable has
2251 internal linkage and no references other than that from the <tt>@llvm.used</tt>
2252 list, it cannot be deleted.  This is commonly used to represent references from
2253 inline asms and other things the compiler cannot "see", and corresponds to
2254 "attribute((used))" in GNU C.</p>
2255
2256 <p>On some targets, the code generator must emit a directive to the assembler or
2257 object file to prevent the assembler and linker from molesting the symbol.</p>
2258
2259 </div>
2260
2261 <!-- ======================================================================= -->
2262 <div class="doc_subsection">
2263 <a name="intg_compiler_used">The '<tt>llvm.compiler.used</tt>' Global Variable</a>
2264 </div>
2265
2266 <div class="doc_text">
2267
2268 <p>The <tt>@llvm.compiler.used</tt> directive is the same as the
2269 <tt>@llvm.used</tt> directive, except that it only prevents the compiler from
2270 touching the symbol.  On targets that support it, this allows an intelligent
2271 linker to optimize references to the symbol without being impeded as it would be
2272 by <tt>@llvm.used</tt>.</p>
2273
2274 <p>This is a rare construct that should only be used in rare circumstances, and
2275 should not be exposed to source languages.</p>
2276
2277 </div>
2278
2279 <!-- ======================================================================= -->
2280 <div class="doc_subsection">
2281 <a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a>
2282 </div>
2283
2284 <div class="doc_text">
2285
2286 <p>TODO: Describe this.</p>
2287
2288 </div>
2289
2290 <!-- ======================================================================= -->
2291 <div class="doc_subsection">
2292 <a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a>
2293 </div>
2294
2295 <div class="doc_text">
2296
2297 <p>TODO: Describe this.</p>
2298
2299 </div>
2300
2301
2302 <!-- *********************************************************************** -->
2303 <div class="doc_section"> <a name="instref">Instruction Reference</a> </div>
2304 <!-- *********************************************************************** -->
2305
2306 <div class="doc_text">
2307
2308 <p>The LLVM instruction set consists of several different classifications of
2309    instructions: <a href="#terminators">terminator
2310    instructions</a>, <a href="#binaryops">binary instructions</a>,
2311    <a href="#bitwiseops">bitwise binary instructions</a>,
2312    <a href="#memoryops">memory instructions</a>, and
2313    <a href="#otherops">other instructions</a>.</p>
2314
2315 </div>
2316
2317 <!-- ======================================================================= -->
2318 <div class="doc_subsection"> <a name="terminators">Terminator
2319 Instructions</a> </div>
2320
2321 <div class="doc_text">
2322
2323 <p>As mentioned <a href="#functionstructure">previously</a>, every basic block
2324    in a program ends with a "Terminator" instruction, which indicates which
2325    block should be executed after the current block is finished. These
2326    terminator instructions typically yield a '<tt>void</tt>' value: they produce
2327    control flow, not values (the one exception being the
2328    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
2329
2330 <p>There are six different terminator instructions: the
2331    '<a href="#i_ret"><tt>ret</tt></a>' instruction, the
2332    '<a href="#i_br"><tt>br</tt></a>' instruction, the
2333    '<a href="#i_switch"><tt>switch</tt></a>' instruction, the
2334    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, the
2335    '<a href="#i_unwind"><tt>unwind</tt></a>' instruction, and the
2336    '<a href="#i_unreachable"><tt>unreachable</tt></a>' instruction.</p>
2337
2338 </div>
2339
2340 <!-- _______________________________________________________________________ -->
2341 <div class="doc_subsubsection"> <a name="i_ret">'<tt>ret</tt>'
2342 Instruction</a> </div>
2343
2344 <div class="doc_text">
2345
2346 <h5>Syntax:</h5>
2347 <pre>
2348   ret &lt;type&gt; &lt;value&gt;       <i>; Return a value from a non-void function</i>
2349   ret void                 <i>; Return from void function</i>
2350 </pre>
2351
2352 <h5>Overview:</h5>
2353 <p>The '<tt>ret</tt>' instruction is used to return control flow (and optionally
2354    a value) from a function back to the caller.</p>
2355
2356 <p>There are two forms of the '<tt>ret</tt>' instruction: one that returns a
2357    value and then causes control flow, and one that just causes control flow to
2358    occur.</p>
2359
2360 <h5>Arguments:</h5>
2361 <p>The '<tt>ret</tt>' instruction optionally accepts a single argument, the
2362    return value. The type of the return value must be a
2363    '<a href="#t_firstclass">first class</a>' type.</p>
2364
2365 <p>A function is not <a href="#wellformed">well formed</a> if it it has a
2366    non-void return type and contains a '<tt>ret</tt>' instruction with no return
2367    value or a return value with a type that does not match its type, or if it
2368    has a void return type and contains a '<tt>ret</tt>' instruction with a
2369    return value.</p>
2370
2371 <h5>Semantics:</h5>
2372 <p>When the '<tt>ret</tt>' instruction is executed, control flow returns back to
2373    the calling function's context.  If the caller is a
2374    "<a href="#i_call"><tt>call</tt></a>" instruction, execution continues at the
2375    instruction after the call.  If the caller was an
2376    "<a href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues at
2377    the beginning of the "normal" destination block.  If the instruction returns
2378    a value, that value shall set the call or invoke instruction's return
2379    value.</p>
2380
2381 <h5>Example:</h5>
2382 <pre>
2383   ret i32 5                       <i>; Return an integer value of 5</i>
2384   ret void                        <i>; Return from a void function</i>
2385   ret { i32, i8 } { i32 4, i8 2 } <i>; Return a struct of values 4 and 2</i>
2386 </pre>
2387
2388 <p>Note that the code generator does not yet fully support large
2389    return values. The specific sizes that are currently supported are
2390    dependent on the target. For integers, on 32-bit targets the limit
2391    is often 64 bits, and on 64-bit targets the limit is often 128 bits.
2392    For aggregate types, the current limits are dependent on the element
2393    types; for example targets are often limited to 2 total integer
2394    elements and 2 total floating-point elements.</p>
2395
2396 </div>
2397 <!-- _______________________________________________________________________ -->
2398 <div class="doc_subsubsection"> <a name="i_br">'<tt>br</tt>' Instruction</a> </div>
2399
2400 <div class="doc_text">
2401
2402 <h5>Syntax:</h5>
2403 <pre>
2404   br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;<br>  br label &lt;dest&gt;          <i>; Unconditional branch</i>
2405 </pre>
2406
2407 <h5>Overview:</h5>
2408 <p>The '<tt>br</tt>' instruction is used to cause control flow to transfer to a
2409    different basic block in the current function.  There are two forms of this
2410    instruction, corresponding to a conditional branch and an unconditional
2411    branch.</p>
2412
2413 <h5>Arguments:</h5>
2414 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a single
2415    '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The unconditional form
2416    of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a
2417    target.</p>
2418
2419 <h5>Semantics:</h5>
2420 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
2421    argument is evaluated.  If the value is <tt>true</tt>, control flows to the
2422    '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
2423    control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>
2424
2425 <h5>Example:</h5>
2426 <pre>
2427 Test:
2428   %cond = <a href="#i_icmp">icmp</a> eq i32 %a, %b
2429   br i1 %cond, label %IfEqual, label %IfUnequal
2430 IfEqual:
2431   <a href="#i_ret">ret</a> i32 1
2432 IfUnequal:
2433   <a href="#i_ret">ret</a> i32 0
2434 </pre>
2435
2436 </div>
2437
2438 <!-- _______________________________________________________________________ -->
2439 <div class="doc_subsubsection">
2440    <a name="i_switch">'<tt>switch</tt>' Instruction</a>
2441 </div>
2442
2443 <div class="doc_text">
2444
2445 <h5>Syntax:</h5>
2446 <pre>
2447   switch &lt;intty&gt; &lt;value&gt;, label &lt;defaultdest&gt; [ &lt;intty&gt; &lt;val&gt;, label &lt;dest&gt; ... ]
2448 </pre>
2449
2450 <h5>Overview:</h5>
2451 <p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of
2452    several different places.  It is a generalization of the '<tt>br</tt>'
2453    instruction, allowing a branch to occur to one of many possible
2454    destinations.</p>
2455
2456 <h5>Arguments:</h5>
2457 <p>The '<tt>switch</tt>' instruction uses three parameters: an integer
2458    comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination,
2459    and an array of pairs of comparison value constants and '<tt>label</tt>'s.
2460    The table is not allowed to contain duplicate constant entries.</p>
2461
2462 <h5>Semantics:</h5>
2463 <p>The <tt>switch</tt> instruction specifies a table of values and
2464    destinations. When the '<tt>switch</tt>' instruction is executed, this table
2465    is searched for the given value.  If the value is found, control flow is
2466    transfered to the corresponding destination; otherwise, control flow is
2467    transfered to the default destination.</p>
2468
2469 <h5>Implementation:</h5>
2470 <p>Depending on properties of the target machine and the particular
2471    <tt>switch</tt> instruction, this instruction may be code generated in
2472    different ways.  For example, it could be generated as a series of chained
2473    conditional branches or with a lookup table.</p>
2474
2475 <h5>Example:</h5>
2476 <pre>
2477  <i>; Emulate a conditional br instruction</i>
2478  %Val = <a href="#i_zext">zext</a> i1 %value to i32
2479  switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
2480
2481  <i>; Emulate an unconditional br instruction</i>
2482  switch i32 0, label %dest [ ]
2483
2484  <i>; Implement a jump table:</i>
2485  switch i32 %val, label %otherwise [ i32 0, label %onzero
2486                                      i32 1, label %onone
2487                                      i32 2, label %ontwo ]
2488 </pre>
2489
2490 </div>
2491
2492 <!-- _______________________________________________________________________ -->
2493 <div class="doc_subsubsection">
2494   <a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
2495 </div>
2496
2497 <div class="doc_text">
2498
2499 <h5>Syntax:</h5>
2500 <pre>
2501   &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>]
2502                 to label &lt;normal label&gt; unwind label &lt;exception label&gt;
2503 </pre>
2504
2505 <h5>Overview:</h5>
2506 <p>The '<tt>invoke</tt>' instruction causes control to transfer to a specified
2507    function, with the possibility of control flow transfer to either the
2508    '<tt>normal</tt>' label or the '<tt>exception</tt>' label.  If the callee
2509    function returns with the "<tt><a href="#i_ret">ret</a></tt>" instruction,
2510    control flow will return to the "normal" label.  If the callee (or any
2511    indirect callees) returns with the "<a href="#i_unwind"><tt>unwind</tt></a>"
2512    instruction, control is interrupted and continued at the dynamically nearest
2513    "exception" label.</p>
2514
2515 <h5>Arguments:</h5>
2516 <p>This instruction requires several arguments:</p>
2517
2518 <ol>
2519   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
2520       convention</a> the call should use.  If none is specified, the call
2521       defaults to using C calling conventions.</li>
2522
2523   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
2524       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
2525       '<tt>inreg</tt>' attributes are valid here.</li>
2526
2527   <li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
2528       function value being invoked.  In most cases, this is a direct function
2529       invocation, but indirect <tt>invoke</tt>s are just as possible, branching
2530       off an arbitrary pointer to function value.</li>
2531
2532   <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
2533       function to be invoked. </li>
2534
2535   <li>'<tt>function args</tt>': argument list whose types match the function
2536       signature argument types.  If the function signature indicates the
2537       function accepts a variable number of arguments, the extra arguments can
2538       be specified.</li>
2539
2540   <li>'<tt>normal label</tt>': the label reached when the called function
2541       executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li>
2542
2543   <li>'<tt>exception label</tt>': the label reached when a callee returns with
2544       the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li>
2545
2546   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
2547       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
2548       '<tt>readnone</tt>' attributes are valid here.</li>
2549 </ol>
2550
2551 <h5>Semantics:</h5>
2552 <p>This instruction is designed to operate as a standard
2553    '<tt><a href="#i_call">call</a></tt>' instruction in most regards.  The
2554    primary difference is that it establishes an association with a label, which
2555    is used by the runtime library to unwind the stack.</p>
2556
2557 <p>This instruction is used in languages with destructors to ensure that proper
2558    cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown
2559    exception.  Additionally, this is important for implementation of
2560    '<tt>catch</tt>' clauses in high-level languages that support them.</p>
2561
2562 <p>For the purposes of the SSA form, the definition of the value returned by the
2563    '<tt>invoke</tt>' instruction is deemed to occur on the edge from the current
2564    block to the "normal" label. If the callee unwinds then no return value is
2565    available.</p>
2566
2567 <h5>Example:</h5>
2568 <pre>
2569   %retval = invoke i32 @Test(i32 15) to label %Continue
2570               unwind label %TestCleanup              <i>; {i32}:retval set</i>
2571   %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue
2572               unwind label %TestCleanup              <i>; {i32}:retval set</i>
2573 </pre>
2574
2575 </div>
2576
2577 <!-- _______________________________________________________________________ -->
2578
2579 <div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
2580 Instruction</a> </div>
2581
2582 <div class="doc_text">
2583
2584 <h5>Syntax:</h5>
2585 <pre>
2586   unwind
2587 </pre>
2588
2589 <h5>Overview:</h5>
2590 <p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow
2591    at the first callee in the dynamic call stack which used
2592    an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call.
2593    This is primarily used to implement exception handling.</p>
2594
2595 <h5>Semantics:</h5>
2596 <p>The '<tt>unwind</tt>' instruction causes execution of the current function to
2597    immediately halt.  The dynamic call stack is then searched for the
2598    first <a href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack.
2599    Once found, execution continues at the "exceptional" destination block
2600    specified by the <tt>invoke</tt> instruction.  If there is no <tt>invoke</tt>
2601    instruction in the dynamic call chain, undefined behavior results.</p>
2602
2603 </div>
2604
2605 <!-- _______________________________________________________________________ -->
2606
2607 <div class="doc_subsubsection"> <a name="i_unreachable">'<tt>unreachable</tt>'
2608 Instruction</a> </div>
2609
2610 <div class="doc_text">
2611
2612 <h5>Syntax:</h5>
2613 <pre>
2614   unreachable
2615 </pre>
2616
2617 <h5>Overview:</h5>
2618 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
2619    instruction is used to inform the optimizer that a particular portion of the
2620    code is not reachable.  This can be used to indicate that the code after a
2621    no-return function cannot be reached, and other facts.</p>
2622
2623 <h5>Semantics:</h5>
2624 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>
2625
2626 </div>
2627
2628 <!-- ======================================================================= -->
2629 <div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>
2630
2631 <div class="doc_text">
2632
2633 <p>Binary operators are used to do most of the computation in a program.  They
2634    require two operands of the same type, execute an operation on them, and
2635    produce a single value.  The operands might represent multiple data, as is
2636    the case with the <a href="#t_vector">vector</a> data type.  The result value
2637    has the same type as its operands.</p>
2638
2639 <p>There are several different binary operators:</p>
2640
2641 </div>
2642
2643 <!-- _______________________________________________________________________ -->
2644 <div class="doc_subsubsection">
2645   <a name="i_add">'<tt>add</tt>' Instruction</a>
2646 </div>
2647
2648 <div class="doc_text">
2649
2650 <h5>Syntax:</h5>
2651 <pre>
2652   &lt;result&gt; = add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2653   &lt;result&gt; = nuw add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2654   &lt;result&gt; = nsw add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2655   &lt;result&gt; = nuw nsw add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2656 </pre>
2657
2658 <h5>Overview:</h5>
2659 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
2660
2661 <h5>Arguments:</h5>
2662 <p>The two arguments to the '<tt>add</tt>' instruction must
2663    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
2664    integer values. Both arguments must have identical types.</p>
2665
2666 <h5>Semantics:</h5>
2667 <p>The value produced is the integer sum of the two operands.</p>
2668
2669 <p>If the sum has unsigned overflow, the result returned is the mathematical
2670    result modulo 2<sup>n</sup>, where n is the bit width of the result.</p>
2671
2672 <p>Because LLVM integers use a two's complement representation, this instruction
2673    is appropriate for both signed and unsigned integers.</p>
2674
2675 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
2676    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
2677    <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt>
2678    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
2679
2680 <h5>Example:</h5>
2681 <pre>
2682   &lt;result&gt; = add i32 4, %var          <i>; yields {i32}:result = 4 + %var</i>
2683 </pre>
2684
2685 </div>
2686
2687 <!-- _______________________________________________________________________ -->
2688 <div class="doc_subsubsection">
2689   <a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
2690 </div>
2691
2692 <div class="doc_text">
2693
2694 <h5>Syntax:</h5>
2695 <pre>
2696   &lt;result&gt; = fadd &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2697 </pre>
2698
2699 <h5>Overview:</h5>
2700 <p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p>
2701
2702 <h5>Arguments:</h5>
2703 <p>The two arguments to the '<tt>fadd</tt>' instruction must be
2704    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2705    floating point values. Both arguments must have identical types.</p>
2706
2707 <h5>Semantics:</h5>
2708 <p>The value produced is the floating point sum of the two operands.</p>
2709
2710 <h5>Example:</h5>
2711 <pre>
2712   &lt;result&gt; = fadd float 4.0, %var          <i>; yields {float}:result = 4.0 + %var</i>
2713 </pre>
2714
2715 </div>
2716
2717 <!-- _______________________________________________________________________ -->
2718 <div class="doc_subsubsection">
2719    <a name="i_sub">'<tt>sub</tt>' Instruction</a>
2720 </div>
2721
2722 <div class="doc_text">
2723
2724 <h5>Syntax:</h5>
2725 <pre>
2726   &lt;result&gt; = sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2727   &lt;result&gt; = nuw sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2728   &lt;result&gt; = nsw sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2729   &lt;result&gt; = nuw nsw sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2730 </pre>
2731
2732 <h5>Overview:</h5>
2733 <p>The '<tt>sub</tt>' instruction returns the difference of its two
2734    operands.</p>
2735
2736 <p>Note that the '<tt>sub</tt>' instruction is used to represent the
2737    '<tt>neg</tt>' instruction present in most other intermediate
2738    representations.</p>
2739
2740 <h5>Arguments:</h5>
2741 <p>The two arguments to the '<tt>sub</tt>' instruction must
2742    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
2743    integer values.  Both arguments must have identical types.</p>
2744
2745 <h5>Semantics:</h5>
2746 <p>The value produced is the integer difference of the two operands.</p>
2747
2748 <p>If the difference has unsigned overflow, the result returned is the
2749    mathematical result modulo 2<sup>n</sup>, where n is the bit width of the
2750    result.</p>
2751
2752 <p>Because LLVM integers use a two's complement representation, this instruction
2753    is appropriate for both signed and unsigned integers.</p>
2754
2755 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
2756    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
2757    <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt>
2758    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
2759
2760 <h5>Example:</h5>
2761 <pre>
2762   &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
2763   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
2764 </pre>
2765
2766 </div>
2767
2768 <!-- _______________________________________________________________________ -->
2769 <div class="doc_subsubsection">
2770    <a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
2771 </div>
2772
2773 <div class="doc_text">
2774
2775 <h5>Syntax:</h5>
2776 <pre>
2777   &lt;result&gt; = fsub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2778 </pre>
2779
2780 <h5>Overview:</h5>
2781 <p>The '<tt>fsub</tt>' instruction returns the difference of its two
2782    operands.</p>
2783
2784 <p>Note that the '<tt>fsub</tt>' instruction is used to represent the
2785    '<tt>fneg</tt>' instruction present in most other intermediate
2786    representations.</p>
2787
2788 <h5>Arguments:</h5>
2789 <p>The two arguments to the '<tt>fsub</tt>' instruction must be
2790    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2791    floating point values.  Both arguments must have identical types.</p>
2792
2793 <h5>Semantics:</h5>
2794 <p>The value produced is the floating point difference of the two operands.</p>
2795
2796 <h5>Example:</h5>
2797 <pre>
2798   &lt;result&gt; = fsub float 4.0, %var           <i>; yields {float}:result = 4.0 - %var</i>
2799   &lt;result&gt; = fsub float -0.0, %val          <i>; yields {float}:result = -%var</i>
2800 </pre>
2801
2802 </div>
2803
2804 <!-- _______________________________________________________________________ -->
2805 <div class="doc_subsubsection">
2806   <a name="i_mul">'<tt>mul</tt>' Instruction</a>
2807 </div>
2808
2809 <div class="doc_text">
2810
2811 <h5>Syntax:</h5>
2812 <pre>
2813   &lt;result&gt; = mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
2814   &lt;result&gt; = nuw mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2815   &lt;result&gt; = nsw mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
2816   &lt;result&gt; = nuw nsw mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
2817 </pre>
2818
2819 <h5>Overview:</h5>
2820 <p>The '<tt>mul</tt>' instruction returns the product of its two operands.</p>
2821
2822 <h5>Arguments:</h5>
2823 <p>The two arguments to the '<tt>mul</tt>' instruction must
2824    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
2825    integer values.  Both arguments must have identical types.</p>
2826  
2827 <h5>Semantics:</h5>
2828 <p>The value produced is the integer product of the two operands.</p>
2829
2830 <p>If the result of the multiplication has unsigned overflow, the result
2831    returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit
2832    width of the result.</p>
2833
2834 <p>Because LLVM integers use a two's complement representation, and the result
2835    is the same width as the operands, this instruction returns the correct
2836    result for both signed and unsigned integers.  If a full product
2837    (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should
2838    be sign-extended or zero-extended as appropriate to the width of the full
2839    product.</p>
2840
2841 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
2842    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
2843    <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt>
2844    is undefined if unsigned and/or signed overflow, respectively, occurs.</p>
2845
2846 <h5>Example:</h5>
2847 <pre>
2848   &lt;result&gt; = mul i32 4, %var          <i>; yields {i32}:result = 4 * %var</i>
2849 </pre>
2850
2851 </div>
2852
2853 <!-- _______________________________________________________________________ -->
2854 <div class="doc_subsubsection">
2855   <a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
2856 </div>
2857
2858 <div class="doc_text">
2859
2860 <h5>Syntax:</h5>
2861 <pre>
2862   &lt;result&gt; = fmul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2863 </pre>
2864
2865 <h5>Overview:</h5>
2866 <p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p>
2867
2868 <h5>Arguments:</h5>
2869 <p>The two arguments to the '<tt>fmul</tt>' instruction must be
2870    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2871    floating point values.  Both arguments must have identical types.</p>
2872
2873 <h5>Semantics:</h5>
2874 <p>The value produced is the floating point product of the two operands.</p>
2875
2876 <h5>Example:</h5>
2877 <pre>
2878   &lt;result&gt; = fmul float 4.0, %var          <i>; yields {float}:result = 4.0 * %var</i>
2879 </pre>
2880
2881 </div>
2882
2883 <!-- _______________________________________________________________________ -->
2884 <div class="doc_subsubsection"> <a name="i_udiv">'<tt>udiv</tt>' Instruction
2885 </a></div>
2886
2887 <div class="doc_text">
2888
2889 <h5>Syntax:</h5>
2890 <pre>
2891   &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2892 </pre>
2893
2894 <h5>Overview:</h5>
2895 <p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p>
2896
2897 <h5>Arguments:</h5>
2898 <p>The two arguments to the '<tt>udiv</tt>' instruction must be 
2899    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
2900    values.  Both arguments must have identical types.</p>
2901
2902 <h5>Semantics:</h5>
2903 <p>The value produced is the unsigned integer quotient of the two operands.</p>
2904
2905 <p>Note that unsigned integer division and signed integer division are distinct
2906    operations; for signed integer division, use '<tt>sdiv</tt>'.</p>
2907
2908 <p>Division by zero leads to undefined behavior.</p>
2909
2910 <h5>Example:</h5>
2911 <pre>
2912   &lt;result&gt; = udiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
2913 </pre>
2914
2915 </div>
2916
2917 <!-- _______________________________________________________________________ -->
2918 <div class="doc_subsubsection"> <a name="i_sdiv">'<tt>sdiv</tt>' Instruction
2919 </a> </div>
2920
2921 <div class="doc_text">
2922
2923 <h5>Syntax:</h5>
2924 <pre>
2925   &lt;result&gt; = sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
2926   &lt;result&gt; = exact sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2927 </pre>
2928
2929 <h5>Overview:</h5>
2930 <p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p>
2931
2932 <h5>Arguments:</h5>
2933 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be 
2934    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
2935    values.  Both arguments must have identical types.</p>
2936
2937 <h5>Semantics:</h5>
2938 <p>The value produced is the signed integer quotient of the two operands rounded
2939    towards zero.</p>
2940
2941 <p>Note that signed integer division and unsigned integer division are distinct
2942    operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>
2943
2944 <p>Division by zero leads to undefined behavior. Overflow also leads to
2945    undefined behavior; this is a rare case, but can occur, for example, by doing
2946    a 32-bit division of -2147483648 by -1.</p>
2947
2948 <p>If the <tt>exact</tt> keyword is present, the result value of the
2949    <tt>sdiv</tt> is undefined if the result would be rounded or if overflow
2950    would occur.</p>
2951
2952 <h5>Example:</h5>
2953 <pre>
2954   &lt;result&gt; = sdiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
2955 </pre>
2956
2957 </div>
2958
2959 <!-- _______________________________________________________________________ -->
2960 <div class="doc_subsubsection"> <a name="i_fdiv">'<tt>fdiv</tt>'
2961 Instruction</a> </div>
2962
2963 <div class="doc_text">
2964
2965 <h5>Syntax:</h5>
2966 <pre>
2967   &lt;result&gt; = fdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2968 </pre>
2969
2970 <h5>Overview:</h5>
2971 <p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p>
2972
2973 <h5>Arguments:</h5>
2974 <p>The two arguments to the '<tt>fdiv</tt>' instruction must be
2975    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
2976    floating point values.  Both arguments must have identical types.</p>
2977
2978 <h5>Semantics:</h5>
2979 <p>The value produced is the floating point quotient of the two operands.</p>
2980
2981 <h5>Example:</h5>
2982 <pre>
2983   &lt;result&gt; = fdiv float 4.0, %var          <i>; yields {float}:result = 4.0 / %var</i>
2984 </pre>
2985
2986 </div>
2987
2988 <!-- _______________________________________________________________________ -->
2989 <div class="doc_subsubsection"> <a name="i_urem">'<tt>urem</tt>' Instruction</a>
2990 </div>
2991
2992 <div class="doc_text">
2993
2994 <h5>Syntax:</h5>
2995 <pre>
2996   &lt;result&gt; = urem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
2997 </pre>
2998
2999 <h5>Overview:</h5>
3000 <p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned
3001    division of its two arguments.</p>
3002
3003 <h5>Arguments:</h5>
3004 <p>The two arguments to the '<tt>urem</tt>' instruction must be 
3005    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3006    values.  Both arguments must have identical types.</p>
3007
3008 <h5>Semantics:</h5>
3009 <p>This instruction returns the unsigned integer <i>remainder</i> of a division.
3010    This instruction always performs an unsigned division to get the
3011    remainder.</p>
3012
3013 <p>Note that unsigned integer remainder and signed integer remainder are
3014    distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>
3015
3016 <p>Taking the remainder of a division by zero leads to undefined behavior.</p>
3017
3018 <h5>Example:</h5>
3019 <pre>
3020   &lt;result&gt; = urem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3021 </pre>
3022
3023 </div>
3024
3025 <!-- _______________________________________________________________________ -->
3026 <div class="doc_subsubsection">
3027   <a name="i_srem">'<tt>srem</tt>' Instruction</a>
3028 </div>
3029
3030 <div class="doc_text">
3031
3032 <h5>Syntax:</h5>
3033 <pre>
3034   &lt;result&gt; = srem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3035 </pre>
3036
3037 <h5>Overview:</h5>
3038 <p>The '<tt>srem</tt>' instruction returns the remainder from the signed
3039    division of its two operands. This instruction can also take
3040    <a href="#t_vector">vector</a> versions of the values in which case the
3041    elements must be integers.</p>
3042
3043 <h5>Arguments:</h5>
3044 <p>The two arguments to the '<tt>srem</tt>' instruction must be 
3045    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3046    values.  Both arguments must have identical types.</p>
3047
3048 <h5>Semantics:</h5>
3049 <p>This instruction returns the <i>remainder</i> of a division (where the result
3050    has the same sign as the dividend, <tt>op1</tt>), not the <i>modulo</i>
3051    operator (where the result has the same sign as the divisor, <tt>op2</tt>) of
3052    a value.  For more information about the difference,
3053    see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
3054    Math Forum</a>. For a table of how this is implemented in various languages,
3055    please see <a href="http://en.wikipedia.org/wiki/Modulo_operation">
3056    Wikipedia: modulo operation</a>.</p>
3057
3058 <p>Note that signed integer remainder and unsigned integer remainder are
3059    distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>
3060
3061 <p>Taking the remainder of a division by zero leads to undefined behavior.
3062    Overflow also leads to undefined behavior; this is a rare case, but can
3063    occur, for example, by taking the remainder of a 32-bit division of
3064    -2147483648 by -1.  (The remainder doesn't actually overflow, but this rule
3065    lets srem be implemented using instructions that return both the result of
3066    the division and the remainder.)</p>
3067
3068 <h5>Example:</h5>
3069 <pre>
3070   &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3071 </pre>
3072
3073 </div>
3074
3075 <!-- _______________________________________________________________________ -->
3076 <div class="doc_subsubsection">
3077   <a name="i_frem">'<tt>frem</tt>' Instruction</a> </div>
3078
3079 <div class="doc_text">
3080
3081 <h5>Syntax:</h5>
3082 <pre>
3083   &lt;result&gt; = frem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3084 </pre>
3085
3086 <h5>Overview:</h5>
3087 <p>The '<tt>frem</tt>' instruction returns the remainder from the division of
3088    its two operands.</p>
3089
3090 <h5>Arguments:</h5>
3091 <p>The two arguments to the '<tt>frem</tt>' instruction must be
3092    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3093    floating point values.  Both arguments must have identical types.</p>
3094
3095 <h5>Semantics:</h5>
3096 <p>This instruction returns the <i>remainder</i> of a division.  The remainder
3097    has the same sign as the dividend.</p>
3098
3099 <h5>Example:</h5>
3100 <pre>
3101   &lt;result&gt; = frem float 4.0, %var          <i>; yields {float}:result = 4.0 % %var</i>
3102 </pre>
3103
3104 </div>
3105
3106 <!-- ======================================================================= -->
3107 <div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
3108 Operations</a> </div>
3109
3110 <div class="doc_text">
3111
3112 <p>Bitwise binary operators are used to do various forms of bit-twiddling in a
3113    program.  They are generally very efficient instructions and can commonly be
3114    strength reduced from other instructions.  They require two operands of the
3115    same type, execute an operation on them, and produce a single value.  The
3116    resulting value is the same type as its operands.</p>
3117
3118 </div>
3119
3120 <!-- _______________________________________________________________________ -->
3121 <div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
3122 Instruction</a> </div>
3123
3124 <div class="doc_text">
3125
3126 <h5>Syntax:</h5>
3127 <pre>
3128   &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3129 </pre>
3130
3131 <h5>Overview:</h5>
3132 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left
3133    a specified number of bits.</p>
3134
3135 <h5>Arguments:</h5>
3136 <p>Both arguments to the '<tt>shl</tt>' instruction must be the
3137     same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3138     integer type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3139  
3140 <h5>Semantics:</h5>
3141 <p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod
3142    2<sup>n</sup>, where <tt>n</tt> is the width of the result.  If <tt>op2</tt>
3143    is (statically or dynamically) negative or equal to or larger than the number
3144    of bits in <tt>op1</tt>, the result is undefined.  If the arguments are
3145    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3146    shift amount in <tt>op2</tt>.</p>
3147
3148 <h5>Example:</h5>
3149 <pre>
3150   &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
3151   &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
3152   &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
3153   &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
3154   &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>
3155 </pre>
3156
3157 </div>
3158
3159 <!-- _______________________________________________________________________ -->
3160 <div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
3161 Instruction</a> </div>
3162
3163 <div class="doc_text">
3164
3165 <h5>Syntax:</h5>
3166 <pre>
3167   &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3168 </pre>
3169
3170 <h5>Overview:</h5>
3171 <p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
3172    operand shifted to the right a specified number of bits with zero fill.</p>
3173
3174 <h5>Arguments:</h5>
3175 <p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 
3176    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3177    type. '<tt>op2</tt>' is treated as an unsigned value.</p>
3178
3179 <h5>Semantics:</h5>
3180 <p>This instruction always performs a logical shift right operation. The most
3181    significant bits of the result will be filled with zero bits after the shift.
3182    If <tt>op2</tt> is (statically or dynamically) equal to or larger than the
3183    number of bits in <tt>op1</tt>, the result is undefined. If the arguments are
3184    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3185    shift amount in <tt>op2</tt>.</p>
3186
3187 <h5>Example:</h5>
3188 <pre>
3189   &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
3190   &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
3191   &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
3192   &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
3193   &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
3194   &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>
3195 </pre>
3196
3197 </div>
3198
3199 <!-- _______________________________________________________________________ -->
3200 <div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
3201 Instruction</a> </div>
3202 <div class="doc_text">
3203
3204 <h5>Syntax:</h5>
3205 <pre>
3206   &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3207 </pre>
3208
3209 <h5>Overview:</h5>
3210 <p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
3211    operand shifted to the right a specified number of bits with sign
3212    extension.</p>
3213
3214 <h5>Arguments:</h5>
3215 <p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 
3216    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3217    type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3218
3219 <h5>Semantics:</h5>
3220 <p>This instruction always performs an arithmetic shift right operation, The
3221    most significant bits of the result will be filled with the sign bit
3222    of <tt>op1</tt>.  If <tt>op2</tt> is (statically or dynamically) equal to or
3223    larger than the number of bits in <tt>op1</tt>, the result is undefined. If
3224    the arguments are vectors, each vector element of <tt>op1</tt> is shifted by
3225    the corresponding shift amount in <tt>op2</tt>.</p>
3226
3227 <h5>Example:</h5>
3228 <pre>
3229   &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
3230   &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
3231   &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
3232   &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
3233   &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
3234   &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>
3235 </pre>
3236
3237 </div>
3238
3239 <!-- _______________________________________________________________________ -->
3240 <div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
3241 Instruction</a> </div>
3242
3243 <div class="doc_text">
3244
3245 <h5>Syntax:</h5>
3246 <pre>
3247   &lt;result&gt; = and &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3248 </pre>
3249
3250 <h5>Overview:</h5>
3251 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two
3252    operands.</p>
3253
3254 <h5>Arguments:</h5>
3255 <p>The two arguments to the '<tt>and</tt>' instruction must be 
3256    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3257    values.  Both arguments must have identical types.</p>
3258
3259 <h5>Semantics:</h5>
3260 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
3261
3262 <table border="1" cellspacing="0" cellpadding="4">
3263   <tbody>
3264     <tr>
3265       <td>In0</td>
3266       <td>In1</td>
3267       <td>Out</td>
3268     </tr>
3269     <tr>
3270       <td>0</td>
3271       <td>0</td>
3272       <td>0</td>
3273     </tr>
3274     <tr>
3275       <td>0</td>
3276       <td>1</td>
3277       <td>0</td>
3278     </tr>
3279     <tr>
3280       <td>1</td>
3281       <td>0</td>
3282       <td>0</td>
3283     </tr>
3284     <tr>
3285       <td>1</td>
3286       <td>1</td>
3287       <td>1</td>
3288     </tr>
3289   </tbody>
3290 </table>
3291
3292 <h5>Example:</h5>
3293 <pre>
3294   &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
3295   &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
3296   &lt;result&gt; = and i32 4, 8            <i>; yields {i32}:result = 0</i>
3297 </pre>
3298 </div>
3299 <!-- _______________________________________________________________________ -->
3300 <div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>
3301
3302 <div class="doc_text">
3303
3304 <h5>Syntax:</h5>
3305 <pre>
3306   &lt;result&gt; = or &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3307 </pre>
3308
3309 <h5>Overview:</h5>
3310 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its
3311    two operands.</p>
3312
3313 <h5>Arguments:</h5>
3314 <p>The two arguments to the '<tt>or</tt>' instruction must be 
3315    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3316    values.  Both arguments must have identical types.</p>
3317
3318 <h5>Semantics:</h5>
3319 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
3320
3321 <table border="1" cellspacing="0" cellpadding="4">
3322   <tbody>
3323     <tr>
3324       <td>In0</td>
3325       <td>In1</td>
3326       <td>Out</td>
3327     </tr>
3328     <tr>
3329       <td>0</td>
3330       <td>0</td>
3331       <td>0</td>
3332     </tr>
3333     <tr>
3334       <td>0</td>
3335       <td>1</td>
3336       <td>1</td>
3337     </tr>
3338     <tr>
3339       <td>1</td>
3340       <td>0</td>
3341       <td>1</td>
3342     </tr>
3343     <tr>
3344       <td>1</td>
3345       <td>1</td>
3346       <td>1</td>
3347     </tr>
3348   </tbody>
3349 </table>
3350
3351 <h5>Example:</h5>
3352 <pre>
3353   &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
3354   &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
3355   &lt;result&gt; = or i32 4, 8            <i>; yields {i32}:result = 12</i>
3356 </pre>
3357
3358 </div>
3359
3360 <!-- _______________________________________________________________________ -->
3361 <div class="doc_subsubsection"> <a name="i_xor">'<tt>xor</tt>'
3362 Instruction</a> </div>
3363
3364 <div class="doc_text">
3365
3366 <h5>Syntax:</h5>
3367 <pre>
3368   &lt;result&gt; = xor &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3369 </pre>
3370
3371 <h5>Overview:</h5>
3372 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of
3373    its two operands.  The <tt>xor</tt> is used to implement the "one's
3374    complement" operation, which is the "~" operator in C.</p>
3375
3376 <h5>Arguments:</h5>
3377 <p>The two arguments to the '<tt>xor</tt>' instruction must be 
3378    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3379    values.  Both arguments must have identical types.</p>
3380
3381 <h5>Semantics:</h5>
3382 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
3383
3384 <table border="1" cellspacing="0" cellpadding="4">
3385   <tbody>
3386     <tr>
3387       <td>In0</td>
3388       <td>In1</td>
3389       <td>Out</td>
3390     </tr>
3391     <tr>
3392       <td>0</td>
3393       <td>0</td>
3394       <td>0</td>
3395     </tr>
3396     <tr>
3397       <td>0</td>
3398       <td>1</td>
3399       <td>1</td>
3400     </tr>
3401     <tr>
3402       <td>1</td>
3403       <td>0</td>
3404       <td>1</td>
3405     </tr>
3406     <tr>
3407       <td>1</td>
3408       <td>1</td>
3409       <td>0</td>
3410     </tr>
3411   </tbody>
3412 </table>
3413
3414 <h5>Example:</h5>
3415 <pre>
3416   &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
3417   &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
3418   &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
3419   &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
3420 </pre>
3421
3422 </div>
3423
3424 <!-- ======================================================================= -->
3425 <div class="doc_subsection"> 
3426   <a name="vectorops">Vector Operations</a>
3427 </div>
3428
3429 <div class="doc_text">
3430
3431 <p>LLVM supports several instructions to represent vector operations in a
3432    target-independent manner.  These instructions cover the element-access and
3433    vector-specific operations needed to process vectors effectively.  While LLVM
3434    does directly support these vector operations, many sophisticated algorithms
3435    will want to use target-specific intrinsics to take full advantage of a
3436    specific target.</p>
3437
3438 </div>
3439
3440 <!-- _______________________________________________________________________ -->
3441 <div class="doc_subsubsection">
3442    <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
3443 </div>
3444
3445 <div class="doc_text">
3446
3447 <h5>Syntax:</h5>
3448 <pre>
3449   &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</i>
3450 </pre>
3451
3452 <h5>Overview:</h5>
3453 <p>The '<tt>extractelement</tt>' instruction extracts a single scalar element
3454    from a vector at a specified index.</p>
3455
3456
3457 <h5>Arguments:</h5>
3458 <p>The first operand of an '<tt>extractelement</tt>' instruction is a value
3459    of <a href="#t_vector">vector</a> type.  The second operand is an index
3460    indicating the position from which to extract the element.  The index may be
3461    a variable.</p>
3462
3463 <h5>Semantics:</h5>
3464 <p>The result is a scalar of the same type as the element type of
3465    <tt>val</tt>.  Its value is the value at position <tt>idx</tt> of
3466    <tt>val</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
3467    results are undefined.</p>
3468
3469 <h5>Example:</h5>
3470 <pre>
3471   %result = extractelement &lt;4 x i32&gt; %vec, i32 0    <i>; yields i32</i>
3472 </pre>
3473
3474 </div>
3475
3476 <!-- _______________________________________________________________________ -->
3477 <div class="doc_subsubsection">
3478    <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
3479 </div>
3480
3481 <div class="doc_text">
3482
3483 <h5>Syntax:</h5>
3484 <pre>
3485   &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>
3486 </pre>
3487
3488 <h5>Overview:</h5>
3489 <p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a
3490    vector at a specified index.</p>
3491
3492 <h5>Arguments:</h5>
3493 <p>The first operand of an '<tt>insertelement</tt>' instruction is a value
3494    of <a href="#t_vector">vector</a> type.  The second operand is a scalar value
3495    whose type must equal the element type of the first operand.  The third
3496    operand is an index indicating the position at which to insert the value.
3497    The index may be a variable.</p>
3498
3499 <h5>Semantics:</h5>
3500 <p>The result is a vector of the same type as <tt>val</tt>.  Its element values
3501    are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the
3502    value <tt>elt</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
3503    results are undefined.</p>
3504
3505 <h5>Example:</h5>
3506 <pre>
3507   %result = insertelement &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</i>
3508 </pre>
3509
3510 </div>
3511
3512 <!-- _______________________________________________________________________ -->
3513 <div class="doc_subsubsection">
3514    <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
3515 </div>
3516
3517 <div class="doc_text">
3518
3519 <h5>Syntax:</h5>
3520 <pre>
3521   &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>
3522 </pre>
3523
3524 <h5>Overview:</h5>
3525 <p>The '<tt>shufflevector</tt>' instruction constructs a permutation of elements
3526    from two input vectors, returning a vector with the same element type as the
3527    input and length that is the same as the shuffle mask.</p>
3528
3529 <h5>Arguments:</h5>
3530 <p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
3531    with types that match each other. The third argument is a shuffle mask whose
3532    element type is always 'i32'.  The result of the instruction is a vector
3533    whose length is the same as the shuffle mask and whose element type is the
3534    same as the element type of the first two operands.</p>
3535
3536 <p>The shuffle mask operand is required to be a constant vector with either
3537    constant integer or undef values.</p>
3538
3539 <h5>Semantics:</h5>
3540 <p>The elements of the two input vectors are numbered from left to right across
3541    both of the vectors.  The shuffle mask operand specifies, for each element of
3542    the result vector, which element of the two input vectors the result element
3543    gets.  The element selector may be undef (meaning "don't care") and the
3544    second operand may be undef if performing a shuffle from only one vector.</p>
3545
3546 <h5>Example:</h5>
3547 <pre>
3548   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
3549                           &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
3550   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef, 
3551                           &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.
3552   %result = shufflevector &lt;8 x i32&gt; %v1, &lt;8 x i32&gt; undef, 
3553                           &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i>
3554   %result = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2, 
3555                           &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>
3556 </pre>
3557
3558 </div>
3559
3560 <!-- ======================================================================= -->
3561 <div class="doc_subsection"> 
3562   <a name="aggregateops">Aggregate Operations</a>
3563 </div>
3564
3565 <div class="doc_text">
3566
3567 <p>LLVM supports several instructions for working with aggregate values.</p>
3568
3569 </div>
3570
3571 <!-- _______________________________________________________________________ -->
3572 <div class="doc_subsubsection">
3573    <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
3574 </div>
3575
3576 <div class="doc_text">
3577
3578 <h5>Syntax:</h5>
3579 <pre>
3580   &lt;result&gt; = extractvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;idx&gt;{, &lt;idx&gt;}*
3581 </pre>
3582
3583 <h5>Overview:</h5>
3584 <p>The '<tt>extractvalue</tt>' instruction extracts the value of a struct field
3585    or array element from an aggregate value.</p>
3586
3587 <h5>Arguments:</h5>
3588 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
3589    of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
3590    operands are constant indices to specify which value to extract in a similar
3591    manner as indices in a
3592    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
3593
3594 <h5>Semantics:</h5>
3595 <p>The result is the value at the position in the aggregate specified by the
3596    index operands.</p>
3597
3598 <h5>Example:</h5>
3599 <pre>
3600   %result = extractvalue {i32, float} %agg, 0    <i>; yields i32</i>
3601 </pre>
3602
3603 </div>
3604
3605 <!-- _______________________________________________________________________ -->
3606 <div class="doc_subsubsection">
3607    <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
3608 </div>
3609
3610 <div class="doc_text">
3611
3612 <h5>Syntax:</h5>
3613 <pre>
3614   &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>
3615 </pre>
3616
3617 <h5>Overview:</h5>
3618 <p>The '<tt>insertvalue</tt>' instruction inserts a value into a struct field or
3619    array element in an aggregate.</p>
3620
3621
3622 <h5>Arguments:</h5>
3623 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
3624    of <a href="#t_struct">struct</a> or <a href="#t_array">array</a> type.  The
3625    second operand is a first-class value to insert.  The following operands are
3626    constant indices indicating the position at which to insert the value in a
3627    similar manner as indices in a
3628    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.  The
3629    value to insert must have the same type as the value identified by the
3630    indices.</p>
3631
3632 <h5>Semantics:</h5>
3633 <p>The result is an aggregate of the same type as <tt>val</tt>.  Its value is
3634    that of <tt>val</tt> except that the value at the position specified by the
3635    indices is that of <tt>elt</tt>.</p>
3636
3637 <h5>Example:</h5>
3638 <pre>
3639   %result = insertvalue {i32, float} %agg, i32 1, 0    <i>; yields {i32, float}</i>
3640 </pre>
3641
3642 </div>
3643
3644
3645 <!-- ======================================================================= -->
3646 <div class="doc_subsection"> 
3647   <a name="memoryops">Memory Access and Addressing Operations</a>
3648 </div>
3649
3650 <div class="doc_text">
3651
3652 <p>A key design point of an SSA-based representation is how it represents
3653    memory.  In LLVM, no memory locations are in SSA form, which makes things
3654    very simple.  This section describes how to read, write, allocate, and free
3655    memory in LLVM.</p>
3656
3657 </div>
3658
3659 <!-- _______________________________________________________________________ -->
3660 <div class="doc_subsubsection">
3661   <a name="i_malloc">'<tt>malloc</tt>' Instruction</a>
3662 </div>
3663
3664 <div class="doc_text">
3665
3666 <h5>Syntax:</h5>
3667 <pre>
3668   &lt;result&gt; = malloc &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
3669 </pre>
3670
3671 <h5>Overview:</h5>
3672 <p>The '<tt>malloc</tt>' instruction allocates memory from the system heap and
3673    returns a pointer to it. The object is always allocated in the generic
3674    address space (address space zero).</p>
3675
3676 <h5>Arguments:</h5>
3677 <p>The '<tt>malloc</tt>' instruction allocates
3678    <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory from the operating
3679    system and returns a pointer of the appropriate type to the program.  If
3680    "NumElements" is specified, it is the number of elements allocated, otherwise
3681    "NumElements" is defaulted to be one.  If a constant alignment is specified,
3682    the value result of the allocation is guaranteed to be aligned to at least
3683    that boundary.  If not specified, or if zero, the target can choose to align
3684    the allocation on any convenient boundary compatible with the type.</p>
3685
3686 <p>'<tt>type</tt>' must be a sized type.</p>
3687
3688 <h5>Semantics:</h5>
3689 <p>Memory is allocated using the system "<tt>malloc</tt>" function, and a
3690    pointer is returned.  The result of a zero byte allocation is undefined.  The
3691    result is null if there is insufficient memory available.</p>
3692
3693 <h5>Example:</h5>
3694 <pre>
3695   %array  = malloc [4 x i8]                     <i>; yields {[%4 x i8]*}:array</i>
3696
3697   %size   = <a href="#i_add">add</a> i32 2, 2                        <i>; yields {i32}:size = i32 4</i>
3698   %array1 = malloc i8, i32 4                    <i>; yields {i8*}:array1</i>
3699   %array2 = malloc [12 x i8], i32 %size         <i>; yields {[12 x i8]*}:array2</i>
3700   %array3 = malloc i32, i32 4, align 1024       <i>; yields {i32*}:array3</i>
3701   %array4 = malloc i32, align 1024              <i>; yields {i32*}:array4</i>
3702 </pre>
3703
3704 <p>Note that the code generator does not yet respect the alignment value.</p>
3705
3706 </div>
3707
3708 <!-- _______________________________________________________________________ -->
3709 <div class="doc_subsubsection">
3710   <a name="i_free">'<tt>free</tt>' Instruction</a>
3711 </div>
3712
3713 <div class="doc_text">
3714
3715 <h5>Syntax:</h5>
3716 <pre>
3717   free &lt;type&gt; &lt;value&gt;                           <i>; yields {void}</i>
3718 </pre>
3719
3720 <h5>Overview:</h5>
3721 <p>The '<tt>free</tt>' instruction returns memory back to the unused memory heap
3722    to be reallocated in the future.</p>
3723
3724 <h5>Arguments:</h5>
3725 <p>'<tt>value</tt>' shall be a pointer value that points to a value that was
3726    allocated with the '<tt><a href="#i_malloc">malloc</a></tt>' instruction.</p>
3727
3728 <h5>Semantics:</h5>
3729 <p>Access to the memory pointed to by the pointer is no longer defined after
3730    this instruction executes.  If the pointer is null, the operation is a
3731    noop.</p>
3732
3733 <h5>Example:</h5>
3734 <pre>
3735   %array  = <a href="#i_malloc">malloc</a> [4 x i8]                     <i>; yields {[4 x i8]*}:array</i>
3736             free   [4 x i8]* %array
3737 </pre>
3738
3739 </div>
3740
3741 <!-- _______________________________________________________________________ -->
3742 <div class="doc_subsubsection">
3743   <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
3744 </div>
3745
3746 <div class="doc_text">
3747
3748 <h5>Syntax:</h5>
3749 <pre>
3750   &lt;result&gt; = alloca &lt;type&gt;[, i32 &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
3751 </pre>
3752
3753 <h5>Overview:</h5>
3754 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
3755    currently executing function, to be automatically released when this function
3756    returns to its caller. The object is always allocated in the generic address
3757    space (address space zero).</p>
3758
3759 <h5>Arguments:</h5>
3760 <p>The '<tt>alloca</tt>' instruction
3761    allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the
3762    runtime stack, returning a pointer of the appropriate type to the program.
3763    If "NumElements" is specified, it is the number of elements allocated,
3764    otherwise "NumElements" is defaulted to be one.  If a constant alignment is
3765    specified, the value result of the allocation is guaranteed to be aligned to
3766    at least that boundary.  If not specified, or if zero, the target can choose
3767    to align the allocation on any convenient boundary compatible with the
3768    type.</p>
3769
3770 <p>'<tt>type</tt>' may be any sized type.</p>
3771
3772 <h5>Semantics:</h5>
3773 <p>Memory is allocated; a pointer is returned.  The operation is undefined if
3774    there is insufficient stack space for the allocation.  '<tt>alloca</tt>'d
3775    memory is automatically released when the function returns.  The
3776    '<tt>alloca</tt>' instruction is commonly used to represent automatic
3777    variables that must have an address available.  When the function returns
3778    (either with the <tt><a href="#i_ret">ret</a></tt>
3779    or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is
3780    reclaimed.  Allocating zero bytes is legal, but the result is undefined.</p>
3781
3782 <h5>Example:</h5>
3783 <pre>
3784   %ptr = alloca i32                             <i>; yields {i32*}:ptr</i>
3785   %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
3786   %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
3787   %ptr = alloca i32, align 1024                 <i>; yields {i32*}:ptr</i>
3788 </pre>
3789
3790 </div>
3791
3792 <!-- _______________________________________________________________________ -->
3793 <div class="doc_subsubsection"> <a name="i_load">'<tt>load</tt>'
3794 Instruction</a> </div>
3795
3796 <div class="doc_text">
3797
3798 <h5>Syntax:</h5>
3799 <pre>
3800   &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
3801   &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]
3802 </pre>
3803
3804 <h5>Overview:</h5>
3805 <p>The '<tt>load</tt>' instruction is used to read from memory.</p>
3806
3807 <h5>Arguments:</h5>
3808 <p>The argument to the '<tt>load</tt>' instruction specifies the memory address
3809    from which to load.  The pointer must point to
3810    a <a href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
3811    marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the
3812    number or order of execution of this <tt>load</tt> with other
3813    volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
3814    instructions. </p>
3815
3816 <p>The optional constant "align" argument specifies the alignment of the
3817    operation (that is, the alignment of the memory address). A value of 0 or an
3818    omitted "align" argument means that the operation has the preferential
3819    alignment for the target. It is the responsibility of the code emitter to
3820    ensure that the alignment information is correct. Overestimating the
3821    alignment results in an undefined behavior. Underestimating the alignment may
3822    produce less efficient code. An alignment of 1 is always safe.</p>
3823
3824 <h5>Semantics:</h5>
3825 <p>The location of memory pointed to is loaded.  If the value being loaded is of
3826    scalar type then the number of bytes read does not exceed the minimum number
3827    of bytes needed to hold all bits of the type.  For example, loading an
3828    <tt>i24</tt> reads at most three bytes.  When loading a value of a type like
3829    <tt>i20</tt> with a size that is not an integral number of bytes, the result
3830    is undefined if the value was not originally written using a store of the
3831    same type.</p>
3832
3833 <h5>Examples:</h5>
3834 <pre>
3835   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
3836   <a href="#i_store">store</a> i32 3, i32* %ptr                          <i>; yields {void}</i>
3837   %val = load i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
3838 </pre>
3839
3840 </div>
3841
3842 <!-- _______________________________________________________________________ -->
3843 <div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
3844 Instruction</a> </div>
3845
3846 <div class="doc_text">
3847
3848 <h5>Syntax:</h5>
3849 <pre>
3850   store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]                   <i>; yields {void}</i>
3851   volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;]          <i>; yields {void}</i>
3852 </pre>
3853
3854 <h5>Overview:</h5>
3855 <p>The '<tt>store</tt>' instruction is used to write to memory.</p>
3856
3857 <h5>Arguments:</h5>
3858 <p>There are two arguments to the '<tt>store</tt>' instruction: a value to store
3859    and an address at which to store it.  The type of the
3860    '<tt>&lt;pointer&gt;</tt>' operand must be a pointer to
3861    the <a href="#t_firstclass">first class</a> type of the
3862    '<tt>&lt;value&gt;</tt>' operand. If the <tt>store</tt> is marked
3863    as <tt>volatile</tt>, then the optimizer is not allowed to modify the number
3864    or order of execution of this <tt>store</tt> with other
3865    volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt>
3866    instructions.</p>
3867
3868 <p>The optional constant "align" argument specifies the alignment of the
3869    operation (that is, the alignment of the memory address). A value of 0 or an
3870    omitted "align" argument means that the operation has the preferential
3871    alignment for the target. It is the responsibility of the code emitter to
3872    ensure that the alignment information is correct. Overestimating the
3873    alignment results in an undefined behavior. Underestimating the alignment may
3874    produce less efficient code. An alignment of 1 is always safe.</p>
3875
3876 <h5>Semantics:</h5>
3877 <p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>' at the
3878    location specified by the '<tt>&lt;pointer&gt;</tt>' operand.  If
3879    '<tt>&lt;value&gt;</tt>' is of scalar type then the number of bytes written
3880    does not exceed the minimum number of bytes needed to hold all bits of the
3881    type.  For example, storing an <tt>i24</tt> writes at most three bytes.  When
3882    writing a value of a type like <tt>i20</tt> with a size that is not an
3883    integral number of bytes, it is unspecified what happens to the extra bits
3884    that do not belong to the type, but they will typically be overwritten.</p>
3885
3886 <h5>Example:</h5>
3887 <pre>
3888   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
3889   store i32 3, i32* %ptr                          <i>; yields {void}</i>
3890   %val = <a href="#i_load">load</a> i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
3891 </pre>
3892
3893 </div>
3894
3895 <!-- _______________________________________________________________________ -->
3896 <div class="doc_subsubsection">
3897    <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
3898 </div>
3899
3900 <div class="doc_text">
3901
3902 <h5>Syntax:</h5>
3903 <pre>
3904   &lt;result&gt; = getelementptr &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
3905 </pre>
3906
3907 <h5>Overview:</h5>
3908 <p>The '<tt>getelementptr</tt>' instruction is used to get the address of a
3909    subelement of an aggregate data structure. It performs address calculation
3910    only and does not access memory.</p>
3911
3912 <h5>Arguments:</h5>
3913 <p>The first argument is always a pointer, and forms the basis of the
3914    calculation. The remaining arguments are indices, that indicate which of the
3915    elements of the aggregate object are indexed. The interpretation of each
3916    index is dependent on the type being indexed into. The first index always
3917    indexes the pointer value given as the first argument, the second index
3918    indexes a value of the type pointed to (not necessarily the value directly
3919    pointed to, since the first index can be non-zero), etc. The first type
3920    indexed into must be a pointer value, subsequent types can be arrays, vectors
3921    and structs. Note that subsequent types being indexed into can never be
3922    pointers, since that would require loading the pointer before continuing
3923    calculation.</p>
3924
3925 <p>The type of each index argument depends on the type it is indexing into.
3926    When indexing into a (packed) structure, only <tt>i32</tt> integer
3927    <b>constants</b> are allowed.  When indexing into an array, pointer or
3928    vector, integers of any width are allowed (also non-constants).</p>
3929
3930 <p>For example, let's consider a C code fragment and how it gets compiled to
3931    LLVM:</p>
3932
3933 <div class="doc_code">
3934 <pre>
3935 struct RT {
3936   char A;
3937   int B[10][20];
3938   char C;
3939 };
3940 struct ST {
3941   int X;
3942   double Y;
3943   struct RT Z;
3944 };
3945
3946 int *foo(struct ST *s) {
3947   return &amp;s[1].Z.B[5][13];
3948 }
3949 </pre>
3950 </div>
3951
3952 <p>The LLVM code generated by the GCC frontend is:</p>
3953
3954 <div class="doc_code">
3955 <pre>
3956 %RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8  }
3957 %ST = <a href="#namedtypes">type</a> { i32, double, %RT }
3958
3959 define i32* @foo(%ST* %s) {
3960 entry:
3961   %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
3962   ret i32* %reg
3963 }
3964 </pre>
3965 </div>
3966
3967 <h5>Semantics:</h5>
3968 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
3969    type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
3970    }</tt>' type, a structure.  The second index indexes into the third element
3971    of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
3972    i8 }</tt>' type, another structure.  The third index indexes into the second
3973    element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
3974    array.  The two dimensions of the array are subscripted into, yielding an
3975    '<tt>i32</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a
3976    pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p>
3977
3978 <p>Note that it is perfectly legal to index partially through a structure,
3979    returning a pointer to an inner element.  Because of this, the LLVM code for
3980    the given testcase is equivalent to:</p>
3981
3982 <pre>
3983   define i32* @foo(%ST* %s) {
3984     %t1 = getelementptr %ST* %s, i32 1                        <i>; yields %ST*:%t1</i>
3985     %t2 = getelementptr %ST* %t1, i32 0, i32 2                <i>; yields %RT*:%t2</i>
3986     %t3 = getelementptr %RT* %t2, i32 0, i32 1                <i>; yields [10 x [20 x i32]]*:%t3</i>
3987     %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  <i>; yields [20 x i32]*:%t4</i>
3988     %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        <i>; yields i32*:%t5</i>
3989     ret i32* %t5
3990   }
3991 </pre>
3992
3993 <p>The getelementptr instruction is often confusing.  For some more insight into
3994    how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p>
3995
3996 <h5>Example:</h5>
3997 <pre>
3998     <i>; yields [12 x i8]*:aptr</i>
3999     %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
4000     <i>; yields i8*:vptr</i>
4001     %vptr = getelementptr {i32, &lt;2 x i8&gt;}* %svptr, i64 0, i32 1, i32 1
4002     <i>; yields i8*:eptr</i>
4003     %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
4004     <i>; yields i32*:iptr</i>
4005     %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
4006 </pre>
4007
4008 </div>
4009
4010 <!-- ======================================================================= -->
4011 <div class="doc_subsection"> <a name="convertops">Conversion Operations</a>
4012 </div>
4013
4014 <div class="doc_text">
4015
4016 <p>The instructions in this category are the conversion instructions (casting)
4017    which all take a single operand and a type. They perform various bit
4018    conversions on the operand.</p>
4019
4020 </div>
4021
4022 <!-- _______________________________________________________________________ -->
4023 <div class="doc_subsubsection">
4024    <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
4025 </div>
4026 <div class="doc_text">
4027
4028 <h5>Syntax:</h5>
4029 <pre>
4030   &lt;result&gt; = trunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4031 </pre>
4032
4033 <h5>Overview:</h5>
4034 <p>The '<tt>trunc</tt>' instruction truncates its operand to the
4035    type <tt>ty2</tt>.</p>
4036
4037 <h5>Arguments:</h5>
4038 <p>The '<tt>trunc</tt>' instruction takes a <tt>value</tt> to trunc, which must
4039    be an <a href="#t_integer">integer</a> type, and a type that specifies the
4040    size and type of the result, which must be
4041    an <a href="#t_integer">integer</a> type. The bit size of <tt>value</tt> must
4042    be larger than the bit size of <tt>ty2</tt>. Equal sized types are not
4043    allowed.</p>
4044
4045 <h5>Semantics:</h5>
4046 <p>The '<tt>trunc</tt>' instruction truncates the high order bits
4047    in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the
4048    source size must be larger than the destination size, <tt>trunc</tt> cannot
4049    be a <i>no-op cast</i>.  It will always truncate bits.</p>
4050
4051 <h5>Example:</h5>
4052 <pre>
4053   %X = trunc i32 257 to i8              <i>; yields i8:1</i>
4054   %Y = trunc i32 123 to i1              <i>; yields i1:true</i>
4055   %Y = trunc i32 122 to i1              <i>; yields i1:false</i>
4056 </pre>
4057
4058 </div>
4059
4060 <!-- _______________________________________________________________________ -->
4061 <div class="doc_subsubsection">
4062    <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
4063 </div>
4064 <div class="doc_text">
4065
4066 <h5>Syntax:</h5>
4067 <pre>
4068   &lt;result&gt; = zext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4069 </pre>
4070
4071 <h5>Overview:</h5>
4072 <p>The '<tt>zext</tt>' instruction zero extends its operand to type 
4073    <tt>ty2</tt>.</p>
4074
4075
4076 <h5>Arguments:</h5>
4077 <p>The '<tt>zext</tt>' instruction takes a value to cast, which must be of 
4078    <a href="#t_integer">integer</a> type, and a type to cast it to, which must
4079    also be of <a href="#t_integer">integer</a> type. The bit size of the
4080    <tt>value</tt> must be smaller than the bit size of the destination type, 
4081    <tt>ty2</tt>.</p>
4082
4083 <h5>Semantics:</h5>
4084 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
4085    bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>
4086
4087 <p>When zero extending from i1, the result will always be either 0 or 1.</p>
4088
4089 <h5>Example:</h5>
4090 <pre>
4091   %X = zext i32 257 to i64              <i>; yields i64:257</i>
4092   %Y = zext i1 true to i32              <i>; yields i32:1</i>
4093 </pre>
4094
4095 </div>
4096
4097 <!-- _______________________________________________________________________ -->
4098 <div class="doc_subsubsection">
4099    <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
4100 </div>
4101 <div class="doc_text">
4102
4103 <h5>Syntax:</h5>
4104 <pre>
4105   &lt;result&gt; = sext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4106 </pre>
4107
4108 <h5>Overview:</h5>
4109 <p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>
4110
4111 <h5>Arguments:</h5>
4112 <p>The '<tt>sext</tt>' instruction takes a value to cast, which must be of 
4113    <a href="#t_integer">integer</a> type, and a type to cast it to, which must
4114    also be of <a href="#t_integer">integer</a> type.  The bit size of the
4115    <tt>value</tt> must be smaller than the bit size of the destination type, 
4116    <tt>ty2</tt>.</p>
4117
4118 <h5>Semantics:</h5>
4119 <p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
4120    bit (highest order bit) of the <tt>value</tt> until it reaches the bit size
4121    of the type <tt>ty2</tt>.</p>
4122
4123 <p>When sign extending from i1, the extension always results in -1 or 0.</p>
4124
4125 <h5>Example:</h5>
4126 <pre>
4127   %X = sext i8  -1 to i16              <i>; yields i16   :65535</i>
4128   %Y = sext i1 true to i32             <i>; yields i32:-1</i>
4129 </pre>
4130
4131 </div>
4132
4133 <!-- _______________________________________________________________________ -->
4134 <div class="doc_subsubsection">
4135    <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
4136 </div>
4137
4138 <div class="doc_text">
4139
4140 <h5>Syntax:</h5>
4141 <pre>
4142   &lt;result&gt; = fptrunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4143 </pre>
4144
4145 <h5>Overview:</h5>
4146 <p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
4147    <tt>ty2</tt>.</p>
4148
4149 <h5>Arguments:</h5>
4150 <p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
4151    point</a> value to cast and a <a href="#t_floating">floating point</a> type
4152    to cast it to. The size of <tt>value</tt> must be larger than the size of
4153    <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a 
4154    <i>no-op cast</i>.</p>
4155
4156 <h5>Semantics:</h5>
4157 <p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
4158    <a href="#t_floating">floating point</a> type to a smaller 
4159    <a href="#t_floating">floating point</a> type.  If the value cannot fit
4160    within the destination type, <tt>ty2</tt>, then the results are
4161    undefined.</p>
4162
4163 <h5>Example:</h5>
4164 <pre>
4165   %X = fptrunc double 123.0 to float         <i>; yields float:123.0</i>
4166   %Y = fptrunc double 1.0E+300 to float      <i>; yields undefined</i>
4167 </pre>
4168
4169 </div>
4170
4171 <!-- _______________________________________________________________________ -->
4172 <div class="doc_subsubsection">
4173    <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
4174 </div>
4175 <div class="doc_text">
4176
4177 <h5>Syntax:</h5>
4178 <pre>
4179   &lt;result&gt; = fpext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4180 </pre>
4181
4182 <h5>Overview:</h5>
4183 <p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
4184    floating point value.</p>
4185
4186 <h5>Arguments:</h5>
4187 <p>The '<tt>fpext</tt>' instruction takes a 
4188    <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and
4189    a <a href="#t_floating">floating point</a> type to cast it to. The source
4190    type must be smaller than the destination type.</p>
4191
4192 <h5>Semantics:</h5>
4193 <p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
4194    <a href="#t_floating">floating point</a> type to a larger
4195    <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
4196    used to make a <i>no-op cast</i> because it always changes bits. Use
4197    <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>
4198
4199 <h5>Example:</h5>
4200 <pre>
4201   %X = fpext float 3.1415 to double        <i>; yields double:3.1415</i>
4202   %Y = fpext float 1.0 to float            <i>; yields float:1.0 (no-op)</i>
4203 </pre>
4204
4205 </div>
4206
4207 <!-- _______________________________________________________________________ -->
4208 <div class="doc_subsubsection">
4209    <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
4210 </div>
4211 <div class="doc_text">
4212
4213 <h5>Syntax:</h5>
4214 <pre>
4215   &lt;result&gt; = fptoui &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4216 </pre>
4217
4218 <h5>Overview:</h5>
4219 <p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its
4220    unsigned integer equivalent of type <tt>ty2</tt>.</p>
4221
4222 <h5>Arguments:</h5>
4223 <p>The '<tt>fptoui</tt>' instruction takes a value to cast, which must be a
4224    scalar or vector <a href="#t_floating">floating point</a> value, and a type
4225    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
4226    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
4227    vector integer type with the same number of elements as <tt>ty</tt></p>
4228
4229 <h5>Semantics:</h5>
4230 <p>The '<tt>fptoui</tt>' instruction converts its 
4231    <a href="#t_floating">floating point</a> operand into the nearest (rounding
4232    towards zero) unsigned integer value. If the value cannot fit
4233    in <tt>ty2</tt>, the results are undefined.</p>
4234
4235 <h5>Example:</h5>
4236 <pre>
4237   %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
4238   %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
4239   %X = fptoui float 1.04E+17 to i8     <i>; yields undefined:1</i>
4240 </pre>
4241
4242 </div>
4243
4244 <!-- _______________________________________________________________________ -->
4245 <div class="doc_subsubsection">
4246    <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
4247 </div>
4248 <div class="doc_text">
4249
4250 <h5>Syntax:</h5>
4251 <pre>
4252   &lt;result&gt; = fptosi &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4253 </pre>
4254
4255 <h5>Overview:</h5>
4256 <p>The '<tt>fptosi</tt>' instruction converts 
4257    <a href="#t_floating">floating point</a> <tt>value</tt> to
4258    type <tt>ty2</tt>.</p>
4259
4260 <h5>Arguments:</h5>
4261 <p>The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a
4262    scalar or vector <a href="#t_floating">floating point</a> value, and a type
4263    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
4264    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
4265    vector integer type with the same number of elements as <tt>ty</tt></p>
4266
4267 <h5>Semantics:</h5>
4268 <p>The '<tt>fptosi</tt>' instruction converts its 
4269    <a href="#t_floating">floating point</a> operand into the nearest (rounding
4270    towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
4271    the results are undefined.</p>
4272
4273 <h5>Example:</h5>
4274 <pre>
4275   %X = fptosi double -123.0 to i32      <i>; yields i32:-123</i>
4276   %Y = fptosi float 1.0E-247 to i1      <i>; yields undefined:1</i>
4277   %X = fptosi float 1.04E+17 to i8      <i>; yields undefined:1</i>
4278 </pre>
4279
4280 </div>
4281
4282 <!-- _______________________________________________________________________ -->
4283 <div class="doc_subsubsection">
4284    <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
4285 </div>
4286 <div class="doc_text">
4287
4288 <h5>Syntax:</h5>
4289 <pre>
4290   &lt;result&gt; = uitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4291 </pre>
4292
4293 <h5>Overview:</h5>
4294 <p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
4295    integer and converts that value to the <tt>ty2</tt> type.</p>
4296
4297 <h5>Arguments:</h5>
4298 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be a
4299    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
4300    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
4301    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
4302    floating point type with the same number of elements as <tt>ty</tt></p>
4303
4304 <h5>Semantics:</h5>
4305 <p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
4306    integer quantity and converts it to the corresponding floating point
4307    value. If the value cannot fit in the floating point value, the results are
4308    undefined.</p>
4309
4310 <h5>Example:</h5>
4311 <pre>
4312   %X = uitofp i32 257 to float         <i>; yields float:257.0</i>
4313   %Y = uitofp i8 -1 to double          <i>; yields double:255.0</i>
4314 </pre>
4315
4316 </div>
4317
4318 <!-- _______________________________________________________________________ -->
4319 <div class="doc_subsubsection">
4320    <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
4321 </div>
4322 <div class="doc_text">
4323
4324 <h5>Syntax:</h5>
4325 <pre>
4326   &lt;result&gt; = sitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4327 </pre>
4328
4329 <h5>Overview:</h5>
4330 <p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer
4331    and converts that value to the <tt>ty2</tt> type.</p>
4332
4333 <h5>Arguments:</h5>
4334 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be a
4335    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
4336    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
4337    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
4338    floating point type with the same number of elements as <tt>ty</tt></p>
4339
4340 <h5>Semantics:</h5>
4341 <p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer
4342    quantity and converts it to the corresponding floating point value. If the
4343    value cannot fit in the floating point value, the results are undefined.</p>
4344
4345 <h5>Example:</h5>
4346 <pre>
4347   %X = sitofp i32 257 to float         <i>; yields float:257.0</i>
4348   %Y = sitofp i8 -1 to double          <i>; yields double:-1.0</i>
4349 </pre>
4350
4351 </div>
4352
4353 <!-- _______________________________________________________________________ -->
4354 <div class="doc_subsubsection">
4355    <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
4356 </div>
4357 <div class="doc_text">
4358
4359 <h5>Syntax:</h5>
4360 <pre>
4361   &lt;result&gt; = ptrtoint &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4362 </pre>
4363
4364 <h5>Overview:</h5>
4365 <p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
4366    the integer type <tt>ty2</tt>.</p>
4367
4368 <h5>Arguments:</h5>
4369 <p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which
4370    must be a <a href="#t_pointer">pointer</a> value, and a type to cast it to
4371    <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.</p>
4372
4373 <h5>Semantics:</h5>
4374 <p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
4375    <tt>ty2</tt> by interpreting the pointer value as an integer and either
4376    truncating or zero extending that value to the size of the integer type. If
4377    <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
4378    <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
4379    are the same size, then nothing is done (<i>no-op cast</i>) other than a type
4380    change.</p>
4381
4382 <h5>Example:</h5>
4383 <pre>
4384   %X = ptrtoint i32* %X to i8           <i>; yields truncation on 32-bit architecture</i>
4385   %Y = ptrtoint i32* %x to i64          <i>; yields zero extension on 32-bit architecture</i>
4386 </pre>
4387
4388 </div>
4389
4390 <!-- _______________________________________________________________________ -->
4391 <div class="doc_subsubsection">
4392    <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
4393 </div>
4394 <div class="doc_text">
4395
4396 <h5>Syntax:</h5>
4397 <pre>
4398   &lt;result&gt; = inttoptr &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4399 </pre>
4400
4401 <h5>Overview:</h5>
4402 <p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to a
4403    pointer type, <tt>ty2</tt>.</p>
4404
4405 <h5>Arguments:</h5>
4406 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a>
4407    value to cast, and a type to cast it to, which must be a
4408    <a href="#t_pointer">pointer</a> type.</p>
4409
4410 <h5>Semantics:</h5>
4411 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
4412    <tt>ty2</tt> by applying either a zero extension or a truncation depending on
4413    the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the
4414    size of a pointer then a truncation is done. If <tt>value</tt> is smaller
4415    than the size of a pointer then a zero extension is done. If they are the
4416    same size, nothing is done (<i>no-op cast</i>).</p>
4417
4418 <h5>Example:</h5>
4419 <pre>
4420   %X = inttoptr i32 255 to i32*          <i>; yields zero extension on 64-bit architecture</i>
4421   %X = inttoptr i32 255 to i32*          <i>; yields no-op on 32-bit architecture</i>
4422   %Y = inttoptr i64 0 to i32*            <i>; yields truncation on 32-bit architecture</i>
4423 </pre>
4424
4425 </div>
4426
4427 <!-- _______________________________________________________________________ -->
4428 <div class="doc_subsubsection">
4429    <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
4430 </div>
4431 <div class="doc_text">
4432
4433 <h5>Syntax:</h5>
4434 <pre>
4435   &lt;result&gt; = bitcast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
4436 </pre>
4437
4438 <h5>Overview:</h5>
4439 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
4440    <tt>ty2</tt> without changing any bits.</p>
4441
4442 <h5>Arguments:</h5>
4443 <p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a
4444    non-aggregate first class value, and a type to cast it to, which must also be
4445    a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes
4446    of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be
4447    identical. If the source type is a pointer, the destination type must also be
4448    a pointer.  This instruction supports bitwise conversion of vectors to
4449    integers and to vectors of other types (as long as they have the same
4450    size).</p>
4451
4452 <h5>Semantics:</h5>
4453 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
4454    <tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with
4455    this conversion.  The conversion is done as if the <tt>value</tt> had been
4456    stored to memory and read back as type <tt>ty2</tt>. Pointer types may only
4457    be converted to other pointer types with this instruction. To convert
4458    pointers to other types, use the <a href="#i_inttoptr">inttoptr</a> or
4459    <a href="#i_ptrtoint">ptrtoint</a> instructions first.</p>
4460
4461 <h5>Example:</h5>
4462 <pre>
4463   %X = bitcast i8 255 to i8              <i>; yields i8 :-1</i>
4464   %Y = bitcast i32* %x to sint*          <i>; yields sint*:%x</i>
4465   %Z = bitcast &lt;2 x int&gt; %V to i64;      <i>; yields i64: %V</i>   
4466 </pre>
4467
4468 </div>
4469
4470 <!-- ======================================================================= -->
4471 <div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>
4472
4473 <div class="doc_text">
4474
4475 <p>The instructions in this category are the "miscellaneous" instructions, which
4476    defy better classification.</p>
4477
4478 </div>
4479
4480 <!-- _______________________________________________________________________ -->
4481 <div class="doc_subsubsection"><a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
4482 </div>
4483
4484 <div class="doc_text">
4485
4486 <h5>Syntax:</h5>
4487 <pre>
4488   &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>
4489 </pre>
4490
4491 <h5>Overview:</h5>
4492 <p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of
4493    boolean values based on comparison of its two integer, integer vector, or
4494    pointer operands.</p>
4495
4496 <h5>Arguments:</h5>
4497 <p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
4498    the condition code indicating the kind of comparison to perform. It is not a
4499    value, just a keyword. The possible condition code are:</p>
4500
4501 <ol>
4502   <li><tt>eq</tt>: equal</li>
4503   <li><tt>ne</tt>: not equal </li>
4504   <li><tt>ugt</tt>: unsigned greater than</li>
4505   <li><tt>uge</tt>: unsigned greater or equal</li>
4506   <li><tt>ult</tt>: unsigned less than</li>
4507   <li><tt>ule</tt>: unsigned less or equal</li>
4508   <li><tt>sgt</tt>: signed greater than</li>
4509   <li><tt>sge</tt>: signed greater or equal</li>
4510   <li><tt>slt</tt>: signed less than</li>
4511   <li><tt>sle</tt>: signed less or equal</li>
4512 </ol>
4513
4514 <p>The remaining two arguments must be <a href="#t_integer">integer</a> or
4515    <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a>
4516    typed.  They must also be identical types.</p>
4517
4518 <h5>Semantics:</h5>
4519 <p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the
4520    condition code given as <tt>cond</tt>. The comparison performed always yields
4521    either an <a href="#t_primitive"><tt>i1</tt></a> or vector of <tt>i1</tt>
4522    result, as follows:</p>
4523
4524 <ol>
4525   <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal, 
4526       <tt>false</tt> otherwise. No sign interpretation is necessary or
4527       performed.</li>
4528
4529   <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal, 
4530       <tt>false</tt> otherwise. No sign interpretation is necessary or
4531       performed.</li>
4532
4533   <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
4534       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4535
4536   <li><tt>uge</tt>: interprets the operands as unsigned values and yields
4537       <tt>true</tt> if <tt>op1</tt> is greater than or equal
4538       to <tt>op2</tt>.</li>
4539
4540   <li><tt>ult</tt>: interprets the operands as unsigned values and yields
4541       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
4542
4543   <li><tt>ule</tt>: interprets the operands as unsigned values and yields
4544       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4545
4546   <li><tt>sgt</tt>: interprets the operands as signed values and yields
4547       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4548
4549   <li><tt>sge</tt>: interprets the operands as signed values and yields
4550       <tt>true</tt> if <tt>op1</tt> is greater than or equal
4551       to <tt>op2</tt>.</li>
4552
4553   <li><tt>slt</tt>: interprets the operands as signed values and yields
4554       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
4555
4556   <li><tt>sle</tt>: interprets the operands as signed values and yields
4557       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4558 </ol>
4559
4560 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
4561    values are compared as if they were integers.</p>
4562
4563 <p>If the operands are integer vectors, then they are compared element by
4564    element. The result is an <tt>i1</tt> vector with the same number of elements
4565    as the values being compared.  Otherwise, the result is an <tt>i1</tt>.</p>
4566
4567 <h5>Example:</h5>
4568 <pre>
4569   &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
4570   &lt;result&gt; = icmp ne float* %X, %X     <i>; yields: result=false</i>
4571   &lt;result&gt; = icmp ult i16  4, 5        <i>; yields: result=true</i>
4572   &lt;result&gt; = icmp sgt i16  4, 5        <i>; yields: result=false</i>
4573   &lt;result&gt; = icmp ule i16 -4, 5        <i>; yields: result=false</i>
4574   &lt;result&gt; = icmp sge i16  4, 5        <i>; yields: result=false</i>
4575 </pre>
4576
4577 <p>Note that the code generator does not yet support vector types with
4578    the <tt>icmp</tt> instruction.</p>
4579
4580 </div>
4581
4582 <!-- _______________________________________________________________________ -->
4583 <div class="doc_subsubsection"><a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
4584 </div>
4585
4586 <div class="doc_text">
4587
4588 <h5>Syntax:</h5>
4589 <pre>
4590   &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>
4591 </pre>
4592
4593 <h5>Overview:</h5>
4594 <p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean
4595    values based on comparison of its operands.</p>
4596
4597 <p>If the operands are floating point scalars, then the result type is a boolean
4598 (<a href="#t_primitive"><tt>i1</tt></a>).</p>
4599
4600 <p>If the operands are floating point vectors, then the result type is a vector
4601    of boolean with the same number of elements as the operands being
4602    compared.</p>
4603
4604 <h5>Arguments:</h5>
4605 <p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
4606    the condition code indicating the kind of comparison to perform. It is not a
4607    value, just a keyword. The possible condition code are:</p>
4608
4609 <ol>
4610   <li><tt>false</tt>: no comparison, always returns false</li>
4611   <li><tt>oeq</tt>: ordered and equal</li>
4612   <li><tt>ogt</tt>: ordered and greater than </li>
4613   <li><tt>oge</tt>: ordered and greater than or equal</li>
4614   <li><tt>olt</tt>: ordered and less than </li>
4615   <li><tt>ole</tt>: ordered and less than or equal</li>
4616   <li><tt>one</tt>: ordered and not equal</li>
4617   <li><tt>ord</tt>: ordered (no nans)</li>
4618   <li><tt>ueq</tt>: unordered or equal</li>
4619   <li><tt>ugt</tt>: unordered or greater than </li>
4620   <li><tt>uge</tt>: unordered or greater than or equal</li>
4621   <li><tt>ult</tt>: unordered or less than </li>
4622   <li><tt>ule</tt>: unordered or less than or equal</li>
4623   <li><tt>une</tt>: unordered or not equal</li>
4624   <li><tt>uno</tt>: unordered (either nans)</li>
4625   <li><tt>true</tt>: no comparison, always returns true</li>
4626 </ol>
4627
4628 <p><i>Ordered</i> means that neither operand is a QNAN while
4629    <i>unordered</i> means that either operand may be a QNAN.</p>
4630
4631 <p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either
4632    a <a href="#t_floating">floating point</a> type or
4633    a <a href="#t_vector">vector</a> of floating point type.  They must have
4634    identical types.</p>
4635
4636 <h5>Semantics:</h5>
4637 <p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
4638    according to the condition code given as <tt>cond</tt>.  If the operands are
4639    vectors, then the vectors are compared element by element.  Each comparison
4640    performed always yields an <a href="#t_primitive">i1</a> result, as
4641    follows:</p>
4642
4643 <ol>
4644   <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>
4645
4646   <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4647       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
4648
4649   <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
4650       <tt>op1</tt> is greather than <tt>op2</tt>.</li>
4651
4652   <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4653       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
4654
4655   <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4656       <tt>op1</tt> is less than <tt>op2</tt>.</li>
4657
4658   <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4659       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4660
4661   <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and 
4662       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
4663
4664   <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>
4665
4666   <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4667       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
4668
4669   <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4670       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
4671
4672   <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4673       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
4674
4675   <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4676       <tt>op1</tt> is less than <tt>op2</tt>.</li>
4677
4678   <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4679       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
4680
4681   <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or 
4682       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
4683
4684   <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
4685
4686   <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
4687 </ol>
4688
4689 <h5>Example:</h5>
4690 <pre>
4691   &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
4692   &lt;result&gt; = fcmp one float 4.0, 5.0    <i>; yields: result=true</i>
4693   &lt;result&gt; = fcmp olt float 4.0, 5.0    <i>; yields: result=true</i>
4694   &lt;result&gt; = fcmp ueq double 1.0, 2.0   <i>; yields: result=false</i>
4695 </pre>
4696
4697 <p>Note that the code generator does not yet support vector types with
4698    the <tt>fcmp</tt> instruction.</p>
4699
4700 </div>
4701
4702 <!-- _______________________________________________________________________ -->
4703 <div class="doc_subsubsection">
4704   <a name="i_phi">'<tt>phi</tt>' Instruction</a>
4705 </div>
4706
4707 <div class="doc_text">
4708
4709 <h5>Syntax:</h5>
4710 <pre>
4711   &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...
4712 </pre>
4713
4714 <h5>Overview:</h5>
4715 <p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in the
4716    SSA graph representing the function.</p>
4717
4718 <h5>Arguments:</h5>
4719 <p>The type of the incoming values is specified with the first type field. After
4720    this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
4721    one pair for each predecessor basic block of the current block.  Only values
4722    of <a href="#t_firstclass">first class</a> type may be used as the value
4723    arguments to the PHI node.  Only labels may be used as the label
4724    arguments.</p>
4725
4726 <p>There must be no non-phi instructions between the start of a basic block and
4727    the PHI instructions: i.e. PHI instructions must be first in a basic
4728    block.</p>
4729
4730 <p>For the purposes of the SSA form, the use of each incoming value is deemed to
4731    occur on the edge from the corresponding predecessor block to the current
4732    block (but after any definition of an '<tt>invoke</tt>' instruction's return
4733    value on the same edge).</p>
4734
4735 <h5>Semantics:</h5>
4736 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
4737    specified by the pair corresponding to the predecessor basic block that
4738    executed just prior to the current block.</p>
4739
4740 <h5>Example:</h5>
4741 <pre>
4742 Loop:       ; Infinite loop that counts from 0 on up...
4743   %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
4744   %nextindvar = add i32 %indvar, 1
4745   br label %Loop
4746 </pre>
4747
4748 </div>
4749
4750 <!-- _______________________________________________________________________ -->
4751 <div class="doc_subsubsection">
4752    <a name="i_select">'<tt>select</tt>' Instruction</a>
4753 </div>
4754
4755 <div class="doc_text">
4756
4757 <h5>Syntax:</h5>
4758 <pre>
4759   &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>
4760
4761   <i>selty</i> is either i1 or {&lt;N x i1&gt;}
4762 </pre>
4763
4764 <h5>Overview:</h5>
4765 <p>The '<tt>select</tt>' instruction is used to choose one value based on a
4766    condition, without branching.</p>
4767
4768
4769 <h5>Arguments:</h5>
4770 <p>The '<tt>select</tt>' instruction requires an 'i1' value or a vector of 'i1'
4771    values indicating the condition, and two values of the
4772    same <a href="#t_firstclass">first class</a> type.  If the val1/val2 are
4773    vectors and the condition is a scalar, then entire vectors are selected, not
4774    individual elements.</p>
4775
4776 <h5>Semantics:</h5>
4777 <p>If the condition is an i1 and it evaluates to 1, the instruction returns the
4778    first value argument; otherwise, it returns the second value argument.</p>
4779
4780 <p>If the condition is a vector of i1, then the value arguments must be vectors
4781    of the same size, and the selection is done element by element.</p>
4782
4783 <h5>Example:</h5>
4784 <pre>
4785   %X = select i1 true, i8 17, i8 42          <i>; yields i8:17</i>
4786 </pre>
4787
4788 <p>Note that the code generator does not yet support conditions
4789    with vector type.</p>
4790
4791 </div>
4792
4793 <!-- _______________________________________________________________________ -->
4794 <div class="doc_subsubsection">
4795   <a name="i_call">'<tt>call</tt>' Instruction</a>
4796 </div>
4797
4798 <div class="doc_text">
4799
4800 <h5>Syntax:</h5>
4801 <pre>
4802   &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>]
4803 </pre>
4804
4805 <h5>Overview:</h5>
4806 <p>The '<tt>call</tt>' instruction represents a simple function call.</p>
4807
4808 <h5>Arguments:</h5>
4809 <p>This instruction requires several arguments:</p>
4810
4811 <ol>
4812   <li>The optional "tail" marker indicates whether the callee function accesses
4813       any allocas or varargs in the caller.  If the "tail" marker is present,
4814       the function call is eligible for tail call optimization.  Note that calls
4815       may be marked "tail" even if they do not occur before
4816       a <a href="#i_ret"><tt>ret</tt></a> instruction.</li>
4817
4818   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
4819       convention</a> the call should use.  If none is specified, the call
4820       defaults to using C calling conventions.</li>
4821
4822   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
4823       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
4824       '<tt>inreg</tt>' attributes are valid here.</li>
4825
4826   <li>'<tt>ty</tt>': the type of the call instruction itself which is also the
4827       type of the return value.  Functions that return no value are marked
4828       <tt><a href="#t_void">void</a></tt>.</li>
4829
4830   <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value
4831       being invoked.  The argument types must match the types implied by this
4832       signature.  This type can be omitted if the function is not varargs and if
4833       the function type does not return a pointer to a function.</li>
4834
4835   <li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to
4836       be invoked. In most cases, this is a direct function invocation, but
4837       indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer
4838       to function value.</li>
4839
4840   <li>'<tt>function args</tt>': argument list whose types match the function
4841       signature argument types. All arguments must be of
4842       <a href="#t_firstclass">first class</a> type. If the function signature
4843       indicates the function accepts a variable number of arguments, the extra
4844       arguments can be specified.</li>
4845
4846   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
4847       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
4848       '<tt>readnone</tt>' attributes are valid here.</li>
4849 </ol>
4850
4851 <h5>Semantics:</h5>
4852 <p>The '<tt>call</tt>' instruction is used to cause control flow to transfer to
4853    a specified function, with its incoming arguments bound to the specified
4854    values. Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called
4855    function, control flow continues with the instruction after the function
4856    call, and the return value of the function is bound to the result
4857    argument.</p>
4858
4859 <h5>Example:</h5>
4860 <pre>
4861   %retval = call i32 @test(i32 %argc)
4862   call i32 (i8 *, ...)* @printf(i8 * %msg, i32 12, i8 42)      <i>; yields i32</i>
4863   %X = tail call i32 @foo()                                    <i>; yields i32</i>
4864   %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo()  <i>; yields i32</i>
4865   call void %foo(i8 97 signext)
4866
4867   %struct.A = type { i32, i8 }
4868   %r = call %struct.A @foo()                        <i>; yields { 32, i8 }</i>
4869   %gr = extractvalue %struct.A %r, 0                <i>; yields i32</i>
4870   %gr1 = extractvalue %struct.A %r, 1               <i>; yields i8</i>
4871   %Z = call void @foo() noreturn                    <i>; indicates that %foo never returns normally</i>
4872   %ZZ = call zeroext i32 @bar()                     <i>; Return value is %zero extended</i>
4873 </pre>
4874
4875 </div>
4876
4877 <!-- _______________________________________________________________________ -->
4878 <div class="doc_subsubsection">
4879   <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
4880 </div>
4881
4882 <div class="doc_text">
4883
4884 <h5>Syntax:</h5>
4885 <pre>
4886   &lt;resultval&gt; = va_arg &lt;va_list*&gt; &lt;arglist&gt;, &lt;argty&gt;
4887 </pre>
4888
4889 <h5>Overview:</h5>
4890 <p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through
4891    the "variable argument" area of a function call.  It is used to implement the
4892    <tt>va_arg</tt> macro in C.</p>
4893
4894 <h5>Arguments:</h5>
4895 <p>This instruction takes a <tt>va_list*</tt> value and the type of the
4896    argument. It returns a value of the specified argument type and increments
4897    the <tt>va_list</tt> to point to the next argument.  The actual type
4898    of <tt>va_list</tt> is target specific.</p>
4899
4900 <h5>Semantics:</h5>
4901 <p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type
4902    from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point
4903    to the next argument.  For more information, see the variable argument
4904    handling <a href="#int_varargs">Intrinsic Functions</a>.</p>
4905
4906 <p>It is legal for this instruction to be called in a function which does not
4907    take a variable number of arguments, for example, the <tt>vfprintf</tt>
4908    function.</p>
4909
4910 <p><tt>va_arg</tt> is an LLVM instruction instead of
4911    an <a href="#intrinsics">intrinsic function</a> because it takes a type as an
4912    argument.</p>
4913
4914 <h5>Example:</h5>
4915 <p>See the <a href="#int_varargs">variable argument processing</a> section.</p>
4916
4917 <p>Note that the code generator does not yet fully support va_arg on many
4918    targets. Also, it does not currently support va_arg with aggregate types on
4919    any target.</p>
4920
4921 </div>
4922
4923 <!-- *********************************************************************** -->
4924 <div class="doc_section"> <a name="intrinsics">Intrinsic Functions</a> </div>
4925 <!-- *********************************************************************** -->
4926
4927 <div class="doc_text">
4928
4929 <p>LLVM supports the notion of an "intrinsic function".  These functions have
4930    well known names and semantics and are required to follow certain
4931    restrictions.  Overall, these intrinsics represent an extension mechanism for
4932    the LLVM language that does not require changing all of the transformations
4933    in LLVM when adding to the language (or the bitcode reader/writer, the
4934    parser, etc...).</p>
4935
4936 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This
4937    prefix is reserved in LLVM for intrinsic names; thus, function names may not
4938    begin with this prefix.  Intrinsic functions must always be external
4939    functions: you cannot define the body of intrinsic functions.  Intrinsic
4940    functions may only be used in call or invoke instructions: it is illegal to
4941    take the address of an intrinsic function.  Additionally, because intrinsic
4942    functions are part of the LLVM language, it is required if any are added that
4943    they be documented here.</p>
4944
4945 <p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents a
4946    family of functions that perform the same operation but on different data
4947    types. Because LLVM can represent over 8 million different integer types,
4948    overloading is used commonly to allow an intrinsic function to operate on any
4949    integer type. One or more of the argument types or the result type can be
4950    overloaded to accept any integer type. Argument types may also be defined as
4951    exactly matching a previous argument's type or the result type. This allows
4952    an intrinsic function which accepts multiple arguments, but needs all of them
4953    to be of the same type, to only be overloaded with respect to a single
4954    argument or the result.</p>
4955
4956 <p>Overloaded intrinsics will have the names of its overloaded argument types
4957    encoded into its function name, each preceded by a period. Only those types
4958    which are overloaded result in a name suffix. Arguments whose type is matched
4959    against another type do not. For example, the <tt>llvm.ctpop</tt> function
4960    can take an integer of any width and returns an integer of exactly the same
4961    integer width. This leads to a family of functions such as
4962    <tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29
4963    %val)</tt>.  Only one type, the return type, is overloaded, and only one type
4964    suffix is required. Because the argument's type is matched against the return
4965    type, it does not require its own name suffix.</p>
4966
4967 <p>To learn how to add an intrinsic function, please see the 
4968    <a href="ExtendingLLVM.html">Extending LLVM Guide</a>.</p>
4969
4970 </div>
4971
4972 <!-- ======================================================================= -->
4973 <div class="doc_subsection">
4974   <a name="int_varargs">Variable Argument Handling Intrinsics</a>
4975 </div>
4976
4977 <div class="doc_text">
4978
4979 <p>Variable argument support is defined in LLVM with
4980    the <a href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three
4981    intrinsic functions.  These functions are related to the similarly named
4982    macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>
4983
4984 <p>All of these functions operate on arguments that use a target-specific value
4985    type "<tt>va_list</tt>".  The LLVM assembly language reference manual does
4986    not define what this type is, so all transformations should be prepared to
4987    handle these functions regardless of the type used.</p>
4988
4989 <p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
4990    instruction and the variable argument handling intrinsic functions are
4991    used.</p>
4992
4993 <div class="doc_code">
4994 <pre>
4995 define i32 @test(i32 %X, ...) {
4996   ; Initialize variable argument processing
4997   %ap = alloca i8*
4998   %ap2 = bitcast i8** %ap to i8*
4999   call void @llvm.va_start(i8* %ap2)
5000
5001   ; Read a single integer argument
5002   %tmp = va_arg i8** %ap, i32
5003
5004   ; Demonstrate usage of llvm.va_copy and llvm.va_end
5005   %aq = alloca i8*
5006   %aq2 = bitcast i8** %aq to i8*
5007   call void @llvm.va_copy(i8* %aq2, i8* %ap2)
5008   call void @llvm.va_end(i8* %aq2)
5009
5010   ; Stop processing of arguments.
5011   call void @llvm.va_end(i8* %ap2)
5012   ret i32 %tmp
5013 }
5014
5015 declare void @llvm.va_start(i8*)
5016 declare void @llvm.va_copy(i8*, i8*)
5017 declare void @llvm.va_end(i8*)
5018 </pre>
5019 </div>
5020
5021 </div>
5022
5023 <!-- _______________________________________________________________________ -->
5024 <div class="doc_subsubsection">
5025   <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
5026 </div>
5027
5028
5029 <div class="doc_text">
5030
5031 <h5>Syntax:</h5>
5032 <pre>
5033   declare void %llvm.va_start(i8* &lt;arglist&gt;)
5034 </pre>
5035
5036 <h5>Overview:</h5>
5037 <p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*&lt;arglist&gt;</tt>
5038    for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p>
5039
5040 <h5>Arguments:</h5>
5041 <p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>
5042
5043 <h5>Semantics:</h5>
5044 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
5045    macro available in C.  In a target-dependent way, it initializes
5046    the <tt>va_list</tt> element to which the argument points, so that the next
5047    call to <tt>va_arg</tt> will produce the first variable argument passed to
5048    the function.  Unlike the C <tt>va_start</tt> macro, this intrinsic does not
5049    need to know the last argument of the function as the compiler can figure
5050    that out.</p>
5051
5052 </div>
5053
5054 <!-- _______________________________________________________________________ -->
5055 <div class="doc_subsubsection">
5056  <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
5057 </div>
5058
5059 <div class="doc_text">
5060
5061 <h5>Syntax:</h5>
5062 <pre>
5063   declare void @llvm.va_end(i8* &lt;arglist&gt;)
5064 </pre>
5065
5066 <h5>Overview:</h5>
5067 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*&lt;arglist&gt;</tt>,
5068    which has been initialized previously
5069    with <tt><a href="#int_va_start">llvm.va_start</a></tt>
5070    or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
5071
5072 <h5>Arguments:</h5>
5073 <p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p>
5074
5075 <h5>Semantics:</h5>
5076 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
5077    macro available in C.  In a target-dependent way, it destroys
5078    the <tt>va_list</tt> element to which the argument points.  Calls
5079    to <a href="#int_va_start"><tt>llvm.va_start</tt></a>
5080    and <a href="#int_va_copy"> <tt>llvm.va_copy</tt></a> must be matched exactly
5081    with calls to <tt>llvm.va_end</tt>.</p>
5082
5083 </div>
5084
5085 <!-- _______________________________________________________________________ -->
5086 <div class="doc_subsubsection">
5087   <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
5088 </div>
5089
5090 <div class="doc_text">
5091
5092 <h5>Syntax:</h5>
5093 <pre>
5094   declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
5095 </pre>
5096
5097 <h5>Overview:</h5>
5098 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
5099    from the source argument list to the destination argument list.</p>
5100
5101 <h5>Arguments:</h5>
5102 <p>The first argument is a pointer to a <tt>va_list</tt> element to initialize.
5103    The second argument is a pointer to a <tt>va_list</tt> element to copy
5104    from.</p>
5105
5106 <h5>Semantics:</h5>
5107 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
5108    macro available in C.  In a target-dependent way, it copies the
5109    source <tt>va_list</tt> element into the destination <tt>va_list</tt>
5110    element.  This intrinsic is necessary because
5111    the <tt><a href="#int_va_start"> llvm.va_start</a></tt> intrinsic may be
5112    arbitrarily complex and require, for example, memory allocation.</p>
5113
5114 </div>
5115
5116 <!-- ======================================================================= -->
5117 <div class="doc_subsection">
5118   <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
5119 </div>
5120
5121 <div class="doc_text">
5122
5123 <p>LLVM support for <a href="GarbageCollection.html">Accurate Garbage
5124 Collection</a> (GC) requires the implementation and generation of these
5125 intrinsics. These intrinsics allow identification of <a href="#int_gcroot">GC
5126 roots on the stack</a>, as well as garbage collector implementations that
5127 require <a href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a>
5128 barriers.  Front-ends for type-safe garbage collected languages should generate
5129 these intrinsics to make use of the LLVM garbage collectors.  For more details,
5130 see <a href="GarbageCollection.html">Accurate Garbage Collection with
5131 LLVM</a>.</p>
5132
5133 <p>The garbage collection intrinsics only operate on objects in the generic
5134    address space (address space zero).</p>
5135
5136 </div>
5137
5138 <!-- _______________________________________________________________________ -->
5139 <div class="doc_subsubsection">
5140   <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
5141 </div>
5142
5143 <div class="doc_text">
5144
5145 <h5>Syntax:</h5>
5146 <pre>
5147   declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
5148 </pre>
5149
5150 <h5>Overview:</h5>
5151 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to
5152    the code generator, and allows some metadata to be associated with it.</p>
5153
5154 <h5>Arguments:</h5>
5155 <p>The first argument specifies the address of a stack object that contains the
5156    root pointer.  The second pointer (which must be either a constant or a
5157    global value address) contains the meta-data to be associated with the
5158    root.</p>
5159
5160 <h5>Semantics:</h5>
5161 <p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc"
5162    location.  At compile-time, the code generator generates information to allow
5163    the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>'
5164    intrinsic may only be used in a function which <a href="#gc">specifies a GC
5165    algorithm</a>.</p>
5166
5167 </div>
5168
5169 <!-- _______________________________________________________________________ -->
5170 <div class="doc_subsubsection">
5171   <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
5172 </div>
5173
5174 <div class="doc_text">
5175
5176 <h5>Syntax:</h5>
5177 <pre>
5178   declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
5179 </pre>
5180
5181 <h5>Overview:</h5>
5182 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
5183    locations, allowing garbage collector implementations that require read
5184    barriers.</p>
5185
5186 <h5>Arguments:</h5>
5187 <p>The second argument is the address to read from, which should be an address
5188    allocated from the garbage collector.  The first object is a pointer to the
5189    start of the referenced object, if needed by the language runtime (otherwise
5190    null).</p>
5191
5192 <h5>Semantics:</h5>
5193 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
5194    instruction, but may be replaced with substantially more complex code by the
5195    garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic
5196    may only be used in a function which <a href="#gc">specifies a GC
5197    algorithm</a>.</p>
5198
5199 </div>
5200
5201 <!-- _______________________________________________________________________ -->
5202 <div class="doc_subsubsection">
5203   <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
5204 </div>
5205
5206 <div class="doc_text">
5207
5208 <h5>Syntax:</h5>
5209 <pre>
5210   declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
5211 </pre>
5212
5213 <h5>Overview:</h5>
5214 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
5215    locations, allowing garbage collector implementations that require write
5216    barriers (such as generational or reference counting collectors).</p>
5217
5218 <h5>Arguments:</h5>
5219 <p>The first argument is the reference to store, the second is the start of the
5220    object to store it to, and the third is the address of the field of Obj to
5221    store to.  If the runtime does not require a pointer to the object, Obj may
5222    be null.</p>
5223
5224 <h5>Semantics:</h5>
5225 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
5226    instruction, but may be replaced with substantially more complex code by the
5227    garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic
5228    may only be used in a function which <a href="#gc">specifies a GC
5229    algorithm</a>.</p>
5230
5231 </div>
5232
5233 <!-- ======================================================================= -->
5234 <div class="doc_subsection">
5235   <a name="int_codegen">Code Generator Intrinsics</a>
5236 </div>
5237
5238 <div class="doc_text">
5239
5240 <p>These intrinsics are provided by LLVM to expose special features that may
5241    only be implemented with code generator support.</p>
5242
5243 </div>
5244
5245 <!-- _______________________________________________________________________ -->
5246 <div class="doc_subsubsection">
5247   <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
5248 </div>
5249
5250 <div class="doc_text">
5251
5252 <h5>Syntax:</h5>
5253 <pre>
5254   declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
5255 </pre>
5256
5257 <h5>Overview:</h5>
5258 <p>The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a
5259    target-specific value indicating the return address of the current function
5260    or one of its callers.</p>
5261
5262 <h5>Arguments:</h5>
5263 <p>The argument to this intrinsic indicates which function to return the address
5264    for.  Zero indicates the calling function, one indicates its caller, etc.
5265    The argument is <b>required</b> to be a constant integer value.</p>
5266
5267 <h5>Semantics:</h5>
5268 <p>The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer
5269    indicating the return address of the specified call frame, or zero if it
5270    cannot be identified.  The value returned by this intrinsic is likely to be
5271    incorrect or 0 for arguments other than zero, so it should only be used for
5272    debugging purposes.</p>
5273
5274 <p>Note that calling this intrinsic does not prevent function inlining or other
5275    aggressive transformations, so the value returned may not be that of the
5276    obvious source-language caller.</p>
5277
5278 </div>
5279
5280 <!-- _______________________________________________________________________ -->
5281 <div class="doc_subsubsection">
5282   <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
5283 </div>
5284
5285 <div class="doc_text">
5286
5287 <h5>Syntax:</h5>
5288 <pre>
5289   declare i8 *@llvm.frameaddress(i32 &lt;level&gt;)
5290 </pre>
5291
5292 <h5>Overview:</h5>
5293 <p>The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the
5294    target-specific frame pointer value for the specified stack frame.</p>
5295
5296 <h5>Arguments:</h5>
5297 <p>The argument to this intrinsic indicates which function to return the frame
5298    pointer for.  Zero indicates the calling function, one indicates its caller,
5299    etc.  The argument is <b>required</b> to be a constant integer value.</p>
5300
5301 <h5>Semantics:</h5>
5302 <p>The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer
5303    indicating the frame address of the specified call frame, or zero if it
5304    cannot be identified.  The value returned by this intrinsic is likely to be
5305    incorrect or 0 for arguments other than zero, so it should only be used for
5306    debugging purposes.</p>
5307
5308 <p>Note that calling this intrinsic does not prevent function inlining or other
5309    aggressive transformations, so the value returned may not be that of the
5310    obvious source-language caller.</p>
5311
5312 </div>
5313
5314 <!-- _______________________________________________________________________ -->
5315 <div class="doc_subsubsection">
5316   <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
5317 </div>
5318
5319 <div class="doc_text">
5320
5321 <h5>Syntax:</h5>
5322 <pre>
5323   declare i8 *@llvm.stacksave()
5324 </pre>
5325
5326 <h5>Overview:</h5>
5327 <p>The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state
5328    of the function stack, for use
5329    with <a href="#int_stackrestore"> <tt>llvm.stackrestore</tt></a>.  This is
5330    useful for implementing language features like scoped automatic variable
5331    sized arrays in C99.</p>
5332
5333 <h5>Semantics:</h5>
5334 <p>This intrinsic returns a opaque pointer value that can be passed
5335    to <a href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>.  When
5336    an <tt>llvm.stackrestore</tt> intrinsic is executed with a value saved
5337    from <tt>llvm.stacksave</tt>, it effectively restores the state of the stack
5338    to the state it was in when the <tt>llvm.stacksave</tt> intrinsic executed.
5339    In practice, this pops any <a href="#i_alloca">alloca</a> blocks from the
5340    stack that were allocated after the <tt>llvm.stacksave</tt> was executed.</p>
5341
5342 </div>
5343
5344 <!-- _______________________________________________________________________ -->
5345 <div class="doc_subsubsection">
5346   <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
5347 </div>
5348
5349 <div class="doc_text">
5350
5351 <h5>Syntax:</h5>
5352 <pre>
5353   declare void @llvm.stackrestore(i8 * %ptr)
5354 </pre>
5355
5356 <h5>Overview:</h5>
5357 <p>The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of
5358    the function stack to the state it was in when the
5359    corresponding <a href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic
5360    executed.  This is useful for implementing language features like scoped
5361    automatic variable sized arrays in C99.</p>
5362
5363 <h5>Semantics:</h5>
5364 <p>See the description
5365    for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.</p>
5366
5367 </div>
5368
5369 <!-- _______________________________________________________________________ -->
5370 <div class="doc_subsubsection">
5371   <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
5372 </div>
5373
5374 <div class="doc_text">
5375
5376 <h5>Syntax:</h5>
5377 <pre>
5378   declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;)
5379 </pre>
5380
5381 <h5>Overview:</h5>
5382 <p>The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to
5383    insert a prefetch instruction if supported; otherwise, it is a noop.
5384    Prefetches have no effect on the behavior of the program but can change its
5385    performance characteristics.</p>
5386
5387 <h5>Arguments:</h5>
5388 <p><tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the
5389    specifier determining if the fetch should be for a read (0) or write (1),
5390    and <tt>locality</tt> is a temporal locality specifier ranging from (0) - no
5391    locality, to (3) - extremely local keep in cache.  The <tt>rw</tt>
5392    and <tt>locality</tt> arguments must be constant integers.</p>
5393
5394 <h5>Semantics:</h5>
5395 <p>This intrinsic does not modify the behavior of the program.  In particular,
5396    prefetches cannot trap and do not produce a value.  On targets that support
5397    this intrinsic, the prefetch can provide hints to the processor cache for
5398    better performance.</p>
5399
5400 </div>
5401
5402 <!-- _______________________________________________________________________ -->
5403 <div class="doc_subsubsection">
5404   <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
5405 </div>
5406
5407 <div class="doc_text">
5408
5409 <h5>Syntax:</h5>
5410 <pre>
5411   declare void @llvm.pcmarker(i32 &lt;id&gt;)
5412 </pre>
5413
5414 <h5>Overview:</h5>
5415 <p>The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program
5416    Counter (PC) in a region of code to simulators and other tools.  The method
5417    is target specific, but it is expected that the marker will use exported
5418    symbols to transmit the PC of the marker.  The marker makes no guarantees
5419    that it will remain with any specific instruction after optimizations.  It is
5420    possible that the presence of a marker will inhibit optimizations.  The
5421    intended use is to be inserted after optimizations to allow correlations of
5422    simulation runs.</p>
5423
5424 <h5>Arguments:</h5>
5425 <p><tt>id</tt> is a numerical id identifying the marker.</p>
5426
5427 <h5>Semantics:</h5>
5428 <p>This intrinsic does not modify the behavior of the program.  Backends that do
5429    not support this intrinisic may ignore it.</p>
5430
5431 </div>
5432
5433 <!-- _______________________________________________________________________ -->
5434 <div class="doc_subsubsection">
5435   <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
5436 </div>
5437
5438 <div class="doc_text">
5439
5440 <h5>Syntax:</h5>
5441 <pre>
5442   declare i64 @llvm.readcyclecounter( )
5443 </pre>
5444
5445 <h5>Overview:</h5>
5446 <p>The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle
5447    counter register (or similar low latency, high accuracy clocks) on those
5448    targets that support it.  On X86, it should map to RDTSC.  On Alpha, it
5449    should map to RPCC.  As the backing counters overflow quickly (on the order
5450    of 9 seconds on alpha), this should only be used for small timings.</p>
5451
5452 <h5>Semantics:</h5>
5453 <p>When directly supported, reading the cycle counter should not modify any
5454    memory.  Implementations are allowed to either return a application specific
5455    value or a system wide value.  On backends without support, this is lowered
5456    to a constant 0.</p>
5457
5458 </div>
5459
5460 <!-- ======================================================================= -->
5461 <div class="doc_subsection">
5462   <a name="int_libc">Standard C Library Intrinsics</a>
5463 </div>
5464
5465 <div class="doc_text">
5466
5467 <p>LLVM provides intrinsics for a few important standard C library functions.
5468    These intrinsics allow source-language front-ends to pass information about
5469    the alignment of the pointer arguments to the code generator, providing
5470    opportunity for more efficient code generation.</p>
5471
5472 </div>
5473
5474 <!-- _______________________________________________________________________ -->
5475 <div class="doc_subsubsection">
5476   <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
5477 </div>
5478
5479 <div class="doc_text">
5480
5481 <h5>Syntax:</h5>
5482 <p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any
5483    integer bit width. Not all targets support all bit widths however.</p>
5484
5485 <pre>
5486   declare void @llvm.memcpy.i8(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5487                                i8 &lt;len&gt;, i32 &lt;align&gt;)
5488   declare void @llvm.memcpy.i16(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5489                                 i16 &lt;len&gt;, i32 &lt;align&gt;)
5490   declare void @llvm.memcpy.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5491                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
5492   declare void @llvm.memcpy.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5493                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
5494 </pre>
5495
5496 <h5>Overview:</h5>
5497 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
5498    source location to the destination location.</p>
5499
5500 <p>Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt>
5501    intrinsics do not return a value, and takes an extra alignment argument.</p>
5502
5503 <h5>Arguments:</h5>
5504 <p>The first argument is a pointer to the destination, the second is a pointer
5505    to the source.  The third argument is an integer argument specifying the
5506    number of bytes to copy, and the fourth argument is the alignment of the
5507    source and destination locations.</p>
5508
5509 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5510    then the caller guarantees that both the source and destination pointers are
5511    aligned to that boundary.</p>
5512
5513 <h5>Semantics:</h5>
5514 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
5515    source location to the destination location, which are not allowed to
5516    overlap.  It copies "len" bytes of memory over.  If the argument is known to
5517    be aligned to some boundary, this can be specified as the fourth argument,
5518    otherwise it should be set to 0 or 1.</p>
5519
5520 </div>
5521
5522 <!-- _______________________________________________________________________ -->
5523 <div class="doc_subsubsection">
5524   <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
5525 </div>
5526
5527 <div class="doc_text">
5528
5529 <h5>Syntax:</h5>
5530 <p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
5531    width. Not all targets support all bit widths however.</p>
5532
5533 <pre>
5534   declare void @llvm.memmove.i8(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5535                                 i8 &lt;len&gt;, i32 &lt;align&gt;)
5536   declare void @llvm.memmove.i16(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5537                                  i16 &lt;len&gt;, i32 &lt;align&gt;)
5538   declare void @llvm.memmove.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5539                                  i32 &lt;len&gt;, i32 &lt;align&gt;)
5540   declare void @llvm.memmove.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
5541                                  i64 &lt;len&gt;, i32 &lt;align&gt;)
5542 </pre>
5543
5544 <h5>Overview:</h5>
5545 <p>The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the
5546    source location to the destination location. It is similar to the
5547    '<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to
5548    overlap.</p>
5549
5550 <p>Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt>
5551    intrinsics do not return a value, and takes an extra alignment argument.</p>
5552
5553 <h5>Arguments:</h5>
5554 <p>The first argument is a pointer to the destination, the second is a pointer
5555    to the source.  The third argument is an integer argument specifying the
5556    number of bytes to copy, and the fourth argument is the alignment of the
5557    source and destination locations.</p>
5558
5559 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5560    then the caller guarantees that the source and destination pointers are
5561    aligned to that boundary.</p>
5562
5563 <h5>Semantics:</h5>
5564 <p>The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the
5565    source location to the destination location, which may overlap.  It copies
5566    "len" bytes of memory over.  If the argument is known to be aligned to some
5567    boundary, this can be specified as the fourth argument, otherwise it should
5568    be set to 0 or 1.</p>
5569
5570 </div>
5571
5572 <!-- _______________________________________________________________________ -->
5573 <div class="doc_subsubsection">
5574   <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
5575 </div>
5576
5577 <div class="doc_text">
5578
5579 <h5>Syntax:</h5>
5580 <p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
5581    width. Not all targets support all bit widths however.</p>
5582
5583 <pre>
5584   declare void @llvm.memset.i8(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5585                                i8 &lt;len&gt;, i32 &lt;align&gt;)
5586   declare void @llvm.memset.i16(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5587                                 i16 &lt;len&gt;, i32 &lt;align&gt;)
5588   declare void @llvm.memset.i32(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5589                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
5590   declare void @llvm.memset.i64(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
5591                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
5592 </pre>
5593
5594 <h5>Overview:</h5>
5595 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a
5596    particular byte value.</p>
5597
5598 <p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt>
5599    intrinsic does not return a value, and takes an extra alignment argument.</p>
5600
5601 <h5>Arguments:</h5>
5602 <p>The first argument is a pointer to the destination to fill, the second is the
5603    byte value to fill it with, the third argument is an integer argument
5604    specifying the number of bytes to fill, and the fourth argument is the known
5605    alignment of destination location.</p>
5606
5607 <p>If the call to this intrinisic has an alignment value that is not 0 or 1,
5608    then the caller guarantees that the destination pointer is aligned to that
5609    boundary.</p>
5610
5611 <h5>Semantics:</h5>
5612 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting
5613    at the destination location.  If the argument is known to be aligned to some
5614    boundary, this can be specified as the fourth argument, otherwise it should
5615    be set to 0 or 1.</p>
5616
5617 </div>
5618
5619 <!-- _______________________________________________________________________ -->
5620 <div class="doc_subsubsection">
5621   <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
5622 </div>
5623
5624 <div class="doc_text">
5625
5626 <h5>Syntax:</h5>
5627 <p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any
5628    floating point or vector of floating point type. Not all targets support all
5629    types however.</p>
5630
5631 <pre>
5632   declare float     @llvm.sqrt.f32(float %Val)
5633   declare double    @llvm.sqrt.f64(double %Val)
5634   declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
5635   declare fp128     @llvm.sqrt.f128(fp128 %Val)
5636   declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
5637 </pre>
5638
5639 <h5>Overview:</h5>
5640 <p>The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand,
5641    returning the same value as the libm '<tt>sqrt</tt>' functions would.
5642    Unlike <tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined
5643    behavior for negative numbers other than -0.0 (which allows for better
5644    optimization, because there is no need to worry about errno being
5645    set).  <tt>llvm.sqrt(-0.0)</tt> is defined to return -0.0 like IEEE sqrt.</p>
5646
5647 <h5>Arguments:</h5>
5648 <p>The argument and return value are floating point numbers of the same
5649    type.</p>
5650
5651 <h5>Semantics:</h5>
5652 <p>This function returns the sqrt of the specified operand if it is a
5653    nonnegative floating point number.</p>
5654
5655 </div>
5656
5657 <!-- _______________________________________________________________________ -->
5658 <div class="doc_subsubsection">
5659   <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
5660 </div>
5661
5662 <div class="doc_text">
5663
5664 <h5>Syntax:</h5>
5665 <p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any
5666    floating point or vector of floating point type. Not all targets support all
5667    types however.</p>
5668
5669 <pre>
5670   declare float     @llvm.powi.f32(float  %Val, i32 %power)
5671   declare double    @llvm.powi.f64(double %Val, i32 %power)
5672   declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
5673   declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
5674   declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
5675 </pre>
5676
5677 <h5>Overview:</h5>
5678 <p>The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the
5679    specified (positive or negative) power.  The order of evaluation of
5680    multiplications is not defined.  When a vector of floating point type is
5681    used, the second argument remains a scalar integer value.</p>
5682
5683 <h5>Arguments:</h5>
5684 <p>The second argument is an integer power, and the first is a value to raise to
5685    that power.</p>
5686
5687 <h5>Semantics:</h5>
5688 <p>This function returns the first value raised to the second power with an
5689    unspecified sequence of rounding operations.</p>
5690
5691 </div>
5692
5693 <!-- _______________________________________________________________________ -->
5694 <div class="doc_subsubsection">
5695   <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
5696 </div>
5697
5698 <div class="doc_text">
5699
5700 <h5>Syntax:</h5>
5701 <p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any
5702    floating point or vector of floating point type. Not all targets support all
5703    types however.</p>
5704
5705 <pre>
5706   declare float     @llvm.sin.f32(float  %Val)
5707   declare double    @llvm.sin.f64(double %Val)
5708   declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
5709   declare fp128     @llvm.sin.f128(fp128 %Val)
5710   declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
5711 </pre>
5712
5713 <h5>Overview:</h5>
5714 <p>The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.</p>
5715
5716 <h5>Arguments:</h5>
5717 <p>The argument and return value are floating point numbers of the same
5718    type.</p>
5719
5720 <h5>Semantics:</h5>
5721 <p>This function returns the sine of the specified operand, returning the same
5722    values as the libm <tt>sin</tt> functions would, and handles error conditions
5723    in the same way.</p>
5724
5725 </div>
5726
5727 <!-- _______________________________________________________________________ -->
5728 <div class="doc_subsubsection">
5729   <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
5730 </div>
5731
5732 <div class="doc_text">
5733
5734 <h5>Syntax:</h5>
5735 <p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any
5736    floating point or vector of floating point type. Not all targets support all
5737    types however.</p>
5738
5739 <pre>
5740   declare float     @llvm.cos.f32(float  %Val)
5741   declare double    @llvm.cos.f64(double %Val)
5742   declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
5743   declare fp128     @llvm.cos.f128(fp128 %Val)
5744   declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
5745 </pre>
5746
5747 <h5>Overview:</h5>
5748 <p>The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.</p>
5749
5750 <h5>Arguments:</h5>
5751 <p>The argument and return value are floating point numbers of the same
5752    type.</p>
5753
5754 <h5>Semantics:</h5>
5755 <p>This function returns the cosine of the specified operand, returning the same
5756    values as the libm <tt>cos</tt> functions would, and handles error conditions
5757    in the same way.</p>
5758
5759 </div>
5760
5761 <!-- _______________________________________________________________________ -->
5762 <div class="doc_subsubsection">
5763   <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
5764 </div>
5765
5766 <div class="doc_text">
5767
5768 <h5>Syntax:</h5>
5769 <p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any
5770    floating point or vector of floating point type. Not all targets support all
5771    types however.</p>
5772
5773 <pre>
5774   declare float     @llvm.pow.f32(float  %Val, float %Power)
5775   declare double    @llvm.pow.f64(double %Val, double %Power)
5776   declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
5777   declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
5778   declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
5779 </pre>
5780
5781 <h5>Overview:</h5>
5782 <p>The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the
5783    specified (positive or negative) power.</p>
5784
5785 <h5>Arguments:</h5>
5786 <p>The second argument is a floating point power, and the first is a value to
5787    raise to that power.</p>
5788
5789 <h5>Semantics:</h5>
5790 <p>This function returns the first value raised to the second power, returning
5791    the same values as the libm <tt>pow</tt> functions would, and handles error
5792    conditions in the same way.</p>
5793
5794 </div>
5795
5796 <!-- ======================================================================= -->
5797 <div class="doc_subsection">
5798   <a name="int_manip">Bit Manipulation Intrinsics</a>
5799 </div>
5800
5801 <div class="doc_text">
5802
5803 <p>LLVM provides intrinsics for a few important bit manipulation operations.
5804    These allow efficient code generation for some algorithms.</p>
5805
5806 </div>
5807
5808 <!-- _______________________________________________________________________ -->
5809 <div class="doc_subsubsection">
5810   <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
5811 </div>
5812
5813 <div class="doc_text">
5814
5815 <h5>Syntax:</h5>
5816 <p>This is an overloaded intrinsic function. You can use bswap on any integer
5817    type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p>
5818
5819 <pre>
5820   declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
5821   declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
5822   declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
5823 </pre>
5824
5825 <h5>Overview:</h5>
5826 <p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
5827    values with an even number of bytes (positive multiple of 16 bits).  These
5828    are useful for performing operations on data that is not in the target's
5829    native byte order.</p>
5830
5831 <h5>Semantics:</h5>
5832 <p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
5833    and low byte of the input i16 swapped.  Similarly,
5834    the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four
5835    bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1,
5836    2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order.
5837    The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics
5838    extend this concept to additional even-byte lengths (6 bytes, 8 bytes and
5839    more, respectively).</p>
5840
5841 </div>
5842
5843 <!-- _______________________________________________________________________ -->
5844 <div class="doc_subsubsection">
5845   <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
5846 </div>
5847
5848 <div class="doc_text">
5849
5850 <h5>Syntax:</h5>
5851 <p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
5852    width. Not all targets support all bit widths however.</p>
5853
5854 <pre>
5855   declare i8 @llvm.ctpop.i8(i8  &lt;src&gt;)
5856   declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
5857   declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
5858   declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
5859   declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
5860 </pre>
5861
5862 <h5>Overview:</h5>
5863 <p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set
5864    in a value.</p>
5865
5866 <h5>Arguments:</h5>
5867 <p>The only argument is the value to be counted.  The argument may be of any
5868    integer type.  The return type must match the argument type.</p>
5869
5870 <h5>Semantics:</h5>
5871 <p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.</p>
5872
5873 </div>
5874
5875 <!-- _______________________________________________________________________ -->
5876 <div class="doc_subsubsection">
5877   <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
5878 </div>
5879
5880 <div class="doc_text">
5881
5882 <h5>Syntax:</h5>
5883 <p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
5884    integer bit width. Not all targets support all bit widths however.</p>
5885
5886 <pre>
5887   declare i8 @llvm.ctlz.i8 (i8  &lt;src&gt;)
5888   declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
5889   declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
5890   declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
5891   declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
5892 </pre>
5893
5894 <h5>Overview:</h5>
5895 <p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
5896    leading zeros in a variable.</p>
5897
5898 <h5>Arguments:</h5>
5899 <p>The only argument is the value to be counted.  The argument may be of any
5900    integer type. The return type must match the argument type.</p>
5901
5902 <h5>Semantics:</h5>
5903 <p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant)
5904    zeros in a variable.  If the src == 0 then the result is the size in bits of
5905    the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p>
5906
5907 </div>
5908
5909 <!-- _______________________________________________________________________ -->
5910 <div class="doc_subsubsection">
5911   <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
5912 </div>
5913
5914 <div class="doc_text">
5915
5916 <h5>Syntax:</h5>
5917 <p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
5918    integer bit width. Not all targets support all bit widths however.</p>
5919
5920 <pre>
5921   declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
5922   declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
5923   declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
5924   declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
5925   declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
5926 </pre>
5927
5928 <h5>Overview:</h5>
5929 <p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of
5930    trailing zeros.</p>
5931
5932 <h5>Arguments:</h5>
5933 <p>The only argument is the value to be counted.  The argument may be of any
5934    integer type.  The return type must match the argument type.</p>
5935
5936 <h5>Semantics:</h5>
5937 <p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant)
5938    zeros in a variable.  If the src == 0 then the result is the size in bits of
5939    the type of src.  For example, <tt>llvm.cttz(2) = 1</tt>.</p>
5940
5941 </div>
5942
5943 <!-- ======================================================================= -->
5944 <div class="doc_subsection">
5945   <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
5946 </div>
5947
5948 <div class="doc_text">
5949
5950 <p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>
5951
5952 </div>
5953
5954 <!-- _______________________________________________________________________ -->
5955 <div class="doc_subsubsection">
5956   <a name="int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics</a>
5957 </div>
5958
5959 <div class="doc_text">
5960
5961 <h5>Syntax:</h5>
5962 <p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt>
5963    on any integer bit width.</p>
5964
5965 <pre>
5966   declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
5967   declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
5968   declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
5969 </pre>
5970
5971 <h5>Overview:</h5>
5972 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
5973    a signed addition of the two arguments, and indicate whether an overflow
5974    occurred during the signed summation.</p>
5975
5976 <h5>Arguments:</h5>
5977 <p>The arguments (%a and %b) and the first element of the result structure may
5978    be of integer types of any bit width, but they must have the same bit
5979    width. The second element of the result structure must be of
5980    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
5981    undergo signed addition.</p>
5982
5983 <h5>Semantics:</h5>
5984 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
5985    a signed addition of the two variables. They return a structure &mdash; the
5986    first element of which is the signed summation, and the second element of
5987    which is a bit specifying if the signed summation resulted in an
5988    overflow.</p>
5989
5990 <h5>Examples:</h5>
5991 <pre>
5992   %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
5993   %sum = extractvalue {i32, i1} %res, 0
5994   %obit = extractvalue {i32, i1} %res, 1
5995   br i1 %obit, label %overflow, label %normal
5996 </pre>
5997
5998 </div>
5999
6000 <!-- _______________________________________________________________________ -->
6001 <div class="doc_subsubsection">
6002   <a name="int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics</a>
6003 </div>
6004
6005 <div class="doc_text">
6006
6007 <h5>Syntax:</h5>
6008 <p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt>
6009    on any integer bit width.</p>
6010
6011 <pre>
6012   declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
6013   declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
6014   declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
6015 </pre>
6016
6017 <h5>Overview:</h5>
6018 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
6019    an unsigned addition of the two arguments, and indicate whether a carry
6020    occurred during the unsigned summation.</p>
6021
6022 <h5>Arguments:</h5>
6023 <p>The arguments (%a and %b) and the first element of the result structure may
6024    be of integer types of any bit width, but they must have the same bit
6025    width. The second element of the result structure must be of
6026    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6027    undergo unsigned addition.</p>
6028
6029 <h5>Semantics:</h5>
6030 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
6031    an unsigned addition of the two arguments. They return a structure &mdash;
6032    the first element of which is the sum, and the second element of which is a
6033    bit specifying if the unsigned summation resulted in a carry.</p>
6034
6035 <h5>Examples:</h5>
6036 <pre>
6037   %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
6038   %sum = extractvalue {i32, i1} %res, 0
6039   %obit = extractvalue {i32, i1} %res, 1
6040   br i1 %obit, label %carry, label %normal
6041 </pre>
6042
6043 </div>
6044
6045 <!-- _______________________________________________________________________ -->
6046 <div class="doc_subsubsection">
6047   <a name="int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics</a>
6048 </div>
6049
6050 <div class="doc_text">
6051
6052 <h5>Syntax:</h5>
6053 <p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt>
6054    on any integer bit width.</p>
6055
6056 <pre>
6057   declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
6058   declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
6059   declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
6060 </pre>
6061
6062 <h5>Overview:</h5>
6063 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
6064    a signed subtraction of the two arguments, and indicate whether an overflow
6065    occurred during the signed subtraction.</p>
6066
6067 <h5>Arguments:</h5>
6068 <p>The arguments (%a and %b) and the first element of the result structure may
6069    be of integer types of any bit width, but they must have the same bit
6070    width. The second element of the result structure must be of
6071    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6072    undergo signed subtraction.</p>
6073
6074 <h5>Semantics:</h5>
6075 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
6076    a signed subtraction of the two arguments. They return a structure &mdash;
6077    the first element of which is the subtraction, and the second element of
6078    which is a bit specifying if the signed subtraction resulted in an
6079    overflow.</p>
6080
6081 <h5>Examples:</h5>
6082 <pre>
6083   %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
6084   %sum = extractvalue {i32, i1} %res, 0
6085   %obit = extractvalue {i32, i1} %res, 1
6086   br i1 %obit, label %overflow, label %normal
6087 </pre>
6088
6089 </div>
6090
6091 <!-- _______________________________________________________________________ -->
6092 <div class="doc_subsubsection">
6093   <a name="int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt>' Intrinsics</a>
6094 </div>
6095
6096 <div class="doc_text">
6097
6098 <h5>Syntax:</h5>
6099 <p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt>
6100    on any integer bit width.</p>
6101
6102 <pre>
6103   declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
6104   declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
6105   declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
6106 </pre>
6107
6108 <h5>Overview:</h5>
6109 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
6110    an unsigned subtraction of the two arguments, and indicate whether an
6111    overflow occurred during the unsigned subtraction.</p>
6112
6113 <h5>Arguments:</h5>
6114 <p>The arguments (%a and %b) and the first element of the result structure may
6115    be of integer types of any bit width, but they must have the same bit
6116    width. The second element of the result structure must be of
6117    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6118    undergo unsigned subtraction.</p>
6119
6120 <h5>Semantics:</h5>
6121 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
6122    an unsigned subtraction of the two arguments. They return a structure &mdash;
6123    the first element of which is the subtraction, and the second element of
6124    which is a bit specifying if the unsigned subtraction resulted in an
6125    overflow.</p>
6126
6127 <h5>Examples:</h5>
6128 <pre>
6129   %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
6130   %sum = extractvalue {i32, i1} %res, 0
6131   %obit = extractvalue {i32, i1} %res, 1
6132   br i1 %obit, label %overflow, label %normal
6133 </pre>
6134
6135 </div>
6136
6137 <!-- _______________________________________________________________________ -->
6138 <div class="doc_subsubsection">
6139   <a name="int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt>' Intrinsics</a>
6140 </div>
6141
6142 <div class="doc_text">
6143
6144 <h5>Syntax:</h5>
6145 <p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt>
6146    on any integer bit width.</p>
6147
6148 <pre>
6149   declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
6150   declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
6151   declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
6152 </pre>
6153
6154 <h5>Overview:</h5>
6155
6156 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
6157    a signed multiplication of the two arguments, and indicate whether an
6158    overflow occurred during the signed multiplication.</p>
6159
6160 <h5>Arguments:</h5>
6161 <p>The arguments (%a and %b) and the first element of the result structure may
6162    be of integer types of any bit width, but they must have the same bit
6163    width. The second element of the result structure must be of
6164    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6165    undergo signed multiplication.</p>
6166
6167 <h5>Semantics:</h5>
6168 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
6169    a signed multiplication of the two arguments. They return a structure &mdash;
6170    the first element of which is the multiplication, and the second element of
6171    which is a bit specifying if the signed multiplication resulted in an
6172    overflow.</p>
6173
6174 <h5>Examples:</h5>
6175 <pre>
6176   %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
6177   %sum = extractvalue {i32, i1} %res, 0
6178   %obit = extractvalue {i32, i1} %res, 1
6179   br i1 %obit, label %overflow, label %normal
6180 </pre>
6181
6182 </div>
6183
6184 <!-- _______________________________________________________________________ -->
6185 <div class="doc_subsubsection">
6186   <a name="int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt>' Intrinsics</a>
6187 </div>
6188
6189 <div class="doc_text">
6190
6191 <h5>Syntax:</h5>
6192 <p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt>
6193    on any integer bit width.</p>
6194
6195 <pre>
6196   declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
6197   declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
6198   declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
6199 </pre>
6200
6201 <h5>Overview:</h5>
6202 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
6203    a unsigned multiplication of the two arguments, and indicate whether an
6204    overflow occurred during the unsigned multiplication.</p>
6205
6206 <h5>Arguments:</h5>
6207 <p>The arguments (%a and %b) and the first element of the result structure may
6208    be of integer types of any bit width, but they must have the same bit
6209    width. The second element of the result structure must be of
6210    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
6211    undergo unsigned multiplication.</p>
6212
6213 <h5>Semantics:</h5>
6214 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
6215    an unsigned multiplication of the two arguments. They return a structure
6216    &mdash; the first element of which is the multiplication, and the second
6217    element of which is a bit specifying if the unsigned multiplication resulted
6218    in an overflow.</p>
6219
6220 <h5>Examples:</h5>
6221 <pre>
6222   %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
6223   %sum = extractvalue {i32, i1} %res, 0
6224   %obit = extractvalue {i32, i1} %res, 1
6225   br i1 %obit, label %overflow, label %normal
6226 </pre>
6227
6228 </div>
6229
6230 <!-- ======================================================================= -->
6231 <div class="doc_subsection">
6232   <a name="int_debugger">Debugger Intrinsics</a>
6233 </div>
6234
6235 <div class="doc_text">
6236
6237 <p>The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt>
6238    prefix), are described in
6239    the <a href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source
6240    Level Debugging</a> document.</p>
6241
6242 </div>
6243
6244 <!-- ======================================================================= -->
6245 <div class="doc_subsection">
6246   <a name="int_eh">Exception Handling Intrinsics</a>
6247 </div>
6248
6249 <div class="doc_text">
6250
6251 <p>The LLVM exception handling intrinsics (which all start with
6252    <tt>llvm.eh.</tt> prefix), are described in
6253    the <a href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
6254    Handling</a> document.</p>
6255
6256 </div>
6257
6258 <!-- ======================================================================= -->
6259 <div class="doc_subsection">
6260   <a name="int_trampoline">Trampoline Intrinsic</a>
6261 </div>
6262
6263 <div class="doc_text">
6264
6265 <p>This intrinsic makes it possible to excise one parameter, marked with
6266    the <tt>nest</tt> attribute, from a function.  The result is a callable
6267    function pointer lacking the nest parameter - the caller does not need to
6268    provide a value for it.  Instead, the value to use is stored in advance in a
6269    "trampoline", a block of memory usually allocated on the stack, which also
6270    contains code to splice the nest value into the argument list.  This is used
6271    to implement the GCC nested function address extension.</p>
6272
6273 <p>For example, if the function is
6274    <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
6275    pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
6276    follows:</p>
6277
6278 <div class="doc_code">
6279 <pre>
6280   %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
6281   %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
6282   %p = call i8* @llvm.init.trampoline( i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval )
6283   %fp = bitcast i8* %p to i32 (i32, i32)*
6284 </pre>
6285 </div>
6286
6287 <p>The call <tt>%val = call i32 %fp( i32 %x, i32 %y )</tt> is then equivalent
6288    to <tt>%val = call i32 %f( i8* %nval, i32 %x, i32 %y )</tt>.</p>
6289
6290 </div>
6291
6292 <!-- _______________________________________________________________________ -->
6293 <div class="doc_subsubsection">
6294   <a name="int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a>
6295 </div>
6296
6297 <div class="doc_text">
6298
6299 <h5>Syntax:</h5>
6300 <pre>
6301   declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
6302 </pre>
6303
6304 <h5>Overview:</h5>
6305 <p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a
6306    function pointer suitable for executing it.</p>
6307
6308 <h5>Arguments:</h5>
6309 <p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
6310    pointers.  The <tt>tramp</tt> argument must point to a sufficiently large and
6311    sufficiently aligned block of memory; this memory is written to by the
6312    intrinsic.  Note that the size and the alignment are target-specific - LLVM
6313    currently provides no portable way of determining them, so a front-end that
6314    generates this intrinsic needs to have some target-specific knowledge.
6315    The <tt>func</tt> argument must hold a function bitcast to
6316    an <tt>i8*</tt>.</p>
6317
6318 <h5>Semantics:</h5>
6319 <p>The block of memory pointed to by <tt>tramp</tt> is filled with target
6320    dependent code, turning it into a function.  A pointer to this function is
6321    returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate
6322    function pointer type</a> before being called.  The new function's signature
6323    is the same as that of <tt>func</tt> with any arguments marked with
6324    the <tt>nest</tt> attribute removed.  At most one such <tt>nest</tt> argument
6325    is allowed, and it must be of pointer type.  Calling the new function is
6326    equivalent to calling <tt>func</tt> with the same argument list, but
6327    with <tt>nval</tt> used for the missing <tt>nest</tt> argument.  If, after
6328    calling <tt>llvm.init.trampoline</tt>, the memory pointed to
6329    by <tt>tramp</tt> is modified, then the effect of any later call to the
6330    returned function pointer is undefined.</p>
6331
6332 </div>
6333
6334 <!-- ======================================================================= -->
6335 <div class="doc_subsection">
6336   <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
6337 </div>
6338
6339 <div class="doc_text">
6340
6341 <p>These intrinsic functions expand the "universal IR" of LLVM to represent
6342    hardware constructs for atomic operations and memory synchronization.  This
6343    provides an interface to the hardware, not an interface to the programmer. It
6344    is aimed at a low enough level to allow any programming models or APIs
6345    (Application Programming Interfaces) which need atomic behaviors to map
6346    cleanly onto it. It is also modeled primarily on hardware behavior. Just as
6347    hardware provides a "universal IR" for source languages, it also provides a
6348    starting point for developing a "universal" atomic operation and
6349    synchronization IR.</p>
6350
6351 <p>These do <em>not</em> form an API such as high-level threading libraries,
6352    software transaction memory systems, atomic primitives, and intrinsic
6353    functions as found in BSD, GNU libc, atomic_ops, APR, and other system and
6354    application libraries.  The hardware interface provided by LLVM should allow
6355    a clean implementation of all of these APIs and parallel programming models.
6356    No one model or paradigm should be selected above others unless the hardware
6357    itself ubiquitously does so.</p>
6358
6359 </div>
6360
6361 <!-- _______________________________________________________________________ -->
6362 <div class="doc_subsubsection">
6363   <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
6364 </div>
6365 <div class="doc_text">
6366 <h5>Syntax:</h5>
6367 <pre>
6368   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; )
6369 </pre>
6370
6371 <h5>Overview:</h5>
6372 <p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between
6373    specific pairs of memory access types.</p>
6374
6375 <h5>Arguments:</h5>
6376 <p>The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments.
6377    The first four arguments enables a specific barrier as listed below.  The
6378    fith argument specifies that the barrier applies to io or device or uncached
6379    memory.</p>
6380
6381 <ul>
6382   <li><tt>ll</tt>: load-load barrier</li>
6383   <li><tt>ls</tt>: load-store barrier</li>
6384   <li><tt>sl</tt>: store-load barrier</li>
6385   <li><tt>ss</tt>: store-store barrier</li>
6386   <li><tt>device</tt>: barrier applies to device and uncached memory also.</li>
6387 </ul>
6388
6389 <h5>Semantics:</h5>
6390 <p>This intrinsic causes the system to enforce some ordering constraints upon
6391    the loads and stores of the program. This barrier does not
6392    indicate <em>when</em> any events will occur, it only enforces
6393    an <em>order</em> in which they occur. For any of the specified pairs of load
6394    and store operations (f.ex.  load-load, or store-load), all of the first
6395    operations preceding the barrier will complete before any of the second
6396    operations succeeding the barrier begin. Specifically the semantics for each
6397    pairing is as follows:</p>
6398
6399 <ul>
6400   <li><tt>ll</tt>: All loads before the barrier must complete before any load
6401       after the barrier begins.</li>
6402   <li><tt>ls</tt>: All loads before the barrier must complete before any 
6403       store after the barrier begins.</li>
6404   <li><tt>ss</tt>: All stores before the barrier must complete before any 
6405       store after the barrier begins.</li>
6406   <li><tt>sl</tt>: All stores before the barrier must complete before any 
6407       load after the barrier begins.</li>
6408 </ul>
6409
6410 <p>These semantics are applied with a logical "and" behavior when more than one
6411    is enabled in a single memory barrier intrinsic.</p>
6412
6413 <p>Backends may implement stronger barriers than those requested when they do
6414    not support as fine grained a barrier as requested.  Some architectures do
6415    not need all types of barriers and on such architectures, these become
6416    noops.</p>
6417
6418 <h5>Example:</h5>
6419 <pre>
6420 %ptr      = malloc i32
6421             store i32 4, %ptr
6422
6423 %result1  = load i32* %ptr      <i>; yields {i32}:result1 = 4</i>
6424             call void @llvm.memory.barrier( i1 false, i1 true, i1 false, i1 false )
6425                                 <i>; guarantee the above finishes</i>
6426             store i32 8, %ptr   <i>; before this begins</i>
6427 </pre>
6428
6429 </div>
6430
6431 <!-- _______________________________________________________________________ -->
6432 <div class="doc_subsubsection">
6433   <a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a>
6434 </div>
6435
6436 <div class="doc_text">
6437
6438 <h5>Syntax:</h5>
6439 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on
6440    any integer bit width and for different address spaces. Not all targets
6441    support all bit widths however.</p>
6442
6443 <pre>
6444   declare i8 @llvm.atomic.cmp.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt; )
6445   declare i16 @llvm.atomic.cmp.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt; )
6446   declare i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt; )
6447   declare i64 @llvm.atomic.cmp.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt; )
6448 </pre>
6449
6450 <h5>Overview:</h5>
6451 <p>This loads a value in memory and compares it to a given value. If they are
6452    equal, it stores a new value into the memory.</p>
6453
6454 <h5>Arguments:</h5>
6455 <p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result
6456    as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the
6457    same bit width. The <tt>ptr</tt> argument must be a pointer to a value of
6458    this integer type. While any bit width integer may be used, targets may only
6459    lower representations they support in hardware.</p>
6460
6461 <h5>Semantics:</h5>
6462 <p>This entire intrinsic must be executed atomically. It first loads the value
6463    in memory pointed to by <tt>ptr</tt> and compares it with the
6464    value <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the
6465    memory. The loaded value is yielded in all cases. This provides the
6466    equivalent of an atomic compare-and-swap operation within the SSA
6467    framework.</p>
6468
6469 <h5>Examples:</h5>
6470 <pre>
6471 %ptr      = malloc i32
6472             store i32 4, %ptr
6473
6474 %val1     = add i32 4, 4
6475 %result1  = call i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* %ptr, i32 4, %val1 )
6476                                           <i>; yields {i32}:result1 = 4</i>
6477 %stored1  = icmp eq i32 %result1, 4       <i>; yields {i1}:stored1 = true</i>
6478 %memval1  = load i32* %ptr                <i>; yields {i32}:memval1 = 8</i>
6479
6480 %val2     = add i32 1, 1
6481 %result2  = call i32 @llvm.atomic.cmp.swap.i32.p0i32( i32* %ptr, i32 5, %val2 )
6482                                           <i>; yields {i32}:result2 = 8</i>
6483 %stored2  = icmp eq i32 %result2, 5       <i>; yields {i1}:stored2 = false</i>
6484
6485 %memval2  = load i32* %ptr                <i>; yields {i32}:memval2 = 8</i>
6486 </pre>
6487
6488 </div>
6489
6490 <!-- _______________________________________________________________________ -->
6491 <div class="doc_subsubsection">
6492   <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
6493 </div>
6494 <div class="doc_text">
6495 <h5>Syntax:</h5>
6496
6497 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any
6498    integer bit width. Not all targets support all bit widths however.</p>
6499
6500 <pre>
6501   declare i8 @llvm.atomic.swap.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;val&gt; )
6502   declare i16 @llvm.atomic.swap.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;val&gt; )
6503   declare i32 @llvm.atomic.swap.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;val&gt; )
6504   declare i64 @llvm.atomic.swap.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;val&gt; )
6505 </pre>
6506
6507 <h5>Overview:</h5>
6508 <p>This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields
6509    the value from memory. It then stores the value in <tt>val</tt> in the memory
6510    at <tt>ptr</tt>.</p>
6511
6512 <h5>Arguments:</h5>
6513 <p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both
6514   the <tt>val</tt> argument and the result must be integers of the same bit
6515   width.  The first argument, <tt>ptr</tt>, must be a pointer to a value of this
6516   integer type. The targets may only lower integer representations they
6517   support.</p>
6518
6519 <h5>Semantics:</h5>
6520 <p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and
6521    stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the
6522    equivalent of an atomic swap operation within the SSA framework.</p>
6523
6524 <h5>Examples:</h5>
6525 <pre>
6526 %ptr      = malloc i32
6527             store i32 4, %ptr
6528
6529 %val1     = add i32 4, 4
6530 %result1  = call i32 @llvm.atomic.swap.i32.p0i32( i32* %ptr, i32 %val1 )
6531                                         <i>; yields {i32}:result1 = 4</i>
6532 %stored1  = icmp eq i32 %result1, 4     <i>; yields {i1}:stored1 = true</i>
6533 %memval1  = load i32* %ptr              <i>; yields {i32}:memval1 = 8</i>
6534
6535 %val2     = add i32 1, 1
6536 %result2  = call i32 @llvm.atomic.swap.i32.p0i32( i32* %ptr, i32 %val2 )
6537                                         <i>; yields {i32}:result2 = 8</i>
6538
6539 %stored2  = icmp eq i32 %result2, 8     <i>; yields {i1}:stored2 = true</i>
6540 %memval2  = load i32* %ptr              <i>; yields {i32}:memval2 = 2</i>
6541 </pre>
6542
6543 </div>
6544
6545 <!-- _______________________________________________________________________ -->
6546 <div class="doc_subsubsection">
6547   <a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a>
6548
6549 </div>
6550
6551 <div class="doc_text">
6552
6553 <h5>Syntax:</h5>
6554 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on
6555    any integer bit width. Not all targets support all bit widths however.</p>
6556
6557 <pre>
6558   declare i8 @llvm.atomic.load.add.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6559   declare i16 @llvm.atomic.load.add.i16..p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6560   declare i32 @llvm.atomic.load.add.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6561   declare i64 @llvm.atomic.load.add.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6562 </pre>
6563
6564 <h5>Overview:</h5>
6565 <p>This intrinsic adds <tt>delta</tt> to the value stored in memory
6566    at <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
6567
6568 <h5>Arguments:</h5>
6569 <p>The intrinsic takes two arguments, the first a pointer to an integer value
6570    and the second an integer value. The result is also an integer value. These
6571    integer types can have any bit width, but they must all have the same bit
6572    width. The targets may only lower integer representations they support.</p>
6573
6574 <h5>Semantics:</h5>
6575 <p>This intrinsic does a series of operations atomically. It first loads the
6576    value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result
6577    to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p>
6578
6579 <h5>Examples:</h5>
6580 <pre>
6581 %ptr      = malloc i32
6582         store i32 4, %ptr
6583 %result1  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 4 )
6584                                 <i>; yields {i32}:result1 = 4</i>
6585 %result2  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 2 )
6586                                 <i>; yields {i32}:result2 = 8</i>
6587 %result3  = call i32 @llvm.atomic.load.add.i32.p0i32( i32* %ptr, i32 5 )
6588                                 <i>; yields {i32}:result3 = 10</i>
6589 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
6590 </pre>
6591
6592 </div>
6593
6594 <!-- _______________________________________________________________________ -->
6595 <div class="doc_subsubsection">
6596   <a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a>
6597
6598 </div>
6599
6600 <div class="doc_text">
6601
6602 <h5>Syntax:</h5>
6603 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on
6604    any integer bit width and for different address spaces. Not all targets
6605    support all bit widths however.</p>
6606
6607 <pre>
6608   declare i8 @llvm.atomic.load.sub.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6609   declare i16 @llvm.atomic.load.sub.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6610   declare i32 @llvm.atomic.load.sub.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6611   declare i64 @llvm.atomic.load.sub.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6612 </pre>
6613
6614 <h5>Overview:</h5>
6615 <p>This intrinsic subtracts <tt>delta</tt> to the value stored in memory at 
6616    <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
6617
6618 <h5>Arguments:</h5>
6619 <p>The intrinsic takes two arguments, the first a pointer to an integer value
6620    and the second an integer value. The result is also an integer value. These
6621    integer types can have any bit width, but they must all have the same bit
6622    width. The targets may only lower integer representations they support.</p>
6623
6624 <h5>Semantics:</h5>
6625 <p>This intrinsic does a series of operations atomically. It first loads the
6626    value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the
6627    result to <tt>ptr</tt>. It yields the original value stored
6628    at <tt>ptr</tt>.</p>
6629
6630 <h5>Examples:</h5>
6631 <pre>
6632 %ptr      = malloc i32
6633         store i32 8, %ptr
6634 %result1  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 4 )
6635                                 <i>; yields {i32}:result1 = 8</i>
6636 %result2  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 2 )
6637                                 <i>; yields {i32}:result2 = 4</i>
6638 %result3  = call i32 @llvm.atomic.load.sub.i32.p0i32( i32* %ptr, i32 5 )
6639                                 <i>; yields {i32}:result3 = 2</i>
6640 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = -3</i>
6641 </pre>
6642
6643 </div>
6644
6645 <!-- _______________________________________________________________________ -->
6646 <div class="doc_subsubsection">
6647   <a name="int_atomic_load_and">'<tt>llvm.atomic.load.and.*</tt>' Intrinsic</a><br>
6648   <a name="int_atomic_load_nand">'<tt>llvm.atomic.load.nand.*</tt>' Intrinsic</a><br>
6649   <a name="int_atomic_load_or">'<tt>llvm.atomic.load.or.*</tt>' Intrinsic</a><br>
6650   <a name="int_atomic_load_xor">'<tt>llvm.atomic.load.xor.*</tt>' Intrinsic</a><br>
6651 </div>
6652
6653 <div class="doc_text">
6654
6655 <h5>Syntax:</h5>
6656 <p>These are overloaded intrinsics. You can
6657   use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>,
6658   <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer
6659   bit width and for different address spaces. Not all targets support all bit
6660   widths however.</p>
6661
6662 <pre>
6663   declare i8 @llvm.atomic.load.and.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6664   declare i16 @llvm.atomic.load.and.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6665   declare i32 @llvm.atomic.load.and.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6666   declare i64 @llvm.atomic.load.and.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6667 </pre>
6668
6669 <pre>
6670   declare i8 @llvm.atomic.load.or.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6671   declare i16 @llvm.atomic.load.or.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6672   declare i32 @llvm.atomic.load.or.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6673   declare i64 @llvm.atomic.load.or.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6674 </pre>
6675
6676 <pre>
6677   declare i8 @llvm.atomic.load.nand.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6678   declare i16 @llvm.atomic.load.nand.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6679   declare i32 @llvm.atomic.load.nand.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6680   declare i64 @llvm.atomic.load.nand.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6681 </pre>
6682
6683 <pre>
6684   declare i8 @llvm.atomic.load.xor.i8.p0i32( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6685   declare i16 @llvm.atomic.load.xor.i16.p0i32( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6686   declare i32 @llvm.atomic.load.xor.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6687   declare i64 @llvm.atomic.load.xor.i64.p0i32( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6688 </pre>
6689
6690 <h5>Overview:</h5>
6691 <p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to
6692    the value stored in memory at <tt>ptr</tt>. It yields the original value
6693    at <tt>ptr</tt>.</p>
6694
6695 <h5>Arguments:</h5>
6696 <p>These intrinsics take two arguments, the first a pointer to an integer value
6697    and the second an integer value. The result is also an integer value. These
6698    integer types can have any bit width, but they must all have the same bit
6699    width. The targets may only lower integer representations they support.</p>
6700
6701 <h5>Semantics:</h5>
6702 <p>These intrinsics does a series of operations atomically. They first load the
6703    value stored at <tt>ptr</tt>. They then do the bitwise
6704    operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the
6705    original value stored at <tt>ptr</tt>.</p>
6706
6707 <h5>Examples:</h5>
6708 <pre>
6709 %ptr      = malloc i32
6710         store i32 0x0F0F, %ptr
6711 %result0  = call i32 @llvm.atomic.load.nand.i32.p0i32( i32* %ptr, i32 0xFF )
6712                                 <i>; yields {i32}:result0 = 0x0F0F</i>
6713 %result1  = call i32 @llvm.atomic.load.and.i32.p0i32( i32* %ptr, i32 0xFF )
6714                                 <i>; yields {i32}:result1 = 0xFFFFFFF0</i>
6715 %result2  = call i32 @llvm.atomic.load.or.i32.p0i32( i32* %ptr, i32 0F )
6716                                 <i>; yields {i32}:result2 = 0xF0</i>
6717 %result3  = call i32 @llvm.atomic.load.xor.i32.p0i32( i32* %ptr, i32 0F )
6718                                 <i>; yields {i32}:result3 = FF</i>
6719 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = F0</i>
6720 </pre>
6721
6722 </div>
6723
6724 <!-- _______________________________________________________________________ -->
6725 <div class="doc_subsubsection">
6726   <a name="int_atomic_load_max">'<tt>llvm.atomic.load.max.*</tt>' Intrinsic</a><br>
6727   <a name="int_atomic_load_min">'<tt>llvm.atomic.load.min.*</tt>' Intrinsic</a><br>
6728   <a name="int_atomic_load_umax">'<tt>llvm.atomic.load.umax.*</tt>' Intrinsic</a><br>
6729   <a name="int_atomic_load_umin">'<tt>llvm.atomic.load.umin.*</tt>' Intrinsic</a><br>
6730 </div>
6731
6732 <div class="doc_text">
6733
6734 <h5>Syntax:</h5>
6735 <p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>,
6736    <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and
6737    <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different
6738    address spaces. Not all targets support all bit widths however.</p>
6739
6740 <pre>
6741   declare i8 @llvm.atomic.load.max.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6742   declare i16 @llvm.atomic.load.max.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6743   declare i32 @llvm.atomic.load.max.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6744   declare i64 @llvm.atomic.load.max.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6745 </pre>
6746
6747 <pre>
6748   declare i8 @llvm.atomic.load.min.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6749   declare i16 @llvm.atomic.load.min.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6750   declare i32 @llvm.atomic.load.min.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6751   declare i64 @llvm.atomic.load.min.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6752 </pre>
6753
6754 <pre>
6755   declare i8 @llvm.atomic.load.umax.i8.p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6756   declare i16 @llvm.atomic.load.umax.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6757   declare i32 @llvm.atomic.load.umax.i32.p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6758   declare i64 @llvm.atomic.load.umax.i64.p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6759 </pre>
6760
6761 <pre>
6762   declare i8 @llvm.atomic.load.umin.i8..p0i8( i8* &lt;ptr&gt;, i8 &lt;delta&gt; )
6763   declare i16 @llvm.atomic.load.umin.i16.p0i16( i16* &lt;ptr&gt;, i16 &lt;delta&gt; )
6764   declare i32 @llvm.atomic.load.umin.i32..p0i32( i32* &lt;ptr&gt;, i32 &lt;delta&gt; )
6765   declare i64 @llvm.atomic.load.umin.i64..p0i64( i64* &lt;ptr&gt;, i64 &lt;delta&gt; )
6766 </pre>
6767
6768 <h5>Overview:</h5>
6769 <p>These intrinsics takes the signed or unsigned minimum or maximum of 
6770    <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the
6771    original value at <tt>ptr</tt>.</p>
6772
6773 <h5>Arguments:</h5>
6774 <p>These intrinsics take two arguments, the first a pointer to an integer value
6775    and the second an integer value. The result is also an integer value. These
6776    integer types can have any bit width, but they must all have the same bit
6777    width. The targets may only lower integer representations they support.</p>
6778
6779 <h5>Semantics:</h5>
6780 <p>These intrinsics does a series of operations atomically. They first load the
6781    value stored at <tt>ptr</tt>. They then do the signed or unsigned min or
6782    max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They
6783    yield the original value stored at <tt>ptr</tt>.</p>
6784
6785 <h5>Examples:</h5>
6786 <pre>
6787 %ptr      = malloc i32
6788         store i32 7, %ptr
6789 %result0  = call i32 @llvm.atomic.load.min.i32.p0i32( i32* %ptr, i32 -2 )
6790                                 <i>; yields {i32}:result0 = 7</i>
6791 %result1  = call i32 @llvm.atomic.load.max.i32.p0i32( i32* %ptr, i32 8 )
6792                                 <i>; yields {i32}:result1 = -2</i>
6793 %result2  = call i32 @llvm.atomic.load.umin.i32.p0i32( i32* %ptr, i32 10 )
6794                                 <i>; yields {i32}:result2 = 8</i>
6795 %result3  = call i32 @llvm.atomic.load.umax.i32.p0i32( i32* %ptr, i32 30 )
6796                                 <i>; yields {i32}:result3 = 8</i>
6797 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 30</i>
6798 </pre>
6799
6800 </div>
6801
6802 <!-- ======================================================================= -->
6803 <div class="doc_subsection">
6804   <a name="int_general">General Intrinsics</a>
6805 </div>
6806
6807 <div class="doc_text">
6808
6809 <p>This class of intrinsics is designed to be generic and has no specific
6810    purpose.</p>
6811
6812 </div>
6813
6814 <!-- _______________________________________________________________________ -->
6815 <div class="doc_subsubsection">
6816   <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
6817 </div>
6818
6819 <div class="doc_text">
6820
6821 <h5>Syntax:</h5>
6822 <pre>
6823   declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6824 </pre>
6825
6826 <h5>Overview:</h5>
6827 <p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p>
6828
6829 <h5>Arguments:</h5>
6830 <p>The first argument is a pointer to a value, the second is a pointer to a
6831    global string, the third is a pointer to a global string which is the source
6832    file name, and the last argument is the line number.</p>
6833
6834 <h5>Semantics:</h5>
6835 <p>This intrinsic allows annotation of local variables with arbitrary strings.
6836    This can be useful for special purpose optimizations that want to look for
6837    these annotations.  These have no other defined use, they are ignored by code
6838    generation and optimization.</p>
6839
6840 </div>
6841
6842 <!-- _______________________________________________________________________ -->
6843 <div class="doc_subsubsection">
6844   <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
6845 </div>
6846
6847 <div class="doc_text">
6848
6849 <h5>Syntax:</h5>
6850 <p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on
6851    any integer bit width.</p>
6852
6853 <pre>
6854   declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6855   declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6856   declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6857   declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6858   declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt; )
6859 </pre>
6860
6861 <h5>Overview:</h5>
6862 <p>The '<tt>llvm.annotation</tt>' intrinsic.</p>
6863
6864 <h5>Arguments:</h5>
6865 <p>The first argument is an integer value (result of some expression), the
6866    second is a pointer to a global string, the third is a pointer to a global
6867    string which is the source file name, and the last argument is the line
6868    number.  It returns the value of the first argument.</p>
6869
6870 <h5>Semantics:</h5>
6871 <p>This intrinsic allows annotations to be put on arbitrary expressions with
6872    arbitrary strings.  This can be useful for special purpose optimizations that
6873    want to look for these annotations.  These have no other defined use, they
6874    are ignored by code generation and optimization.</p>
6875
6876 </div>
6877
6878 <!-- _______________________________________________________________________ -->
6879 <div class="doc_subsubsection">
6880   <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
6881 </div>
6882
6883 <div class="doc_text">
6884
6885 <h5>Syntax:</h5>
6886 <pre>
6887   declare void @llvm.trap()
6888 </pre>
6889
6890 <h5>Overview:</h5>
6891 <p>The '<tt>llvm.trap</tt>' intrinsic.</p>
6892
6893 <h5>Arguments:</h5>
6894 <p>None.</p>
6895
6896 <h5>Semantics:</h5>
6897 <p>This intrinsics is lowered to the target dependent trap instruction. If the
6898    target does not have a trap instruction, this intrinsic will be lowered to
6899    the call of the <tt>abort()</tt> function.</p>
6900
6901 </div>
6902
6903 <!-- _______________________________________________________________________ -->
6904 <div class="doc_subsubsection">
6905   <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
6906 </div>
6907
6908 <div class="doc_text">
6909
6910 <h5>Syntax:</h5>
6911 <pre>
6912   declare void @llvm.stackprotector( i8* &lt;guard&gt;, i8** &lt;slot&gt; )
6913 </pre>
6914
6915 <h5>Overview:</h5>
6916 <p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and
6917    stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to
6918    ensure that it is placed on the stack before local variables.</p>
6919
6920 <h5>Arguments:</h5>
6921 <p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer
6922    arguments. The first argument is the value loaded from the stack
6923    guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt>
6924    that has enough space to hold the value of the guard.</p>
6925
6926 <h5>Semantics:</h5>
6927 <p>This intrinsic causes the prologue/epilogue inserter to force the position of
6928    the <tt>AllocaInst</tt> stack slot to be before local variables on the
6929    stack. This is to ensure that if a local variable on the stack is
6930    overwritten, it will destroy the value of the guard. When the function exits,
6931    the guard on the stack is checked against the original guard. If they're
6932    different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
6933    function.</p>
6934
6935 </div>
6936
6937 <!-- *********************************************************************** -->
6938 <hr>
6939 <address>
6940   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
6941   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
6942   <a href="http://validator.w3.org/check/referer"><img
6943   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
6944
6945   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
6946   <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
6947   Last modified: $Date$
6948 </address>
6949
6950 </body>
6951 </html>