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