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