Fix some validation errors.
[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 <h1>LLVM Language Reference Manual</h1>
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_linker_private_weak">'<tt>linker_private_weak</tt>' Linkage</a></li>
28           <li><a href="#linkage_linker_private_weak_def_auto">'<tt>linker_private_weak_def_auto</tt>' Linkage</a></li>
29           <li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
30           <li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
31           <li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
32           <li><a href="#linkage_common">'<tt>common</tt>' Linkage</a></li>
33           <li><a href="#linkage_weak">'<tt>weak</tt>' Linkage</a></li>
34           <li><a href="#linkage_appending">'<tt>appending</tt>' Linkage</a></li>
35           <li><a href="#linkage_externweak">'<tt>extern_weak</tt>' Linkage</a></li>
36           <li><a href="#linkage_linkonce_odr">'<tt>linkonce_odr</tt>' Linkage</a></li>
37           <li><a href="#linkage_weak">'<tt>weak_odr</tt>' Linkage</a></li>
38           <li><a href="#linkage_external">'<tt>externally visible</tt>' Linkage</a></li>
39           <li><a href="#linkage_dllimport">'<tt>dllimport</tt>' Linkage</a></li>
40           <li><a href="#linkage_dllexport">'<tt>dllexport</tt>' Linkage</a></li>
41         </ol>
42       </li>
43       <li><a href="#callingconv">Calling Conventions</a></li>
44       <li><a href="#namedtypes">Named Types</a></li>
45       <li><a href="#globalvars">Global Variables</a></li>
46       <li><a href="#functionstructure">Functions</a></li>
47       <li><a href="#aliasstructure">Aliases</a></li>
48       <li><a href="#namedmetadatastructure">Named Metadata</a></li>
49       <li><a href="#paramattrs">Parameter Attributes</a></li>
50       <li><a href="#fnattrs">Function Attributes</a></li>
51       <li><a href="#gc">Garbage Collector Names</a></li>
52       <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
53       <li><a href="#datalayout">Data Layout</a></li>
54       <li><a href="#pointeraliasing">Pointer Aliasing Rules</a></li>
55       <li><a href="#volatile">Volatile Memory Accesses</a></li>
56       <li><a href="#memmodel">Memory Model for Concurrent Operations</a></li>
57       <li><a href="#ordering">Atomic Memory Ordering Constraints</a></li>
58     </ol>
59   </li>
60   <li><a href="#typesystem">Type System</a>
61     <ol>
62       <li><a href="#t_classifications">Type Classifications</a></li>
63       <li><a href="#t_primitive">Primitive Types</a>
64         <ol>
65           <li><a href="#t_integer">Integer Type</a></li>
66           <li><a href="#t_floating">Floating Point Types</a></li>
67           <li><a href="#t_x86mmx">X86mmx Type</a></li>
68           <li><a href="#t_void">Void Type</a></li>
69           <li><a href="#t_label">Label Type</a></li>
70           <li><a href="#t_metadata">Metadata Type</a></li>
71         </ol>
72       </li>
73       <li><a href="#t_derived">Derived Types</a>
74         <ol>
75           <li><a href="#t_aggregate">Aggregate Types</a>
76             <ol>
77               <li><a href="#t_array">Array Type</a></li>
78               <li><a href="#t_struct">Structure Type</a></li>
79               <li><a href="#t_opaque">Opaque Structure Types</a></li>
80               <li><a href="#t_vector">Vector Type</a></li>
81             </ol>
82           </li>
83           <li><a href="#t_function">Function Type</a></li>
84           <li><a href="#t_pointer">Pointer Type</a></li>
85         </ol>
86       </li>
87     </ol>
88   </li>
89   <li><a href="#constants">Constants</a>
90     <ol>
91       <li><a href="#simpleconstants">Simple Constants</a></li>
92       <li><a href="#complexconstants">Complex Constants</a></li>
93       <li><a href="#globalconstants">Global Variable and Function Addresses</a></li>
94       <li><a href="#undefvalues">Undefined Values</a></li>
95       <li><a href="#trapvalues">Trap Values</a></li>
96       <li><a href="#blockaddress">Addresses of Basic Blocks</a></li>
97       <li><a href="#constantexprs">Constant Expressions</a></li>
98     </ol>
99   </li>
100   <li><a href="#othervalues">Other Values</a>
101     <ol>
102       <li><a href="#inlineasm">Inline Assembler Expressions</a></li>
103       <li><a href="#metadata">Metadata Nodes and Metadata Strings</a></li>
104     </ol>
105   </li>
106   <li><a href="#intrinsic_globals">Intrinsic Global Variables</a>
107     <ol>
108       <li><a href="#intg_used">The '<tt>llvm.used</tt>' Global Variable</a></li>
109       <li><a href="#intg_compiler_used">The '<tt>llvm.compiler.used</tt>'
110           Global Variable</a></li>
111       <li><a href="#intg_global_ctors">The '<tt>llvm.global_ctors</tt>'
112          Global Variable</a></li>
113       <li><a href="#intg_global_dtors">The '<tt>llvm.global_dtors</tt>'
114          Global Variable</a></li>
115     </ol>
116   </li>
117   <li><a href="#instref">Instruction Reference</a>
118     <ol>
119       <li><a href="#terminators">Terminator Instructions</a>
120         <ol>
121           <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li>
122           <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li>
123           <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li>
124           <li><a href="#i_indirectbr">'<tt>indirectbr</tt>' Instruction</a></li>
125           <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li>
126           <li><a href="#i_unwind">'<tt>unwind</tt>'  Instruction</a></li>
127           <li><a href="#i_resume">'<tt>resume</tt>'  Instruction</a></li>
128           <li><a href="#i_unreachable">'<tt>unreachable</tt>' Instruction</a></li>
129         </ol>
130       </li>
131       <li><a href="#binaryops">Binary Operations</a>
132         <ol>
133           <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li>
134           <li><a href="#i_fadd">'<tt>fadd</tt>' Instruction</a></li>
135           <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
136           <li><a href="#i_fsub">'<tt>fsub</tt>' Instruction</a></li>
137           <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
138           <li><a href="#i_fmul">'<tt>fmul</tt>' Instruction</a></li>
139           <li><a href="#i_udiv">'<tt>udiv</tt>' Instruction</a></li>
140           <li><a href="#i_sdiv">'<tt>sdiv</tt>' Instruction</a></li>
141           <li><a href="#i_fdiv">'<tt>fdiv</tt>' Instruction</a></li>
142           <li><a href="#i_urem">'<tt>urem</tt>' Instruction</a></li>
143           <li><a href="#i_srem">'<tt>srem</tt>' Instruction</a></li>
144           <li><a href="#i_frem">'<tt>frem</tt>' Instruction</a></li>
145         </ol>
146       </li>
147       <li><a href="#bitwiseops">Bitwise Binary Operations</a>
148         <ol>
149           <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
150           <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
151           <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
152           <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
153           <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
154           <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
155         </ol>
156       </li>
157       <li><a href="#vectorops">Vector Operations</a>
158         <ol>
159           <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li>
160           <li><a href="#i_insertelement">'<tt>insertelement</tt>' Instruction</a></li>
161           <li><a href="#i_shufflevector">'<tt>shufflevector</tt>' Instruction</a></li>
162         </ol>
163       </li>
164       <li><a href="#aggregateops">Aggregate Operations</a>
165         <ol>
166           <li><a href="#i_extractvalue">'<tt>extractvalue</tt>' Instruction</a></li>
167           <li><a href="#i_insertvalue">'<tt>insertvalue</tt>' Instruction</a></li>
168         </ol>
169       </li>
170       <li><a href="#memoryops">Memory Access and Addressing Operations</a>
171         <ol>
172           <li><a href="#i_alloca">'<tt>alloca</tt>' Instruction</a></li>
173          <li><a href="#i_load">'<tt>load</tt>' Instruction</a></li>
174          <li><a href="#i_store">'<tt>store</tt>' Instruction</a></li>
175          <li><a href="#i_fence">'<tt>fence</tt>' Instruction</a></li>
176          <li><a href="#i_cmpxchg">'<tt>cmpxchg</tt>' Instruction</a></li>
177          <li><a href="#i_atomicrmw">'<tt>atomicrmw</tt>' Instruction</a></li>
178          <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
179         </ol>
180       </li>
181       <li><a href="#convertops">Conversion Operations</a>
182         <ol>
183           <li><a href="#i_trunc">'<tt>trunc .. to</tt>' Instruction</a></li>
184           <li><a href="#i_zext">'<tt>zext .. to</tt>' Instruction</a></li>
185           <li><a href="#i_sext">'<tt>sext .. to</tt>' Instruction</a></li>
186           <li><a href="#i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a></li>
187           <li><a href="#i_fpext">'<tt>fpext .. to</tt>' Instruction</a></li>
188           <li><a href="#i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a></li>
189           <li><a href="#i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a></li>
190           <li><a href="#i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a></li>
191           <li><a href="#i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a></li>
192           <li><a href="#i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a></li>
193           <li><a href="#i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a></li>
194           <li><a href="#i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a></li>
195         </ol>
196       </li>
197       <li><a href="#otherops">Other Operations</a>
198         <ol>
199           <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li>
200           <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li>
201           <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
202           <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
203           <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
204           <li><a href="#i_va_arg">'<tt>va_arg</tt>'  Instruction</a></li>
205         </ol>
206       </li>
207     </ol>
208   </li>
209   <li><a href="#intrinsics">Intrinsic Functions</a>
210     <ol>
211       <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
212         <ol>
213           <li><a href="#int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
214           <li><a href="#int_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
215           <li><a href="#int_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
216         </ol>
217       </li>
218       <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
219         <ol>
220           <li><a href="#int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
221           <li><a href="#int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
222           <li><a href="#int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
223         </ol>
224       </li>
225       <li><a href="#int_codegen">Code Generator Intrinsics</a>
226         <ol>
227           <li><a href="#int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
228           <li><a href="#int_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
229           <li><a href="#int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li>
230           <li><a href="#int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li>
231           <li><a href="#int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
232           <li><a href="#int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
233           <li><a href="#int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a></li>
234         </ol>
235       </li>
236       <li><a href="#int_libc">Standard C Library Intrinsics</a>
237         <ol>
238           <li><a href="#int_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li>
239           <li><a href="#int_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li>
240           <li><a href="#int_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li>
241           <li><a href="#int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li>
242           <li><a href="#int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a></li>
243           <li><a href="#int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a></li>
244           <li><a href="#int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a></li>
245           <li><a href="#int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a></li>
246           <li><a href="#int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a></li>
247           <li><a href="#int_log">'<tt>llvm.log.*</tt>' Intrinsic</a></li>
248           <li><a href="#int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a></li>
249         </ol>
250       </li>
251       <li><a href="#int_manip">Bit Manipulation Intrinsics</a>
252         <ol>
253           <li><a href="#int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a></li>
254           <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li>
255           <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li>
256           <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li>
257         </ol>
258       </li>
259       <li><a href="#int_overflow">Arithmetic with Overflow Intrinsics</a>
260         <ol>
261           <li><a href="#int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt> Intrinsics</a></li>
262           <li><a href="#int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt> Intrinsics</a></li>
263           <li><a href="#int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt> Intrinsics</a></li>
264           <li><a href="#int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt> Intrinsics</a></li>
265           <li><a href="#int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt> Intrinsics</a></li>
266           <li><a href="#int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt> Intrinsics</a></li>
267         </ol>
268       </li>
269       <li><a href="#int_fp16">Half Precision Floating Point Intrinsics</a>
270         <ol>
271           <li><a href="#int_convert_to_fp16">'<tt>llvm.convert.to.fp16</tt>' Intrinsic</a></li>
272           <li><a href="#int_convert_from_fp16">'<tt>llvm.convert.from.fp16</tt>' Intrinsic</a></li>
273         </ol>
274       </li>
275       <li><a href="#int_debugger">Debugger intrinsics</a></li>
276       <li><a href="#int_eh">Exception Handling intrinsics</a></li>
277       <li><a href="#int_trampoline">Trampoline Intrinsic</a>
278         <ol>
279           <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
280         </ol>
281       </li>
282       <li><a href="#int_atomics">Atomic intrinsics</a>
283         <ol>
284           <li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
285           <li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li>
286           <li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
287           <li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li>
288           <li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li>
289           <li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li>
290           <li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li>
291           <li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li>
292           <li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li>
293           <li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li>
294           <li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li>
295           <li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li>
296           <li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li>
297         </ol>
298       </li>
299       <li><a href="#int_memorymarkers">Memory Use Markers</a>
300         <ol>
301           <li><a href="#int_lifetime_start"><tt>llvm.lifetime.start</tt></a></li>
302           <li><a href="#int_lifetime_end"><tt>llvm.lifetime.end</tt></a></li>
303           <li><a href="#int_invariant_start"><tt>llvm.invariant.start</tt></a></li>
304           <li><a href="#int_invariant_end"><tt>llvm.invariant.end</tt></a></li>
305         </ol>
306       </li>
307       <li><a href="#int_general">General intrinsics</a>
308         <ol>
309           <li><a href="#int_var_annotation">
310             '<tt>llvm.var.annotation</tt>' Intrinsic</a></li>
311           <li><a href="#int_annotation">
312             '<tt>llvm.annotation.*</tt>' Intrinsic</a></li>
313           <li><a href="#int_trap">
314             '<tt>llvm.trap</tt>' Intrinsic</a></li>
315           <li><a href="#int_stackprotector">
316             '<tt>llvm.stackprotector</tt>' Intrinsic</a></li>
317           <li><a href="#int_objectsize">
318             '<tt>llvm.objectsize</tt>' Intrinsic</a></li>
319         </ol>
320       </li>
321     </ol>
322   </li>
323 </ol>
324
325 <div class="doc_author">
326   <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
327             and <a href="mailto:vadve@cs.uiuc.edu">Vikram Adve</a></p>
328 </div>
329
330 <!-- *********************************************************************** -->
331 <h2><a name="abstract">Abstract</a></h2>
332 <!-- *********************************************************************** -->
333
334 <div>
335
336 <p>This document is a reference manual for the LLVM assembly language. LLVM is
337    a Static Single Assignment (SSA) based representation that provides type
338    safety, low-level operations, flexibility, and the capability of representing
339    'all' high-level languages cleanly.  It is the common code representation
340    used throughout all phases of the LLVM compilation strategy.</p>
341
342 </div>
343
344 <!-- *********************************************************************** -->
345 <h2><a name="introduction">Introduction</a></h2>
346 <!-- *********************************************************************** -->
347
348 <div>
349
350 <p>The LLVM code representation is designed to be used in three different forms:
351    as an in-memory compiler IR, as an on-disk bitcode representation (suitable
352    for fast loading by a Just-In-Time compiler), and as a human readable
353    assembly language representation.  This allows LLVM to provide a powerful
354    intermediate representation for efficient compiler transformations and
355    analysis, while providing a natural means to debug and visualize the
356    transformations.  The three different forms of LLVM are all equivalent.  This
357    document describes the human readable representation and notation.</p>
358
359 <p>The LLVM representation aims to be light-weight and low-level while being
360    expressive, typed, and extensible at the same time.  It aims to be a
361    "universal IR" of sorts, by being at a low enough level that high-level ideas
362    may be cleanly mapped to it (similar to how microprocessors are "universal
363    IR's", allowing many source languages to be mapped to them).  By providing
364    type information, LLVM can be used as the target of optimizations: for
365    example, through pointer analysis, it can be proven that a C automatic
366    variable is never accessed outside of the current function, allowing it to
367    be promoted to a simple SSA value instead of a memory location.</p>
368
369 <!-- _______________________________________________________________________ -->
370 <h4>
371   <a name="wellformed">Well-Formedness</a>
372 </h4>
373
374 <div>
375
376 <p>It is important to note that this document describes 'well formed' LLVM
377    assembly language.  There is a difference between what the parser accepts and
378    what is considered 'well formed'.  For example, the following instruction is
379    syntactically okay, but not well formed:</p>
380
381 <pre class="doc_code">
382 %x = <a href="#i_add">add</a> i32 1, %x
383 </pre>
384
385 <p>because the definition of <tt>%x</tt> does not dominate all of its uses. The
386    LLVM infrastructure provides a verification pass that may be used to verify
387    that an LLVM module is well formed.  This pass is automatically run by the
388    parser after parsing input assembly and by the optimizer before it outputs
389    bitcode.  The violations pointed out by the verifier pass indicate bugs in
390    transformation passes or input to the parser.</p>
391
392 </div>
393
394 </div>
395
396 <!-- Describe the typesetting conventions here. -->
397
398 <!-- *********************************************************************** -->
399 <h2><a name="identifiers">Identifiers</a></h2>
400 <!-- *********************************************************************** -->
401
402 <div>
403
404 <p>LLVM identifiers come in two basic types: global and local. Global
405    identifiers (functions, global variables) begin with the <tt>'@'</tt>
406    character. Local identifiers (register names, types) begin with
407    the <tt>'%'</tt> character. Additionally, there are three different formats
408    for identifiers, for different purposes:</p>
409
410 <ol>
411   <li>Named values are represented as a string of characters with their prefix.
412       For example, <tt>%foo</tt>, <tt>@DivisionByZero</tt>,
413       <tt>%a.really.long.identifier</tt>. The actual regular expression used is
414       '<tt>[%@][a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.  Identifiers which require
415       other characters in their names can be surrounded with quotes. Special
416       characters may be escaped using <tt>"\xx"</tt> where <tt>xx</tt> is the
417       ASCII code for the character in hexadecimal.  In this way, any character
418       can be used in a name value, even quotes themselves.</li>
419
420   <li>Unnamed values are represented as an unsigned numeric value with their
421       prefix.  For example, <tt>%12</tt>, <tt>@2</tt>, <tt>%44</tt>.</li>
422
423   <li>Constants, which are described in a <a href="#constants">section about
424       constants</a>, below.</li>
425 </ol>
426
427 <p>LLVM requires that values start with a prefix for two reasons: Compilers
428    don't need to worry about name clashes with reserved words, and the set of
429    reserved words may be expanded in the future without penalty.  Additionally,
430    unnamed identifiers allow a compiler to quickly come up with a temporary
431    variable without having to avoid symbol table conflicts.</p>
432
433 <p>Reserved words in LLVM are very similar to reserved words in other
434    languages. There are keywords for different opcodes
435    ('<tt><a href="#i_add">add</a></tt>',
436    '<tt><a href="#i_bitcast">bitcast</a></tt>',
437    '<tt><a href="#i_ret">ret</a></tt>', etc...), for primitive type names
438    ('<tt><a href="#t_void">void</a></tt>',
439    '<tt><a href="#t_primitive">i32</a></tt>', etc...), and others.  These
440    reserved words cannot conflict with variable names, because none of them
441    start with a prefix character (<tt>'%'</tt> or <tt>'@'</tt>).</p>
442
443 <p>Here is an example of LLVM code to multiply the integer variable
444    '<tt>%X</tt>' by 8:</p>
445
446 <p>The easy way:</p>
447
448 <pre class="doc_code">
449 %result = <a href="#i_mul">mul</a> i32 %X, 8
450 </pre>
451
452 <p>After strength reduction:</p>
453
454 <pre class="doc_code">
455 %result = <a href="#i_shl">shl</a> i32 %X, i8 3
456 </pre>
457
458 <p>And the hard way:</p>
459
460 <pre class="doc_code">
461 %0 = <a href="#i_add">add</a> i32 %X, %X           <i>; yields {i32}:%0</i>
462 %1 = <a href="#i_add">add</a> i32 %0, %0           <i>; yields {i32}:%1</i>
463 %result = <a href="#i_add">add</a> i32 %1, %1
464 </pre>
465
466 <p>This last way of multiplying <tt>%X</tt> by 8 illustrates several important
467    lexical features of LLVM:</p>
468
469 <ol>
470   <li>Comments are delimited with a '<tt>;</tt>' and go until the end of
471       line.</li>
472
473   <li>Unnamed temporaries are created when the result of a computation is not
474       assigned to a named value.</li>
475
476   <li>Unnamed temporaries are numbered sequentially</li>
477 </ol>
478
479 <p>It also shows a convention that we follow in this document.  When
480    demonstrating instructions, we will follow an instruction with a comment that
481    defines the type and name of value produced.  Comments are shown in italic
482    text.</p>
483
484 </div>
485
486 <!-- *********************************************************************** -->
487 <h2><a name="highlevel">High Level Structure</a></h2>
488 <!-- *********************************************************************** -->
489 <div>
490 <!-- ======================================================================= -->
491 <h3>
492   <a name="modulestructure">Module Structure</a>
493 </h3>
494
495 <div>
496
497 <p>LLVM programs are composed of "Module"s, each of which is a translation unit
498    of the input programs.  Each module consists of functions, global variables,
499    and symbol table entries.  Modules may be combined together with the LLVM
500    linker, which merges function (and global variable) definitions, resolves
501    forward declarations, and merges symbol table entries. Here is an example of
502    the "hello world" module:</p>
503
504 <pre class="doc_code">
505 <i>; Declare the string constant as a global constant.</i>&nbsp;
506 <a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a>&nbsp;<a href="#globalvars">constant</a>&nbsp;<a href="#t_array">[13 x i8]</a> c"hello world\0A\00"      <i>; [13 x i8]*</i>&nbsp;
507
508 <i>; External declaration of the puts function</i>&nbsp;
509 <a href="#functionstructure">declare</a> i32 @puts(i8*)                                      <i>; i32 (i8*)* </i>&nbsp;
510
511 <i>; Definition of main function</i>
512 define i32 @main() {   <i>; i32()* </i>&nbsp;
513   <i>; Convert [13 x i8]* to i8  *...</i>&nbsp;
514   %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0   <i>; i8*</i>&nbsp;
515
516   <i>; Call puts function to write out the string to stdout.</i>&nbsp;
517   <a href="#i_call">call</a> i32 @puts(i8* %cast210)           <i>; i32</i>&nbsp;
518   <a href="#i_ret">ret</a> i32 0&nbsp;
519 }
520
521 <i>; Named metadata</i>
522 !1 = metadata !{i32 41}
523 !foo = !{!1, null}
524 </pre>
525
526 <p>This example is made up of a <a href="#globalvars">global variable</a> named
527    "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function,
528    a <a href="#functionstructure">function definition</a> for
529    "<tt>main</tt>" and <a href="#namedmetadatastructure">named metadata</a> 
530    "<tt>foo"</tt>.</p>
531
532 <p>In general, a module is made up of a list of global values, where both
533    functions and global variables are global values.  Global values are
534    represented by a pointer to a memory location (in this case, a pointer to an
535    array of char, and a pointer to a function), and have one of the
536    following <a href="#linkage">linkage types</a>.</p>
537
538 </div>
539
540 <!-- ======================================================================= -->
541 <h3>
542   <a name="linkage">Linkage Types</a>
543 </h3>
544
545 <div>
546
547 <p>All Global Variables and Functions have one of the following types of
548    linkage:</p>
549
550 <dl>
551   <dt><tt><b><a name="linkage_private">private</a></b></tt></dt>
552   <dd>Global values with "<tt>private</tt>" linkage are only directly accessible
553       by objects in the current module. In particular, linking code into a
554       module with an private global value may cause the private to be renamed as
555       necessary to avoid collisions.  Because the symbol is private to the
556       module, all references can be updated. This doesn't show up in any symbol
557       table in the object file.</dd>
558
559   <dt><tt><b><a name="linkage_linker_private">linker_private</a></b></tt></dt>
560   <dd>Similar to <tt>private</tt>, but the symbol is passed through the
561       assembler and evaluated by the linker. Unlike normal strong symbols, they
562       are removed by the linker from the final linked image (executable or
563       dynamic library).</dd>
564
565   <dt><tt><b><a name="linkage_linker_private_weak">linker_private_weak</a></b></tt></dt>
566   <dd>Similar to "<tt>linker_private</tt>", but the symbol is weak. Note that
567       <tt>linker_private_weak</tt> symbols are subject to coalescing by the
568       linker. The symbols are removed by the linker from the final linked image
569       (executable or dynamic library).</dd>
570
571   <dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt>
572   <dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address
573       of the object is not taken. For instance, functions that had an inline
574       definition, but the compiler decided not to inline it. Note,
575       unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>,
576       <tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt>
577       visibility.  The symbols are removed by the linker from the final linked
578       image (executable or dynamic library).</dd>
579
580   <dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt>
581   <dd>Similar to private, but the value shows as a local symbol
582       (<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
583       corresponds to the notion of the '<tt>static</tt>' keyword in C.</dd>
584
585   <dt><tt><b><a name="linkage_available_externally">available_externally</a></b></tt></dt>
586   <dd>Globals with "<tt>available_externally</tt>" linkage are never emitted
587       into the object file corresponding to the LLVM module.  They exist to
588       allow inlining and other optimizations to take place given knowledge of
589       the definition of the global, which is known to be somewhere outside the
590       module.  Globals with <tt>available_externally</tt> linkage are allowed to
591       be discarded at will, and are otherwise the same as <tt>linkonce_odr</tt>.
592       This linkage type is only allowed on definitions, not declarations.</dd>
593
594   <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt></dt>
595   <dd>Globals with "<tt>linkonce</tt>" linkage are merged with other globals of
596       the same name when linkage occurs.  This can be used to implement
597       some forms of inline functions, templates, or other code which must be
598       generated in each translation unit that uses it, but where the body may
599       be overridden with a more definitive definition later.  Unreferenced
600       <tt>linkonce</tt> globals are allowed to be discarded.  Note that
601       <tt>linkonce</tt> linkage does not actually allow the optimizer to
602       inline the body of this function into callers because it doesn't know if
603       this definition of the function is the definitive definition within the
604       program or whether it will be overridden by a stronger definition.
605       To enable inlining and other optimizations, use "<tt>linkonce_odr</tt>"
606       linkage.</dd>
607
608   <dt><tt><b><a name="linkage_weak">weak</a></b></tt></dt>
609   <dd>"<tt>weak</tt>" linkage has the same merging semantics as
610       <tt>linkonce</tt> linkage, except that unreferenced globals with
611       <tt>weak</tt> linkage may not be discarded.  This is used for globals that
612       are declared "weak" in C source code.</dd>
613
614   <dt><tt><b><a name="linkage_common">common</a></b></tt></dt>
615   <dd>"<tt>common</tt>" linkage is most similar to "<tt>weak</tt>" linkage, but
616       they are used for tentative definitions in C, such as "<tt>int X;</tt>" at
617       global scope.
618       Symbols with "<tt>common</tt>" linkage are merged in the same way as
619       <tt>weak symbols</tt>, and they may not be deleted if unreferenced.
620       <tt>common</tt> symbols may not have an explicit section,
621       must have a zero initializer, and may not be marked '<a
622       href="#globalvars"><tt>constant</tt></a>'.  Functions and aliases may not
623       have common linkage.</dd>
624
625
626   <dt><tt><b><a name="linkage_appending">appending</a></b></tt></dt>
627   <dd>"<tt>appending</tt>" linkage may only be applied to global variables of
628       pointer to array type.  When two global variables with appending linkage
629       are linked together, the two global arrays are appended together.  This is
630       the LLVM, typesafe, equivalent of having the system linker append together
631       "sections" with identical names when .o files are linked.</dd>
632
633   <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt></dt>
634   <dd>The semantics of this linkage follow the ELF object file model: the symbol
635       is weak until linked, if not linked, the symbol becomes null instead of
636       being an undefined reference.</dd>
637
638   <dt><tt><b><a name="linkage_linkonce_odr">linkonce_odr</a></b></tt></dt>
639   <dt><tt><b><a name="linkage_weak_odr">weak_odr</a></b></tt></dt>
640   <dd>Some languages allow differing globals to be merged, such as two functions
641       with different semantics.  Other languages, such as <tt>C++</tt>, ensure
642       that only equivalent globals are ever merged (the "one definition rule"
643       &mdash; "ODR").  Such languages can use the <tt>linkonce_odr</tt>
644       and <tt>weak_odr</tt> linkage types to indicate that the global will only
645       be merged with equivalent globals.  These linkage types are otherwise the
646       same as their non-<tt>odr</tt> versions.</dd>
647
648   <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
649   <dd>If none of the above identifiers are used, the global is externally
650       visible, meaning that it participates in linkage and can be used to
651       resolve external symbol references.</dd>
652 </dl>
653
654 <p>The next two types of linkage are targeted for Microsoft Windows platform
655    only. They are designed to support importing (exporting) symbols from (to)
656    DLLs (Dynamic Link Libraries).</p>
657
658 <dl>
659   <dt><tt><b><a name="linkage_dllimport">dllimport</a></b></tt></dt>
660   <dd>"<tt>dllimport</tt>" linkage causes the compiler to reference a function
661       or variable via a global pointer to a pointer that is set up by the DLL
662       exporting the symbol. On Microsoft Windows targets, the pointer name is
663       formed by combining <code>__imp_</code> and the function or variable
664       name.</dd>
665
666   <dt><tt><b><a name="linkage_dllexport">dllexport</a></b></tt></dt>
667   <dd>"<tt>dllexport</tt>" linkage causes the compiler to provide a global
668       pointer to a pointer in a DLL, so that it can be referenced with the
669       <tt>dllimport</tt> attribute. On Microsoft Windows targets, the pointer
670       name is formed by combining <code>__imp_</code> and the function or
671       variable name.</dd>
672 </dl>
673
674 <p>For example, since the "<tt>.LC0</tt>" variable is defined to be internal, if
675    another module defined a "<tt>.LC0</tt>" variable and was linked with this
676    one, one of the two would be renamed, preventing a collision.  Since
677    "<tt>main</tt>" and "<tt>puts</tt>" are external (i.e., lacking any linkage
678    declarations), they are accessible outside of the current module.</p>
679
680 <p>It is illegal for a function <i>declaration</i> to have any linkage type
681    other than "externally visible", <tt>dllimport</tt>
682    or <tt>extern_weak</tt>.</p>
683
684 <p>Aliases can have only <tt>external</tt>, <tt>internal</tt>, <tt>weak</tt>
685    or <tt>weak_odr</tt> linkages.</p>
686
687 </div>
688
689 <!-- ======================================================================= -->
690 <h3>
691   <a name="callingconv">Calling Conventions</a>
692 </h3>
693
694 <div>
695
696 <p>LLVM <a href="#functionstructure">functions</a>, <a href="#i_call">calls</a>
697    and <a href="#i_invoke">invokes</a> can all have an optional calling
698    convention specified for the call.  The calling convention of any pair of
699    dynamic caller/callee must match, or the behavior of the program is
700    undefined.  The following calling conventions are supported by LLVM, and more
701    may be added in the future:</p>
702
703 <dl>
704   <dt><b>"<tt>ccc</tt>" - The C calling convention</b>:</dt>
705   <dd>This calling convention (the default if no other calling convention is
706       specified) matches the target C calling conventions.  This calling
707       convention supports varargs function calls and tolerates some mismatch in
708       the declared prototype and implemented declaration of the function (as
709       does normal C).</dd>
710
711   <dt><b>"<tt>fastcc</tt>" - The fast calling convention</b>:</dt>
712   <dd>This calling convention attempts to make calls as fast as possible
713       (e.g. by passing things in registers).  This calling convention allows the
714       target to use whatever tricks it wants to produce fast code for the
715       target, without having to conform to an externally specified ABI
716       (Application Binary Interface).
717       <a href="CodeGenerator.html#tailcallopt">Tail calls can only be optimized
718       when this or the GHC convention is used.</a>  This calling convention
719       does not support varargs and requires the prototype of all callees to
720       exactly match the prototype of the function definition.</dd>
721
722   <dt><b>"<tt>coldcc</tt>" - The cold calling convention</b>:</dt>
723   <dd>This calling convention attempts to make code in the caller as efficient
724       as possible under the assumption that the call is not commonly executed.
725       As such, these calls often preserve all registers so that the call does
726       not break any live ranges in the caller side.  This calling convention
727       does not support varargs and requires the prototype of all callees to
728       exactly match the prototype of the function definition.</dd>
729
730   <dt><b>"<tt>cc <em>10</em></tt>" - GHC convention</b>:</dt>
731   <dd>This calling convention has been implemented specifically for use by the
732       <a href="http://www.haskell.org/ghc">Glasgow Haskell Compiler (GHC)</a>.
733       It passes everything in registers, going to extremes to achieve this by
734       disabling callee save registers. This calling convention should not be
735       used lightly but only for specific situations such as an alternative to
736       the <em>register pinning</em> performance technique often used when
737       implementing functional programming languages.At the moment only X86
738       supports this convention and it has the following limitations:
739       <ul>
740         <li>On <em>X86-32</em> only supports up to 4 bit type parameters. No
741             floating point types are supported.</li>
742         <li>On <em>X86-64</em> only supports up to 10 bit type parameters and
743             6 floating point parameters.</li>
744       </ul>
745       This calling convention supports
746       <a href="CodeGenerator.html#tailcallopt">tail call optimization</a> but
747       requires both the caller and callee are using it.
748   </dd>
749
750   <dt><b>"<tt>cc &lt;<em>n</em>&gt;</tt>" - Numbered convention</b>:</dt>
751   <dd>Any calling convention may be specified by number, allowing
752       target-specific calling conventions to be used.  Target specific calling
753       conventions start at 64.</dd>
754 </dl>
755
756 <p>More calling conventions can be added/defined on an as-needed basis, to
757    support Pascal conventions or any other well-known target-independent
758    convention.</p>
759
760 </div>
761
762 <!-- ======================================================================= -->
763 <h3>
764   <a name="visibility">Visibility Styles</a>
765 </h3>
766
767 <div>
768
769 <p>All Global Variables and Functions have one of the following visibility
770    styles:</p>
771
772 <dl>
773   <dt><b>"<tt>default</tt>" - Default style</b>:</dt>
774   <dd>On targets that use the ELF object file format, default visibility means
775       that the declaration is visible to other modules and, in shared libraries,
776       means that the declared entity may be overridden. On Darwin, default
777       visibility means that the declaration is visible to other modules. Default
778       visibility corresponds to "external linkage" in the language.</dd>
779
780   <dt><b>"<tt>hidden</tt>" - Hidden style</b>:</dt>
781   <dd>Two declarations of an object with hidden visibility refer to the same
782       object if they are in the same shared object. Usually, hidden visibility
783       indicates that the symbol will not be placed into the dynamic symbol
784       table, so no other module (executable or shared library) can reference it
785       directly.</dd>
786
787   <dt><b>"<tt>protected</tt>" - Protected style</b>:</dt>
788   <dd>On ELF, protected visibility indicates that the symbol will be placed in
789       the dynamic symbol table, but that references within the defining module
790       will bind to the local symbol. That is, the symbol cannot be overridden by
791       another module.</dd>
792 </dl>
793
794 </div>
795
796 <!-- ======================================================================= -->
797 <h3>
798   <a name="namedtypes">Named Types</a>
799 </h3>
800
801 <div>
802
803 <p>LLVM IR allows you to specify name aliases for certain types.  This can make
804    it easier to read the IR and make the IR more condensed (particularly when
805    recursive types are involved).  An example of a name specification is:</p>
806
807 <pre class="doc_code">
808 %mytype = type { %mytype*, i32 }
809 </pre>
810
811 <p>You may give a name to any <a href="#typesystem">type</a> except
812    "<a href="#t_void">void</a>".  Type name aliases may be used anywhere a type
813    is expected with the syntax "%mytype".</p>
814
815 <p>Note that type names are aliases for the structural type that they indicate,
816    and that you can therefore specify multiple names for the same type.  This
817    often leads to confusing behavior when dumping out a .ll file.  Since LLVM IR
818    uses structural typing, the name is not part of the type.  When printing out
819    LLVM IR, the printer will pick <em>one name</em> to render all types of a
820    particular shape.  This means that if you have code where two different
821    source types end up having the same LLVM type, that the dumper will sometimes
822    print the "wrong" or unexpected type.  This is an important design point and
823    isn't going to change.</p>
824
825 </div>
826
827 <!-- ======================================================================= -->
828 <h3>
829   <a name="globalvars">Global Variables</a>
830 </h3>
831
832 <div>
833
834 <p>Global variables define regions of memory allocated at compilation time
835    instead of run-time.  Global variables may optionally be initialized, may
836    have an explicit section to be placed in, and may have an optional explicit
837    alignment specified.  A variable may be defined as "thread_local", which
838    means that it will not be shared by threads (each thread will have a
839    separated copy of the variable).  A variable may be defined as a global
840    "constant," which indicates that the contents of the variable
841    will <b>never</b> be modified (enabling better optimization, allowing the
842    global data to be placed in the read-only section of an executable, etc).
843    Note that variables that need runtime initialization cannot be marked
844    "constant" as there is a store to the variable.</p>
845
846 <p>LLVM explicitly allows <em>declarations</em> of global variables to be marked
847    constant, even if the final definition of the global is not.  This capability
848    can be used to enable slightly better optimization of the program, but
849    requires the language definition to guarantee that optimizations based on the
850    'constantness' are valid for the translation units that do not include the
851    definition.</p>
852
853 <p>As SSA values, global variables define pointer values that are in scope
854    (i.e. they dominate) all basic blocks in the program.  Global variables
855    always define a pointer to their "content" type because they describe a
856    region of memory, and all memory objects in LLVM are accessed through
857    pointers.</p>
858
859 <p>Global variables can be marked with <tt>unnamed_addr</tt> which indicates
860   that the address is not significant, only the content. Constants marked
861   like this can be merged with other constants if they have the same
862   initializer. Note that a constant with significant address <em>can</em>
863   be merged with a <tt>unnamed_addr</tt> constant, the result being a
864   constant whose address is significant.</p>
865
866 <p>A global variable may be declared to reside in a target-specific numbered
867    address space. For targets that support them, address spaces may affect how
868    optimizations are performed and/or what target instructions are used to
869    access the variable. The default address space is zero. The address space
870    qualifier must precede any other attributes.</p>
871
872 <p>LLVM allows an explicit section to be specified for globals.  If the target
873    supports it, it will emit globals to the section specified.</p>
874
875 <p>An explicit alignment may be specified for a global, which must be a power
876    of 2.  If not present, or if the alignment is set to zero, the alignment of
877    the global is set by the target to whatever it feels convenient.  If an
878    explicit alignment is specified, the global is forced to have exactly that
879    alignment.  Targets and optimizers are not allowed to over-align the global
880    if the global has an assigned section.  In this case, the extra alignment
881    could be observable: for example, code could assume that the globals are
882    densely packed in their section and try to iterate over them as an array,
883    alignment padding would break this iteration.</p>
884
885 <p>For example, the following defines a global in a numbered address space with
886    an initializer, section, and alignment:</p>
887
888 <pre class="doc_code">
889 @G = addrspace(5) constant float 1.0, section "foo", align 4
890 </pre>
891
892 </div>
893
894
895 <!-- ======================================================================= -->
896 <h3>
897   <a name="functionstructure">Functions</a>
898 </h3>
899
900 <div>
901
902 <p>LLVM function definitions consist of the "<tt>define</tt>" keyword, an
903    optional <a href="#linkage">linkage type</a>, an optional
904    <a href="#visibility">visibility style</a>, an optional
905    <a href="#callingconv">calling convention</a>,
906    an optional <tt>unnamed_addr</tt> attribute, a return type, an optional
907    <a href="#paramattrs">parameter attribute</a> for the return type, a function
908    name, a (possibly empty) argument list (each with optional
909    <a href="#paramattrs">parameter attributes</a>), optional
910    <a href="#fnattrs">function attributes</a>, an optional section, an optional
911    alignment, an optional <a href="#gc">garbage collector name</a>, an opening
912    curly brace, a list of basic blocks, and a closing curly brace.</p>
913
914 <p>LLVM function declarations consist of the "<tt>declare</tt>" keyword, an
915    optional <a href="#linkage">linkage type</a>, an optional
916    <a href="#visibility">visibility style</a>, an optional
917    <a href="#callingconv">calling convention</a>,
918    an optional <tt>unnamed_addr</tt> attribute, a return type, an optional
919    <a href="#paramattrs">parameter attribute</a> for the return type, a function
920    name, a possibly empty list of arguments, an optional alignment, and an
921    optional <a href="#gc">garbage collector name</a>.</p>
922
923 <p>A function definition contains a list of basic blocks, forming the CFG
924    (Control Flow Graph) for the function.  Each basic block may optionally start
925    with a label (giving the basic block a symbol table entry), contains a list
926    of instructions, and ends with a <a href="#terminators">terminator</a>
927    instruction (such as a branch or function return).</p>
928
929 <p>The first basic block in a function is special in two ways: it is immediately
930    executed on entrance to the function, and it is not allowed to have
931    predecessor basic blocks (i.e. there can not be any branches to the entry
932    block of a function).  Because the block can have no predecessors, it also
933    cannot have any <a href="#i_phi">PHI nodes</a>.</p>
934
935 <p>LLVM allows an explicit section to be specified for functions.  If the target
936    supports it, it will emit functions to the section specified.</p>
937
938 <p>An explicit alignment may be specified for a function.  If not present, or if
939    the alignment is set to zero, the alignment of the function is set by the
940    target to whatever it feels convenient.  If an explicit alignment is
941    specified, the function is forced to have at least that much alignment.  All
942    alignments must be a power of 2.</p>
943
944 <p>If the <tt>unnamed_addr</tt> attribute is given, the address is know to not
945   be significant and two identical functions can be merged</p>.
946
947 <h5>Syntax:</h5>
948 <pre class="doc_code">
949 define [<a href="#linkage">linkage</a>] [<a href="#visibility">visibility</a>]
950        [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>]
951        &lt;ResultType&gt; @&lt;FunctionName&gt; ([argument list])
952        [<a href="#fnattrs">fn Attrs</a>] [section "name"] [align N]
953        [<a href="#gc">gc</a>] { ... }
954 </pre>
955
956 </div>
957
958 <!-- ======================================================================= -->
959 <h3>
960   <a name="aliasstructure">Aliases</a>
961 </h3>
962
963 <div>
964
965 <p>Aliases act as "second name" for the aliasee value (which can be either
966    function, global variable, another alias or bitcast of global value). Aliases
967    may have an optional <a href="#linkage">linkage type</a>, and an
968    optional <a href="#visibility">visibility style</a>.</p>
969
970 <h5>Syntax:</h5>
971 <pre class="doc_code">
972 @&lt;Name&gt; = alias [Linkage] [Visibility] &lt;AliaseeTy&gt; @&lt;Aliasee&gt;
973 </pre>
974
975 </div>
976
977 <!-- ======================================================================= -->
978 <h3>
979   <a name="namedmetadatastructure">Named Metadata</a>
980 </h3>
981
982 <div>
983
984 <p>Named metadata is a collection of metadata. <a href="#metadata">Metadata
985    nodes</a> (but not metadata strings) are the only valid operands for
986    a named metadata.</p>
987
988 <h5>Syntax:</h5>
989 <pre class="doc_code">
990 ; Some unnamed metadata nodes, which are referenced by the named metadata.
991 !0 = metadata !{metadata !"zero"}
992 !1 = metadata !{metadata !"one"}
993 !2 = metadata !{metadata !"two"}
994 ; A named metadata.
995 !name = !{!0, !1, !2}
996 </pre>
997
998 </div>
999
1000 <!-- ======================================================================= -->
1001 <h3>
1002   <a name="paramattrs">Parameter Attributes</a>
1003 </h3>
1004
1005 <div>
1006
1007 <p>The return type and each parameter of a function type may have a set of
1008    <i>parameter attributes</i> associated with them. Parameter attributes are
1009    used to communicate additional information about the result or parameters of
1010    a function. Parameter attributes are considered to be part of the function,
1011    not of the function type, so functions with different parameter attributes
1012    can have the same function type.</p>
1013
1014 <p>Parameter attributes are simple keywords that follow the type specified. If
1015    multiple parameter attributes are needed, they are space separated. For
1016    example:</p>
1017
1018 <pre class="doc_code">
1019 declare i32 @printf(i8* noalias nocapture, ...)
1020 declare i32 @atoi(i8 zeroext)
1021 declare signext i8 @returns_signed_char()
1022 </pre>
1023
1024 <p>Note that any attributes for the function result (<tt>nounwind</tt>,
1025    <tt>readonly</tt>) come immediately after the argument list.</p>
1026
1027 <p>Currently, only the following parameter attributes are defined:</p>
1028
1029 <dl>
1030   <dt><tt><b>zeroext</b></tt></dt>
1031   <dd>This indicates to the code generator that the parameter or return value
1032       should be zero-extended to the extent required by the target's ABI (which
1033       is usually 32-bits, but is 8-bits for a i1 on x86-64) by the caller (for a
1034       parameter) or the callee (for a return value).</dd>
1035
1036   <dt><tt><b>signext</b></tt></dt>
1037   <dd>This indicates to the code generator that the parameter or return value
1038       should be sign-extended to the extent required by the target's ABI (which
1039       is usually 32-bits) by the caller (for a parameter) or the callee (for a
1040       return value).</dd>
1041
1042   <dt><tt><b>inreg</b></tt></dt>
1043   <dd>This indicates that this parameter or return value should be treated in a
1044       special target-dependent fashion during while emitting code for a function
1045       call or return (usually, by putting it in a register as opposed to memory,
1046       though some targets use it to distinguish between two different kinds of
1047       registers).  Use of this attribute is target-specific.</dd>
1048
1049   <dt><tt><b><a name="byval">byval</a></b></tt></dt>
1050   <dd><p>This indicates that the pointer parameter should really be passed by
1051       value to the function.  The attribute implies that a hidden copy of the
1052       pointee
1053       is made between the caller and the callee, so the callee is unable to
1054       modify the value in the callee.  This attribute is only valid on LLVM
1055       pointer arguments.  It is generally used to pass structs and arrays by
1056       value, but is also valid on pointers to scalars.  The copy is considered
1057       to belong to the caller not the callee (for example,
1058       <tt><a href="#readonly">readonly</a></tt> functions should not write to
1059       <tt>byval</tt> parameters). This is not a valid attribute for return
1060       values.</p>
1061       
1062       <p>The byval attribute also supports specifying an alignment with
1063       the align attribute.  It indicates the alignment of the stack slot to
1064       form and the known alignment of the pointer specified to the call site. If
1065       the alignment is not specified, then the code generator makes a
1066       target-specific assumption.</p></dd>
1067
1068   <dt><tt><b><a name="sret">sret</a></b></tt></dt>
1069   <dd>This indicates that the pointer parameter specifies the address of a
1070       structure that is the return value of the function in the source program.
1071       This pointer must be guaranteed by the caller to be valid: loads and
1072       stores to the structure may be assumed by the callee to not to trap.  This
1073       may only be applied to the first parameter. This is not a valid attribute
1074       for return values. </dd>
1075
1076   <dt><tt><b><a name="noalias">noalias</a></b></tt></dt>
1077   <dd>This indicates that pointer values
1078       <a href="#pointeraliasing"><i>based</i></a> on the argument or return
1079       value do not alias pointer values which are not <i>based</i> on it,
1080       ignoring certain "irrelevant" dependencies.
1081       For a call to the parent function, dependencies between memory
1082       references from before or after the call and from those during the call
1083       are "irrelevant" to the <tt>noalias</tt> keyword for the arguments and
1084       return value used in that call.
1085       The caller shares the responsibility with the callee for ensuring that
1086       these requirements are met.
1087       For further details, please see the discussion of the NoAlias response in
1088       <a href="AliasAnalysis.html#MustMayNo">alias analysis</a>.<br>
1089 <br>
1090       Note that this definition of <tt>noalias</tt> is intentionally
1091       similar to the definition of <tt>restrict</tt> in C99 for function
1092       arguments, though it is slightly weaker.
1093 <br>
1094       For function return values, C99's <tt>restrict</tt> is not meaningful,
1095       while LLVM's <tt>noalias</tt> is.
1096       </dd>
1097
1098   <dt><tt><b><a name="nocapture">nocapture</a></b></tt></dt>
1099   <dd>This indicates that the callee does not make any copies of the pointer
1100       that outlive the callee itself. This is not a valid attribute for return
1101       values.</dd>
1102
1103   <dt><tt><b><a name="nest">nest</a></b></tt></dt>
1104   <dd>This indicates that the pointer parameter can be excised using the
1105       <a href="#int_trampoline">trampoline intrinsics</a>. This is not a valid
1106       attribute for return values.</dd>
1107 </dl>
1108
1109 </div>
1110
1111 <!-- ======================================================================= -->
1112 <h3>
1113   <a name="gc">Garbage Collector Names</a>
1114 </h3>
1115
1116 <div>
1117
1118 <p>Each function may specify a garbage collector name, which is simply a
1119    string:</p>
1120
1121 <pre class="doc_code">
1122 define void @f() gc "name" { ... }
1123 </pre>
1124
1125 <p>The compiler declares the supported values of <i>name</i>. Specifying a
1126    collector which will cause the compiler to alter its output in order to
1127    support the named garbage collection algorithm.</p>
1128
1129 </div>
1130
1131 <!-- ======================================================================= -->
1132 <h3>
1133   <a name="fnattrs">Function Attributes</a>
1134 </h3>
1135
1136 <div>
1137
1138 <p>Function attributes are set to communicate additional information about a
1139    function. Function attributes are considered to be part of the function, not
1140    of the function type, so functions with different parameter attributes can
1141    have the same function type.</p>
1142
1143 <p>Function attributes are simple keywords that follow the type specified. If
1144    multiple attributes are needed, they are space separated. For example:</p>
1145
1146 <pre class="doc_code">
1147 define void @f() noinline { ... }
1148 define void @f() alwaysinline { ... }
1149 define void @f() alwaysinline optsize { ... }
1150 define void @f() optsize { ... }
1151 </pre>
1152
1153 <dl>
1154   <dt><tt><b>alignstack(&lt;<em>n</em>&gt;)</b></tt></dt>
1155   <dd>This attribute indicates that, when emitting the prologue and epilogue,
1156       the backend should forcibly align the stack pointer. Specify the
1157       desired alignment, which must be a power of two, in parentheses.
1158
1159   <dt><tt><b>alwaysinline</b></tt></dt>
1160   <dd>This attribute indicates that the inliner should attempt to inline this
1161       function into callers whenever possible, ignoring any active inlining size
1162       threshold for this caller.</dd>
1163
1164   <dt><tt><b>hotpatch</b></tt></dt>
1165   <dd>This attribute indicates that the function should be 'hotpatchable',
1166       meaning the function can be patched and/or hooked even while it is
1167       loaded into memory. On x86, the function prologue will be preceded
1168       by six bytes of padding and will begin with a two-byte instruction.
1169       Most of the functions in the Windows system DLLs in Windows XP SP2 or
1170       higher were compiled in this fashion.</dd>
1171
1172   <dt><tt><b>nonlazybind</b></tt></dt>
1173   <dd>This attribute suppresses lazy symbol binding for the function. This
1174       may make calls to the function faster, at the cost of extra program
1175       startup time if the function is not called during program startup.</dd>
1176
1177   <dt><tt><b>inlinehint</b></tt></dt>
1178   <dd>This attribute indicates that the source code contained a hint that inlining
1179       this function is desirable (such as the "inline" keyword in C/C++).  It
1180       is just a hint; it imposes no requirements on the inliner.</dd>
1181
1182   <dt><tt><b>naked</b></tt></dt>
1183   <dd>This attribute disables prologue / epilogue emission for the function.
1184       This can have very system-specific consequences.</dd>
1185
1186   <dt><tt><b>noimplicitfloat</b></tt></dt>
1187   <dd>This attributes disables implicit floating point instructions.</dd>
1188
1189   <dt><tt><b>noinline</b></tt></dt>
1190   <dd>This attribute indicates that the inliner should never inline this
1191       function in any situation. This attribute may not be used together with
1192       the <tt>alwaysinline</tt> attribute.</dd>
1193
1194   <dt><tt><b>noredzone</b></tt></dt>
1195   <dd>This attribute indicates that the code generator should not use a red
1196       zone, even if the target-specific ABI normally permits it.</dd>
1197
1198   <dt><tt><b>noreturn</b></tt></dt>
1199   <dd>This function attribute indicates that the function never returns
1200       normally.  This produces undefined behavior at runtime if the function
1201       ever does dynamically return.</dd>
1202
1203   <dt><tt><b>nounwind</b></tt></dt>
1204   <dd>This function attribute indicates that the function never returns with an
1205       unwind or exceptional control flow.  If the function does unwind, its
1206       runtime behavior is undefined.</dd>
1207
1208   <dt><tt><b>optsize</b></tt></dt>
1209   <dd>This attribute suggests that optimization passes and code generator passes
1210       make choices that keep the code size of this function low, and otherwise
1211       do optimizations specifically to reduce code size.</dd>
1212
1213   <dt><tt><b>readnone</b></tt></dt>
1214   <dd>This attribute indicates that the function computes its result (or decides
1215       to unwind an exception) based strictly on its arguments, without
1216       dereferencing any pointer arguments or otherwise accessing any mutable
1217       state (e.g. memory, control registers, etc) visible to caller functions.
1218       It does not write through any pointer arguments
1219       (including <tt><a href="#byval">byval</a></tt> arguments) and never
1220       changes any state visible to callers.  This means that it cannot unwind
1221       exceptions by calling the <tt>C++</tt> exception throwing methods, but
1222       could use the <tt>unwind</tt> instruction.</dd>
1223
1224   <dt><tt><b><a name="readonly">readonly</a></b></tt></dt>
1225   <dd>This attribute indicates that the function does not write through any
1226       pointer arguments (including <tt><a href="#byval">byval</a></tt>
1227       arguments) or otherwise modify any state (e.g. memory, control registers,
1228       etc) visible to caller functions.  It may dereference pointer arguments
1229       and read state that may be set in the caller.  A readonly function always
1230       returns the same value (or unwinds an exception identically) when called
1231       with the same set of arguments and global state.  It cannot unwind an
1232       exception by calling the <tt>C++</tt> exception throwing methods, but may
1233       use the <tt>unwind</tt> instruction.</dd>
1234
1235   <dt><tt><b><a name="ssp">ssp</a></b></tt></dt>
1236   <dd>This attribute indicates that the function should emit a stack smashing
1237       protector. It is in the form of a "canary"&mdash;a random value placed on
1238       the stack before the local variables that's checked upon return from the
1239       function to see if it has been overwritten. A heuristic is used to
1240       determine if a function needs stack protectors or not.<br>
1241 <br>
1242       If a function that has an <tt>ssp</tt> attribute is inlined into a
1243       function that doesn't have an <tt>ssp</tt> attribute, then the resulting
1244       function will have an <tt>ssp</tt> attribute.</dd>
1245
1246   <dt><tt><b>sspreq</b></tt></dt>
1247   <dd>This attribute indicates that the function should <em>always</em> emit a
1248       stack smashing protector. This overrides
1249       the <tt><a href="#ssp">ssp</a></tt> function attribute.<br>
1250 <br>
1251       If a function that has an <tt>sspreq</tt> attribute is inlined into a
1252       function that doesn't have an <tt>sspreq</tt> attribute or which has
1253       an <tt>ssp</tt> attribute, then the resulting function will have
1254       an <tt>sspreq</tt> attribute.</dd>
1255
1256   <dt><tt><b><a name="uwtable">uwtable</a></b></tt></dt>
1257   <dd>This attribute indicates that the ABI being targeted requires that
1258       an unwind table entry be produce for this function even if we can
1259       show that no exceptions passes by it. This is normally the case for
1260       the ELF x86-64 abi, but it can be disabled for some compilation
1261       units.</dd>
1262
1263 </dl>
1264
1265 </div>
1266
1267 <!-- ======================================================================= -->
1268 <h3>
1269   <a name="moduleasm">Module-Level Inline Assembly</a>
1270 </h3>
1271
1272 <div>
1273
1274 <p>Modules may contain "module-level inline asm" blocks, which corresponds to
1275    the GCC "file scope inline asm" blocks.  These blocks are internally
1276    concatenated by LLVM and treated as a single unit, but may be separated in
1277    the <tt>.ll</tt> file if desired.  The syntax is very simple:</p>
1278
1279 <pre class="doc_code">
1280 module asm "inline asm code goes here"
1281 module asm "more can go here"
1282 </pre>
1283
1284 <p>The strings can contain any character by escaping non-printable characters.
1285    The escape sequence used is simply "\xx" where "xx" is the two digit hex code
1286    for the number.</p>
1287
1288 <p>The inline asm code is simply printed to the machine code .s file when
1289    assembly code is generated.</p>
1290
1291 </div>
1292
1293 <!-- ======================================================================= -->
1294 <h3>
1295   <a name="datalayout">Data Layout</a>
1296 </h3>
1297
1298 <div>
1299
1300 <p>A module may specify a target specific data layout string that specifies how
1301    data is to be laid out in memory. The syntax for the data layout is
1302    simply:</p>
1303
1304 <pre class="doc_code">
1305 target datalayout = "<i>layout specification</i>"
1306 </pre>
1307
1308 <p>The <i>layout specification</i> consists of a list of specifications
1309    separated by the minus sign character ('-').  Each specification starts with
1310    a letter and may include other information after the letter to define some
1311    aspect of the data layout.  The specifications accepted are as follows:</p>
1312
1313 <dl>
1314   <dt><tt>E</tt></dt>
1315   <dd>Specifies that the target lays out data in big-endian form. That is, the
1316       bits with the most significance have the lowest address location.</dd>
1317
1318   <dt><tt>e</tt></dt>
1319   <dd>Specifies that the target lays out data in little-endian form. That is,
1320       the bits with the least significance have the lowest address
1321       location.</dd>
1322
1323   <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1324   <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and
1325       <i>preferred</i> alignments. All sizes are in bits. Specifying
1326       the <i>pref</i> alignment is optional. If omitted, the
1327       preceding <tt>:</tt> should be omitted too.</dd>
1328
1329   <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1330   <dd>This specifies the alignment for an integer type of a given bit
1331       <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd>
1332
1333   <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1334   <dd>This specifies the alignment for a vector type of a given bit
1335       <i>size</i>.</dd>
1336
1337   <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1338   <dd>This specifies the alignment for a floating point type of a given bit
1339       <i>size</i>. Only values of <i>size</i> that are supported by the target
1340       will work.  32 (float) and 64 (double) are supported on all targets;
1341       80 or 128 (different flavors of long double) are also supported on some
1342       targets.
1343
1344   <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1345   <dd>This specifies the alignment for an aggregate type of a given bit
1346       <i>size</i>.</dd>
1347
1348   <dt><tt>s<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
1349   <dd>This specifies the alignment for a stack object of a given bit
1350       <i>size</i>.</dd>
1351
1352   <dt><tt>n<i>size1</i>:<i>size2</i>:<i>size3</i>...</tt></dt>
1353   <dd>This specifies a set of native integer widths for the target CPU
1354       in bits.  For example, it might contain "n32" for 32-bit PowerPC,
1355       "n32:64" for PowerPC 64, or "n8:16:32:64" for X86-64.  Elements of
1356       this set are considered to support most general arithmetic
1357       operations efficiently.</dd>
1358 </dl>
1359
1360 <p>When constructing the data layout for a given target, LLVM starts with a
1361    default set of specifications which are then (possibly) overridden by the
1362    specifications in the <tt>datalayout</tt> keyword. The default specifications
1363    are given in this list:</p>
1364
1365 <ul>
1366   <li><tt>E</tt> - big endian</li>
1367   <li><tt>p:64:64:64</tt> - 64-bit pointers with 64-bit alignment</li>
1368   <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li>
1369   <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li>
1370   <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li>
1371   <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li>
1372   <li><tt>i64:32:64</tt> - i64 has ABI alignment of 32-bits but preferred
1373   alignment of 64-bits</li>
1374   <li><tt>f32:32:32</tt> - float is 32-bit aligned</li>
1375   <li><tt>f64:64:64</tt> - double is 64-bit aligned</li>
1376   <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li>
1377   <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li>
1378   <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li>
1379   <li><tt>s0:64:64</tt> - stack objects are 64-bit aligned</li>
1380 </ul>
1381
1382 <p>When LLVM is determining the alignment for a given type, it uses the
1383    following rules:</p>
1384
1385 <ol>
1386   <li>If the type sought is an exact match for one of the specifications, that
1387       specification is used.</li>
1388
1389   <li>If no match is found, and the type sought is an integer type, then the
1390       smallest integer type that is larger than the bitwidth of the sought type
1391       is used. If none of the specifications are larger than the bitwidth then
1392       the the largest integer type is used. For example, given the default
1393       specifications above, the i7 type will use the alignment of i8 (next
1394       largest) while both i65 and i256 will use the alignment of i64 (largest
1395       specified).</li>
1396
1397   <li>If no match is found, and the type sought is a vector type, then the
1398       largest vector type that is smaller than the sought vector type will be
1399       used as a fall back.  This happens because &lt;128 x double&gt; can be
1400       implemented in terms of 64 &lt;2 x double&gt;, for example.</li>
1401 </ol>
1402
1403 </div>
1404
1405 <!-- ======================================================================= -->
1406 <h3>
1407   <a name="pointeraliasing">Pointer Aliasing Rules</a>
1408 </h3>
1409
1410 <div>
1411
1412 <p>Any memory access must be done through a pointer value associated
1413 with an address range of the memory access, otherwise the behavior
1414 is undefined. Pointer values are associated with address ranges
1415 according to the following rules:</p>
1416
1417 <ul>
1418   <li>A pointer value is associated with the addresses associated with
1419       any value it is <i>based</i> on.
1420   <li>An address of a global variable is associated with the address
1421       range of the variable's storage.</li>
1422   <li>The result value of an allocation instruction is associated with
1423       the address range of the allocated storage.</li>
1424   <li>A null pointer in the default address-space is associated with
1425       no address.</li>
1426   <li>An integer constant other than zero or a pointer value returned
1427       from a function not defined within LLVM may be associated with address
1428       ranges allocated through mechanisms other than those provided by
1429       LLVM. Such ranges shall not overlap with any ranges of addresses
1430       allocated by mechanisms provided by LLVM.</li>
1431 </ul>
1432
1433 <p>A pointer value is <i>based</i> on another pointer value according
1434    to the following rules:</p>
1435
1436 <ul>
1437   <li>A pointer value formed from a
1438       <tt><a href="#i_getelementptr">getelementptr</a></tt> operation
1439       is <i>based</i> on the first operand of the <tt>getelementptr</tt>.</li>
1440   <li>The result value of a
1441       <tt><a href="#i_bitcast">bitcast</a></tt> is <i>based</i> on the operand
1442       of the <tt>bitcast</tt>.</li>
1443   <li>A pointer value formed by an
1444       <tt><a href="#i_inttoptr">inttoptr</a></tt> is <i>based</i> on all
1445       pointer values that contribute (directly or indirectly) to the
1446       computation of the pointer's value.</li>
1447   <li>The "<i>based</i> on" relationship is transitive.</li>
1448 </ul>
1449
1450 <p>Note that this definition of <i>"based"</i> is intentionally
1451    similar to the definition of <i>"based"</i> in C99, though it is
1452    slightly weaker.</p>
1453
1454 <p>LLVM IR does not associate types with memory. The result type of a
1455 <tt><a href="#i_load">load</a></tt> merely indicates the size and
1456 alignment of the memory from which to load, as well as the
1457 interpretation of the value. The first operand type of a
1458 <tt><a href="#i_store">store</a></tt> similarly only indicates the size
1459 and alignment of the store.</p>
1460
1461 <p>Consequently, type-based alias analysis, aka TBAA, aka
1462 <tt>-fstrict-aliasing</tt>, is not applicable to general unadorned
1463 LLVM IR. <a href="#metadata">Metadata</a> may be used to encode
1464 additional information which specialized optimization passes may use
1465 to implement type-based alias analysis.</p>
1466
1467 </div>
1468
1469 <!-- ======================================================================= -->
1470 <h3>
1471   <a name="volatile">Volatile Memory Accesses</a>
1472 </h3>
1473
1474 <div>
1475
1476 <p>Certain memory accesses, such as <a href="#i_load"><tt>load</tt></a>s, <a
1477 href="#i_store"><tt>store</tt></a>s, and <a
1478 href="#int_memcpy"><tt>llvm.memcpy</tt></a>s may be marked <tt>volatile</tt>.
1479 The optimizers must not change the number of volatile operations or change their
1480 order of execution relative to other volatile operations.  The optimizers
1481 <i>may</i> change the order of volatile operations relative to non-volatile
1482 operations.  This is not Java's "volatile" and has no cross-thread
1483 synchronization behavior.</p>
1484
1485 </div>
1486
1487 <!-- ======================================================================= -->
1488 <h3>
1489   <a name="memmodel">Memory Model for Concurrent Operations</a>
1490 </h3>
1491
1492 <div>
1493
1494 <p>The LLVM IR does not define any way to start parallel threads of execution
1495 or to register signal handlers. Nonetheless, there are platform-specific
1496 ways to create them, and we define LLVM IR's behavior in their presence. This
1497 model is inspired by the C++0x memory model.</p>
1498
1499 <p>We define a <i>happens-before</i> partial order as the least partial order
1500 that</p>
1501 <ul>
1502   <li>Is a superset of single-thread program order, and</li>
1503   <li>When a <i>synchronizes-with</i> <tt>b</tt>, includes an edge from
1504       <tt>a</tt> to <tt>b</tt>. <i>Synchronizes-with</i> pairs are introduced
1505       by platform-specific techniques, like pthread locks, thread
1506       creation, thread joining, etc., and by atomic instructions.
1507       (See also <a href="#ordering">Atomic Memory Ordering Constraints</a>).
1508       </li>
1509 </ul>
1510
1511 <p>Note that program order does not introduce <i>happens-before</i> edges
1512 between a thread and signals executing inside that thread.</p>
1513
1514 <p>Every (defined) read operation (load instructions, memcpy, atomic
1515 loads/read-modify-writes, etc.) <var>R</var> reads a series of bytes written by
1516 (defined) write operations (store instructions, atomic
1517 stores/read-modify-writes, memcpy, etc.). For the purposes of this section,
1518 initialized globals are considered to have a write of the initializer which is
1519 atomic and happens before any other read or write of the memory in question.
1520 For each byte of a read <var>R</var>, <var>R<sub>byte</sub></var> may see
1521 any write to the same byte, except:</p>
1522
1523 <ul>
1524   <li>If <var>write<sub>1</sub></var> happens before
1525       <var>write<sub>2</sub></var>, and <var>write<sub>2</sub></var> happens
1526       before <var>R<sub>byte</sub></var>, then <var>R<sub>byte</sub></var>
1527       does not see <var>write<sub>1</sub></var>.
1528   <li>If <var>R<sub>byte</sub></var> happens before
1529       <var>write<sub>3</sub></var>, then <var>R<sub>byte</sub></var> does not
1530       see <var>write<sub>3</sub></var>.
1531 </ul>
1532
1533 <p>Given that definition, <var>R<sub>byte</sub></var> is defined as follows:
1534 <ul>
1535   <li>If there is no write to the same byte that happens before
1536     <var>R<sub>byte</sub></var>, <var>R<sub>byte</sub></var> returns 
1537     <tt>undef</tt> for that byte.
1538   <li>Otherwise, if <var>R<sub>byte</sub></var> may see exactly one write,
1539       <var>R<sub>byte</sub></var> returns the value written by that
1540       write.</li>
1541   <li>Otherwise, if <var>R</var> is atomic, and all the writes
1542       <var>R<sub>byte</sub></var> may see are atomic, it chooses one of the
1543       values written.  See the <a href="#ordering">Atomic Memory Ordering
1544       Constraints</a> section for additional constraints on how the choice
1545       is made.
1546   <li>Otherwise <var>R<sub>byte</sub></var> returns <tt>undef</tt>.</li>
1547 </ul>
1548
1549 <p><var>R</var> returns the value composed of the series of bytes it read.
1550 This implies that some bytes within the value may be <tt>undef</tt>
1551 <b>without</b> the entire value being <tt>undef</tt>. Note that this only
1552 defines the semantics of the operation; it doesn't mean that targets will
1553 emit more than one instruction to read the series of bytes.</p>
1554
1555 <p>Note that in cases where none of the atomic intrinsics are used, this model
1556 places only one restriction on IR transformations on top of what is required
1557 for single-threaded execution: introducing a store to a byte which might not
1558 otherwise be stored to can introduce undefined behavior.  (Specifically, in
1559 the case where another thread might write to and read from an address,
1560 introducing a store can change a load that may see exactly one write into
1561 a load that may see multiple writes.)</p>
1562
1563 <!-- FIXME: This model assumes all targets where concurrency is relevant have
1564 a byte-size store which doesn't affect adjacent bytes.  As far as I can tell,
1565 none of the backends currently in the tree fall into this category; however,
1566 there might be targets which care.  If there are, we want a paragraph
1567 like the following:
1568
1569 Targets may specify that stores narrower than a certain width are not
1570 available; on such a target, for the purposes of this model, treat any
1571 non-atomic write with an alignment or width less than the minimum width
1572 as if it writes to the relevant surrounding bytes.
1573 -->
1574
1575 </div>
1576
1577 <!-- ======================================================================= -->
1578 <div class="doc_subsection">
1579       <a name="ordering">Atomic Memory Ordering Constraints</a>
1580 </div>
1581
1582 <div class="doc_text">
1583
1584 <p>Atomic instructions (<a href="#i_cmpxchg"><code>cmpxchg</code></a>,
1585 <a href="#i_atomicrmw"><code>atomicrmw</code></a>, and
1586 <a href="#i_fence"><code>fence</code></a>) take an ordering parameter
1587 that determines which other atomic instructions on the same address they
1588 <i>synchronize with</i>.  These semantics are borrowed from Java and C++0x,
1589 but are somewhat more colloquial. If these descriptions aren't precise enough,
1590 check those specs.  <a href="#i_fence"><code>fence</code></a> instructions
1591 treat these orderings somewhat differently since they don't take an address.
1592 See that instruction's documentation for details.</p>
1593
1594 <!-- FIXME Note atomic load+store here once those get added. -->
1595
1596 <dl>
1597 <!-- FIXME: unordered is intended to be used for atomic load and store;
1598 it isn't allowed for any instruction yet. -->
1599 <dt><code>unordered</code></dt>
1600 <dd>The set of values that can be read is governed by the happens-before
1601 partial order. A value cannot be read unless some operation wrote it.
1602 This is intended to provide a guarantee strong enough to model Java's
1603 non-volatile shared variables.  This ordering cannot be specified for
1604 read-modify-write operations; it is not strong enough to make them atomic
1605 in any interesting way.</dd>
1606 <dt><code>monotonic</code></dt>
1607 <dd>In addition to the guarantees of <code>unordered</code>, there is a single
1608 total order for modifications by <code>monotonic</code> operations on each
1609 address. All modification orders must be compatible with the happens-before
1610 order. There is no guarantee that the modification orders can be combined to
1611 a global total order for the whole program (and this often will not be
1612 possible). The read in an atomic read-modify-write operation
1613 (<a href="#i_cmpxchg"><code>cmpxchg</code></a> and
1614 <a href="#i_atomicrmw"><code>atomicrmw</code></a>)
1615 reads the value in the modification order immediately before the value it
1616 writes. If one atomic read happens before another atomic read of the same
1617 address, the later read must see the same value or a later value in the
1618 address's modification order. This disallows reordering of
1619 <code>monotonic</code> (or stronger) operations on the same address. If an
1620 address is written <code>monotonic</code>ally by one thread, and other threads
1621 <code>monotonic</code>ally read that address repeatedly, the other threads must
1622 eventually see the write. This is intended to model C++'s relaxed atomic
1623 variables.</dd>
1624 <dt><code>acquire</code></dt>
1625 <dd>In addition to the guarantees of <code>monotonic</code>, if this operation
1626 reads a value written by a <code>release</code> atomic operation, it
1627 <i>synchronizes-with</i> that operation.</dd>
1628 <dt><code>release</code></dt>
1629 <dd>In addition to the guarantees of <code>monotonic</code>,
1630 a <i>synchronizes-with</i> edge may be formed by an <code>acquire</code>
1631 operation.</dd>
1632 <dt><code>acq_rel</code> (acquire+release)</dt><dd>Acts as both an
1633 <code>acquire</code> and <code>release</code> operation on its address.</dd>
1634 <dt><code>seq_cst</code> (sequentially consistent)</dt><dd>
1635 <dd>In addition to the guarantees of <code>acq_rel</code>
1636 (<code>acquire</code> for an operation which only reads, <code>release</code>
1637 for an operation which only writes), there is a global total order on all
1638 sequentially-consistent operations on all addresses, which is consistent with
1639 the <i>happens-before</i> partial order and with the modification orders of
1640 all the affected addresses. Each sequentially-consistent read sees the last
1641 preceding write to the same address in this global order. This is intended
1642 to model C++'s sequentially-consistent atomic variables and Java's volatile
1643 shared variables.</dd>
1644 </dl>
1645
1646 <p id="singlethread">If an atomic operation is marked <code>singlethread</code>,
1647 it only <i>synchronizes with</i> or participates in modification and seq_cst
1648 total orderings with other operations running in the same thread (for example,
1649 in signal handlers).</p>
1650
1651 </div>
1652
1653 </div>
1654
1655 <!-- *********************************************************************** -->
1656 <h2><a name="typesystem">Type System</a></h2>
1657 <!-- *********************************************************************** -->
1658
1659 <div>
1660
1661 <p>The LLVM type system is one of the most important features of the
1662    intermediate representation.  Being typed enables a number of optimizations
1663    to be performed on the intermediate representation directly, without having
1664    to do extra analyses on the side before the transformation.  A strong type
1665    system makes it easier to read the generated code and enables novel analyses
1666    and transformations that are not feasible to perform on normal three address
1667    code representations.</p>
1668
1669 <!-- ======================================================================= -->
1670 <h3>
1671   <a name="t_classifications">Type Classifications</a>
1672 </h3>
1673
1674 <div>
1675
1676 <p>The types fall into a few useful classifications:</p>
1677
1678 <table border="1" cellspacing="0" cellpadding="4">
1679   <tbody>
1680     <tr><th>Classification</th><th>Types</th></tr>
1681     <tr>
1682       <td><a href="#t_integer">integer</a></td>
1683       <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td>
1684     </tr>
1685     <tr>
1686       <td><a href="#t_floating">floating point</a></td>
1687       <td><tt>float, double, x86_fp80, fp128, ppc_fp128</tt></td>
1688     </tr>
1689     <tr>
1690       <td><a name="t_firstclass">first class</a></td>
1691       <td><a href="#t_integer">integer</a>,
1692           <a href="#t_floating">floating point</a>,
1693           <a href="#t_pointer">pointer</a>,
1694           <a href="#t_vector">vector</a>,
1695           <a href="#t_struct">structure</a>,
1696           <a href="#t_array">array</a>,
1697           <a href="#t_label">label</a>,
1698           <a href="#t_metadata">metadata</a>.
1699       </td>
1700     </tr>
1701     <tr>
1702       <td><a href="#t_primitive">primitive</a></td>
1703       <td><a href="#t_label">label</a>,
1704           <a href="#t_void">void</a>,
1705           <a href="#t_integer">integer</a>,
1706           <a href="#t_floating">floating point</a>,
1707           <a href="#t_x86mmx">x86mmx</a>,
1708           <a href="#t_metadata">metadata</a>.</td>
1709     </tr>
1710     <tr>
1711       <td><a href="#t_derived">derived</a></td>
1712       <td><a href="#t_array">array</a>,
1713           <a href="#t_function">function</a>,
1714           <a href="#t_pointer">pointer</a>,
1715           <a href="#t_struct">structure</a>,
1716           <a href="#t_vector">vector</a>,
1717           <a href="#t_opaque">opaque</a>.
1718       </td>
1719     </tr>
1720   </tbody>
1721 </table>
1722
1723 <p>The <a href="#t_firstclass">first class</a> types are perhaps the most
1724    important.  Values of these types are the only ones which can be produced by
1725    instructions.</p>
1726
1727 </div>
1728
1729 <!-- ======================================================================= -->
1730 <h3>
1731   <a name="t_primitive">Primitive Types</a>
1732 </h3>
1733
1734 <div>
1735
1736 <p>The primitive types are the fundamental building blocks of the LLVM
1737    system.</p>
1738
1739 <!-- _______________________________________________________________________ -->
1740 <h4>
1741   <a name="t_integer">Integer Type</a>
1742 </h4>
1743
1744 <div>
1745
1746 <h5>Overview:</h5>
1747 <p>The integer type is a very simple type that simply specifies an arbitrary
1748    bit width for the integer type desired. Any bit width from 1 bit to
1749    2<sup>23</sup>-1 (about 8 million) can be specified.</p>
1750
1751 <h5>Syntax:</h5>
1752 <pre>
1753   iN
1754 </pre>
1755
1756 <p>The number of bits the integer will occupy is specified by the <tt>N</tt>
1757    value.</p>
1758
1759 <h5>Examples:</h5>
1760 <table class="layout">
1761   <tr class="layout">
1762     <td class="left"><tt>i1</tt></td>
1763     <td class="left">a single-bit integer.</td>
1764   </tr>
1765   <tr class="layout">
1766     <td class="left"><tt>i32</tt></td>
1767     <td class="left">a 32-bit integer.</td>
1768   </tr>
1769   <tr class="layout">
1770     <td class="left"><tt>i1942652</tt></td>
1771     <td class="left">a really big integer of over 1 million bits.</td>
1772   </tr>
1773 </table>
1774
1775 </div>
1776
1777 <!-- _______________________________________________________________________ -->
1778 <h4>
1779   <a name="t_floating">Floating Point Types</a>
1780 </h4>
1781
1782 <div>
1783
1784 <table>
1785   <tbody>
1786     <tr><th>Type</th><th>Description</th></tr>
1787     <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
1788     <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
1789     <tr><td><tt>fp128</tt></td><td>128-bit floating point value (112-bit mantissa)</td></tr>
1790     <tr><td><tt>x86_fp80</tt></td><td>80-bit floating point value (X87)</td></tr>
1791     <tr><td><tt>ppc_fp128</tt></td><td>128-bit floating point value (two 64-bits)</td></tr>
1792   </tbody>
1793 </table>
1794
1795 </div>
1796
1797 <!-- _______________________________________________________________________ -->
1798 <h4>
1799   <a name="t_x86mmx">X86mmx Type</a>
1800 </h4>
1801
1802 <div>
1803
1804 <h5>Overview:</h5>
1805 <p>The x86mmx type represents a value held in an MMX register on an x86 machine.  The operations allowed on it are quite limited:  parameters and return values, load and store, and bitcast.  User-specified MMX instructions are represented as intrinsic or asm calls with arguments and/or results of this type.  There are no arrays, vectors or constants of this type.</p>
1806
1807 <h5>Syntax:</h5>
1808 <pre>
1809   x86mmx
1810 </pre>
1811
1812 </div>
1813
1814 <!-- _______________________________________________________________________ -->
1815 <h4>
1816   <a name="t_void">Void Type</a>
1817 </h4>
1818
1819 <div>
1820
1821 <h5>Overview:</h5>
1822 <p>The void type does not represent any value and has no size.</p>
1823
1824 <h5>Syntax:</h5>
1825 <pre>
1826   void
1827 </pre>
1828
1829 </div>
1830
1831 <!-- _______________________________________________________________________ -->
1832 <h4>
1833   <a name="t_label">Label Type</a>
1834 </h4>
1835
1836 <div>
1837
1838 <h5>Overview:</h5>
1839 <p>The label type represents code labels.</p>
1840
1841 <h5>Syntax:</h5>
1842 <pre>
1843   label
1844 </pre>
1845
1846 </div>
1847
1848 <!-- _______________________________________________________________________ -->
1849 <h4>
1850   <a name="t_metadata">Metadata Type</a>
1851 </h4>
1852
1853 <div>
1854
1855 <h5>Overview:</h5>
1856 <p>The metadata type represents embedded metadata. No derived types may be
1857    created from metadata except for <a href="#t_function">function</a>
1858    arguments.
1859
1860 <h5>Syntax:</h5>
1861 <pre>
1862   metadata
1863 </pre>
1864
1865 </div>
1866
1867 </div>
1868
1869 <!-- ======================================================================= -->
1870 <h3>
1871   <a name="t_derived">Derived Types</a>
1872 </h3>
1873
1874 <div>
1875
1876 <p>The real power in LLVM comes from the derived types in the system.  This is
1877    what allows a programmer to represent arrays, functions, pointers, and other
1878    useful types.  Each of these types contain one or more element types which
1879    may be a primitive type, or another derived type.  For example, it is
1880    possible to have a two dimensional array, using an array as the element type
1881    of another array.</p>
1882
1883 </div>
1884   
1885
1886 <!-- _______________________________________________________________________ -->
1887 <h4>
1888   <a name="t_aggregate">Aggregate Types</a>
1889 </h4>
1890
1891 <div>
1892
1893 <p>Aggregate Types are a subset of derived types that can contain multiple
1894   member types. <a href="#t_array">Arrays</a>,
1895   <a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are
1896   aggregate types.</p>
1897
1898 </div>
1899
1900 <!-- _______________________________________________________________________ -->
1901 <h4>
1902   <a name="t_array">Array Type</a>
1903 </h4>
1904
1905 <div>
1906
1907 <h5>Overview:</h5>
1908 <p>The array type is a very simple derived type that arranges elements
1909    sequentially in memory.  The array type requires a size (number of elements)
1910    and an underlying data type.</p>
1911
1912 <h5>Syntax:</h5>
1913 <pre>
1914   [&lt;# elements&gt; x &lt;elementtype&gt;]
1915 </pre>
1916
1917 <p>The number of elements is a constant integer value; <tt>elementtype</tt> may
1918    be any type with a size.</p>
1919
1920 <h5>Examples:</h5>
1921 <table class="layout">
1922   <tr class="layout">
1923     <td class="left"><tt>[40 x i32]</tt></td>
1924     <td class="left">Array of 40 32-bit integer values.</td>
1925   </tr>
1926   <tr class="layout">
1927     <td class="left"><tt>[41 x i32]</tt></td>
1928     <td class="left">Array of 41 32-bit integer values.</td>
1929   </tr>
1930   <tr class="layout">
1931     <td class="left"><tt>[4 x i8]</tt></td>
1932     <td class="left">Array of 4 8-bit integer values.</td>
1933   </tr>
1934 </table>
1935 <p>Here are some examples of multidimensional arrays:</p>
1936 <table class="layout">
1937   <tr class="layout">
1938     <td class="left"><tt>[3 x [4 x i32]]</tt></td>
1939     <td class="left">3x4 array of 32-bit integer values.</td>
1940   </tr>
1941   <tr class="layout">
1942     <td class="left"><tt>[12 x [10 x float]]</tt></td>
1943     <td class="left">12x10 array of single precision floating point values.</td>
1944   </tr>
1945   <tr class="layout">
1946     <td class="left"><tt>[2 x [3 x [4 x i16]]]</tt></td>
1947     <td class="left">2x3x4 array of 16-bit integer  values.</td>
1948   </tr>
1949 </table>
1950
1951 <p>There is no restriction on indexing beyond the end of the array implied by
1952    a static type (though there are restrictions on indexing beyond the bounds
1953    of an allocated object in some cases). This means that single-dimension
1954    'variable sized array' addressing can be implemented in LLVM with a zero
1955    length array type. An implementation of 'pascal style arrays' in LLVM could
1956    use the type "<tt>{ i32, [0 x float]}</tt>", for example.</p>
1957
1958 </div>
1959
1960 <!-- _______________________________________________________________________ -->
1961 <h4>
1962   <a name="t_function">Function Type</a>
1963 </h4>
1964
1965 <div>
1966
1967 <h5>Overview:</h5>
1968 <p>The function type can be thought of as a function signature.  It consists of
1969    a return type and a list of formal parameter types. The return type of a
1970    function type is a first class type or a void type.</p>
1971
1972 <h5>Syntax:</h5>
1973 <pre>
1974   &lt;returntype&gt; (&lt;parameter list&gt;)
1975 </pre>
1976
1977 <p>...where '<tt>&lt;parameter list&gt;</tt>' is a comma-separated list of type
1978    specifiers.  Optionally, the parameter list may include a type <tt>...</tt>,
1979    which indicates that the function takes a variable number of arguments.
1980    Variable argument functions can access their arguments with
1981    the <a href="#int_varargs">variable argument handling intrinsic</a>
1982    functions.  '<tt>&lt;returntype&gt;</tt>' is any type except
1983    <a href="#t_label">label</a>.</p>
1984
1985 <h5>Examples:</h5>
1986 <table class="layout">
1987   <tr class="layout">
1988     <td class="left"><tt>i32 (i32)</tt></td>
1989     <td class="left">function taking an <tt>i32</tt>, returning an <tt>i32</tt>
1990     </td>
1991   </tr><tr class="layout">
1992     <td class="left"><tt>float&nbsp;(i16,&nbsp;i32&nbsp;*)&nbsp;*
1993     </tt></td>
1994     <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes
1995       an <tt>i16</tt> and a <a href="#t_pointer">pointer</a> to <tt>i32</tt>,
1996       returning <tt>float</tt>.
1997     </td>
1998   </tr><tr class="layout">
1999     <td class="left"><tt>i32 (i8*, ...)</tt></td>
2000     <td class="left">A vararg function that takes at least one
2001       <a href="#t_pointer">pointer</a> to <tt>i8 </tt> (char in C),
2002       which returns an integer.  This is the signature for <tt>printf</tt> in
2003       LLVM.
2004     </td>
2005   </tr><tr class="layout">
2006     <td class="left"><tt>{i32, i32} (i32)</tt></td>
2007     <td class="left">A function taking an <tt>i32</tt>, returning a
2008         <a href="#t_struct">structure</a> containing two <tt>i32</tt> values
2009     </td>
2010   </tr>
2011 </table>
2012
2013 </div>
2014
2015 <!-- _______________________________________________________________________ -->
2016 <h4>
2017   <a name="t_struct">Structure Type</a>
2018 </h4>
2019
2020 <div>
2021
2022 <h5>Overview:</h5>
2023 <p>The structure type is used to represent a collection of data members together
2024   in memory.  The elements of a structure may be any type that has a size.</p>
2025
2026 <p>Structures in memory are accessed using '<tt><a href="#i_load">load</a></tt>'
2027    and '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field
2028    with the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.
2029    Structures in registers are accessed using the
2030    '<tt><a href="#i_extractvalue">extractvalue</a></tt>' and
2031    '<tt><a href="#i_insertvalue">insertvalue</a></tt>' instructions.</p>
2032   
2033 <p>Structures may optionally be "packed" structures, which indicate that the 
2034   alignment of the struct is one byte, and that there is no padding between
2035   the elements.  In non-packed structs, padding between field types is defined
2036   by the target data string to match the underlying processor.</p>
2037
2038 <p>Structures can either be "anonymous" or "named".  An anonymous structure is
2039   defined inline with other types (e.g. <tt>{i32, i32}*</tt>) and a named types
2040   are always defined at the top level with a name.  Anonmyous types are uniqued
2041   by their contents and can never be recursive since there is no way to write
2042   one.  Named types can be recursive.
2043 </p>
2044   
2045 <h5>Syntax:</h5>
2046 <pre>
2047   %T1 = type { &lt;type list&gt; }     <i>; Named normal struct type</i>
2048   %T2 = type &lt;{ &lt;type list&gt; }&gt;   <i>; Named packed struct type</i>
2049 </pre>
2050   
2051 <h5>Examples:</h5>
2052 <table class="layout">
2053   <tr class="layout">
2054     <td class="left"><tt>{ i32, i32, i32 }</tt></td>
2055     <td class="left">A triple of three <tt>i32</tt> values</td>
2056   </tr>
2057   <tr class="layout">
2058     <td class="left"><tt>{&nbsp;float,&nbsp;i32&nbsp;(i32)&nbsp;*&nbsp;}</tt></td>
2059     <td class="left">A pair, where the first element is a <tt>float</tt> and the
2060       second element is a <a href="#t_pointer">pointer</a> to a
2061       <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
2062       an <tt>i32</tt>.</td>
2063   </tr>
2064   <tr class="layout">
2065     <td class="left"><tt>&lt;{ i8, i32 }&gt;</tt></td>
2066     <td class="left">A packed struct known to be 5 bytes in size.</td>
2067   </tr>
2068 </table>
2069
2070 </div>
2071   
2072 <!-- _______________________________________________________________________ -->
2073 <h4>
2074   <a name="t_opaque">Opaque Structure Types</a>
2075 </h4>
2076
2077 <div>
2078
2079 <h5>Overview:</h5>
2080 <p>Opaque structure types are used to represent named structure types that do
2081    not have a body specified.  This corresponds (for example) to the C notion of
2082    a forward declared structure.</p>
2083
2084 <h5>Syntax:</h5>
2085 <pre>
2086   %X = type opaque
2087   %52 = type opaque
2088 </pre>
2089
2090 <h5>Examples:</h5>
2091 <table class="layout">
2092   <tr class="layout">
2093     <td class="left"><tt>opaque</tt></td>
2094     <td class="left">An opaque type.</td>
2095   </tr>
2096 </table>
2097
2098 </div>
2099
2100
2101
2102 <!-- _______________________________________________________________________ -->
2103 <h4>
2104   <a name="t_pointer">Pointer Type</a>
2105 </h4>
2106
2107 <div>
2108
2109 <h5>Overview:</h5>
2110 <p>The pointer type is used to specify memory locations.
2111    Pointers are commonly used to reference objects in memory.</p>
2112    
2113 <p>Pointer types may have an optional address space attribute defining the
2114    numbered address space where the pointed-to object resides. The default
2115    address space is number zero. The semantics of non-zero address
2116    spaces are target-specific.</p>
2117
2118 <p>Note that LLVM does not permit pointers to void (<tt>void*</tt>) nor does it
2119    permit pointers to labels (<tt>label*</tt>).  Use <tt>i8*</tt> instead.</p>
2120
2121 <h5>Syntax:</h5>
2122 <pre>
2123   &lt;type&gt; *
2124 </pre>
2125
2126 <h5>Examples:</h5>
2127 <table class="layout">
2128   <tr class="layout">
2129     <td class="left"><tt>[4 x i32]*</tt></td>
2130     <td class="left">A <a href="#t_pointer">pointer</a> to <a
2131                     href="#t_array">array</a> of four <tt>i32</tt> values.</td>
2132   </tr>
2133   <tr class="layout">
2134     <td class="left"><tt>i32 (i32*) *</tt></td>
2135     <td class="left"> A <a href="#t_pointer">pointer</a> to a <a
2136       href="#t_function">function</a> that takes an <tt>i32*</tt>, returning an
2137       <tt>i32</tt>.</td>
2138   </tr>
2139   <tr class="layout">
2140     <td class="left"><tt>i32 addrspace(5)*</tt></td>
2141     <td class="left">A <a href="#t_pointer">pointer</a> to an <tt>i32</tt> value
2142      that resides in address space #5.</td>
2143   </tr>
2144 </table>
2145
2146 </div>
2147
2148 <!-- _______________________________________________________________________ -->
2149 <h4>
2150   <a name="t_vector">Vector Type</a>
2151 </h4>
2152
2153 <div>
2154
2155 <h5>Overview:</h5>
2156 <p>A vector type is a simple derived type that represents a vector of elements.
2157    Vector types are used when multiple primitive data are operated in parallel
2158    using a single instruction (SIMD).  A vector type requires a size (number of
2159    elements) and an underlying primitive data type.  Vector types are considered
2160    <a href="#t_firstclass">first class</a>.</p>
2161
2162 <h5>Syntax:</h5>
2163 <pre>
2164   &lt; &lt;# elements&gt; x &lt;elementtype&gt; &gt;
2165 </pre>
2166
2167 <p>The number of elements is a constant integer value larger than 0; elementtype
2168    may be any integer or floating point type.  Vectors of size zero are not
2169    allowed, and pointers are not allowed as the element type.</p>
2170
2171 <h5>Examples:</h5>
2172 <table class="layout">
2173   <tr class="layout">
2174     <td class="left"><tt>&lt;4 x i32&gt;</tt></td>
2175     <td class="left">Vector of 4 32-bit integer values.</td>
2176   </tr>
2177   <tr class="layout">
2178     <td class="left"><tt>&lt;8 x float&gt;</tt></td>
2179     <td class="left">Vector of 8 32-bit floating-point values.</td>
2180   </tr>
2181   <tr class="layout">
2182     <td class="left"><tt>&lt;2 x i64&gt;</tt></td>
2183     <td class="left">Vector of 2 64-bit integer values.</td>
2184   </tr>
2185 </table>
2186
2187 </div>
2188
2189 <!-- *********************************************************************** -->
2190 <h2><a name="constants">Constants</a></h2>
2191 <!-- *********************************************************************** -->
2192
2193 <div>
2194
2195 <p>LLVM has several different basic types of constants.  This section describes
2196    them all and their syntax.</p>
2197
2198 <!-- ======================================================================= -->
2199 <h3>
2200   <a name="simpleconstants">Simple Constants</a>
2201 </h3>
2202
2203 <div>
2204
2205 <dl>
2206   <dt><b>Boolean constants</b></dt>
2207   <dd>The two strings '<tt>true</tt>' and '<tt>false</tt>' are both valid
2208       constants of the <tt><a href="#t_integer">i1</a></tt> type.</dd>
2209
2210   <dt><b>Integer constants</b></dt>
2211   <dd>Standard integers (such as '4') are constants of
2212       the <a href="#t_integer">integer</a> type.  Negative numbers may be used
2213       with integer types.</dd>
2214
2215   <dt><b>Floating point constants</b></dt>
2216   <dd>Floating point constants use standard decimal notation (e.g. 123.421),
2217       exponential notation (e.g. 1.23421e+2), or a more precise hexadecimal
2218       notation (see below).  The assembler requires the exact decimal value of a
2219       floating-point constant.  For example, the assembler accepts 1.25 but
2220       rejects 1.3 because 1.3 is a repeating decimal in binary.  Floating point
2221       constants must have a <a href="#t_floating">floating point</a> type. </dd>
2222
2223   <dt><b>Null pointer constants</b></dt>
2224   <dd>The identifier '<tt>null</tt>' is recognized as a null pointer constant
2225       and must be of <a href="#t_pointer">pointer type</a>.</dd>
2226 </dl>
2227
2228 <p>The one non-intuitive notation for constants is the hexadecimal form of
2229    floating point constants.  For example, the form '<tt>double
2230    0x432ff973cafa8000</tt>' is equivalent to (but harder to read than)
2231    '<tt>double 4.5e+15</tt>'.  The only time hexadecimal floating point
2232    constants are required (and the only time that they are generated by the
2233    disassembler) is when a floating point constant must be emitted but it cannot
2234    be represented as a decimal floating point number in a reasonable number of
2235    digits.  For example, NaN's, infinities, and other special values are
2236    represented in their IEEE hexadecimal format so that assembly and disassembly
2237    do not cause any bits to change in the constants.</p>
2238
2239 <p>When using the hexadecimal form, constants of types float and double are
2240    represented using the 16-digit form shown above (which matches the IEEE754
2241    representation for double); float values must, however, be exactly
2242    representable as IEE754 single precision.  Hexadecimal format is always used
2243    for long double, and there are three forms of long double.  The 80-bit format
2244    used by x86 is represented as <tt>0xK</tt> followed by 20 hexadecimal digits.
2245    The 128-bit format used by PowerPC (two adjacent doubles) is represented
2246    by <tt>0xM</tt> followed by 32 hexadecimal digits.  The IEEE 128-bit format
2247    is represented by <tt>0xL</tt> followed by 32 hexadecimal digits; no
2248    currently supported target uses this format.  Long doubles will only work if
2249    they match the long double format on your target.  All hexadecimal formats
2250    are big-endian (sign bit at the left).</p>
2251
2252 <p>There are no constants of type x86mmx.</p>
2253 </div>
2254
2255 <!-- ======================================================================= -->
2256 <h3>
2257 <a name="aggregateconstants"></a> <!-- old anchor -->
2258 <a name="complexconstants">Complex Constants</a>
2259 </h3>
2260
2261 <div>
2262
2263 <p>Complex constants are a (potentially recursive) combination of simple
2264    constants and smaller complex constants.</p>
2265
2266 <dl>
2267   <dt><b>Structure constants</b></dt>
2268   <dd>Structure constants are represented with notation similar to structure
2269       type definitions (a comma separated list of elements, surrounded by braces
2270       (<tt>{}</tt>)).  For example: "<tt>{ i32 4, float 17.0, i32* @G }</tt>",
2271       where "<tt>@G</tt>" is declared as "<tt>@G = external global i32</tt>".
2272       Structure constants must have <a href="#t_struct">structure type</a>, and
2273       the number and types of elements must match those specified by the
2274       type.</dd>
2275
2276   <dt><b>Array constants</b></dt>
2277   <dd>Array constants are represented with notation similar to array type
2278      definitions (a comma separated list of elements, surrounded by square
2279      brackets (<tt>[]</tt>)).  For example: "<tt>[ i32 42, i32 11, i32 74
2280      ]</tt>".  Array constants must have <a href="#t_array">array type</a>, and
2281      the number and types of elements must match those specified by the
2282      type.</dd>
2283
2284   <dt><b>Vector constants</b></dt>
2285   <dd>Vector constants are represented with notation similar to vector type
2286       definitions (a comma separated list of elements, surrounded by
2287       less-than/greater-than's (<tt>&lt;&gt;</tt>)).  For example: "<tt>&lt; i32
2288       42, i32 11, i32 74, i32 100 &gt;</tt>".  Vector constants must
2289       have <a href="#t_vector">vector type</a>, and the number and types of
2290       elements must match those specified by the type.</dd>
2291
2292   <dt><b>Zero initialization</b></dt>
2293   <dd>The string '<tt>zeroinitializer</tt>' can be used to zero initialize a
2294       value to zero of <em>any</em> type, including scalar and
2295       <a href="#t_aggregate">aggregate</a> types.
2296       This is often used to avoid having to print large zero initializers
2297       (e.g. for large arrays) and is always exactly equivalent to using explicit
2298       zero initializers.</dd>
2299
2300   <dt><b>Metadata node</b></dt>
2301   <dd>A metadata node is a structure-like constant with
2302       <a href="#t_metadata">metadata type</a>.  For example: "<tt>metadata !{
2303       i32 0, metadata !"test" }</tt>".  Unlike other constants that are meant to
2304       be interpreted as part of the instruction stream, metadata is a place to
2305       attach additional information such as debug info.</dd>
2306 </dl>
2307
2308 </div>
2309
2310 <!-- ======================================================================= -->
2311 <h3>
2312   <a name="globalconstants">Global Variable and Function Addresses</a>
2313 </h3>
2314
2315 <div>
2316
2317 <p>The addresses of <a href="#globalvars">global variables</a>
2318    and <a href="#functionstructure">functions</a> are always implicitly valid
2319    (link-time) constants.  These constants are explicitly referenced when
2320    the <a href="#identifiers">identifier for the global</a> is used and always
2321    have <a href="#t_pointer">pointer</a> type. For example, the following is a
2322    legal LLVM file:</p>
2323
2324 <pre class="doc_code">
2325 @X = global i32 17
2326 @Y = global i32 42
2327 @Z = global [2 x i32*] [ i32* @X, i32* @Y ]
2328 </pre>
2329
2330 </div>
2331
2332 <!-- ======================================================================= -->
2333 <h3>
2334   <a name="undefvalues">Undefined Values</a>
2335 </h3>
2336
2337 <div>
2338
2339 <p>The string '<tt>undef</tt>' can be used anywhere a constant is expected, and
2340    indicates that the user of the value may receive an unspecified bit-pattern.
2341    Undefined values may be of any type (other than '<tt>label</tt>'
2342    or '<tt>void</tt>') and be used anywhere a constant is permitted.</p>
2343
2344 <p>Undefined values are useful because they indicate to the compiler that the
2345    program is well defined no matter what value is used.  This gives the
2346    compiler more freedom to optimize.  Here are some examples of (potentially
2347    surprising) transformations that are valid (in pseudo IR):</p>
2348
2349
2350 <pre class="doc_code">
2351   %A = add %X, undef
2352   %B = sub %X, undef
2353   %C = xor %X, undef
2354 Safe:
2355   %A = undef
2356   %B = undef
2357   %C = undef
2358 </pre>
2359
2360 <p>This is safe because all of the output bits are affected by the undef bits.
2361    Any output bit can have a zero or one depending on the input bits.</p>
2362
2363 <pre class="doc_code">
2364   %A = or %X, undef
2365   %B = and %X, undef
2366 Safe:
2367   %A = -1
2368   %B = 0
2369 Unsafe:
2370   %A = undef
2371   %B = undef
2372 </pre>
2373
2374 <p>These logical operations have bits that are not always affected by the input.
2375    For example, if <tt>%X</tt> has a zero bit, then the output of the
2376    '<tt>and</tt>' operation will always be a zero for that bit, no matter what
2377    the corresponding bit from the '<tt>undef</tt>' is. As such, it is unsafe to
2378    optimize or assume that the result of the '<tt>and</tt>' is '<tt>undef</tt>'.
2379    However, it is safe to assume that all bits of the '<tt>undef</tt>' could be
2380    0, and optimize the '<tt>and</tt>' to 0. Likewise, it is safe to assume that
2381    all the bits of the '<tt>undef</tt>' operand to the '<tt>or</tt>' could be
2382    set, allowing the '<tt>or</tt>' to be folded to -1.</p>
2383
2384 <pre class="doc_code">
2385   %A = select undef, %X, %Y
2386   %B = select undef, 42, %Y
2387   %C = select %X, %Y, undef
2388 Safe:
2389   %A = %X     (or %Y)
2390   %B = 42     (or %Y)
2391   %C = %Y
2392 Unsafe:
2393   %A = undef
2394   %B = undef
2395   %C = undef
2396 </pre>
2397
2398 <p>This set of examples shows that undefined '<tt>select</tt>' (and conditional
2399    branch) conditions can go <em>either way</em>, but they have to come from one
2400    of the two operands.  In the <tt>%A</tt> example, if <tt>%X</tt> and
2401    <tt>%Y</tt> were both known to have a clear low bit, then <tt>%A</tt> would
2402    have to have a cleared low bit. However, in the <tt>%C</tt> example, the
2403    optimizer is allowed to assume that the '<tt>undef</tt>' operand could be the
2404    same as <tt>%Y</tt>, allowing the whole '<tt>select</tt>' to be
2405    eliminated.</p>
2406
2407 <pre class="doc_code">
2408   %A = xor undef, undef
2409
2410   %B = undef
2411   %C = xor %B, %B
2412
2413   %D = undef
2414   %E = icmp lt %D, 4
2415   %F = icmp gte %D, 4
2416
2417 Safe:
2418   %A = undef
2419   %B = undef
2420   %C = undef
2421   %D = undef
2422   %E = undef
2423   %F = undef
2424 </pre>
2425
2426 <p>This example points out that two '<tt>undef</tt>' operands are not
2427    necessarily the same. This can be surprising to people (and also matches C
2428    semantics) where they assume that "<tt>X^X</tt>" is always zero, even
2429    if <tt>X</tt> is undefined. This isn't true for a number of reasons, but the
2430    short answer is that an '<tt>undef</tt>' "variable" can arbitrarily change
2431    its value over its "live range".  This is true because the variable doesn't
2432    actually <em>have a live range</em>. Instead, the value is logically read
2433    from arbitrary registers that happen to be around when needed, so the value
2434    is not necessarily consistent over time. In fact, <tt>%A</tt> and <tt>%C</tt>
2435    need to have the same semantics or the core LLVM "replace all uses with"
2436    concept would not hold.</p>
2437
2438 <pre class="doc_code">
2439   %A = fdiv undef, %X
2440   %B = fdiv %X, undef
2441 Safe:
2442   %A = undef
2443 b: unreachable
2444 </pre>
2445
2446 <p>These examples show the crucial difference between an <em>undefined
2447   value</em> and <em>undefined behavior</em>. An undefined value (like
2448   '<tt>undef</tt>') is allowed to have an arbitrary bit-pattern. This means that
2449   the <tt>%A</tt> operation can be constant folded to '<tt>undef</tt>', because
2450   the '<tt>undef</tt>' could be an SNaN, and <tt>fdiv</tt> is not (currently)
2451   defined on SNaN's. However, in the second example, we can make a more
2452   aggressive assumption: because the <tt>undef</tt> is allowed to be an
2453   arbitrary value, we are allowed to assume that it could be zero. Since a
2454   divide by zero has <em>undefined behavior</em>, we are allowed to assume that
2455   the operation does not execute at all. This allows us to delete the divide and
2456   all code after it. Because the undefined operation "can't happen", the
2457   optimizer can assume that it occurs in dead code.</p>
2458
2459 <pre class="doc_code">
2460 a:  store undef -> %X
2461 b:  store %X -> undef
2462 Safe:
2463 a: &lt;deleted&gt;
2464 b: unreachable
2465 </pre>
2466
2467 <p>These examples reiterate the <tt>fdiv</tt> example: a store <em>of</em> an
2468    undefined value can be assumed to not have any effect; we can assume that the
2469    value is overwritten with bits that happen to match what was already there.
2470    However, a store <em>to</em> an undefined location could clobber arbitrary
2471    memory, therefore, it has undefined behavior.</p>
2472
2473 </div>
2474
2475 <!-- ======================================================================= -->
2476 <h3>
2477   <a name="trapvalues">Trap Values</a>
2478 </h3>
2479
2480 <div>
2481
2482 <p>Trap values are similar to <a href="#undefvalues">undef values</a>, however
2483    instead of representing an unspecified bit pattern, they represent the
2484    fact that an instruction or constant expression which cannot evoke side
2485    effects has nevertheless detected a condition which results in undefined
2486    behavior.</p>
2487
2488 <p>There is currently no way of representing a trap value in the IR; they
2489    only exist when produced by operations such as
2490    <a href="#i_add"><tt>add</tt></a> with the <tt>nsw</tt> flag.</p>
2491
2492 <p>Trap value behavior is defined in terms of value <i>dependence</i>:</p>
2493
2494 <ul>
2495 <li>Values other than <a href="#i_phi"><tt>phi</tt></a> nodes depend on
2496     their operands.</li>
2497
2498 <li><a href="#i_phi"><tt>Phi</tt></a> nodes depend on the operand corresponding
2499     to their dynamic predecessor basic block.</li>
2500
2501 <li>Function arguments depend on the corresponding actual argument values in
2502     the dynamic callers of their functions.</li>
2503
2504 <li><a href="#i_call"><tt>Call</tt></a> instructions depend on the
2505     <a href="#i_ret"><tt>ret</tt></a> instructions that dynamically transfer
2506     control back to them.</li>
2507
2508 <li><a href="#i_invoke"><tt>Invoke</tt></a> instructions depend on the
2509     <a href="#i_ret"><tt>ret</tt></a>, <a href="#i_unwind"><tt>unwind</tt></a>,
2510     or exception-throwing call instructions that dynamically transfer control
2511     back to them.</li>
2512
2513 <li>Non-volatile loads and stores depend on the most recent stores to all of the
2514     referenced memory addresses, following the order in the IR
2515     (including loads and stores implied by intrinsics such as
2516     <a href="#int_memcpy"><tt>@llvm.memcpy</tt></a>.)</li>
2517
2518 <!-- TODO: In the case of multiple threads, this only applies if the store
2519      "happens-before" the load or store. -->
2520
2521 <!-- TODO: floating-point exception state -->
2522
2523 <li>An instruction with externally visible side effects depends on the most
2524     recent preceding instruction with externally visible side effects, following
2525     the order in the IR. (This includes
2526     <a href="#volatile">volatile operations</a>.)</li>
2527
2528 <li>An instruction <i>control-depends</i> on a
2529     <a href="#terminators">terminator instruction</a>
2530     if the terminator instruction has multiple successors and the instruction
2531     is always executed when control transfers to one of the successors, and
2532     may not be executed when control is transferred to another.</li>
2533
2534 <li>Additionally, an instruction also <i>control-depends</i> on a terminator
2535     instruction if the set of instructions it otherwise depends on would be
2536     different if the terminator had transferred control to a different
2537     successor.</li>
2538
2539 <li>Dependence is transitive.</li>
2540
2541 </ul>
2542
2543 <p>Whenever a trap value is generated, all values which depend on it evaluate
2544    to trap. If they have side effects, the evoke their side effects as if each
2545    operand with a trap value were undef. If they have externally-visible side
2546    effects, the behavior is undefined.</p>
2547
2548 <p>Here are some examples:</p>
2549
2550 <pre class="doc_code">
2551 entry:
2552   %trap = sub nuw i32 0, 1           ; Results in a trap value.
2553   %still_trap = and i32 %trap, 0     ; Whereas (and i32 undef, 0) would return 0.
2554   %trap_yet_again = getelementptr i32* @h, i32 %still_trap
2555   store i32 0, i32* %trap_yet_again  ; undefined behavior
2556
2557   store i32 %trap, i32* @g           ; Trap value conceptually stored to memory.
2558   %trap2 = load i32* @g              ; Returns a trap value, not just undef.
2559
2560   volatile store i32 %trap, i32* @g  ; External observation; undefined behavior.
2561
2562   %narrowaddr = bitcast i32* @g to i16*
2563   %wideaddr = bitcast i32* @g to i64*
2564   %trap3 = load i16* %narrowaddr     ; Returns a trap value.
2565   %trap4 = load i64* %wideaddr       ; Returns a trap value.
2566
2567   %cmp = icmp slt i32 %trap, 0       ; Returns a trap value.
2568   br i1 %cmp, label %true, label %end ; Branch to either destination.
2569
2570 true:
2571   volatile store i32 0, i32* @g      ; This is control-dependent on %cmp, so
2572                                      ; it has undefined behavior.
2573   br label %end
2574
2575 end:
2576   %p = phi i32 [ 0, %entry ], [ 1, %true ]
2577                                      ; Both edges into this PHI are
2578                                      ; control-dependent on %cmp, so this
2579                                      ; always results in a trap value.
2580
2581   volatile store i32 0, i32* @g      ; This would depend on the store in %true
2582                                      ; if %cmp is true, or the store in %entry
2583                                      ; otherwise, so this is undefined behavior.
2584
2585   br i1 %cmp, label %second_true, label %second_end
2586                                      ; The same branch again, but this time the
2587                                      ; true block doesn't have side effects.
2588
2589 second_true:
2590   ; No side effects!
2591   ret void
2592
2593 second_end:
2594   volatile store i32 0, i32* @g      ; This time, the instruction always depends
2595                                      ; on the store in %end. Also, it is
2596                                      ; control-equivalent to %end, so this is
2597                                      ; well-defined (again, ignoring earlier
2598                                      ; undefined behavior in this example).
2599 </pre>
2600
2601 </div>
2602
2603 <!-- ======================================================================= -->
2604 <h3>
2605   <a name="blockaddress">Addresses of Basic Blocks</a>
2606 </h3>
2607
2608 <div>
2609
2610 <p><b><tt>blockaddress(@function, %block)</tt></b></p>
2611
2612 <p>The '<tt>blockaddress</tt>' constant computes the address of the specified
2613    basic block in the specified function, and always has an i8* type.  Taking
2614    the address of the entry block is illegal.</p>
2615
2616 <p>This value only has defined behavior when used as an operand to the
2617    '<a href="#i_indirectbr"><tt>indirectbr</tt></a>' instruction, or for
2618    comparisons against null. Pointer equality tests between labels addresses
2619    results in undefined behavior &mdash; though, again, comparison against null
2620    is ok, and no label is equal to the null pointer. This may be passed around
2621    as an opaque pointer sized value as long as the bits are not inspected. This
2622    allows <tt>ptrtoint</tt> and arithmetic to be performed on these values so
2623    long as the original value is reconstituted before the <tt>indirectbr</tt>
2624    instruction.</p>
2625
2626 <p>Finally, some targets may provide defined semantics when using the value as
2627    the operand to an inline assembly, but that is target specific.</p>
2628
2629 </div>
2630
2631
2632 <!-- ======================================================================= -->
2633 <h3>
2634   <a name="constantexprs">Constant Expressions</a>
2635 </h3>
2636
2637 <div>
2638
2639 <p>Constant expressions are used to allow expressions involving other constants
2640    to be used as constants.  Constant expressions may be of
2641    any <a href="#t_firstclass">first class</a> type and may involve any LLVM
2642    operation that does not have side effects (e.g. load and call are not
2643    supported). The following is the syntax for constant expressions:</p>
2644
2645 <dl>
2646   <dt><b><tt>trunc (CST to TYPE)</tt></b></dt>
2647   <dd>Truncate a constant to another type. The bit size of CST must be larger
2648       than the bit size of TYPE. Both types must be integers.</dd>
2649
2650   <dt><b><tt>zext (CST to TYPE)</tt></b></dt>
2651   <dd>Zero extend a constant to another type. The bit size of CST must be
2652       smaller than the bit size of TYPE.  Both types must be integers.</dd>
2653
2654   <dt><b><tt>sext (CST to TYPE)</tt></b></dt>
2655   <dd>Sign extend a constant to another type. The bit size of CST must be
2656       smaller than the bit size of TYPE.  Both types must be integers.</dd>
2657
2658   <dt><b><tt>fptrunc (CST to TYPE)</tt></b></dt>
2659   <dd>Truncate a floating point constant to another floating point type. The
2660       size of CST must be larger than the size of TYPE. Both types must be
2661       floating point.</dd>
2662
2663   <dt><b><tt>fpext (CST to TYPE)</tt></b></dt>
2664   <dd>Floating point extend a constant to another type. The size of CST must be
2665       smaller or equal to the size of TYPE. Both types must be floating
2666       point.</dd>
2667
2668   <dt><b><tt>fptoui (CST to TYPE)</tt></b></dt>
2669   <dd>Convert a floating point constant to the corresponding unsigned integer
2670       constant. TYPE must be a scalar or vector integer type. CST must be of
2671       scalar or vector floating point type. Both CST and TYPE must be scalars,
2672       or vectors of the same number of elements. If the value won't fit in the
2673       integer type, the results are undefined.</dd>
2674
2675   <dt><b><tt>fptosi (CST to TYPE)</tt></b></dt>
2676   <dd>Convert a floating point constant to the corresponding signed integer
2677       constant.  TYPE must be a scalar or vector integer type. CST must be of
2678       scalar or vector floating point type. Both CST and TYPE must be scalars,
2679       or vectors of the same number of elements. If the value won't fit in the
2680       integer type, the results are undefined.</dd>
2681
2682   <dt><b><tt>uitofp (CST to TYPE)</tt></b></dt>
2683   <dd>Convert an unsigned integer constant to the corresponding floating point
2684       constant. TYPE must be a scalar or vector floating point type. CST must be
2685       of scalar or vector integer type. Both CST and TYPE must be scalars, or
2686       vectors of the same number of elements. If the value won't fit in the
2687       floating point type, the results are undefined.</dd>
2688
2689   <dt><b><tt>sitofp (CST to TYPE)</tt></b></dt>
2690   <dd>Convert a signed integer constant to the corresponding floating point
2691       constant. TYPE must be a scalar or vector floating point type. CST must be
2692       of scalar or vector integer type. Both CST and TYPE must be scalars, or
2693       vectors of the same number of elements. If the value won't fit in the
2694       floating point type, the results are undefined.</dd>
2695
2696   <dt><b><tt>ptrtoint (CST to TYPE)</tt></b></dt>
2697   <dd>Convert a pointer typed constant to the corresponding integer constant
2698       <tt>TYPE</tt> must be an integer type. <tt>CST</tt> must be of pointer
2699       type. The <tt>CST</tt> value is zero extended, truncated, or unchanged to
2700       make it fit in <tt>TYPE</tt>.</dd>
2701
2702   <dt><b><tt>inttoptr (CST to TYPE)</tt></b></dt>
2703   <dd>Convert a integer constant to a pointer constant.  TYPE must be a pointer
2704       type.  CST must be of integer type. The CST value is zero extended,
2705       truncated, or unchanged to make it fit in a pointer size. This one is
2706       <i>really</i> dangerous!</dd>
2707
2708   <dt><b><tt>bitcast (CST to TYPE)</tt></b></dt>
2709   <dd>Convert a constant, CST, to another TYPE. The constraints of the operands
2710       are the same as those for the <a href="#i_bitcast">bitcast
2711       instruction</a>.</dd>
2712
2713   <dt><b><tt>getelementptr (CSTPTR, IDX0, IDX1, ...)</tt></b></dt>
2714   <dt><b><tt>getelementptr inbounds (CSTPTR, IDX0, IDX1, ...)</tt></b></dt>
2715   <dd>Perform the <a href="#i_getelementptr">getelementptr operation</a> on
2716       constants.  As with the <a href="#i_getelementptr">getelementptr</a>
2717       instruction, the index list may have zero or more indexes, which are
2718       required to make sense for the type of "CSTPTR".</dd>
2719
2720   <dt><b><tt>select (COND, VAL1, VAL2)</tt></b></dt>
2721   <dd>Perform the <a href="#i_select">select operation</a> on constants.</dd>
2722
2723   <dt><b><tt>icmp COND (VAL1, VAL2)</tt></b></dt>
2724   <dd>Performs the <a href="#i_icmp">icmp operation</a> on constants.</dd>
2725
2726   <dt><b><tt>fcmp COND (VAL1, VAL2)</tt></b></dt>
2727   <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd>
2728
2729   <dt><b><tt>extractelement (VAL, IDX)</tt></b></dt>
2730   <dd>Perform the <a href="#i_extractelement">extractelement operation</a> on
2731       constants.</dd>
2732
2733   <dt><b><tt>insertelement (VAL, ELT, IDX)</tt></b></dt>
2734   <dd>Perform the <a href="#i_insertelement">insertelement operation</a> on
2735     constants.</dd>
2736
2737   <dt><b><tt>shufflevector (VEC1, VEC2, IDXMASK)</tt></b></dt>
2738   <dd>Perform the <a href="#i_shufflevector">shufflevector operation</a> on
2739       constants.</dd>
2740
2741   <dt><b><tt>extractvalue (VAL, IDX0, IDX1, ...)</tt></b></dt>
2742   <dd>Perform the <a href="#i_extractvalue">extractvalue operation</a> on
2743     constants. The index list is interpreted in a similar manner as indices in
2744     a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one
2745     index value must be specified.</dd>
2746
2747   <dt><b><tt>insertvalue (VAL, ELT, IDX0, IDX1, ...)</tt></b></dt>
2748   <dd>Perform the <a href="#i_insertvalue">insertvalue operation</a> on
2749     constants. The index list is interpreted in a similar manner as indices in
2750     a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one
2751     index value must be specified.</dd>
2752
2753   <dt><b><tt>OPCODE (LHS, RHS)</tt></b></dt>
2754   <dd>Perform the specified operation of the LHS and RHS constants. OPCODE may
2755       be any of the <a href="#binaryops">binary</a>
2756       or <a href="#bitwiseops">bitwise binary</a> operations.  The constraints
2757       on operands are the same as those for the corresponding instruction
2758       (e.g. no bitwise operations on floating point values are allowed).</dd>
2759 </dl>
2760
2761 </div>
2762
2763 </div>
2764
2765 <!-- *********************************************************************** -->
2766 <h2><a name="othervalues">Other Values</a></h2>
2767 <!-- *********************************************************************** -->
2768 <div>
2769 <!-- ======================================================================= -->
2770 <h3>
2771 <a name="inlineasm">Inline Assembler Expressions</a>
2772 </h3>
2773
2774 <div>
2775
2776 <p>LLVM supports inline assembler expressions (as opposed
2777    to <a href="#moduleasm"> Module-Level Inline Assembly</a>) through the use of
2778    a special value.  This value represents the inline assembler as a string
2779    (containing the instructions to emit), a list of operand constraints (stored
2780    as a string), a flag that indicates whether or not the inline asm
2781    expression has side effects, and a flag indicating whether the function
2782    containing the asm needs to align its stack conservatively.  An example
2783    inline assembler expression is:</p>
2784
2785 <pre class="doc_code">
2786 i32 (i32) asm "bswap $0", "=r,r"
2787 </pre>
2788
2789 <p>Inline assembler expressions may <b>only</b> be used as the callee operand of
2790    a <a href="#i_call"><tt>call</tt> instruction</a>.  Thus, typically we
2791    have:</p>
2792
2793 <pre class="doc_code">
2794 %X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y)
2795 </pre>
2796
2797 <p>Inline asms with side effects not visible in the constraint list must be
2798    marked as having side effects.  This is done through the use of the
2799    '<tt>sideeffect</tt>' keyword, like so:</p>
2800
2801 <pre class="doc_code">
2802 call void asm sideeffect "eieio", ""()
2803 </pre>
2804
2805 <p>In some cases inline asms will contain code that will not work unless the
2806    stack is aligned in some way, such as calls or SSE instructions on x86,
2807    yet will not contain code that does that alignment within the asm.
2808    The compiler should make conservative assumptions about what the asm might
2809    contain and should generate its usual stack alignment code in the prologue
2810    if the '<tt>alignstack</tt>' keyword is present:</p>
2811
2812 <pre class="doc_code">
2813 call void asm alignstack "eieio", ""()
2814 </pre>
2815
2816 <p>If both keywords appear the '<tt>sideeffect</tt>' keyword must come
2817    first.</p>
2818
2819 <p>TODO: The format of the asm and constraints string still need to be
2820    documented here.  Constraints on what can be done (e.g. duplication, moving,
2821    etc need to be documented).  This is probably best done by reference to
2822    another document that covers inline asm from a holistic perspective.</p>
2823
2824 <h4>
2825 <a name="inlineasm_md">Inline Asm Metadata</a>
2826 </h4>
2827
2828 <div>
2829
2830 <p>The call instructions that wrap inline asm nodes may have a "!srcloc" MDNode
2831    attached to it that contains a list of constant integers.  If present, the
2832   code generator will use the integer as the location cookie value when report
2833    errors through the LLVMContext error reporting mechanisms.  This allows a
2834    front-end to correlate backend errors that occur with inline asm back to the
2835    source code that produced it.  For example:</p>
2836
2837 <pre class="doc_code">
2838 call void asm sideeffect "something bad", ""()<b>, !srcloc !42</b>
2839 ...
2840 !42 = !{ i32 1234567 }
2841 </pre>
2842
2843 <p>It is up to the front-end to make sense of the magic numbers it places in the
2844    IR.  If the MDNode contains multiple constants, the code generator will use
2845    the one that corresponds to the line of the asm that the error occurs on.</p>
2846
2847 </div>
2848
2849 </div>
2850
2851 <!-- ======================================================================= -->
2852 <h3>
2853   <a name="metadata">Metadata Nodes and Metadata Strings</a>
2854 </h3>
2855
2856 <div>
2857
2858 <p>LLVM IR allows metadata to be attached to instructions in the program that
2859    can convey extra information about the code to the optimizers and code
2860    generator.  One example application of metadata is source-level debug
2861    information.  There are two metadata primitives: strings and nodes. All
2862    metadata has the <tt>metadata</tt> type and is identified in syntax by a
2863    preceding exclamation point ('<tt>!</tt>').</p>
2864
2865 <p>A metadata string is a string surrounded by double quotes.  It can contain
2866    any character by escaping non-printable characters with "\xx" where "xx" is
2867    the two digit hex code.  For example: "<tt>!"test\00"</tt>".</p>
2868
2869 <p>Metadata nodes are represented with notation similar to structure constants
2870    (a comma separated list of elements, surrounded by braces and preceded by an
2871    exclamation point).  For example: "<tt>!{ metadata !"test\00", i32
2872    10}</tt>".  Metadata nodes can have any values as their operand.</p>
2873
2874 <p>A <a href="#namedmetadatastructure">named metadata</a> is a collection of 
2875    metadata nodes, which can be looked up in the module symbol table. For
2876    example: "<tt>!foo =  metadata !{!4, !3}</tt>".
2877
2878 <p>Metadata can be used as function arguments. Here <tt>llvm.dbg.value</tt> 
2879    function is using two metadata arguments.</p>
2880
2881 <div class="doc_code">
2882 <pre>
2883 call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
2884 </pre>
2885 </div>
2886
2887 <p>Metadata can be attached with an instruction. Here metadata <tt>!21</tt> is
2888    attached with <tt>add</tt> instruction using <tt>!dbg</tt> identifier.</p>
2889
2890 <div class="doc_code">
2891 <pre>
2892 %indvar.next = add i64 %indvar, 1, !dbg !21
2893 </pre>
2894 </div>
2895
2896 </div>
2897
2898 </div>
2899
2900 <!-- *********************************************************************** -->
2901 <h2>
2902   <a name="intrinsic_globals">Intrinsic Global Variables</a>
2903 </h2>
2904 <!-- *********************************************************************** -->
2905 <div>
2906 <p>LLVM has a number of "magic" global variables that contain data that affect
2907 code generation or other IR semantics.  These are documented here.  All globals
2908 of this sort should have a section specified as "<tt>llvm.metadata</tt>".  This
2909 section and all globals that start with "<tt>llvm.</tt>" are reserved for use
2910 by LLVM.</p>
2911
2912 <!-- ======================================================================= -->
2913 <h3>
2914 <a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a>
2915 </h3>
2916
2917 <div>
2918
2919 <p>The <tt>@llvm.used</tt> global is an array with i8* element type which has <a
2920 href="#linkage_appending">appending linkage</a>.  This array contains a list of
2921 pointers to global variables and functions which may optionally have a pointer
2922 cast formed of bitcast or getelementptr.  For example, a legal use of it is:</p>
2923
2924 <pre>
2925   @X = global i8 4
2926   @Y = global i32 123
2927
2928   @llvm.used = appending global [2 x i8*] [
2929      i8* @X,
2930      i8* bitcast (i32* @Y to i8*)
2931   ], section "llvm.metadata"
2932 </pre>
2933
2934 <p>If a global variable appears in the <tt>@llvm.used</tt> list, then the
2935 compiler, assembler, and linker are required to treat the symbol as if there is
2936 a reference to the global that it cannot see.  For example, if a variable has
2937 internal linkage and no references other than that from the <tt>@llvm.used</tt>
2938 list, it cannot be deleted.  This is commonly used to represent references from
2939 inline asms and other things the compiler cannot "see", and corresponds to
2940 "attribute((used))" in GNU C.</p>
2941
2942 <p>On some targets, the code generator must emit a directive to the assembler or
2943 object file to prevent the assembler and linker from molesting the symbol.</p>
2944
2945 </div>
2946
2947 <!-- ======================================================================= -->
2948 <h3>
2949   <a name="intg_compiler_used">
2950     The '<tt>llvm.compiler.used</tt>' Global Variable
2951   </a>
2952 </h3>
2953
2954 <div>
2955
2956 <p>The <tt>@llvm.compiler.used</tt> directive is the same as the
2957 <tt>@llvm.used</tt> directive, except that it only prevents the compiler from
2958 touching the symbol.  On targets that support it, this allows an intelligent
2959 linker to optimize references to the symbol without being impeded as it would be
2960 by <tt>@llvm.used</tt>.</p>
2961
2962 <p>This is a rare construct that should only be used in rare circumstances, and
2963 should not be exposed to source languages.</p>
2964
2965 </div>
2966
2967 <!-- ======================================================================= -->
2968 <h3>
2969 <a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a>
2970 </h3>
2971
2972 <div>
2973 <pre>
2974 %0 = type { i32, void ()* }
2975 @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor }]
2976 </pre>
2977 <p>The <tt>@llvm.global_ctors</tt> array contains a list of constructor functions and associated priorities.  The functions referenced by this array will be called in ascending order of priority (i.e. lowest first) when the module is loaded.  The order of functions with the same priority is not defined.
2978 </p>
2979
2980 </div>
2981
2982 <!-- ======================================================================= -->
2983 <h3>
2984 <a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a>
2985 </h3>
2986
2987 <div>
2988 <pre>
2989 %0 = type { i32, void ()* }
2990 @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor }]
2991 </pre>
2992
2993 <p>The <tt>@llvm.global_dtors</tt> array contains a list of destructor functions and associated priorities.  The functions referenced by this array will be called in descending order of priority (i.e. highest first) when the module is loaded.  The order of functions with the same priority is not defined.
2994 </p>
2995
2996 </div>
2997
2998 </div>
2999
3000 <!-- *********************************************************************** -->
3001 <h2><a name="instref">Instruction Reference</a></h2>
3002 <!-- *********************************************************************** -->
3003
3004 <div>
3005
3006 <p>The LLVM instruction set consists of several different classifications of
3007    instructions: <a href="#terminators">terminator
3008    instructions</a>, <a href="#binaryops">binary instructions</a>,
3009    <a href="#bitwiseops">bitwise binary instructions</a>,
3010    <a href="#memoryops">memory instructions</a>, and
3011    <a href="#otherops">other instructions</a>.</p>
3012
3013 <!-- ======================================================================= -->
3014 <h3>
3015   <a name="terminators">Terminator Instructions</a>
3016 </h3>
3017
3018 <div>
3019
3020 <p>As mentioned <a href="#functionstructure">previously</a>, every basic block
3021    in a program ends with a "Terminator" instruction, which indicates which
3022    block should be executed after the current block is finished. These
3023    terminator instructions typically yield a '<tt>void</tt>' value: they produce
3024    control flow, not values (the one exception being the
3025    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p>
3026
3027 <p>There are eight different terminator instructions: the
3028    '<a href="#i_ret"><tt>ret</tt></a>' instruction, the
3029    '<a href="#i_br"><tt>br</tt></a>' instruction, the
3030    '<a href="#i_switch"><tt>switch</tt></a>' instruction, the
3031    '<a href="#i_indirectbr">'<tt>indirectbr</tt></a>' Instruction, the
3032    '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, the
3033    '<a href="#i_unwind"><tt>unwind</tt></a>' instruction, the
3034    '<a href="#i_resume"><tt>resume</tt></a>' instruction, and the
3035    '<a href="#i_unreachable"><tt>unreachable</tt></a>' instruction.</p>
3036
3037 <!-- _______________________________________________________________________ -->
3038 <h4>
3039   <a name="i_ret">'<tt>ret</tt>' Instruction</a>
3040 </h4>
3041
3042 <div>
3043
3044 <h5>Syntax:</h5>
3045 <pre>
3046   ret &lt;type&gt; &lt;value&gt;       <i>; Return a value from a non-void function</i>
3047   ret void                 <i>; Return from void function</i>
3048 </pre>
3049
3050 <h5>Overview:</h5>
3051 <p>The '<tt>ret</tt>' instruction is used to return control flow (and optionally
3052    a value) from a function back to the caller.</p>
3053
3054 <p>There are two forms of the '<tt>ret</tt>' instruction: one that returns a
3055    value and then causes control flow, and one that just causes control flow to
3056    occur.</p>
3057
3058 <h5>Arguments:</h5>
3059 <p>The '<tt>ret</tt>' instruction optionally accepts a single argument, the
3060    return value. The type of the return value must be a
3061    '<a href="#t_firstclass">first class</a>' type.</p>
3062
3063 <p>A function is not <a href="#wellformed">well formed</a> if it it has a
3064    non-void return type and contains a '<tt>ret</tt>' instruction with no return
3065    value or a return value with a type that does not match its type, or if it
3066    has a void return type and contains a '<tt>ret</tt>' instruction with a
3067    return value.</p>
3068
3069 <h5>Semantics:</h5>
3070 <p>When the '<tt>ret</tt>' instruction is executed, control flow returns back to
3071    the calling function's context.  If the caller is a
3072    "<a href="#i_call"><tt>call</tt></a>" instruction, execution continues at the
3073    instruction after the call.  If the caller was an
3074    "<a href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues at
3075    the beginning of the "normal" destination block.  If the instruction returns
3076    a value, that value shall set the call or invoke instruction's return
3077    value.</p>
3078
3079 <h5>Example:</h5>
3080 <pre>
3081   ret i32 5                       <i>; Return an integer value of 5</i>
3082   ret void                        <i>; Return from a void function</i>
3083   ret { i32, i8 } { i32 4, i8 2 } <i>; Return a struct of values 4 and 2</i>
3084 </pre>
3085
3086 </div>
3087 <!-- _______________________________________________________________________ -->
3088 <h4>
3089   <a name="i_br">'<tt>br</tt>' Instruction</a>
3090 </h4>
3091
3092 <div>
3093
3094 <h5>Syntax:</h5>
3095 <pre>
3096   br i1 &lt;cond&gt;, label &lt;iftrue&gt;, label &lt;iffalse&gt;
3097   br label &lt;dest&gt;          <i>; Unconditional branch</i>
3098 </pre>
3099
3100 <h5>Overview:</h5>
3101 <p>The '<tt>br</tt>' instruction is used to cause control flow to transfer to a
3102    different basic block in the current function.  There are two forms of this
3103    instruction, corresponding to a conditional branch and an unconditional
3104    branch.</p>
3105
3106 <h5>Arguments:</h5>
3107 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a single
3108    '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The unconditional form
3109    of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a
3110    target.</p>
3111
3112 <h5>Semantics:</h5>
3113 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
3114    argument is evaluated.  If the value is <tt>true</tt>, control flows to the
3115    '<tt>iftrue</tt>' <tt>label</tt> argument.  If "cond" is <tt>false</tt>,
3116    control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p>
3117
3118 <h5>Example:</h5>
3119 <pre>
3120 Test:
3121   %cond = <a href="#i_icmp">icmp</a> eq i32 %a, %b
3122   br i1 %cond, label %IfEqual, label %IfUnequal
3123 IfEqual:
3124   <a href="#i_ret">ret</a> i32 1
3125 IfUnequal:
3126   <a href="#i_ret">ret</a> i32 0
3127 </pre>
3128
3129 </div>
3130
3131 <!-- _______________________________________________________________________ -->
3132 <h4>
3133    <a name="i_switch">'<tt>switch</tt>' Instruction</a>
3134 </h4>
3135
3136 <div>
3137
3138 <h5>Syntax:</h5>
3139 <pre>
3140   switch &lt;intty&gt; &lt;value&gt;, label &lt;defaultdest&gt; [ &lt;intty&gt; &lt;val&gt;, label &lt;dest&gt; ... ]
3141 </pre>
3142
3143 <h5>Overview:</h5>
3144 <p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of
3145    several different places.  It is a generalization of the '<tt>br</tt>'
3146    instruction, allowing a branch to occur to one of many possible
3147    destinations.</p>
3148
3149 <h5>Arguments:</h5>
3150 <p>The '<tt>switch</tt>' instruction uses three parameters: an integer
3151    comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination,
3152    and an array of pairs of comparison value constants and '<tt>label</tt>'s.
3153    The table is not allowed to contain duplicate constant entries.</p>
3154
3155 <h5>Semantics:</h5>
3156 <p>The <tt>switch</tt> instruction specifies a table of values and
3157    destinations. When the '<tt>switch</tt>' instruction is executed, this table
3158    is searched for the given value.  If the value is found, control flow is
3159    transferred to the corresponding destination; otherwise, control flow is
3160    transferred to the default destination.</p>
3161
3162 <h5>Implementation:</h5>
3163 <p>Depending on properties of the target machine and the particular
3164    <tt>switch</tt> instruction, this instruction may be code generated in
3165    different ways.  For example, it could be generated as a series of chained
3166    conditional branches or with a lookup table.</p>
3167
3168 <h5>Example:</h5>
3169 <pre>
3170  <i>; Emulate a conditional br instruction</i>
3171  %Val = <a href="#i_zext">zext</a> i1 %value to i32
3172  switch i32 %Val, label %truedest [ i32 0, label %falsedest ]
3173
3174  <i>; Emulate an unconditional br instruction</i>
3175  switch i32 0, label %dest [ ]
3176
3177  <i>; Implement a jump table:</i>
3178  switch i32 %val, label %otherwise [ i32 0, label %onzero
3179                                      i32 1, label %onone
3180                                      i32 2, label %ontwo ]
3181 </pre>
3182
3183 </div>
3184
3185
3186 <!-- _______________________________________________________________________ -->
3187 <h4>
3188    <a name="i_indirectbr">'<tt>indirectbr</tt>' Instruction</a>
3189 </h4>
3190
3191 <div>
3192
3193 <h5>Syntax:</h5>
3194 <pre>
3195   indirectbr &lt;somety&gt;* &lt;address&gt;, [ label &lt;dest1&gt;, label &lt;dest2&gt;, ... ]
3196 </pre>
3197
3198 <h5>Overview:</h5>
3199
3200 <p>The '<tt>indirectbr</tt>' instruction implements an indirect branch to a label
3201    within the current function, whose address is specified by
3202    "<tt>address</tt>".  Address must be derived from a <a
3203    href="#blockaddress">blockaddress</a> constant.</p>
3204
3205 <h5>Arguments:</h5>
3206
3207 <p>The '<tt>address</tt>' argument is the address of the label to jump to.  The
3208    rest of the arguments indicate the full set of possible destinations that the
3209    address may point to.  Blocks are allowed to occur multiple times in the
3210    destination list, though this isn't particularly useful.</p>
3211
3212 <p>This destination list is required so that dataflow analysis has an accurate
3213    understanding of the CFG.</p>
3214
3215 <h5>Semantics:</h5>
3216
3217 <p>Control transfers to the block specified in the address argument.  All
3218    possible destination blocks must be listed in the label list, otherwise this
3219    instruction has undefined behavior.  This implies that jumps to labels
3220    defined in other functions have undefined behavior as well.</p>
3221
3222 <h5>Implementation:</h5>
3223
3224 <p>This is typically implemented with a jump through a register.</p>
3225
3226 <h5>Example:</h5>
3227 <pre>
3228  indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ]
3229 </pre>
3230
3231 </div>
3232
3233
3234 <!-- _______________________________________________________________________ -->
3235 <h4>
3236   <a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
3237 </h4>
3238
3239 <div>
3240
3241 <h5>Syntax:</h5>
3242 <pre>
3243   &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>]
3244                 to label &lt;normal label&gt; unwind label &lt;exception label&gt;
3245 </pre>
3246
3247 <h5>Overview:</h5>
3248 <p>The '<tt>invoke</tt>' instruction causes control to transfer to a specified
3249    function, with the possibility of control flow transfer to either the
3250    '<tt>normal</tt>' label or the '<tt>exception</tt>' label.  If the callee
3251    function returns with the "<tt><a href="#i_ret">ret</a></tt>" instruction,
3252    control flow will return to the "normal" label.  If the callee (or any
3253    indirect callees) returns with the "<a href="#i_unwind"><tt>unwind</tt></a>"
3254    instruction, control is interrupted and continued at the dynamically nearest
3255    "exception" label.</p>
3256
3257 <h5>Arguments:</h5>
3258 <p>This instruction requires several arguments:</p>
3259
3260 <ol>
3261   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
3262       convention</a> the call should use.  If none is specified, the call
3263       defaults to using C calling conventions.</li>
3264
3265   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
3266       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
3267       '<tt>inreg</tt>' attributes are valid here.</li>
3268
3269   <li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
3270       function value being invoked.  In most cases, this is a direct function
3271       invocation, but indirect <tt>invoke</tt>s are just as possible, branching
3272       off an arbitrary pointer to function value.</li>
3273
3274   <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
3275       function to be invoked. </li>
3276
3277   <li>'<tt>function args</tt>': argument list whose types match the function
3278       signature argument types and parameter attributes. All arguments must be
3279       of <a href="#t_firstclass">first class</a> type. If the function
3280       signature indicates the function accepts a variable number of arguments,
3281       the extra arguments can be specified.</li>
3282
3283   <li>'<tt>normal label</tt>': the label reached when the called function
3284       executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li>
3285
3286   <li>'<tt>exception label</tt>': the label reached when a callee returns with
3287       the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li>
3288
3289   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
3290       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
3291       '<tt>readnone</tt>' attributes are valid here.</li>
3292 </ol>
3293
3294 <h5>Semantics:</h5>
3295 <p>This instruction is designed to operate as a standard
3296    '<tt><a href="#i_call">call</a></tt>' instruction in most regards.  The
3297    primary difference is that it establishes an association with a label, which
3298    is used by the runtime library to unwind the stack.</p>
3299
3300 <p>This instruction is used in languages with destructors to ensure that proper
3301    cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown
3302    exception.  Additionally, this is important for implementation of
3303    '<tt>catch</tt>' clauses in high-level languages that support them.</p>
3304
3305 <p>For the purposes of the SSA form, the definition of the value returned by the
3306    '<tt>invoke</tt>' instruction is deemed to occur on the edge from the current
3307    block to the "normal" label. If the callee unwinds then no return value is
3308    available.</p>
3309
3310 <p>Note that the code generator does not yet completely support unwind, and
3311 that the invoke/unwind semantics are likely to change in future versions.</p>
3312
3313 <h5>Example:</h5>
3314 <pre>
3315   %retval = invoke i32 @Test(i32 15) to label %Continue
3316               unwind label %TestCleanup              <i>; {i32}:retval set</i>
3317   %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue
3318               unwind label %TestCleanup              <i>; {i32}:retval set</i>
3319 </pre>
3320
3321 </div>
3322
3323 <!-- _______________________________________________________________________ -->
3324
3325 <h4>
3326   <a name="i_unwind">'<tt>unwind</tt>' Instruction</a>
3327 </h4>
3328
3329 <div>
3330
3331 <h5>Syntax:</h5>
3332 <pre>
3333   unwind
3334 </pre>
3335
3336 <h5>Overview:</h5>
3337 <p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow
3338    at the first callee in the dynamic call stack which used
3339    an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call.
3340    This is primarily used to implement exception handling.</p>
3341
3342 <h5>Semantics:</h5>
3343 <p>The '<tt>unwind</tt>' instruction causes execution of the current function to
3344    immediately halt.  The dynamic call stack is then searched for the
3345    first <a href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack.
3346    Once found, execution continues at the "exceptional" destination block
3347    specified by the <tt>invoke</tt> instruction.  If there is no <tt>invoke</tt>
3348    instruction in the dynamic call chain, undefined behavior results.</p>
3349
3350 <p>Note that the code generator does not yet completely support unwind, and
3351 that the invoke/unwind semantics are likely to change in future versions.</p>
3352
3353 </div>
3354
3355  <!-- _______________________________________________________________________ -->
3356  
3357 <h4>
3358   <a name="i_resume">'<tt>resume</tt>' Instruction</a>
3359 </h4>
3360
3361 <div>
3362
3363 <h5>Syntax:</h5>
3364 <pre>
3365   resume &lt;type&gt; &lt;value&gt;
3366 </pre>
3367
3368 <h5>Overview:</h5>
3369 <p>The '<tt>resume</tt>' instruction is a terminator instruction that has no
3370    successors.</p>
3371
3372 <h5>Arguments:</h5>
3373 <p>The '<tt>resume</tt>' instruction's argument must have the same type as the
3374    result of any '<tt>landingpad</tt>' instruction in the same function.</p>
3375
3376 <h5>Semantics:</h5>
3377 <p>The '<tt>resume</tt>' instruction resumes propagation of an existing
3378    (in-flight) exception whose unwinding was interrupted with
3379    a landingpad instruction.</p>
3380
3381 <h5>Example:</h5>
3382 <pre>
3383  resume { i8*, i32 } %exn
3384 </pre>
3385
3386 </div>
3387
3388 <!-- _______________________________________________________________________ -->
3389
3390 <h4>
3391   <a name="i_unreachable">'<tt>unreachable</tt>' Instruction</a>
3392 </h4>
3393
3394 <div>
3395
3396 <h5>Syntax:</h5>
3397 <pre>
3398   unreachable
3399 </pre>
3400
3401 <h5>Overview:</h5>
3402 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
3403    instruction is used to inform the optimizer that a particular portion of the
3404    code is not reachable.  This can be used to indicate that the code after a
3405    no-return function cannot be reached, and other facts.</p>
3406
3407 <h5>Semantics:</h5>
3408 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>
3409
3410 </div>
3411
3412 </div>
3413
3414 <!-- ======================================================================= -->
3415 <h3>
3416   <a name="binaryops">Binary Operations</a>
3417 </h3>
3418
3419 <div>
3420
3421 <p>Binary operators are used to do most of the computation in a program.  They
3422    require two operands of the same type, execute an operation on them, and
3423    produce a single value.  The operands might represent multiple data, as is
3424    the case with the <a href="#t_vector">vector</a> data type.  The result value
3425    has the same type as its operands.</p>
3426
3427 <p>There are several different binary operators:</p>
3428
3429 <!-- _______________________________________________________________________ -->
3430 <h4>
3431   <a name="i_add">'<tt>add</tt>' Instruction</a>
3432 </h4>
3433
3434 <div>
3435
3436 <h5>Syntax:</h5>
3437 <pre>
3438   &lt;result&gt; = add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3439   &lt;result&gt; = add nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3440   &lt;result&gt; = add nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3441   &lt;result&gt; = add nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3442 </pre>
3443
3444 <h5>Overview:</h5>
3445 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
3446
3447 <h5>Arguments:</h5>
3448 <p>The two arguments to the '<tt>add</tt>' instruction must
3449    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3450    integer values. Both arguments must have identical types.</p>
3451
3452 <h5>Semantics:</h5>
3453 <p>The value produced is the integer sum of the two operands.</p>
3454
3455 <p>If the sum has unsigned overflow, the result returned is the mathematical
3456    result modulo 2<sup>n</sup>, where n is the bit width of the result.</p>
3457
3458 <p>Because LLVM integers use a two's complement representation, this instruction
3459    is appropriate for both signed and unsigned integers.</p>
3460
3461 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3462    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3463    <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt>
3464    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3465    respectively, occurs.</p>
3466
3467 <h5>Example:</h5>
3468 <pre>
3469   &lt;result&gt; = add i32 4, %var          <i>; yields {i32}:result = 4 + %var</i>
3470 </pre>
3471
3472 </div>
3473
3474 <!-- _______________________________________________________________________ -->
3475 <h4>
3476   <a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
3477 </h4>
3478
3479 <div>
3480
3481 <h5>Syntax:</h5>
3482 <pre>
3483   &lt;result&gt; = fadd &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3484 </pre>
3485
3486 <h5>Overview:</h5>
3487 <p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p>
3488
3489 <h5>Arguments:</h5>
3490 <p>The two arguments to the '<tt>fadd</tt>' instruction must be
3491    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3492    floating point values. Both arguments must have identical types.</p>
3493
3494 <h5>Semantics:</h5>
3495 <p>The value produced is the floating point sum of the two operands.</p>
3496
3497 <h5>Example:</h5>
3498 <pre>
3499   &lt;result&gt; = fadd float 4.0, %var          <i>; yields {float}:result = 4.0 + %var</i>
3500 </pre>
3501
3502 </div>
3503
3504 <!-- _______________________________________________________________________ -->
3505 <h4>
3506    <a name="i_sub">'<tt>sub</tt>' Instruction</a>
3507 </h4>
3508
3509 <div>
3510
3511 <h5>Syntax:</h5>
3512 <pre>
3513   &lt;result&gt; = sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3514   &lt;result&gt; = sub nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3515   &lt;result&gt; = sub nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3516   &lt;result&gt; = sub nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3517 </pre>
3518
3519 <h5>Overview:</h5>
3520 <p>The '<tt>sub</tt>' instruction returns the difference of its two
3521    operands.</p>
3522
3523 <p>Note that the '<tt>sub</tt>' instruction is used to represent the
3524    '<tt>neg</tt>' instruction present in most other intermediate
3525    representations.</p>
3526
3527 <h5>Arguments:</h5>
3528 <p>The two arguments to the '<tt>sub</tt>' instruction must
3529    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3530    integer values.  Both arguments must have identical types.</p>
3531
3532 <h5>Semantics:</h5>
3533 <p>The value produced is the integer difference of the two operands.</p>
3534
3535 <p>If the difference has unsigned overflow, the result returned is the
3536    mathematical result modulo 2<sup>n</sup>, where n is the bit width of the
3537    result.</p>
3538
3539 <p>Because LLVM integers use a two's complement representation, this instruction
3540    is appropriate for both signed and unsigned integers.</p>
3541
3542 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3543    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3544    <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt>
3545    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3546    respectively, occurs.</p>
3547
3548 <h5>Example:</h5>
3549 <pre>
3550   &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
3551   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
3552 </pre>
3553
3554 </div>
3555
3556 <!-- _______________________________________________________________________ -->
3557 <h4>
3558    <a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
3559 </h4>
3560
3561 <div>
3562
3563 <h5>Syntax:</h5>
3564 <pre>
3565   &lt;result&gt; = fsub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3566 </pre>
3567
3568 <h5>Overview:</h5>
3569 <p>The '<tt>fsub</tt>' instruction returns the difference of its two
3570    operands.</p>
3571
3572 <p>Note that the '<tt>fsub</tt>' instruction is used to represent the
3573    '<tt>fneg</tt>' instruction present in most other intermediate
3574    representations.</p>
3575
3576 <h5>Arguments:</h5>
3577 <p>The two arguments to the '<tt>fsub</tt>' instruction must be
3578    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3579    floating point values.  Both arguments must have identical types.</p>
3580
3581 <h5>Semantics:</h5>
3582 <p>The value produced is the floating point difference of the two operands.</p>
3583
3584 <h5>Example:</h5>
3585 <pre>
3586   &lt;result&gt; = fsub float 4.0, %var           <i>; yields {float}:result = 4.0 - %var</i>
3587   &lt;result&gt; = fsub float -0.0, %val          <i>; yields {float}:result = -%var</i>
3588 </pre>
3589
3590 </div>
3591
3592 <!-- _______________________________________________________________________ -->
3593 <h4>
3594   <a name="i_mul">'<tt>mul</tt>' Instruction</a>
3595 </h4>
3596
3597 <div>
3598
3599 <h5>Syntax:</h5>
3600 <pre>
3601   &lt;result&gt; = mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3602   &lt;result&gt; = mul nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3603   &lt;result&gt; = mul nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3604   &lt;result&gt; = mul nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3605 </pre>
3606
3607 <h5>Overview:</h5>
3608 <p>The '<tt>mul</tt>' instruction returns the product of its two operands.</p>
3609
3610 <h5>Arguments:</h5>
3611 <p>The two arguments to the '<tt>mul</tt>' instruction must
3612    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3613    integer values.  Both arguments must have identical types.</p>
3614
3615 <h5>Semantics:</h5>
3616 <p>The value produced is the integer product of the two operands.</p>
3617
3618 <p>If the result of the multiplication has unsigned overflow, the result
3619    returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit
3620    width of the result.</p>
3621
3622 <p>Because LLVM integers use a two's complement representation, and the result
3623    is the same width as the operands, this instruction returns the correct
3624    result for both signed and unsigned integers.  If a full product
3625    (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should
3626    be sign-extended or zero-extended as appropriate to the width of the full
3627    product.</p>
3628
3629 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3630    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3631    <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt>
3632    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3633    respectively, occurs.</p>
3634
3635 <h5>Example:</h5>
3636 <pre>
3637   &lt;result&gt; = mul i32 4, %var          <i>; yields {i32}:result = 4 * %var</i>
3638 </pre>
3639
3640 </div>
3641
3642 <!-- _______________________________________________________________________ -->
3643 <h4>
3644   <a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
3645 </h4>
3646
3647 <div>
3648
3649 <h5>Syntax:</h5>
3650 <pre>
3651   &lt;result&gt; = fmul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3652 </pre>
3653
3654 <h5>Overview:</h5>
3655 <p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p>
3656
3657 <h5>Arguments:</h5>
3658 <p>The two arguments to the '<tt>fmul</tt>' instruction must be
3659    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3660    floating point values.  Both arguments must have identical types.</p>
3661
3662 <h5>Semantics:</h5>
3663 <p>The value produced is the floating point product of the two operands.</p>
3664
3665 <h5>Example:</h5>
3666 <pre>
3667   &lt;result&gt; = fmul float 4.0, %var          <i>; yields {float}:result = 4.0 * %var</i>
3668 </pre>
3669
3670 </div>
3671
3672 <!-- _______________________________________________________________________ -->
3673 <h4>
3674   <a name="i_udiv">'<tt>udiv</tt>' Instruction</a>
3675 </h4>
3676
3677 <div>
3678
3679 <h5>Syntax:</h5>
3680 <pre>
3681   &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3682   &lt;result&gt; = udiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3683 </pre>
3684
3685 <h5>Overview:</h5>
3686 <p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p>
3687
3688 <h5>Arguments:</h5>
3689 <p>The two arguments to the '<tt>udiv</tt>' instruction must be
3690    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3691    values.  Both arguments must have identical types.</p>
3692
3693 <h5>Semantics:</h5>
3694 <p>The value produced is the unsigned integer quotient of the two operands.</p>
3695
3696 <p>Note that unsigned integer division and signed integer division are distinct
3697    operations; for signed integer division, use '<tt>sdiv</tt>'.</p>
3698
3699 <p>Division by zero leads to undefined behavior.</p>
3700
3701 <p>If the <tt>exact</tt> keyword is present, the result value of the
3702    <tt>udiv</tt> is a <a href="#trapvalues">trap value</a> if %op1 is not a
3703   multiple of %op2 (as such, "((a udiv exact b) mul b) == a").</p>
3704
3705
3706 <h5>Example:</h5>
3707 <pre>
3708   &lt;result&gt; = udiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3709 </pre>
3710
3711 </div>
3712
3713 <!-- _______________________________________________________________________ -->
3714 <h4>
3715   <a name="i_sdiv">'<tt>sdiv</tt>' Instruction</a>
3716 </h4>
3717
3718 <div>
3719
3720 <h5>Syntax:</h5>
3721 <pre>
3722   &lt;result&gt; = sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3723   &lt;result&gt; = sdiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3724 </pre>
3725
3726 <h5>Overview:</h5>
3727 <p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p>
3728
3729 <h5>Arguments:</h5>
3730 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be
3731    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3732    values.  Both arguments must have identical types.</p>
3733
3734 <h5>Semantics:</h5>
3735 <p>The value produced is the signed integer quotient of the two operands rounded
3736    towards zero.</p>
3737
3738 <p>Note that signed integer division and unsigned integer division are distinct
3739    operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>
3740
3741 <p>Division by zero leads to undefined behavior. Overflow also leads to
3742    undefined behavior; this is a rare case, but can occur, for example, by doing
3743    a 32-bit division of -2147483648 by -1.</p>
3744
3745 <p>If the <tt>exact</tt> keyword is present, the result value of the
3746    <tt>sdiv</tt> is a <a href="#trapvalues">trap value</a> if the result would
3747    be rounded.</p>
3748
3749 <h5>Example:</h5>
3750 <pre>
3751   &lt;result&gt; = sdiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3752 </pre>
3753
3754 </div>
3755
3756 <!-- _______________________________________________________________________ -->
3757 <h4>
3758   <a name="i_fdiv">'<tt>fdiv</tt>' Instruction</a>
3759 </h4>
3760
3761 <div>
3762
3763 <h5>Syntax:</h5>
3764 <pre>
3765   &lt;result&gt; = fdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3766 </pre>
3767
3768 <h5>Overview:</h5>
3769 <p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p>
3770
3771 <h5>Arguments:</h5>
3772 <p>The two arguments to the '<tt>fdiv</tt>' instruction must be
3773    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3774    floating point values.  Both arguments must have identical types.</p>
3775
3776 <h5>Semantics:</h5>
3777 <p>The value produced is the floating point quotient of the two operands.</p>
3778
3779 <h5>Example:</h5>
3780 <pre>
3781   &lt;result&gt; = fdiv float 4.0, %var          <i>; yields {float}:result = 4.0 / %var</i>
3782 </pre>
3783
3784 </div>
3785
3786 <!-- _______________________________________________________________________ -->
3787 <h4>
3788   <a name="i_urem">'<tt>urem</tt>' Instruction</a>
3789 </h4>
3790
3791 <div>
3792
3793 <h5>Syntax:</h5>
3794 <pre>
3795   &lt;result&gt; = urem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3796 </pre>
3797
3798 <h5>Overview:</h5>
3799 <p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned
3800    division of its two arguments.</p>
3801
3802 <h5>Arguments:</h5>
3803 <p>The two arguments to the '<tt>urem</tt>' instruction must be
3804    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3805    values.  Both arguments must have identical types.</p>
3806
3807 <h5>Semantics:</h5>
3808 <p>This instruction returns the unsigned integer <i>remainder</i> of a division.
3809    This instruction always performs an unsigned division to get the
3810    remainder.</p>
3811
3812 <p>Note that unsigned integer remainder and signed integer remainder are
3813    distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>
3814
3815 <p>Taking the remainder of a division by zero leads to undefined behavior.</p>
3816
3817 <h5>Example:</h5>
3818 <pre>
3819   &lt;result&gt; = urem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3820 </pre>
3821
3822 </div>
3823
3824 <!-- _______________________________________________________________________ -->
3825 <h4>
3826   <a name="i_srem">'<tt>srem</tt>' Instruction</a>
3827 </h4>
3828
3829 <div>
3830
3831 <h5>Syntax:</h5>
3832 <pre>
3833   &lt;result&gt; = srem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3834 </pre>
3835
3836 <h5>Overview:</h5>
3837 <p>The '<tt>srem</tt>' instruction returns the remainder from the signed
3838    division of its two operands. This instruction can also take
3839    <a href="#t_vector">vector</a> versions of the values in which case the
3840    elements must be integers.</p>
3841
3842 <h5>Arguments:</h5>
3843 <p>The two arguments to the '<tt>srem</tt>' instruction must be
3844    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3845    values.  Both arguments must have identical types.</p>
3846
3847 <h5>Semantics:</h5>
3848 <p>This instruction returns the <i>remainder</i> of a division (where the result
3849    is either zero or has the same sign as the dividend, <tt>op1</tt>), not the
3850    <i>modulo</i> operator (where the result is either zero or has the same sign
3851    as the divisor, <tt>op2</tt>) of a value.
3852    For more information about the difference,
3853    see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
3854    Math Forum</a>. For a table of how this is implemented in various languages,
3855    please see <a href="http://en.wikipedia.org/wiki/Modulo_operation">
3856    Wikipedia: modulo operation</a>.</p>
3857
3858 <p>Note that signed integer remainder and unsigned integer remainder are
3859    distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>
3860
3861 <p>Taking the remainder of a division by zero leads to undefined behavior.
3862    Overflow also leads to undefined behavior; this is a rare case, but can
3863    occur, for example, by taking the remainder of a 32-bit division of
3864    -2147483648 by -1.  (The remainder doesn't actually overflow, but this rule
3865    lets srem be implemented using instructions that return both the result of
3866    the division and the remainder.)</p>
3867
3868 <h5>Example:</h5>
3869 <pre>
3870   &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3871 </pre>
3872
3873 </div>
3874
3875 <!-- _______________________________________________________________________ -->
3876 <h4>
3877   <a name="i_frem">'<tt>frem</tt>' Instruction</a>
3878 </h4>
3879
3880 <div>
3881
3882 <h5>Syntax:</h5>
3883 <pre>
3884   &lt;result&gt; = frem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3885 </pre>
3886
3887 <h5>Overview:</h5>
3888 <p>The '<tt>frem</tt>' instruction returns the remainder from the division of
3889    its two operands.</p>
3890
3891 <h5>Arguments:</h5>
3892 <p>The two arguments to the '<tt>frem</tt>' instruction must be
3893    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3894    floating point values.  Both arguments must have identical types.</p>
3895
3896 <h5>Semantics:</h5>
3897 <p>This instruction returns the <i>remainder</i> of a division.  The remainder
3898    has the same sign as the dividend.</p>
3899
3900 <h5>Example:</h5>
3901 <pre>
3902   &lt;result&gt; = frem float 4.0, %var          <i>; yields {float}:result = 4.0 % %var</i>
3903 </pre>
3904
3905 </div>
3906
3907 </div>
3908
3909 <!-- ======================================================================= -->
3910 <h3>
3911   <a name="bitwiseops">Bitwise Binary Operations</a>
3912 </h3>
3913
3914 <div>
3915
3916 <p>Bitwise binary operators are used to do various forms of bit-twiddling in a
3917    program.  They are generally very efficient instructions and can commonly be
3918    strength reduced from other instructions.  They require two operands of the
3919    same type, execute an operation on them, and produce a single value.  The
3920    resulting value is the same type as its operands.</p>
3921
3922 <!-- _______________________________________________________________________ -->
3923 <h4>
3924   <a name="i_shl">'<tt>shl</tt>' Instruction</a>
3925 </h4>
3926
3927 <div>
3928
3929 <h5>Syntax:</h5>
3930 <pre>
3931   &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;           <i>; yields {ty}:result</i>
3932   &lt;result&gt; = shl nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
3933   &lt;result&gt; = shl nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
3934   &lt;result&gt; = shl nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3935 </pre>
3936
3937 <h5>Overview:</h5>
3938 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left
3939    a specified number of bits.</p>
3940
3941 <h5>Arguments:</h5>
3942 <p>Both arguments to the '<tt>shl</tt>' instruction must be the
3943     same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3944     integer type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3945
3946 <h5>Semantics:</h5>
3947 <p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod
3948    2<sup>n</sup>, where <tt>n</tt> is the width of the result.  If <tt>op2</tt>
3949    is (statically or dynamically) negative or equal to or larger than the number
3950    of bits in <tt>op1</tt>, the result is undefined.  If the arguments are
3951    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3952    shift amount in <tt>op2</tt>.</p>
3953
3954 <p>If the <tt>nuw</tt> keyword is present, then the shift produces a 
3955    <a href="#trapvalues">trap value</a> if it shifts out any non-zero bits.  If
3956    the <tt>nsw</tt> keyword is present, then the shift produces a
3957    <a href="#trapvalues">trap value</a> if it shifts out any bits that disagree
3958    with the resultant sign bit.  As such, NUW/NSW have the same semantics as
3959    they would if the shift were expressed as a mul instruction with the same
3960    nsw/nuw bits in (mul %op1, (shl 1, %op2)).</p>
3961
3962 <h5>Example:</h5>
3963 <pre>
3964   &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
3965   &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
3966   &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
3967   &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
3968   &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>
3969 </pre>
3970
3971 </div>
3972
3973 <!-- _______________________________________________________________________ -->
3974 <h4>
3975   <a name="i_lshr">'<tt>lshr</tt>' Instruction</a>
3976 </h4>
3977
3978 <div>
3979
3980 <h5>Syntax:</h5>
3981 <pre>
3982   &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3983   &lt;result&gt; = lshr exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3984 </pre>
3985
3986 <h5>Overview:</h5>
3987 <p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
3988    operand shifted to the right a specified number of bits with zero fill.</p>
3989
3990 <h5>Arguments:</h5>
3991 <p>Both arguments to the '<tt>lshr</tt>' instruction must be the same
3992    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3993    type. '<tt>op2</tt>' is treated as an unsigned value.</p>
3994
3995 <h5>Semantics:</h5>
3996 <p>This instruction always performs a logical shift right operation. The most
3997    significant bits of the result will be filled with zero bits after the shift.
3998    If <tt>op2</tt> is (statically or dynamically) equal to or larger than the
3999    number of bits in <tt>op1</tt>, the result is undefined. If the arguments are
4000    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
4001    shift amount in <tt>op2</tt>.</p>
4002
4003 <p>If the <tt>exact</tt> keyword is present, the result value of the
4004    <tt>lshr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
4005    shifted out are non-zero.</p>
4006
4007
4008 <h5>Example:</h5>
4009 <pre>
4010   &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
4011   &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
4012   &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
4013   &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
4014   &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
4015   &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>
4016 </pre>
4017
4018 </div>
4019
4020 <!-- _______________________________________________________________________ -->
4021 <h4>
4022   <a name="i_ashr">'<tt>ashr</tt>' Instruction</a>
4023 </h4>
4024
4025 <div>
4026
4027 <h5>Syntax:</h5>
4028 <pre>
4029   &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
4030   &lt;result&gt; = ashr exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4031 </pre>
4032
4033 <h5>Overview:</h5>
4034 <p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
4035    operand shifted to the right a specified number of bits with sign
4036    extension.</p>
4037
4038 <h5>Arguments:</h5>
4039 <p>Both arguments to the '<tt>ashr</tt>' instruction must be the same
4040    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4041    type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
4042
4043 <h5>Semantics:</h5>
4044 <p>This instruction always performs an arithmetic shift right operation, The
4045    most significant bits of the result will be filled with the sign bit
4046    of <tt>op1</tt>.  If <tt>op2</tt> is (statically or dynamically) equal to or
4047    larger than the number of bits in <tt>op1</tt>, the result is undefined. If
4048    the arguments are vectors, each vector element of <tt>op1</tt> is shifted by
4049    the corresponding shift amount in <tt>op2</tt>.</p>
4050
4051 <p>If the <tt>exact</tt> keyword is present, the result value of the
4052    <tt>ashr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
4053    shifted out are non-zero.</p>
4054
4055 <h5>Example:</h5>
4056 <pre>
4057   &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
4058   &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
4059   &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
4060   &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
4061   &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
4062   &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>
4063 </pre>
4064
4065 </div>
4066
4067 <!-- _______________________________________________________________________ -->
4068 <h4>
4069   <a name="i_and">'<tt>and</tt>' Instruction</a>
4070 </h4>
4071
4072 <div>
4073
4074 <h5>Syntax:</h5>
4075 <pre>
4076   &lt;result&gt; = and &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4077 </pre>
4078
4079 <h5>Overview:</h5>
4080 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two
4081    operands.</p>
4082
4083 <h5>Arguments:</h5>
4084 <p>The two arguments to the '<tt>and</tt>' instruction must be
4085    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4086    values.  Both arguments must have identical types.</p>
4087
4088 <h5>Semantics:</h5>
4089 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
4090
4091 <table border="1" cellspacing="0" cellpadding="4">
4092   <tbody>
4093     <tr>
4094       <td>In0</td>
4095       <td>In1</td>
4096       <td>Out</td>
4097     </tr>
4098     <tr>
4099       <td>0</td>
4100       <td>0</td>
4101       <td>0</td>
4102     </tr>
4103     <tr>
4104       <td>0</td>
4105       <td>1</td>
4106       <td>0</td>
4107     </tr>
4108     <tr>
4109       <td>1</td>
4110       <td>0</td>
4111       <td>0</td>
4112     </tr>
4113     <tr>
4114       <td>1</td>
4115       <td>1</td>
4116       <td>1</td>
4117     </tr>
4118   </tbody>
4119 </table>
4120
4121 <h5>Example:</h5>
4122 <pre>
4123   &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
4124   &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
4125   &lt;result&gt; = and i32 4, 8            <i>; yields {i32}:result = 0</i>
4126 </pre>
4127 </div>
4128 <!-- _______________________________________________________________________ -->
4129 <h4>
4130   <a name="i_or">'<tt>or</tt>' Instruction</a>
4131 </h4>
4132
4133 <div>
4134
4135 <h5>Syntax:</h5>
4136 <pre>
4137   &lt;result&gt; = or &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4138 </pre>
4139
4140 <h5>Overview:</h5>
4141 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its
4142    two operands.</p>
4143
4144 <h5>Arguments:</h5>
4145 <p>The two arguments to the '<tt>or</tt>' instruction must be
4146    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4147    values.  Both arguments must have identical types.</p>
4148
4149 <h5>Semantics:</h5>
4150 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
4151
4152 <table border="1" cellspacing="0" cellpadding="4">
4153   <tbody>
4154     <tr>
4155       <td>In0</td>
4156       <td>In1</td>
4157       <td>Out</td>
4158     </tr>
4159     <tr>
4160       <td>0</td>
4161       <td>0</td>
4162       <td>0</td>
4163     </tr>
4164     <tr>
4165       <td>0</td>
4166       <td>1</td>
4167       <td>1</td>
4168     </tr>
4169     <tr>
4170       <td>1</td>
4171       <td>0</td>
4172       <td>1</td>
4173     </tr>
4174     <tr>
4175       <td>1</td>
4176       <td>1</td>
4177       <td>1</td>
4178     </tr>
4179   </tbody>
4180 </table>
4181
4182 <h5>Example:</h5>
4183 <pre>
4184   &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
4185   &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
4186   &lt;result&gt; = or i32 4, 8            <i>; yields {i32}:result = 12</i>
4187 </pre>
4188
4189 </div>
4190
4191 <!-- _______________________________________________________________________ -->
4192 <h4>
4193   <a name="i_xor">'<tt>xor</tt>' Instruction</a>
4194 </h4>
4195
4196 <div>
4197
4198 <h5>Syntax:</h5>
4199 <pre>
4200   &lt;result&gt; = xor &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4201 </pre>
4202
4203 <h5>Overview:</h5>
4204 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of
4205    its two operands.  The <tt>xor</tt> is used to implement the "one's
4206    complement" operation, which is the "~" operator in C.</p>
4207
4208 <h5>Arguments:</h5>
4209 <p>The two arguments to the '<tt>xor</tt>' instruction must be
4210    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4211    values.  Both arguments must have identical types.</p>
4212
4213 <h5>Semantics:</h5>
4214 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
4215
4216 <table border="1" cellspacing="0" cellpadding="4">
4217   <tbody>
4218     <tr>
4219       <td>In0</td>
4220       <td>In1</td>
4221       <td>Out</td>
4222     </tr>
4223     <tr>
4224       <td>0</td>
4225       <td>0</td>
4226       <td>0</td>
4227     </tr>
4228     <tr>
4229       <td>0</td>
4230       <td>1</td>
4231       <td>1</td>
4232     </tr>
4233     <tr>
4234       <td>1</td>
4235       <td>0</td>
4236       <td>1</td>
4237     </tr>
4238     <tr>
4239       <td>1</td>
4240       <td>1</td>
4241       <td>0</td>
4242     </tr>
4243   </tbody>
4244 </table>
4245
4246 <h5>Example:</h5>
4247 <pre>
4248   &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
4249   &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
4250   &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
4251   &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
4252 </pre>
4253
4254 </div>
4255
4256 </div>
4257
4258 <!-- ======================================================================= -->
4259 <h3>
4260   <a name="vectorops">Vector Operations</a>
4261 </h3>
4262
4263 <div>
4264
4265 <p>LLVM supports several instructions to represent vector operations in a
4266    target-independent manner.  These instructions cover the element-access and
4267    vector-specific operations needed to process vectors effectively.  While LLVM
4268    does directly support these vector operations, many sophisticated algorithms
4269    will want to use target-specific intrinsics to take full advantage of a
4270    specific target.</p>
4271
4272 <!-- _______________________________________________________________________ -->
4273 <h4>
4274    <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
4275 </h4>
4276
4277 <div>
4278
4279 <h5>Syntax:</h5>
4280 <pre>
4281   &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</i>
4282 </pre>
4283
4284 <h5>Overview:</h5>
4285 <p>The '<tt>extractelement</tt>' instruction extracts a single scalar element
4286    from a vector at a specified index.</p>
4287
4288
4289 <h5>Arguments:</h5>
4290 <p>The first operand of an '<tt>extractelement</tt>' instruction is a value
4291    of <a href="#t_vector">vector</a> type.  The second operand is an index
4292    indicating the position from which to extract the element.  The index may be
4293    a variable.</p>
4294
4295 <h5>Semantics:</h5>
4296 <p>The result is a scalar of the same type as the element type of
4297    <tt>val</tt>.  Its value is the value at position <tt>idx</tt> of
4298    <tt>val</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
4299    results are undefined.</p>
4300
4301 <h5>Example:</h5>
4302 <pre>
4303   &lt;result&gt; = extractelement &lt;4 x i32&gt; %vec, i32 0    <i>; yields i32</i>
4304 </pre>
4305
4306 </div>
4307
4308 <!-- _______________________________________________________________________ -->
4309 <h4>
4310    <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
4311 </h4>
4312
4313 <div>
4314
4315 <h5>Syntax:</h5>
4316 <pre>
4317   &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>
4318 </pre>
4319
4320 <h5>Overview:</h5>
4321 <p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a
4322    vector at a specified index.</p>
4323
4324 <h5>Arguments:</h5>
4325 <p>The first operand of an '<tt>insertelement</tt>' instruction is a value
4326    of <a href="#t_vector">vector</a> type.  The second operand is a scalar value
4327    whose type must equal the element type of the first operand.  The third
4328    operand is an index indicating the position at which to insert the value.
4329    The index may be a variable.</p>
4330
4331 <h5>Semantics:</h5>
4332 <p>The result is a vector of the same type as <tt>val</tt>.  Its element values
4333    are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the
4334    value <tt>elt</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
4335    results are undefined.</p>
4336
4337 <h5>Example:</h5>
4338 <pre>
4339   &lt;result&gt; = insertelement &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</i>
4340 </pre>
4341
4342 </div>
4343
4344 <!-- _______________________________________________________________________ -->
4345 <h4>
4346    <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
4347 </h4>
4348
4349 <div>
4350
4351 <h5>Syntax:</h5>
4352 <pre>
4353   &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>
4354 </pre>
4355
4356 <h5>Overview:</h5>
4357 <p>The '<tt>shufflevector</tt>' instruction constructs a permutation of elements
4358    from two input vectors, returning a vector with the same element type as the
4359    input and length that is the same as the shuffle mask.</p>
4360
4361 <h5>Arguments:</h5>
4362 <p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
4363    with types that match each other. The third argument is a shuffle mask whose
4364    element type is always 'i32'.  The result of the instruction is a vector
4365    whose length is the same as the shuffle mask and whose element type is the
4366    same as the element type of the first two operands.</p>
4367
4368 <p>The shuffle mask operand is required to be a constant vector with either
4369    constant integer or undef values.</p>
4370
4371 <h5>Semantics:</h5>
4372 <p>The elements of the two input vectors are numbered from left to right across
4373    both of the vectors.  The shuffle mask operand specifies, for each element of
4374    the result vector, which element of the two input vectors the result element
4375    gets.  The element selector may be undef (meaning "don't care") and the
4376    second operand may be undef if performing a shuffle from only one vector.</p>
4377
4378 <h5>Example:</h5>
4379 <pre>
4380   &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2,
4381                           &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
4382   &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef,
4383                           &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.
4384   &lt;result&gt; = shufflevector &lt;8 x i32&gt; %v1, &lt;8 x i32&gt; undef,
4385                           &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&gt;  <i>; yields &lt;4 x i32&gt;</i>
4386   &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2,
4387                           &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>
4388 </pre>
4389
4390 </div>
4391
4392 </div>
4393
4394 <!-- ======================================================================= -->
4395 <h3>
4396   <a name="aggregateops">Aggregate Operations</a>
4397 </h3>
4398
4399 <div>
4400
4401 <p>LLVM supports several instructions for working with
4402   <a href="#t_aggregate">aggregate</a> values.</p>
4403
4404 <!-- _______________________________________________________________________ -->
4405 <h4>
4406    <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
4407 </h4>
4408
4409 <div>
4410
4411 <h5>Syntax:</h5>
4412 <pre>
4413   &lt;result&gt; = extractvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;idx&gt;{, &lt;idx&gt;}*
4414 </pre>
4415
4416 <h5>Overview:</h5>
4417 <p>The '<tt>extractvalue</tt>' instruction extracts the value of a member field
4418    from an <a href="#t_aggregate">aggregate</a> value.</p>
4419
4420 <h5>Arguments:</h5>
4421 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
4422    of <a href="#t_struct">struct</a> or
4423    <a href="#t_array">array</a> type.  The operands are constant indices to
4424    specify which value to extract in a similar manner as indices in a
4425    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
4426    <p>The major differences to <tt>getelementptr</tt> indexing are:</p>
4427      <ul>
4428        <li>Since the value being indexed is not a pointer, the first index is
4429            omitted and assumed to be zero.</li>
4430        <li>At least one index must be specified.</li>
4431        <li>Not only struct indices but also array indices must be in
4432            bounds.</li>
4433      </ul>
4434
4435 <h5>Semantics:</h5>
4436 <p>The result is the value at the position in the aggregate specified by the
4437    index operands.</p>
4438
4439 <h5>Example:</h5>
4440 <pre>
4441   &lt;result&gt; = extractvalue {i32, float} %agg, 0    <i>; yields i32</i>
4442 </pre>
4443
4444 </div>
4445
4446 <!-- _______________________________________________________________________ -->
4447 <h4>
4448    <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
4449 </h4>
4450
4451 <div>
4452
4453 <h5>Syntax:</h5>
4454 <pre>
4455   &lt;result&gt; = insertvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;ty&gt; &lt;elt&gt;, &lt;idx&gt;{, &lt;idx&gt;}*    <i>; yields &lt;aggregate type&gt;</i>
4456 </pre>
4457
4458 <h5>Overview:</h5>
4459 <p>The '<tt>insertvalue</tt>' instruction inserts a value into a member field
4460    in an <a href="#t_aggregate">aggregate</a> value.</p>
4461
4462 <h5>Arguments:</h5>
4463 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
4464    of <a href="#t_struct">struct</a> or
4465    <a href="#t_array">array</a> type.  The second operand is a first-class
4466    value to insert.  The following operands are constant indices indicating
4467    the position at which to insert the value in a similar manner as indices in a
4468    '<tt><a href="#i_extractvalue">extractvalue</a></tt>' instruction.  The
4469    value to insert must have the same type as the value identified by the
4470    indices.</p>
4471
4472 <h5>Semantics:</h5>
4473 <p>The result is an aggregate of the same type as <tt>val</tt>.  Its value is
4474    that of <tt>val</tt> except that the value at the position specified by the
4475    indices is that of <tt>elt</tt>.</p>
4476
4477 <h5>Example:</h5>
4478 <pre>
4479   %agg1 = insertvalue {i32, float} undef, i32 1, 0              <i>; yields {i32 1, float undef}</i>
4480   %agg2 = insertvalue {i32, float} %agg1, float %val, 1         <i>; yields {i32 1, float %val}</i>
4481   %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0    <i>; yields {i32 1, float %val}</i>
4482 </pre>
4483
4484 </div>
4485
4486 </div>
4487
4488 <!-- ======================================================================= -->
4489 <h3>
4490   <a name="memoryops">Memory Access and Addressing Operations</a>
4491 </h3>
4492
4493 <div>
4494
4495 <p>A key design point of an SSA-based representation is how it represents
4496    memory.  In LLVM, no memory locations are in SSA form, which makes things
4497    very simple.  This section describes how to read, write, and allocate
4498    memory in LLVM.</p>
4499
4500 <!-- _______________________________________________________________________ -->
4501 <h4>
4502   <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
4503 </h4>
4504
4505 <div>
4506
4507 <h5>Syntax:</h5>
4508 <pre>
4509   &lt;result&gt; = alloca &lt;type&gt;[, &lt;ty&gt; &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
4510 </pre>
4511
4512 <h5>Overview:</h5>
4513 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
4514    currently executing function, to be automatically released when this function
4515    returns to its caller. The object is always allocated in the generic address
4516    space (address space zero).</p>
4517
4518 <h5>Arguments:</h5>
4519 <p>The '<tt>alloca</tt>' instruction
4520    allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the
4521    runtime stack, returning a pointer of the appropriate type to the program.
4522    If "NumElements" is specified, it is the number of elements allocated,
4523    otherwise "NumElements" is defaulted to be one.  If a constant alignment is
4524    specified, the value result of the allocation is guaranteed to be aligned to
4525    at least that boundary.  If not specified, or if zero, the target can choose
4526    to align the allocation on any convenient boundary compatible with the
4527    type.</p>
4528
4529 <p>'<tt>type</tt>' may be any sized type.</p>
4530
4531 <h5>Semantics:</h5>
4532 <p>Memory is allocated; a pointer is returned.  The operation is undefined if
4533    there is insufficient stack space for the allocation.  '<tt>alloca</tt>'d
4534    memory is automatically released when the function returns.  The
4535    '<tt>alloca</tt>' instruction is commonly used to represent automatic
4536    variables that must have an address available.  When the function returns
4537    (either with the <tt><a href="#i_ret">ret</a></tt>
4538    or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is
4539    reclaimed.  Allocating zero bytes is legal, but the result is undefined.</p>
4540
4541 <h5>Example:</h5>
4542 <pre>
4543   %ptr = alloca i32                             <i>; yields {i32*}:ptr</i>
4544   %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
4545   %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
4546   %ptr = alloca i32, align 1024                 <i>; yields {i32*}:ptr</i>
4547 </pre>
4548
4549 </div>
4550
4551 <!-- _______________________________________________________________________ -->
4552 <h4>
4553   <a name="i_load">'<tt>load</tt>' Instruction</a>
4554 </h4>
4555
4556 <div>
4557
4558 <h5>Syntax:</h5>
4559 <pre>
4560   &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]
4561   &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]
4562   !&lt;index&gt; = !{ i32 1 }
4563 </pre>
4564
4565 <h5>Overview:</h5>
4566 <p>The '<tt>load</tt>' instruction is used to read from memory.</p>
4567
4568 <h5>Arguments:</h5>
4569 <p>The argument to the '<tt>load</tt>' instruction specifies the memory address
4570    from which to load.  The pointer must point to
4571    a <a href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
4572    marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the
4573    number or order of execution of this <tt>load</tt> with other <a
4574    href="#volatile">volatile operations</a>.</p>
4575
4576 <p>The optional constant <tt>align</tt> argument specifies the alignment of the
4577    operation (that is, the alignment of the memory address). A value of 0 or an
4578    omitted <tt>align</tt> argument means that the operation has the preferential
4579    alignment for the target. It is the responsibility of the code emitter to
4580    ensure that the alignment information is correct. Overestimating the
4581    alignment results in undefined behavior. Underestimating the alignment may
4582    produce less efficient code. An alignment of 1 is always safe.</p>
4583
4584 <p>The optional <tt>!nontemporal</tt> metadata must reference a single
4585    metatadata name &lt;index&gt; corresponding to a metadata node with
4586    one <tt>i32</tt> entry of value 1.  The existence of
4587    the <tt>!nontemporal</tt> metatadata on the instruction tells the optimizer
4588    and code generator that this load is not expected to be reused in the cache.
4589    The code generator may select special instructions to save cache bandwidth,
4590    such as the <tt>MOVNT</tt> instruction on x86.</p>
4591
4592 <h5>Semantics:</h5>
4593 <p>The location of memory pointed to is loaded.  If the value being loaded is of
4594    scalar type then the number of bytes read does not exceed the minimum number
4595    of bytes needed to hold all bits of the type.  For example, loading an
4596    <tt>i24</tt> reads at most three bytes.  When loading a value of a type like
4597    <tt>i20</tt> with a size that is not an integral number of bytes, the result
4598    is undefined if the value was not originally written using a store of the
4599    same type.</p>
4600
4601 <h5>Examples:</h5>
4602 <pre>
4603   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
4604   <a href="#i_store">store</a> i32 3, i32* %ptr                          <i>; yields {void}</i>
4605   %val = load i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
4606 </pre>
4607
4608 </div>
4609
4610 <!-- _______________________________________________________________________ -->
4611 <h4>
4612   <a name="i_store">'<tt>store</tt>' Instruction</a>
4613 </h4>
4614
4615 <div>
4616
4617 <h5>Syntax:</h5>
4618 <pre>
4619   store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]                   <i>; yields {void}</i>
4620   volatile store &lt;ty&gt; &lt;value&gt;, &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]          <i>; yields {void}</i>
4621 </pre>
4622
4623 <h5>Overview:</h5>
4624 <p>The '<tt>store</tt>' instruction is used to write to memory.</p>
4625
4626 <h5>Arguments:</h5>
4627 <p>There are two arguments to the '<tt>store</tt>' instruction: a value to store
4628    and an address at which to store it.  The type of the
4629    '<tt>&lt;pointer&gt;</tt>' operand must be a pointer to
4630    the <a href="#t_firstclass">first class</a> type of the
4631    '<tt>&lt;value&gt;</tt>' operand. If the <tt>store</tt> is marked as
4632    <tt>volatile</tt>, then the optimizer is not allowed to modify the number or
4633    order of execution of this <tt>store</tt> with other <a
4634    href="#volatile">volatile operations</a>.</p>
4635
4636 <p>The optional constant "align" argument specifies the alignment of the
4637    operation (that is, the alignment of the memory address). A value of 0 or an
4638    omitted "align" argument means that the operation has the preferential
4639    alignment for the target. It is the responsibility of the code emitter to
4640    ensure that the alignment information is correct. Overestimating the
4641    alignment results in an undefined behavior. Underestimating the alignment may
4642    produce less efficient code. An alignment of 1 is always safe.</p>
4643
4644 <p>The optional !nontemporal metadata must reference a single metatadata
4645    name &lt;index&gt; corresponding to a metadata node with one i32 entry of
4646    value 1.  The existence of the !nontemporal metatadata on the
4647    instruction tells the optimizer and code generator that this load is
4648    not expected to be reused in the cache.  The code generator may
4649    select special instructions to save cache bandwidth, such as the
4650    MOVNT instruction on x86.</p>
4651
4652
4653 <h5>Semantics:</h5>
4654 <p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>' at the
4655    location specified by the '<tt>&lt;pointer&gt;</tt>' operand.  If
4656    '<tt>&lt;value&gt;</tt>' is of scalar type then the number of bytes written
4657    does not exceed the minimum number of bytes needed to hold all bits of the
4658    type.  For example, storing an <tt>i24</tt> writes at most three bytes.  When
4659    writing a value of a type like <tt>i20</tt> with a size that is not an
4660    integral number of bytes, it is unspecified what happens to the extra bits
4661    that do not belong to the type, but they will typically be overwritten.</p>
4662
4663 <h5>Example:</h5>
4664 <pre>
4665   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
4666   store i32 3, i32* %ptr                          <i>; yields {void}</i>
4667   %val = <a href="#i_load">load</a> i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
4668 </pre>
4669
4670 </div>
4671
4672 <!-- _______________________________________________________________________ -->
4673 <div class="doc_subsubsection"> <a name="i_fence">'<tt>fence</tt>'
4674 Instruction</a> </div>
4675
4676 <div class="doc_text">
4677
4678 <h5>Syntax:</h5>
4679 <pre>
4680   fence [singlethread] &lt;ordering&gt;                   <i>; yields {void}</i>
4681 </pre>
4682
4683 <h5>Overview:</h5>
4684 <p>The '<tt>fence</tt>' instruction is used to introduce happens-before edges
4685 between operations.</p>
4686
4687 <h5>Arguments:</h5> <p>'<code>fence</code>' instructions take an <a
4688 href="#ordering">ordering</a> argument which defines what
4689 <i>synchronizes-with</i> edges they add.  They can only be given
4690 <code>acquire</code>, <code>release</code>, <code>acq_rel</code>, and
4691 <code>seq_cst</code> orderings.</p>
4692
4693 <h5>Semantics:</h5>
4694 <p>A fence <var>A</var> which has (at least) <code>release</code> ordering
4695 semantics <i>synchronizes with</i> a fence <var>B</var> with (at least)
4696 <code>acquire</code> ordering semantics if and only if there exist atomic
4697 operations <var>X</var> and <var>Y</var>, both operating on some atomic object
4698 <var>M</var>, such that <var>A</var> is sequenced before <var>X</var>,
4699 <var>X</var> modifies <var>M</var> (either directly or through some side effect
4700 of a sequence headed by <var>X</var>), <var>Y</var> is sequenced before
4701 <var>B</var>, and <var>Y</var> observes <var>M</var>. This provides a
4702 <i>happens-before</i> dependency between <var>A</var> and <var>B</var>. Rather
4703 than an explicit <code>fence</code>, one (but not both) of the atomic operations
4704 <var>X</var> or <var>Y</var> might provide a <code>release</code> or
4705 <code>acquire</code> (resp.) ordering constraint and still
4706 <i>synchronize-with</i> the explicit <code>fence</code> and establish the
4707 <i>happens-before</i> edge.</p>
4708
4709 <p>A <code>fence</code> which has <code>seq_cst</code> ordering, in addition to
4710 having both <code>acquire</code> and <code>release</code> semantics specified
4711 above, participates in the global program order of other <code>seq_cst</code>
4712 operations and/or fences.</p>
4713
4714 <p>The optional "<a href="#singlethread"><code>singlethread</code></a>" argument
4715 specifies that the fence only synchronizes with other fences in the same
4716 thread.  (This is useful for interacting with signal handlers.)</p>
4717
4718 <p>FIXME: This instruction is a work in progress; until it is finished, use
4719    llvm.memory.barrier.
4720
4721 <h5>Example:</h5>
4722 <pre>
4723   fence acquire                          <i>; yields {void}</i>
4724   fence singlethread seq_cst             <i>; yields {void}</i>
4725 </pre>
4726
4727 </div>
4728
4729 <!-- _______________________________________________________________________ -->
4730 <div class="doc_subsubsection"> <a name="i_cmpxchg">'<tt>cmpxchg</tt>'
4731 Instruction</a> </div>
4732
4733 <div class="doc_text">
4734
4735 <h5>Syntax:</h5>
4736 <pre>
4737   [volatile] cmpxchg &lt;ty&gt;* &lt;pointer&gt;, &lt;ty&gt; &lt;cmp&gt;, &lt;ty&gt; &lt;new&gt; [singlethread] &lt;ordering&gt;                   <i>; yields {ty}</i>
4738 </pre>
4739
4740 <h5>Overview:</h5>
4741 <p>The '<tt>cmpxchg</tt>' instruction is used to atomically modify memory.
4742 It loads a value in memory and compares it to a given value. If they are
4743 equal, it stores a new value into the memory.</p>
4744
4745 <h5>Arguments:</h5>
4746 <p>There are three arguments to the '<code>cmpxchg</code>' instruction: an
4747 address to operate on, a value to compare to the value currently be at that
4748 address, and a new value to place at that address if the compared values are
4749 equal.  The type of '<var>&lt;cmp&gt;</var>' must be an integer type whose
4750 bit width is a power of two greater than or equal to eight and less than
4751 or equal to a target-specific size limit. '<var>&lt;cmp&gt;</var>' and
4752 '<var>&lt;new&gt;</var>' must have the same type, and the type of
4753 '<var>&lt;pointer&gt;</var>' must be a pointer to that type. If the
4754 <code>cmpxchg</code> is marked as <code>volatile</code>, then the
4755 optimizer is not allowed to modify the number or order of execution
4756 of this <code>cmpxchg</code> with other <a href="#volatile">volatile
4757 operations</a>.</p>
4758
4759 <!-- FIXME: Extend allowed types. -->
4760
4761 <p>The <a href="#ordering"><var>ordering</var></a> argument specifies how this
4762 <code>cmpxchg</code> synchronizes with other atomic operations.</p>
4763
4764 <p>The optional "<code>singlethread</code>" argument declares that the
4765 <code>cmpxchg</code> is only atomic with respect to code (usually signal
4766 handlers) running in the same thread as the <code>cmpxchg</code>.  Otherwise the
4767 cmpxchg is atomic with respect to all other code in the system.</p>
4768
4769 <p>The pointer passed into cmpxchg must have alignment greater than or equal to
4770 the size in memory of the operand.
4771
4772 <h5>Semantics:</h5>
4773 <p>The contents of memory at the location specified by the
4774 '<tt>&lt;pointer&gt;</tt>' operand is read and compared to
4775 '<tt>&lt;cmp&gt;</tt>'; if the read value is the equal,
4776 '<tt>&lt;new&gt;</tt>' is written.  The original value at the location
4777 is returned.
4778
4779 <p>A successful <code>cmpxchg</code> is a read-modify-write instruction for the
4780 purpose of identifying <a href="#release_sequence">release sequences</a>.  A
4781 failed <code>cmpxchg</code> is equivalent to an atomic load with an ordering
4782 parameter determined by dropping any <code>release</code> part of the
4783 <code>cmpxchg</code>'s ordering.</p>
4784
4785 <!--
4786 FIXME: Is compare_exchange_weak() necessary?  (Consider after we've done
4787 optimization work on ARM.)
4788
4789 FIXME: Is a weaker ordering constraint on failure helpful in practice?
4790 -->
4791
4792 <h5>Example:</h5>
4793 <pre>
4794 entry:
4795   %orig = atomic <a href="#i_load">load</a> i32* %ptr unordered                       <i>; yields {i32}</i>
4796   <a href="#i_br">br</a> label %loop
4797
4798 loop:
4799   %cmp = <a href="#i_phi">phi</a> i32 [ %orig, %entry ], [%old, %loop]
4800   %squared = <a href="#i_mul">mul</a> i32 %cmp, %cmp
4801   %old = cmpxchg i32* %ptr, i32 %cmp, i32 %squared                       <i>; yields {i32}</i>
4802   %success = <a href="#i_icmp">icmp</a> eq i32 %cmp, %old
4803   <a href="#i_br">br</a> i1 %success, label %done, label %loop
4804
4805 done:
4806   ...
4807 </pre>
4808
4809 </div>
4810
4811 <!-- _______________________________________________________________________ -->
4812 <div class="doc_subsubsection"> <a name="i_atomicrmw">'<tt>atomicrmw</tt>'
4813 Instruction</a> </div>
4814
4815 <div class="doc_text">
4816
4817 <h5>Syntax:</h5>
4818 <pre>
4819   [volatile] atomicrmw &lt;operation&gt; &lt;ty&gt;* &lt;pointer&gt;, &lt;ty&gt; &lt;value&gt; [singlethread] &lt;ordering&gt;                   <i>; yields {ty}</i>
4820 </pre>
4821
4822 <h5>Overview:</h5>
4823 <p>The '<tt>atomicrmw</tt>' instruction is used to atomically modify memory.</p>
4824
4825 <h5>Arguments:</h5>
4826 <p>There are three arguments to the '<code>atomicrmw</code>' instruction: an
4827 operation to apply, an address whose value to modify, an argument to the
4828 operation.  The operation must be one of the following keywords:</p>
4829 <ul>
4830   <li>xchg</li>
4831   <li>add</li>
4832   <li>sub</li>
4833   <li>and</li>
4834   <li>nand</li>
4835   <li>or</li>
4836   <li>xor</li>
4837   <li>max</li>
4838   <li>min</li>
4839   <li>umax</li>
4840   <li>umin</li>
4841 </ul>
4842
4843 <p>The type of '<var>&lt;value&gt;</var>' must be an integer type whose
4844 bit width is a power of two greater than or equal to eight and less than
4845 or equal to a target-specific size limit.  The type of the
4846 '<code>&lt;pointer&gt;</code>' operand must be a pointer to that type.
4847 If the <code>atomicrmw</code> is marked as <code>volatile</code>, then the
4848 optimizer is not allowed to modify the number or order of execution of this
4849 <code>atomicrmw</code> with other <a href="#volatile">volatile
4850   operations</a>.</p>
4851
4852 <!-- FIXME: Extend allowed types. -->
4853
4854 <h5>Semantics:</h5>
4855 <p>The contents of memory at the location specified by the
4856 '<tt>&lt;pointer&gt;</tt>' operand are atomically read, modified, and written
4857 back.  The original value at the location is returned.  The modification is
4858 specified by the <var>operation</var> argument:</p>
4859
4860 <ul>
4861   <li>xchg: <code>*ptr = val</code></li>
4862   <li>add: <code>*ptr = *ptr + val</code></li>
4863   <li>sub: <code>*ptr = *ptr - val</code></li>
4864   <li>and: <code>*ptr = *ptr &amp; val</code></li>
4865   <li>nand: <code>*ptr = ~(*ptr &amp; val)</code></li>
4866   <li>or: <code>*ptr = *ptr | val</code></li>
4867   <li>xor: <code>*ptr = *ptr ^ val</code></li>
4868   <li>max: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using a signed comparison)</li>
4869   <li>min: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using a signed comparison)</li>
4870   <li>umax: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using an unsigned comparison)</li>
4871   <li>umin: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using an unsigned comparison)</li>
4872 </ul>
4873
4874 <h5>Example:</h5>
4875 <pre>
4876   %old = atomicrmw add i32* %ptr, i32 1 acquire                        <i>; yields {i32}</i>
4877 </pre>
4878
4879 </div>
4880
4881 <!-- _______________________________________________________________________ -->
4882 <h4>
4883    <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
4884 </h4>
4885
4886 <div>
4887
4888 <h5>Syntax:</h5>
4889 <pre>
4890   &lt;result&gt; = getelementptr &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4891   &lt;result&gt; = getelementptr inbounds &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4892 </pre>
4893
4894 <h5>Overview:</h5>
4895 <p>The '<tt>getelementptr</tt>' instruction is used to get the address of a
4896    subelement of an <a href="#t_aggregate">aggregate</a> data structure.
4897    It performs address calculation only and does not access memory.</p>
4898
4899 <h5>Arguments:</h5>
4900 <p>The first argument is always a pointer, and forms the basis of the
4901    calculation. The remaining arguments are indices that indicate which of the
4902    elements of the aggregate object are indexed. The interpretation of each
4903    index is dependent on the type being indexed into. The first index always
4904    indexes the pointer value given as the first argument, the second index
4905    indexes a value of the type pointed to (not necessarily the value directly
4906    pointed to, since the first index can be non-zero), etc. The first type
4907    indexed into must be a pointer value, subsequent types can be arrays,
4908    vectors, and structs. Note that subsequent types being indexed into
4909    can never be pointers, since that would require loading the pointer before
4910    continuing calculation.</p>
4911
4912 <p>The type of each index argument depends on the type it is indexing into.
4913    When indexing into a (optionally packed) structure, only <tt>i32</tt>
4914    integer <b>constants</b> are allowed.  When indexing into an array, pointer
4915    or vector, integers of any width are allowed, and they are not required to be
4916    constant.</p>
4917
4918 <p>For example, let's consider a C code fragment and how it gets compiled to
4919    LLVM:</p>
4920
4921 <pre class="doc_code">
4922 struct RT {
4923   char A;
4924   int B[10][20];
4925   char C;
4926 };
4927 struct ST {
4928   int X;
4929   double Y;
4930   struct RT Z;
4931 };
4932
4933 int *foo(struct ST *s) {
4934   return &amp;s[1].Z.B[5][13];
4935 }
4936 </pre>
4937
4938 <p>The LLVM code generated by the GCC frontend is:</p>
4939
4940 <pre class="doc_code">
4941 %RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8  }
4942 %ST = <a href="#namedtypes">type</a> { i32, double, %RT }
4943
4944 define i32* @foo(%ST* %s) {
4945 entry:
4946   %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
4947   ret i32* %reg
4948 }
4949 </pre>
4950
4951 <h5>Semantics:</h5>
4952 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
4953    type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
4954    }</tt>' type, a structure.  The second index indexes into the third element
4955    of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
4956    i8 }</tt>' type, another structure.  The third index indexes into the second
4957    element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
4958    array.  The two dimensions of the array are subscripted into, yielding an
4959    '<tt>i32</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a
4960    pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p>
4961
4962 <p>Note that it is perfectly legal to index partially through a structure,
4963    returning a pointer to an inner element.  Because of this, the LLVM code for
4964    the given testcase is equivalent to:</p>
4965
4966 <pre>
4967   define i32* @foo(%ST* %s) {
4968     %t1 = getelementptr %ST* %s, i32 1                        <i>; yields %ST*:%t1</i>
4969     %t2 = getelementptr %ST* %t1, i32 0, i32 2                <i>; yields %RT*:%t2</i>
4970     %t3 = getelementptr %RT* %t2, i32 0, i32 1                <i>; yields [10 x [20 x i32]]*:%t3</i>
4971     %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  <i>; yields [20 x i32]*:%t4</i>
4972     %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        <i>; yields i32*:%t5</i>
4973     ret i32* %t5
4974   }
4975 </pre>
4976
4977 <p>If the <tt>inbounds</tt> keyword is present, the result value of the
4978    <tt>getelementptr</tt> is a <a href="#trapvalues">trap value</a> if the
4979    base pointer is not an <i>in bounds</i> address of an allocated object,
4980    or if any of the addresses that would be formed by successive addition of
4981    the offsets implied by the indices to the base address with infinitely
4982    precise arithmetic are not an <i>in bounds</i> address of that allocated
4983    object. The <i>in bounds</i> addresses for an allocated object are all
4984    the addresses that point into the object, plus the address one byte past
4985    the end.</p>
4986
4987 <p>If the <tt>inbounds</tt> keyword is not present, the offsets are added to
4988    the base address with silently-wrapping two's complement arithmetic, and
4989    the result value of the <tt>getelementptr</tt> may be outside the object
4990    pointed to by the base pointer. The result value may not necessarily be
4991    used to access memory though, even if it happens to point into allocated
4992    storage. See the <a href="#pointeraliasing">Pointer Aliasing Rules</a>
4993    section for more information.</p>
4994
4995 <p>The getelementptr instruction is often confusing.  For some more insight into
4996    how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p>
4997
4998 <h5>Example:</h5>
4999 <pre>
5000     <i>; yields [12 x i8]*:aptr</i>
5001     %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
5002     <i>; yields i8*:vptr</i>
5003     %vptr = getelementptr {i32, &lt;2 x i8&gt;}* %svptr, i64 0, i32 1, i32 1
5004     <i>; yields i8*:eptr</i>
5005     %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
5006     <i>; yields i32*:iptr</i>
5007     %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
5008 </pre>
5009
5010 </div>
5011
5012 </div>
5013
5014 <!-- ======================================================================= -->
5015 <h3>
5016   <a name="convertops">Conversion Operations</a>
5017 </h3>
5018
5019 <div>
5020
5021 <p>The instructions in this category are the conversion instructions (casting)
5022    which all take a single operand and a type. They perform various bit
5023    conversions on the operand.</p>
5024
5025 <!-- _______________________________________________________________________ -->
5026 <h4>
5027    <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
5028 </h4>
5029
5030 <div>
5031
5032 <h5>Syntax:</h5>
5033 <pre>
5034   &lt;result&gt; = trunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5035 </pre>
5036
5037 <h5>Overview:</h5>
5038 <p>The '<tt>trunc</tt>' instruction truncates its operand to the
5039    type <tt>ty2</tt>.</p>
5040
5041 <h5>Arguments:</h5>
5042 <p>The '<tt>trunc</tt>' instruction takes a value to trunc, and a type to trunc it to.
5043    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5044    of the same number of integers.
5045    The bit size of the <tt>value</tt> must be larger than
5046    the bit size of the destination type, <tt>ty2</tt>.
5047    Equal sized types are not allowed.</p>
5048
5049 <h5>Semantics:</h5>
5050 <p>The '<tt>trunc</tt>' instruction truncates the high order bits
5051    in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the
5052    source size must be larger than the destination size, <tt>trunc</tt> cannot
5053    be a <i>no-op cast</i>.  It will always truncate bits.</p>
5054
5055 <h5>Example:</h5>
5056 <pre>
5057   %X = trunc i32 257 to i8                        <i>; yields i8:1</i>
5058   %Y = trunc i32 123 to i1                        <i>; yields i1:true</i>
5059   %Z = trunc i32 122 to i1                        <i>; yields i1:false</i>
5060   %W = trunc &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i8&gt; <i>; yields &lt;i8 8, i8 7&gt;</i>
5061 </pre>
5062
5063 </div>
5064
5065 <!-- _______________________________________________________________________ -->
5066 <h4>
5067    <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
5068 </h4>
5069
5070 <div>
5071
5072 <h5>Syntax:</h5>
5073 <pre>
5074   &lt;result&gt; = zext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5075 </pre>
5076
5077 <h5>Overview:</h5>
5078 <p>The '<tt>zext</tt>' instruction zero extends its operand to type
5079    <tt>ty2</tt>.</p>
5080
5081
5082 <h5>Arguments:</h5>
5083 <p>The '<tt>zext</tt>' instruction takes a value to cast, and a type to cast it to.
5084    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5085    of the same number of integers.
5086    The bit size of the <tt>value</tt> must be smaller than
5087    the bit size of the destination type,
5088    <tt>ty2</tt>.</p>
5089
5090 <h5>Semantics:</h5>
5091 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
5092    bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>
5093
5094 <p>When zero extending from i1, the result will always be either 0 or 1.</p>
5095
5096 <h5>Example:</h5>
5097 <pre>
5098   %X = zext i32 257 to i64              <i>; yields i64:257</i>
5099   %Y = zext i1 true to i32              <i>; yields i32:1</i>
5100   %Z = zext &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i32&gt; <i>; yields &lt;i32 8, i32 7&gt;</i>
5101 </pre>
5102
5103 </div>
5104
5105 <!-- _______________________________________________________________________ -->
5106 <h4>
5107    <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
5108 </h4>
5109
5110 <div>
5111
5112 <h5>Syntax:</h5>
5113 <pre>
5114   &lt;result&gt; = sext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5115 </pre>
5116
5117 <h5>Overview:</h5>
5118 <p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>
5119
5120 <h5>Arguments:</h5>
5121 <p>The '<tt>sext</tt>' instruction takes a value to cast, and a type to cast it to.
5122    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5123    of the same number of integers.
5124    The bit size of the <tt>value</tt> must be smaller than
5125    the bit size of the destination type,
5126    <tt>ty2</tt>.</p>
5127
5128 <h5>Semantics:</h5>
5129 <p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
5130    bit (highest order bit) of the <tt>value</tt> until it reaches the bit size
5131    of the type <tt>ty2</tt>.</p>
5132
5133 <p>When sign extending from i1, the extension always results in -1 or 0.</p>
5134
5135 <h5>Example:</h5>
5136 <pre>
5137   %X = sext i8  -1 to i16              <i>; yields i16   :65535</i>
5138   %Y = sext i1 true to i32             <i>; yields i32:-1</i>
5139   %Z = sext &lt;2 x i16&gt; &lt;i16 8, i16 7&gt; to &lt;2 x i32&gt; <i>; yields &lt;i32 8, i32 7&gt;</i>
5140 </pre>
5141
5142 </div>
5143
5144 <!-- _______________________________________________________________________ -->
5145 <h4>
5146    <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
5147 </h4>
5148
5149 <div>
5150
5151 <h5>Syntax:</h5>
5152 <pre>
5153   &lt;result&gt; = fptrunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5154 </pre>
5155
5156 <h5>Overview:</h5>
5157 <p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
5158    <tt>ty2</tt>.</p>
5159
5160 <h5>Arguments:</h5>
5161 <p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
5162    point</a> value to cast and a <a href="#t_floating">floating point</a> type
5163    to cast it to. The size of <tt>value</tt> must be larger than the size of
5164    <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a
5165    <i>no-op cast</i>.</p>
5166
5167 <h5>Semantics:</h5>
5168 <p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
5169    <a href="#t_floating">floating point</a> type to a smaller
5170    <a href="#t_floating">floating point</a> type.  If the value cannot fit
5171    within the destination type, <tt>ty2</tt>, then the results are
5172    undefined.</p>
5173
5174 <h5>Example:</h5>
5175 <pre>
5176   %X = fptrunc double 123.0 to float         <i>; yields float:123.0</i>
5177   %Y = fptrunc double 1.0E+300 to float      <i>; yields undefined</i>
5178 </pre>
5179
5180 </div>
5181
5182 <!-- _______________________________________________________________________ -->
5183 <h4>
5184    <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
5185 </h4>
5186
5187 <div>
5188
5189 <h5>Syntax:</h5>
5190 <pre>
5191   &lt;result&gt; = fpext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5192 </pre>
5193
5194 <h5>Overview:</h5>
5195 <p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
5196    floating point value.</p>
5197
5198 <h5>Arguments:</h5>
5199 <p>The '<tt>fpext</tt>' instruction takes a
5200    <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and
5201    a <a href="#t_floating">floating point</a> type to cast it to. The source
5202    type must be smaller than the destination type.</p>
5203
5204 <h5>Semantics:</h5>
5205 <p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
5206    <a href="#t_floating">floating point</a> type to a larger
5207    <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
5208    used to make a <i>no-op cast</i> because it always changes bits. Use
5209    <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>
5210
5211 <h5>Example:</h5>
5212 <pre>
5213   %X = fpext float 3.125 to double         <i>; yields double:3.125000e+00</i>
5214   %Y = fpext double %X to fp128            <i>; yields fp128:0xL00000000000000004000900000000000</i>
5215 </pre>
5216
5217 </div>
5218
5219 <!-- _______________________________________________________________________ -->
5220 <h4>
5221    <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
5222 </h4>
5223
5224 <div>
5225
5226 <h5>Syntax:</h5>
5227 <pre>
5228   &lt;result&gt; = fptoui &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5229 </pre>
5230
5231 <h5>Overview:</h5>
5232 <p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its
5233    unsigned integer equivalent of type <tt>ty2</tt>.</p>
5234
5235 <h5>Arguments:</h5>
5236 <p>The '<tt>fptoui</tt>' instruction takes a value to cast, which must be a
5237    scalar or vector <a href="#t_floating">floating point</a> value, and a type
5238    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
5239    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
5240    vector integer type with the same number of elements as <tt>ty</tt></p>
5241
5242 <h5>Semantics:</h5>
5243 <p>The '<tt>fptoui</tt>' instruction converts its
5244    <a href="#t_floating">floating point</a> operand into the nearest (rounding
5245    towards zero) unsigned integer value. If the value cannot fit
5246    in <tt>ty2</tt>, the results are undefined.</p>
5247
5248 <h5>Example:</h5>
5249 <pre>
5250   %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
5251   %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
5252   %Z = fptoui float 1.04E+17 to i8     <i>; yields undefined:1</i>
5253 </pre>
5254
5255 </div>
5256
5257 <!-- _______________________________________________________________________ -->
5258 <h4>
5259    <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
5260 </h4>
5261
5262 <div>
5263
5264 <h5>Syntax:</h5>
5265 <pre>
5266   &lt;result&gt; = fptosi &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5267 </pre>
5268
5269 <h5>Overview:</h5>
5270 <p>The '<tt>fptosi</tt>' instruction converts
5271    <a href="#t_floating">floating point</a> <tt>value</tt> to
5272    type <tt>ty2</tt>.</p>
5273
5274 <h5>Arguments:</h5>
5275 <p>The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a
5276    scalar or vector <a href="#t_floating">floating point</a> value, and a type
5277    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
5278    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
5279    vector integer type with the same number of elements as <tt>ty</tt></p>
5280
5281 <h5>Semantics:</h5>
5282 <p>The '<tt>fptosi</tt>' instruction converts its
5283    <a href="#t_floating">floating point</a> operand into the nearest (rounding
5284    towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
5285    the results are undefined.</p>
5286
5287 <h5>Example:</h5>
5288 <pre>
5289   %X = fptosi double -123.0 to i32      <i>; yields i32:-123</i>
5290   %Y = fptosi float 1.0E-247 to i1      <i>; yields undefined:1</i>
5291   %Z = fptosi float 1.04E+17 to i8      <i>; yields undefined:1</i>
5292 </pre>
5293
5294 </div>
5295
5296 <!-- _______________________________________________________________________ -->
5297 <h4>
5298    <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
5299 </h4>
5300
5301 <div>
5302
5303 <h5>Syntax:</h5>
5304 <pre>
5305   &lt;result&gt; = uitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5306 </pre>
5307
5308 <h5>Overview:</h5>
5309 <p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
5310    integer and converts that value to the <tt>ty2</tt> type.</p>
5311
5312 <h5>Arguments:</h5>
5313 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be a
5314    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
5315    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
5316    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
5317    floating point type with the same number of elements as <tt>ty</tt></p>
5318
5319 <h5>Semantics:</h5>
5320 <p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
5321    integer quantity and converts it to the corresponding floating point
5322    value. If the value cannot fit in the floating point value, the results are
5323    undefined.</p>
5324
5325 <h5>Example:</h5>
5326 <pre>
5327   %X = uitofp i32 257 to float         <i>; yields float:257.0</i>
5328   %Y = uitofp i8 -1 to double          <i>; yields double:255.0</i>
5329 </pre>
5330
5331 </div>
5332
5333 <!-- _______________________________________________________________________ -->
5334 <h4>
5335    <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
5336 </h4>
5337
5338 <div>
5339
5340 <h5>Syntax:</h5>
5341 <pre>
5342   &lt;result&gt; = sitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5343 </pre>
5344
5345 <h5>Overview:</h5>
5346 <p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer
5347    and converts that value to the <tt>ty2</tt> type.</p>
5348
5349 <h5>Arguments:</h5>
5350 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be a
5351    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
5352    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
5353    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
5354    floating point type with the same number of elements as <tt>ty</tt></p>
5355
5356 <h5>Semantics:</h5>
5357 <p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer
5358    quantity and converts it to the corresponding floating point value. If the
5359    value cannot fit in the floating point value, the results are undefined.</p>
5360
5361 <h5>Example:</h5>
5362 <pre>
5363   %X = sitofp i32 257 to float         <i>; yields float:257.0</i>
5364   %Y = sitofp i8 -1 to double          <i>; yields double:-1.0</i>
5365 </pre>
5366
5367 </div>
5368
5369 <!-- _______________________________________________________________________ -->
5370 <h4>
5371    <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
5372 </h4>
5373
5374 <div>
5375
5376 <h5>Syntax:</h5>
5377 <pre>
5378   &lt;result&gt; = ptrtoint &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5379 </pre>
5380
5381 <h5>Overview:</h5>
5382 <p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
5383    the integer type <tt>ty2</tt>.</p>
5384
5385 <h5>Arguments:</h5>
5386 <p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which
5387    must be a <a href="#t_pointer">pointer</a> value, and a type to cast it to
5388    <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.</p>
5389
5390 <h5>Semantics:</h5>
5391 <p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
5392    <tt>ty2</tt> by interpreting the pointer value as an integer and either
5393    truncating or zero extending that value to the size of the integer type. If
5394    <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
5395    <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
5396    are the same size, then nothing is done (<i>no-op cast</i>) other than a type
5397    change.</p>
5398
5399 <h5>Example:</h5>
5400 <pre>
5401   %X = ptrtoint i32* %X to i8           <i>; yields truncation on 32-bit architecture</i>
5402   %Y = ptrtoint i32* %x to i64          <i>; yields zero extension on 32-bit architecture</i>
5403 </pre>
5404
5405 </div>
5406
5407 <!-- _______________________________________________________________________ -->
5408 <h4>
5409    <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
5410 </h4>
5411
5412 <div>
5413
5414 <h5>Syntax:</h5>
5415 <pre>
5416   &lt;result&gt; = inttoptr &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5417 </pre>
5418
5419 <h5>Overview:</h5>
5420 <p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to a
5421    pointer type, <tt>ty2</tt>.</p>
5422
5423 <h5>Arguments:</h5>
5424 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a>
5425    value to cast, and a type to cast it to, which must be a
5426    <a href="#t_pointer">pointer</a> type.</p>
5427
5428 <h5>Semantics:</h5>
5429 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
5430    <tt>ty2</tt> by applying either a zero extension or a truncation depending on
5431    the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the
5432    size of a pointer then a truncation is done. If <tt>value</tt> is smaller
5433    than the size of a pointer then a zero extension is done. If they are the
5434    same size, nothing is done (<i>no-op cast</i>).</p>
5435
5436 <h5>Example:</h5>
5437 <pre>
5438   %X = inttoptr i32 255 to i32*          <i>; yields zero extension on 64-bit architecture</i>
5439   %Y = inttoptr i32 255 to i32*          <i>; yields no-op on 32-bit architecture</i>
5440   %Z = inttoptr i64 0 to i32*            <i>; yields truncation on 32-bit architecture</i>
5441 </pre>
5442
5443 </div>
5444
5445 <!-- _______________________________________________________________________ -->
5446 <h4>
5447    <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
5448 </h4>
5449
5450 <div>
5451
5452 <h5>Syntax:</h5>
5453 <pre>
5454   &lt;result&gt; = bitcast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5455 </pre>
5456
5457 <h5>Overview:</h5>
5458 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
5459    <tt>ty2</tt> without changing any bits.</p>
5460
5461 <h5>Arguments:</h5>
5462 <p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a
5463    non-aggregate first class value, and a type to cast it to, which must also be
5464    a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes
5465    of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be
5466    identical. If the source type is a pointer, the destination type must also be
5467    a pointer.  This instruction supports bitwise conversion of vectors to
5468    integers and to vectors of other types (as long as they have the same
5469    size).</p>
5470
5471 <h5>Semantics:</h5>
5472 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
5473    <tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with
5474    this conversion.  The conversion is done as if the <tt>value</tt> had been
5475    stored to memory and read back as type <tt>ty2</tt>. Pointer types may only
5476    be converted to other pointer types with this instruction. To convert
5477    pointers to other types, use the <a href="#i_inttoptr">inttoptr</a> or
5478    <a href="#i_ptrtoint">ptrtoint</a> instructions first.</p>
5479
5480 <h5>Example:</h5>
5481 <pre>
5482   %X = bitcast i8 255 to i8              <i>; yields i8 :-1</i>
5483   %Y = bitcast i32* %x to sint*          <i>; yields sint*:%x</i>
5484   %Z = bitcast &lt;2 x int&gt; %V to i64;      <i>; yields i64: %V</i>
5485 </pre>
5486
5487 </div>
5488
5489 </div>
5490
5491 <!-- ======================================================================= -->
5492 <h3>
5493   <a name="otherops">Other Operations</a>
5494 </h3>
5495
5496 <div>
5497
5498 <p>The instructions in this category are the "miscellaneous" instructions, which
5499    defy better classification.</p>
5500
5501 <!-- _______________________________________________________________________ -->
5502 <h4>
5503   <a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
5504 </h4>
5505
5506 <div>
5507
5508 <h5>Syntax:</h5>
5509 <pre>
5510   &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>
5511 </pre>
5512
5513 <h5>Overview:</h5>
5514 <p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of
5515    boolean values based on comparison of its two integer, integer vector, or
5516    pointer operands.</p>
5517
5518 <h5>Arguments:</h5>
5519 <p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
5520    the condition code indicating the kind of comparison to perform. It is not a
5521    value, just a keyword. The possible condition code are:</p>
5522
5523 <ol>
5524   <li><tt>eq</tt>: equal</li>
5525   <li><tt>ne</tt>: not equal </li>
5526   <li><tt>ugt</tt>: unsigned greater than</li>
5527   <li><tt>uge</tt>: unsigned greater or equal</li>
5528   <li><tt>ult</tt>: unsigned less than</li>
5529   <li><tt>ule</tt>: unsigned less or equal</li>
5530   <li><tt>sgt</tt>: signed greater than</li>
5531   <li><tt>sge</tt>: signed greater or equal</li>
5532   <li><tt>slt</tt>: signed less than</li>
5533   <li><tt>sle</tt>: signed less or equal</li>
5534 </ol>
5535
5536 <p>The remaining two arguments must be <a href="#t_integer">integer</a> or
5537    <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a>
5538    typed.  They must also be identical types.</p>
5539
5540 <h5>Semantics:</h5>
5541 <p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the
5542    condition code given as <tt>cond</tt>. The comparison performed always yields
5543    either an <a href="#t_integer"><tt>i1</tt></a> or vector of <tt>i1</tt>
5544    result, as follows:</p>
5545
5546 <ol>
5547   <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal,
5548       <tt>false</tt> otherwise. No sign interpretation is necessary or
5549       performed.</li>
5550
5551   <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal,
5552       <tt>false</tt> otherwise. No sign interpretation is necessary or
5553       performed.</li>
5554
5555   <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
5556       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5557
5558   <li><tt>uge</tt>: interprets the operands as unsigned values and yields
5559       <tt>true</tt> if <tt>op1</tt> is greater than or equal
5560       to <tt>op2</tt>.</li>
5561
5562   <li><tt>ult</tt>: interprets the operands as unsigned values and yields
5563       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
5564
5565   <li><tt>ule</tt>: interprets the operands as unsigned values and yields
5566       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5567
5568   <li><tt>sgt</tt>: interprets the operands as signed values and yields
5569       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5570
5571   <li><tt>sge</tt>: interprets the operands as signed values and yields
5572       <tt>true</tt> if <tt>op1</tt> is greater than or equal
5573       to <tt>op2</tt>.</li>
5574
5575   <li><tt>slt</tt>: interprets the operands as signed values and yields
5576       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
5577
5578   <li><tt>sle</tt>: interprets the operands as signed values and yields
5579       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5580 </ol>
5581
5582 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
5583    values are compared as if they were integers.</p>
5584
5585 <p>If the operands are integer vectors, then they are compared element by
5586    element. The result is an <tt>i1</tt> vector with the same number of elements
5587    as the values being compared.  Otherwise, the result is an <tt>i1</tt>.</p>
5588
5589 <h5>Example:</h5>
5590 <pre>
5591   &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
5592   &lt;result&gt; = icmp ne float* %X, %X     <i>; yields: result=false</i>
5593   &lt;result&gt; = icmp ult i16  4, 5        <i>; yields: result=true</i>
5594   &lt;result&gt; = icmp sgt i16  4, 5        <i>; yields: result=false</i>
5595   &lt;result&gt; = icmp ule i16 -4, 5        <i>; yields: result=false</i>
5596   &lt;result&gt; = icmp sge i16  4, 5        <i>; yields: result=false</i>
5597 </pre>
5598
5599 <p>Note that the code generator does not yet support vector types with
5600    the <tt>icmp</tt> instruction.</p>
5601
5602 </div>
5603
5604 <!-- _______________________________________________________________________ -->
5605 <h4>
5606   <a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
5607 </h4>
5608
5609 <div>
5610
5611 <h5>Syntax:</h5>
5612 <pre>
5613   &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>
5614 </pre>
5615
5616 <h5>Overview:</h5>
5617 <p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean
5618    values based on comparison of its operands.</p>
5619
5620 <p>If the operands are floating point scalars, then the result type is a boolean
5621 (<a href="#t_integer"><tt>i1</tt></a>).</p>
5622
5623 <p>If the operands are floating point vectors, then the result type is a vector
5624    of boolean with the same number of elements as the operands being
5625    compared.</p>
5626
5627 <h5>Arguments:</h5>
5628 <p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
5629    the condition code indicating the kind of comparison to perform. It is not a
5630    value, just a keyword. The possible condition code are:</p>
5631
5632 <ol>
5633   <li><tt>false</tt>: no comparison, always returns false</li>
5634   <li><tt>oeq</tt>: ordered and equal</li>
5635   <li><tt>ogt</tt>: ordered and greater than </li>
5636   <li><tt>oge</tt>: ordered and greater than or equal</li>
5637   <li><tt>olt</tt>: ordered and less than </li>
5638   <li><tt>ole</tt>: ordered and less than or equal</li>
5639   <li><tt>one</tt>: ordered and not equal</li>
5640   <li><tt>ord</tt>: ordered (no nans)</li>
5641   <li><tt>ueq</tt>: unordered or equal</li>
5642   <li><tt>ugt</tt>: unordered or greater than </li>
5643   <li><tt>uge</tt>: unordered or greater than or equal</li>
5644   <li><tt>ult</tt>: unordered or less than </li>
5645   <li><tt>ule</tt>: unordered or less than or equal</li>
5646   <li><tt>une</tt>: unordered or not equal</li>
5647   <li><tt>uno</tt>: unordered (either nans)</li>
5648   <li><tt>true</tt>: no comparison, always returns true</li>
5649 </ol>
5650
5651 <p><i>Ordered</i> means that neither operand is a QNAN while
5652    <i>unordered</i> means that either operand may be a QNAN.</p>
5653
5654 <p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either
5655    a <a href="#t_floating">floating point</a> type or
5656    a <a href="#t_vector">vector</a> of floating point type.  They must have
5657    identical types.</p>
5658
5659 <h5>Semantics:</h5>
5660 <p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
5661    according to the condition code given as <tt>cond</tt>.  If the operands are
5662    vectors, then the vectors are compared element by element.  Each comparison
5663    performed always yields an <a href="#t_integer">i1</a> result, as
5664    follows:</p>
5665
5666 <ol>
5667   <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>
5668
5669   <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5670       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
5671
5672   <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5673       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5674
5675   <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5676       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
5677
5678   <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5679       <tt>op1</tt> is less than <tt>op2</tt>.</li>
5680
5681   <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5682       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5683
5684   <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5685       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
5686
5687   <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>
5688
5689   <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or
5690       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
5691
5692   <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or
5693       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5694
5695   <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or
5696       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
5697
5698   <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or
5699       <tt>op1</tt> is less than <tt>op2</tt>.</li>
5700
5701   <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or
5702       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5703
5704   <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or
5705       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
5706
5707   <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
5708
5709   <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
5710 </ol>
5711
5712 <h5>Example:</h5>
5713 <pre>
5714   &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
5715   &lt;result&gt; = fcmp one float 4.0, 5.0    <i>; yields: result=true</i>
5716   &lt;result&gt; = fcmp olt float 4.0, 5.0    <i>; yields: result=true</i>
5717   &lt;result&gt; = fcmp ueq double 1.0, 2.0   <i>; yields: result=false</i>
5718 </pre>
5719
5720 <p>Note that the code generator does not yet support vector types with
5721    the <tt>fcmp</tt> instruction.</p>
5722
5723 </div>
5724
5725 <!-- _______________________________________________________________________ -->
5726 <h4>
5727   <a name="i_phi">'<tt>phi</tt>' Instruction</a>
5728 </h4>
5729
5730 <div>
5731
5732 <h5>Syntax:</h5>
5733 <pre>
5734   &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...
5735 </pre>
5736
5737 <h5>Overview:</h5>
5738 <p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in the
5739    SSA graph representing the function.</p>
5740
5741 <h5>Arguments:</h5>
5742 <p>The type of the incoming values is specified with the first type field. After
5743    this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
5744    one pair for each predecessor basic block of the current block.  Only values
5745    of <a href="#t_firstclass">first class</a> type may be used as the value
5746    arguments to the PHI node.  Only labels may be used as the label
5747    arguments.</p>
5748
5749 <p>There must be no non-phi instructions between the start of a basic block and
5750    the PHI instructions: i.e. PHI instructions must be first in a basic
5751    block.</p>
5752
5753 <p>For the purposes of the SSA form, the use of each incoming value is deemed to
5754    occur on the edge from the corresponding predecessor block to the current
5755    block (but after any definition of an '<tt>invoke</tt>' instruction's return
5756    value on the same edge).</p>
5757
5758 <h5>Semantics:</h5>
5759 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
5760    specified by the pair corresponding to the predecessor basic block that
5761    executed just prior to the current block.</p>
5762
5763 <h5>Example:</h5>
5764 <pre>
5765 Loop:       ; Infinite loop that counts from 0 on up...
5766   %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
5767   %nextindvar = add i32 %indvar, 1
5768   br label %Loop
5769 </pre>
5770
5771 </div>
5772
5773 <!-- _______________________________________________________________________ -->
5774 <h4>
5775    <a name="i_select">'<tt>select</tt>' Instruction</a>
5776 </h4>
5777
5778 <div>
5779
5780 <h5>Syntax:</h5>
5781 <pre>
5782   &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>
5783
5784   <i>selty</i> is either i1 or {&lt;N x i1&gt;}
5785 </pre>
5786
5787 <h5>Overview:</h5>
5788 <p>The '<tt>select</tt>' instruction is used to choose one value based on a
5789    condition, without branching.</p>
5790
5791
5792 <h5>Arguments:</h5>
5793 <p>The '<tt>select</tt>' instruction requires an 'i1' value or a vector of 'i1'
5794    values indicating the condition, and two values of the
5795    same <a href="#t_firstclass">first class</a> type.  If the val1/val2 are
5796    vectors and the condition is a scalar, then entire vectors are selected, not
5797    individual elements.</p>
5798
5799 <h5>Semantics:</h5>
5800 <p>If the condition is an i1 and it evaluates to 1, the instruction returns the
5801    first value argument; otherwise, it returns the second value argument.</p>
5802
5803 <p>If the condition is a vector of i1, then the value arguments must be vectors
5804    of the same size, and the selection is done element by element.</p>
5805
5806 <h5>Example:</h5>
5807 <pre>
5808   %X = select i1 true, i8 17, i8 42          <i>; yields i8:17</i>
5809 </pre>
5810
5811 <p>Note that the code generator does not yet support conditions
5812    with vector type.</p>
5813
5814 </div>
5815
5816 <!-- _______________________________________________________________________ -->
5817 <h4>
5818   <a name="i_call">'<tt>call</tt>' Instruction</a>
5819 </h4>
5820
5821 <div>
5822
5823 <h5>Syntax:</h5>
5824 <pre>
5825   &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>]
5826 </pre>
5827
5828 <h5>Overview:</h5>
5829 <p>The '<tt>call</tt>' instruction represents a simple function call.</p>
5830
5831 <h5>Arguments:</h5>
5832 <p>This instruction requires several arguments:</p>
5833
5834 <ol>
5835   <li>The optional "tail" marker indicates that the callee function does not
5836       access any allocas or varargs in the caller.  Note that calls may be
5837       marked "tail" even if they do not occur before
5838       a <a href="#i_ret"><tt>ret</tt></a> instruction.  If the "tail" marker is
5839       present, the function call is eligible for tail call optimization,
5840       but <a href="CodeGenerator.html#tailcallopt">might not in fact be
5841       optimized into a jump</a>.  The code generator may optimize calls marked
5842       "tail" with either 1) automatic <a href="CodeGenerator.html#sibcallopt">
5843       sibling call optimization</a> when the caller and callee have
5844       matching signatures, or 2) forced tail call optimization when the
5845       following extra requirements are met:
5846       <ul>
5847         <li>Caller and callee both have the calling
5848             convention <tt>fastcc</tt>.</li>
5849         <li>The call is in tail position (ret immediately follows call and ret
5850             uses value of call or is void).</li>
5851         <li>Option <tt>-tailcallopt</tt> is enabled,
5852             or <code>llvm::GuaranteedTailCallOpt</code> is <code>true</code>.</li>
5853         <li><a href="CodeGenerator.html#tailcallopt">Platform specific
5854             constraints are met.</a></li>
5855       </ul>
5856   </li>
5857
5858   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
5859       convention</a> the call should use.  If none is specified, the call
5860       defaults to using C calling conventions.  The calling convention of the
5861       call must match the calling convention of the target function, or else the
5862       behavior is undefined.</li>
5863
5864   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
5865       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
5866       '<tt>inreg</tt>' attributes are valid here.</li>
5867
5868   <li>'<tt>ty</tt>': the type of the call instruction itself which is also the
5869       type of the return value.  Functions that return no value are marked
5870       <tt><a href="#t_void">void</a></tt>.</li>
5871
5872   <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value
5873       being invoked.  The argument types must match the types implied by this
5874       signature.  This type can be omitted if the function is not varargs and if
5875       the function type does not return a pointer to a function.</li>
5876
5877   <li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to
5878       be invoked. In most cases, this is a direct function invocation, but
5879       indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer
5880       to function value.</li>
5881
5882   <li>'<tt>function args</tt>': argument list whose types match the function
5883       signature argument types and parameter attributes. All arguments must be
5884       of <a href="#t_firstclass">first class</a> type. If the function
5885       signature indicates the function accepts a variable number of arguments,
5886       the extra arguments can be specified.</li>
5887
5888   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
5889       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
5890       '<tt>readnone</tt>' attributes are valid here.</li>
5891 </ol>
5892
5893 <h5>Semantics:</h5>
5894 <p>The '<tt>call</tt>' instruction is used to cause control flow to transfer to
5895    a specified function, with its incoming arguments bound to the specified
5896    values. Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called
5897    function, control flow continues with the instruction after the function
5898    call, and the return value of the function is bound to the result
5899    argument.</p>
5900
5901 <h5>Example:</h5>
5902 <pre>
5903   %retval = call i32 @test(i32 %argc)
5904   call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42)        <i>; yields i32</i>
5905   %X = tail call i32 @foo()                                    <i>; yields i32</i>
5906   %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo()  <i>; yields i32</i>
5907   call void %foo(i8 97 signext)
5908
5909   %struct.A = type { i32, i8 }
5910   %r = call %struct.A @foo()                        <i>; yields { 32, i8 }</i>
5911   %gr = extractvalue %struct.A %r, 0                <i>; yields i32</i>
5912   %gr1 = extractvalue %struct.A %r, 1               <i>; yields i8</i>
5913   %Z = call void @foo() noreturn                    <i>; indicates that %foo never returns normally</i>
5914   %ZZ = call zeroext i32 @bar()                     <i>; Return value is %zero extended</i>
5915 </pre>
5916
5917 <p>llvm treats calls to some functions with names and arguments that match the
5918 standard C99 library as being the C99 library functions, and may perform
5919 optimizations or generate code for them under that assumption.  This is
5920 something we'd like to change in the future to provide better support for
5921 freestanding environments and non-C-based languages.</p>
5922
5923 </div>
5924
5925 <!-- _______________________________________________________________________ -->
5926 <h4>
5927   <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
5928 </h4>
5929
5930 <div>
5931
5932 <h5>Syntax:</h5>
5933 <pre>
5934   &lt;resultval&gt; = va_arg &lt;va_list*&gt; &lt;arglist&gt;, &lt;argty&gt;
5935 </pre>
5936
5937 <h5>Overview:</h5>
5938 <p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through
5939    the "variable argument" area of a function call.  It is used to implement the
5940    <tt>va_arg</tt> macro in C.</p>
5941
5942 <h5>Arguments:</h5>
5943 <p>This instruction takes a <tt>va_list*</tt> value and the type of the
5944    argument. It returns a value of the specified argument type and increments
5945    the <tt>va_list</tt> to point to the next argument.  The actual type
5946    of <tt>va_list</tt> is target specific.</p>
5947
5948 <h5>Semantics:</h5>
5949 <p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type
5950    from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point
5951    to the next argument.  For more information, see the variable argument
5952    handling <a href="#int_varargs">Intrinsic Functions</a>.</p>
5953
5954 <p>It is legal for this instruction to be called in a function which does not
5955    take a variable number of arguments, for example, the <tt>vfprintf</tt>
5956    function.</p>
5957
5958 <p><tt>va_arg</tt> is an LLVM instruction instead of
5959    an <a href="#intrinsics">intrinsic function</a> because it takes a type as an
5960    argument.</p>
5961
5962 <h5>Example:</h5>
5963 <p>See the <a href="#int_varargs">variable argument processing</a> section.</p>
5964
5965 <p>Note that the code generator does not yet fully support va_arg on many
5966    targets. Also, it does not currently support va_arg with aggregate types on
5967    any target.</p>
5968
5969 </div>
5970
5971 </div>
5972
5973 </div>
5974
5975 <!-- *********************************************************************** -->
5976 <h2><a name="intrinsics">Intrinsic Functions</a></h2>
5977 <!-- *********************************************************************** -->
5978
5979 <div>
5980
5981 <p>LLVM supports the notion of an "intrinsic function".  These functions have
5982    well known names and semantics and are required to follow certain
5983    restrictions.  Overall, these intrinsics represent an extension mechanism for
5984    the LLVM language that does not require changing all of the transformations
5985    in LLVM when adding to the language (or the bitcode reader/writer, the
5986    parser, etc...).</p>
5987
5988 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This
5989    prefix is reserved in LLVM for intrinsic names; thus, function names may not
5990    begin with this prefix.  Intrinsic functions must always be external
5991    functions: you cannot define the body of intrinsic functions.  Intrinsic
5992    functions may only be used in call or invoke instructions: it is illegal to
5993    take the address of an intrinsic function.  Additionally, because intrinsic
5994    functions are part of the LLVM language, it is required if any are added that
5995    they be documented here.</p>
5996
5997 <p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents a
5998    family of functions that perform the same operation but on different data
5999    types. Because LLVM can represent over 8 million different integer types,
6000    overloading is used commonly to allow an intrinsic function to operate on any
6001    integer type. One or more of the argument types or the result type can be
6002    overloaded to accept any integer type. Argument types may also be defined as
6003    exactly matching a previous argument's type or the result type. This allows
6004    an intrinsic function which accepts multiple arguments, but needs all of them
6005    to be of the same type, to only be overloaded with respect to a single
6006    argument or the result.</p>
6007
6008 <p>Overloaded intrinsics will have the names of its overloaded argument types
6009    encoded into its function name, each preceded by a period. Only those types
6010    which are overloaded result in a name suffix. Arguments whose type is matched
6011    against another type do not. For example, the <tt>llvm.ctpop</tt> function
6012    can take an integer of any width and returns an integer of exactly the same
6013    integer width. This leads to a family of functions such as
6014    <tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29
6015    %val)</tt>.  Only one type, the return type, is overloaded, and only one type
6016    suffix is required. Because the argument's type is matched against the return
6017    type, it does not require its own name suffix.</p>
6018
6019 <p>To learn how to add an intrinsic function, please see the
6020    <a href="ExtendingLLVM.html">Extending LLVM Guide</a>.</p>
6021
6022 <!-- ======================================================================= -->
6023 <h3>
6024   <a name="int_varargs">Variable Argument Handling Intrinsics</a>
6025 </h3>
6026
6027 <div>
6028
6029 <p>Variable argument support is defined in LLVM with
6030    the <a href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three
6031    intrinsic functions.  These functions are related to the similarly named
6032    macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>
6033
6034 <p>All of these functions operate on arguments that use a target-specific value
6035    type "<tt>va_list</tt>".  The LLVM assembly language reference manual does
6036    not define what this type is, so all transformations should be prepared to
6037    handle these functions regardless of the type used.</p>
6038
6039 <p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
6040    instruction and the variable argument handling intrinsic functions are
6041    used.</p>
6042
6043 <pre class="doc_code">
6044 define i32 @test(i32 %X, ...) {
6045   ; Initialize variable argument processing
6046   %ap = alloca i8*
6047   %ap2 = bitcast i8** %ap to i8*
6048   call void @llvm.va_start(i8* %ap2)
6049
6050   ; Read a single integer argument
6051   %tmp = va_arg i8** %ap, i32
6052
6053   ; Demonstrate usage of llvm.va_copy and llvm.va_end
6054   %aq = alloca i8*
6055   %aq2 = bitcast i8** %aq to i8*
6056   call void @llvm.va_copy(i8* %aq2, i8* %ap2)
6057   call void @llvm.va_end(i8* %aq2)
6058
6059   ; Stop processing of arguments.
6060   call void @llvm.va_end(i8* %ap2)
6061   ret i32 %tmp
6062 }
6063
6064 declare void @llvm.va_start(i8*)
6065 declare void @llvm.va_copy(i8*, i8*)
6066 declare void @llvm.va_end(i8*)
6067 </pre>
6068
6069 <!-- _______________________________________________________________________ -->
6070 <h4>
6071   <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
6072 </h4>
6073
6074
6075 <div>
6076
6077 <h5>Syntax:</h5>
6078 <pre>
6079   declare void %llvm.va_start(i8* &lt;arglist&gt;)
6080 </pre>
6081
6082 <h5>Overview:</h5>
6083 <p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*&lt;arglist&gt;</tt>
6084    for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p>
6085
6086 <h5>Arguments:</h5>
6087 <p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>
6088
6089 <h5>Semantics:</h5>
6090 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
6091    macro available in C.  In a target-dependent way, it initializes
6092    the <tt>va_list</tt> element to which the argument points, so that the next
6093    call to <tt>va_arg</tt> will produce the first variable argument passed to
6094    the function.  Unlike the C <tt>va_start</tt> macro, this intrinsic does not
6095    need to know the last argument of the function as the compiler can figure
6096    that out.</p>
6097
6098 </div>
6099
6100 <!-- _______________________________________________________________________ -->
6101 <h4>
6102  <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
6103 </h4>
6104
6105 <div>
6106
6107 <h5>Syntax:</h5>
6108 <pre>
6109   declare void @llvm.va_end(i8* &lt;arglist&gt;)
6110 </pre>
6111
6112 <h5>Overview:</h5>
6113 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*&lt;arglist&gt;</tt>,
6114    which has been initialized previously
6115    with <tt><a href="#int_va_start">llvm.va_start</a></tt>
6116    or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
6117
6118 <h5>Arguments:</h5>
6119 <p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p>
6120
6121 <h5>Semantics:</h5>
6122 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
6123    macro available in C.  In a target-dependent way, it destroys
6124    the <tt>va_list</tt> element to which the argument points.  Calls
6125    to <a href="#int_va_start"><tt>llvm.va_start</tt></a>
6126    and <a href="#int_va_copy"> <tt>llvm.va_copy</tt></a> must be matched exactly
6127    with calls to <tt>llvm.va_end</tt>.</p>
6128
6129 </div>
6130
6131 <!-- _______________________________________________________________________ -->
6132 <h4>
6133   <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
6134 </h4>
6135
6136 <div>
6137
6138 <h5>Syntax:</h5>
6139 <pre>
6140   declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
6141 </pre>
6142
6143 <h5>Overview:</h5>
6144 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
6145    from the source argument list to the destination argument list.</p>
6146
6147 <h5>Arguments:</h5>
6148 <p>The first argument is a pointer to a <tt>va_list</tt> element to initialize.
6149    The second argument is a pointer to a <tt>va_list</tt> element to copy
6150    from.</p>
6151
6152 <h5>Semantics:</h5>
6153 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
6154    macro available in C.  In a target-dependent way, it copies the
6155    source <tt>va_list</tt> element into the destination <tt>va_list</tt>
6156    element.  This intrinsic is necessary because
6157    the <tt><a href="#int_va_start"> llvm.va_start</a></tt> intrinsic may be
6158    arbitrarily complex and require, for example, memory allocation.</p>
6159
6160 </div>
6161
6162 </div>
6163
6164 </div>
6165
6166 <!-- ======================================================================= -->
6167 <h3>
6168   <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
6169 </h3>
6170
6171 <div>
6172
6173 <p>LLVM support for <a href="GarbageCollection.html">Accurate Garbage
6174 Collection</a> (GC) requires the implementation and generation of these
6175 intrinsics. These intrinsics allow identification of <a href="#int_gcroot">GC
6176 roots on the stack</a>, as well as garbage collector implementations that
6177 require <a href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a>
6178 barriers.  Front-ends for type-safe garbage collected languages should generate
6179 these intrinsics to make use of the LLVM garbage collectors.  For more details,
6180 see <a href="GarbageCollection.html">Accurate Garbage Collection with
6181 LLVM</a>.</p>
6182
6183 <p>The garbage collection intrinsics only operate on objects in the generic
6184    address space (address space zero).</p>
6185
6186 <!-- _______________________________________________________________________ -->
6187 <h4>
6188   <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
6189 </h4>
6190
6191 <div>
6192
6193 <h5>Syntax:</h5>
6194 <pre>
6195   declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
6196 </pre>
6197
6198 <h5>Overview:</h5>
6199 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to
6200    the code generator, and allows some metadata to be associated with it.</p>
6201
6202 <h5>Arguments:</h5>
6203 <p>The first argument specifies the address of a stack object that contains the
6204    root pointer.  The second pointer (which must be either a constant or a
6205    global value address) contains the meta-data to be associated with the
6206    root.</p>
6207
6208 <h5>Semantics:</h5>
6209 <p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc"
6210    location.  At compile-time, the code generator generates information to allow
6211    the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>'
6212    intrinsic may only be used in a function which <a href="#gc">specifies a GC
6213    algorithm</a>.</p>
6214
6215 </div>
6216
6217 <!-- _______________________________________________________________________ -->
6218 <h4>
6219   <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
6220 </h4>
6221
6222 <div>
6223
6224 <h5>Syntax:</h5>
6225 <pre>
6226   declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
6227 </pre>
6228
6229 <h5>Overview:</h5>
6230 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
6231    locations, allowing garbage collector implementations that require read
6232    barriers.</p>
6233
6234 <h5>Arguments:</h5>
6235 <p>The second argument is the address to read from, which should be an address
6236    allocated from the garbage collector.  The first object is a pointer to the
6237    start of the referenced object, if needed by the language runtime (otherwise
6238    null).</p>
6239
6240 <h5>Semantics:</h5>
6241 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
6242    instruction, but may be replaced with substantially more complex code by the
6243    garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic
6244    may only be used in a function which <a href="#gc">specifies a GC
6245    algorithm</a>.</p>
6246
6247 </div>
6248
6249 <!-- _______________________________________________________________________ -->
6250 <h4>
6251   <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
6252 </h4>
6253
6254 <div>
6255
6256 <h5>Syntax:</h5>
6257 <pre>
6258   declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
6259 </pre>
6260
6261 <h5>Overview:</h5>
6262 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
6263    locations, allowing garbage collector implementations that require write
6264    barriers (such as generational or reference counting collectors).</p>
6265
6266 <h5>Arguments:</h5>
6267 <p>The first argument is the reference to store, the second is the start of the
6268    object to store it to, and the third is the address of the field of Obj to
6269    store to.  If the runtime does not require a pointer to the object, Obj may
6270    be null.</p>
6271
6272 <h5>Semantics:</h5>
6273 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
6274    instruction, but may be replaced with substantially more complex code by the
6275    garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic
6276    may only be used in a function which <a href="#gc">specifies a GC
6277    algorithm</a>.</p>
6278
6279 </div>
6280
6281 </div>
6282
6283 <!-- ======================================================================= -->
6284 <h3>
6285   <a name="int_codegen">Code Generator Intrinsics</a>
6286 </h3>
6287
6288 <div>
6289
6290 <p>These intrinsics are provided by LLVM to expose special features that may
6291    only be implemented with code generator support.</p>
6292
6293 <!-- _______________________________________________________________________ -->
6294 <h4>
6295   <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
6296 </h4>
6297
6298 <div>
6299
6300 <h5>Syntax:</h5>
6301 <pre>
6302   declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
6303 </pre>
6304
6305 <h5>Overview:</h5>
6306 <p>The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a
6307    target-specific value indicating the return address of the current function
6308    or one of its callers.</p>
6309
6310 <h5>Arguments:</h5>
6311 <p>The argument to this intrinsic indicates which function to return the address
6312    for.  Zero indicates the calling function, one indicates its caller, etc.
6313    The argument is <b>required</b> to be a constant integer value.</p>
6314
6315 <h5>Semantics:</h5>
6316 <p>The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer
6317    indicating the return address of the specified call frame, or zero if it
6318    cannot be identified.  The value returned by this intrinsic is likely to be
6319    incorrect or 0 for arguments other than zero, so it should only be used for
6320    debugging purposes.</p>
6321
6322 <p>Note that calling this intrinsic does not prevent function inlining or other
6323    aggressive transformations, so the value returned may not be that of the
6324    obvious source-language caller.</p>
6325
6326 </div>
6327
6328 <!-- _______________________________________________________________________ -->
6329 <h4>
6330   <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
6331 </h4>
6332
6333 <div>
6334
6335 <h5>Syntax:</h5>
6336 <pre>
6337   declare i8* @llvm.frameaddress(i32 &lt;level&gt;)
6338 </pre>
6339
6340 <h5>Overview:</h5>
6341 <p>The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the
6342    target-specific frame pointer value for the specified stack frame.</p>
6343
6344 <h5>Arguments:</h5>
6345 <p>The argument to this intrinsic indicates which function to return the frame
6346    pointer for.  Zero indicates the calling function, one indicates its caller,
6347    etc.  The argument is <b>required</b> to be a constant integer value.</p>
6348
6349 <h5>Semantics:</h5>
6350 <p>The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer
6351    indicating the frame address of the specified call frame, or zero if it
6352    cannot be identified.  The value returned by this intrinsic is likely to be
6353    incorrect or 0 for arguments other than zero, so it should only be used for
6354    debugging purposes.</p>
6355
6356 <p>Note that calling this intrinsic does not prevent function inlining or other
6357    aggressive transformations, so the value returned may not be that of the
6358    obvious source-language caller.</p>
6359
6360 </div>
6361
6362 <!-- _______________________________________________________________________ -->
6363 <h4>
6364   <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
6365 </h4>
6366
6367 <div>
6368
6369 <h5>Syntax:</h5>
6370 <pre>
6371   declare i8* @llvm.stacksave()
6372 </pre>
6373
6374 <h5>Overview:</h5>
6375 <p>The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state
6376    of the function stack, for use
6377    with <a href="#int_stackrestore"> <tt>llvm.stackrestore</tt></a>.  This is
6378    useful for implementing language features like scoped automatic variable
6379    sized arrays in C99.</p>
6380
6381 <h5>Semantics:</h5>
6382 <p>This intrinsic returns a opaque pointer value that can be passed
6383    to <a href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>.  When
6384    an <tt>llvm.stackrestore</tt> intrinsic is executed with a value saved
6385    from <tt>llvm.stacksave</tt>, it effectively restores the state of the stack
6386    to the state it was in when the <tt>llvm.stacksave</tt> intrinsic executed.
6387    In practice, this pops any <a href="#i_alloca">alloca</a> blocks from the
6388    stack that were allocated after the <tt>llvm.stacksave</tt> was executed.</p>
6389
6390 </div>
6391
6392 <!-- _______________________________________________________________________ -->
6393 <h4>
6394   <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
6395 </h4>
6396
6397 <div>
6398
6399 <h5>Syntax:</h5>
6400 <pre>
6401   declare void @llvm.stackrestore(i8* %ptr)
6402 </pre>
6403
6404 <h5>Overview:</h5>
6405 <p>The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of
6406    the function stack to the state it was in when the
6407    corresponding <a href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic
6408    executed.  This is useful for implementing language features like scoped
6409    automatic variable sized arrays in C99.</p>
6410
6411 <h5>Semantics:</h5>
6412 <p>See the description
6413    for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.</p>
6414
6415 </div>
6416
6417 <!-- _______________________________________________________________________ -->
6418 <h4>
6419   <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
6420 </h4>
6421
6422 <div>
6423
6424 <h5>Syntax:</h5>
6425 <pre>
6426   declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;, i32 &lt;cache type&gt;)
6427 </pre>
6428
6429 <h5>Overview:</h5>
6430 <p>The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to
6431    insert a prefetch instruction if supported; otherwise, it is a noop.
6432    Prefetches have no effect on the behavior of the program but can change its
6433    performance characteristics.</p>
6434
6435 <h5>Arguments:</h5>
6436 <p><tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the
6437    specifier determining if the fetch should be for a read (0) or write (1),
6438    and <tt>locality</tt> is a temporal locality specifier ranging from (0) - no
6439    locality, to (3) - extremely local keep in cache. The <tt>cache type</tt>
6440    specifies whether the prefetch is performed on the data (1) or instruction (0)
6441    cache. The <tt>rw</tt>, <tt>locality</tt> and <tt>cache type</tt> arguments
6442    must be constant integers.</p>
6443
6444 <h5>Semantics:</h5>
6445 <p>This intrinsic does not modify the behavior of the program.  In particular,
6446    prefetches cannot trap and do not produce a value.  On targets that support
6447    this intrinsic, the prefetch can provide hints to the processor cache for
6448    better performance.</p>
6449
6450 </div>
6451
6452 <!-- _______________________________________________________________________ -->
6453 <h4>
6454   <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
6455 </h4>
6456
6457 <div>
6458
6459 <h5>Syntax:</h5>
6460 <pre>
6461   declare void @llvm.pcmarker(i32 &lt;id&gt;)
6462 </pre>
6463
6464 <h5>Overview:</h5>
6465 <p>The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program
6466    Counter (PC) in a region of code to simulators and other tools.  The method
6467    is target specific, but it is expected that the marker will use exported
6468    symbols to transmit the PC of the marker.  The marker makes no guarantees
6469    that it will remain with any specific instruction after optimizations.  It is
6470    possible that the presence of a marker will inhibit optimizations.  The
6471    intended use is to be inserted after optimizations to allow correlations of
6472    simulation runs.</p>
6473
6474 <h5>Arguments:</h5>
6475 <p><tt>id</tt> is a numerical id identifying the marker.</p>
6476
6477 <h5>Semantics:</h5>
6478 <p>This intrinsic does not modify the behavior of the program.  Backends that do
6479    not support this intrinsic may ignore it.</p>
6480
6481 </div>
6482
6483 <!-- _______________________________________________________________________ -->
6484 <h4>
6485   <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
6486 </h4>
6487
6488 <div>
6489
6490 <h5>Syntax:</h5>
6491 <pre>
6492   declare i64 @llvm.readcyclecounter()
6493 </pre>
6494
6495 <h5>Overview:</h5>
6496 <p>The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle
6497    counter register (or similar low latency, high accuracy clocks) on those
6498    targets that support it.  On X86, it should map to RDTSC.  On Alpha, it
6499    should map to RPCC.  As the backing counters overflow quickly (on the order
6500    of 9 seconds on alpha), this should only be used for small timings.</p>
6501
6502 <h5>Semantics:</h5>
6503 <p>When directly supported, reading the cycle counter should not modify any
6504    memory.  Implementations are allowed to either return a application specific
6505    value or a system wide value.  On backends without support, this is lowered
6506    to a constant 0.</p>
6507
6508 </div>
6509
6510 </div>
6511
6512 <!-- ======================================================================= -->
6513 <h3>
6514   <a name="int_libc">Standard C Library Intrinsics</a>
6515 </h3>
6516
6517 <div>
6518
6519 <p>LLVM provides intrinsics for a few important standard C library functions.
6520    These intrinsics allow source-language front-ends to pass information about
6521    the alignment of the pointer arguments to the code generator, providing
6522    opportunity for more efficient code generation.</p>
6523
6524 <!-- _______________________________________________________________________ -->
6525 <h4>
6526   <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
6527 </h4>
6528
6529 <div>
6530
6531 <h5>Syntax:</h5>
6532 <p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any
6533    integer bit width and for different address spaces. Not all targets support
6534    all bit widths however.</p>
6535
6536 <pre>
6537   declare void @llvm.memcpy.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6538                                           i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6539   declare void @llvm.memcpy.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6540                                           i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6541 </pre>
6542
6543 <h5>Overview:</h5>
6544 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
6545    source location to the destination location.</p>
6546
6547 <p>Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt>
6548    intrinsics do not return a value, takes extra alignment/isvolatile arguments
6549    and the pointers can be in specified address spaces.</p>
6550
6551 <h5>Arguments:</h5>
6552
6553 <p>The first argument is a pointer to the destination, the second is a pointer
6554    to the source.  The third argument is an integer argument specifying the
6555    number of bytes to copy, the fourth argument is the alignment of the
6556    source and destination locations, and the fifth is a boolean indicating a
6557    volatile access.</p>
6558
6559 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6560    then the caller guarantees that both the source and destination pointers are
6561    aligned to that boundary.</p>
6562
6563 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6564    <tt>llvm.memcpy</tt> call is a <a href="#volatile">volatile operation</a>.
6565    The detailed access behavior is not very cleanly specified and it is unwise
6566    to depend on it.</p>
6567
6568 <h5>Semantics:</h5>
6569
6570 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
6571    source location to the destination location, which are not allowed to
6572    overlap.  It copies "len" bytes of memory over.  If the argument is known to
6573    be aligned to some boundary, this can be specified as the fourth argument,
6574    otherwise it should be set to 0 or 1.</p>
6575
6576 </div>
6577
6578 <!-- _______________________________________________________________________ -->
6579 <h4>
6580   <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
6581 </h4>
6582
6583 <div>
6584
6585 <h5>Syntax:</h5>
6586 <p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
6587    width and for different address space. Not all targets support all bit
6588    widths however.</p>
6589
6590 <pre>
6591   declare void @llvm.memmove.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6592                                            i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6593   declare void @llvm.memmove.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6594                                            i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6595 </pre>
6596
6597 <h5>Overview:</h5>
6598 <p>The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the
6599    source location to the destination location. It is similar to the
6600    '<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to
6601    overlap.</p>
6602
6603 <p>Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt>
6604    intrinsics do not return a value, takes extra alignment/isvolatile arguments
6605    and the pointers can be in specified address spaces.</p>
6606
6607 <h5>Arguments:</h5>
6608
6609 <p>The first argument is a pointer to the destination, the second is a pointer
6610    to the source.  The third argument is an integer argument specifying the
6611    number of bytes to copy, the fourth argument is the alignment of the
6612    source and destination locations, and the fifth is a boolean indicating a
6613    volatile access.</p>
6614
6615 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6616    then the caller guarantees that the source and destination pointers are
6617    aligned to that boundary.</p>
6618
6619 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6620    <tt>llvm.memmove</tt> call is a <a href="#volatile">volatile operation</a>.
6621    The detailed access behavior is not very cleanly specified and it is unwise
6622    to depend on it.</p>
6623
6624 <h5>Semantics:</h5>
6625
6626 <p>The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the
6627    source location to the destination location, which may overlap.  It copies
6628    "len" bytes of memory over.  If the argument is known to be aligned to some
6629    boundary, this can be specified as the fourth argument, otherwise it should
6630    be set to 0 or 1.</p>
6631
6632 </div>
6633
6634 <!-- _______________________________________________________________________ -->
6635 <h4>
6636   <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
6637 </h4>
6638
6639 <div>
6640
6641 <h5>Syntax:</h5>
6642 <p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
6643    width and for different address spaces. However, not all targets support all
6644    bit widths.</p>
6645
6646 <pre>
6647   declare void @llvm.memset.p0i8.i32(i8* &lt;dest&gt;, i8 &lt;val&gt;,
6648                                      i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6649   declare void @llvm.memset.p0i8.i64(i8* &lt;dest&gt;, i8 &lt;val&gt;,
6650                                      i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6651 </pre>
6652
6653 <h5>Overview:</h5>
6654 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a
6655    particular byte value.</p>
6656
6657 <p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt>
6658    intrinsic does not return a value and takes extra alignment/volatile
6659    arguments.  Also, the destination can be in an arbitrary address space.</p>
6660
6661 <h5>Arguments:</h5>
6662 <p>The first argument is a pointer to the destination to fill, the second is the
6663    byte value with which to fill it, the third argument is an integer argument
6664    specifying the number of bytes to fill, and the fourth argument is the known
6665    alignment of the destination location.</p>
6666
6667 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6668    then the caller guarantees that the destination pointer is aligned to that
6669    boundary.</p>
6670
6671 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6672    <tt>llvm.memset</tt> call is a <a href="#volatile">volatile operation</a>.
6673    The detailed access behavior is not very cleanly specified and it is unwise
6674    to depend on it.</p>
6675
6676 <h5>Semantics:</h5>
6677 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting
6678    at the destination location.  If the argument is known to be aligned to some
6679    boundary, this can be specified as the fourth argument, otherwise it should
6680    be set to 0 or 1.</p>
6681
6682 </div>
6683
6684 <!-- _______________________________________________________________________ -->
6685 <h4>
6686   <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
6687 </h4>
6688
6689 <div>
6690
6691 <h5>Syntax:</h5>
6692 <p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any
6693    floating point or vector of floating point type. Not all targets support all
6694    types however.</p>
6695
6696 <pre>
6697   declare float     @llvm.sqrt.f32(float %Val)
6698   declare double    @llvm.sqrt.f64(double %Val)
6699   declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
6700   declare fp128     @llvm.sqrt.f128(fp128 %Val)
6701   declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
6702 </pre>
6703
6704 <h5>Overview:</h5>
6705 <p>The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand,
6706    returning the same value as the libm '<tt>sqrt</tt>' functions would.
6707    Unlike <tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined
6708    behavior for negative numbers other than -0.0 (which allows for better
6709    optimization, because there is no need to worry about errno being
6710    set).  <tt>llvm.sqrt(-0.0)</tt> is defined to return -0.0 like IEEE sqrt.</p>
6711
6712 <h5>Arguments:</h5>
6713 <p>The argument and return value are floating point numbers of the same
6714    type.</p>
6715
6716 <h5>Semantics:</h5>
6717 <p>This function returns the sqrt of the specified operand if it is a
6718    nonnegative floating point number.</p>
6719
6720 </div>
6721
6722 <!-- _______________________________________________________________________ -->
6723 <h4>
6724   <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
6725 </h4>
6726
6727 <div>
6728
6729 <h5>Syntax:</h5>
6730 <p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any
6731    floating point or vector of floating point type. Not all targets support all
6732    types however.</p>
6733
6734 <pre>
6735   declare float     @llvm.powi.f32(float  %Val, i32 %power)
6736   declare double    @llvm.powi.f64(double %Val, i32 %power)
6737   declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
6738   declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
6739   declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
6740 </pre>
6741
6742 <h5>Overview:</h5>
6743 <p>The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the
6744    specified (positive or negative) power.  The order of evaluation of
6745    multiplications is not defined.  When a vector of floating point type is
6746    used, the second argument remains a scalar integer value.</p>
6747
6748 <h5>Arguments:</h5>
6749 <p>The second argument is an integer power, and the first is a value to raise to
6750    that power.</p>
6751
6752 <h5>Semantics:</h5>
6753 <p>This function returns the first value raised to the second power with an
6754    unspecified sequence of rounding operations.</p>
6755
6756 </div>
6757
6758 <!-- _______________________________________________________________________ -->
6759 <h4>
6760   <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
6761 </h4>
6762
6763 <div>
6764
6765 <h5>Syntax:</h5>
6766 <p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any
6767    floating point or vector of floating point type. Not all targets support all
6768    types however.</p>
6769
6770 <pre>
6771   declare float     @llvm.sin.f32(float  %Val)
6772   declare double    @llvm.sin.f64(double %Val)
6773   declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
6774   declare fp128     @llvm.sin.f128(fp128 %Val)
6775   declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
6776 </pre>
6777
6778 <h5>Overview:</h5>
6779 <p>The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.</p>
6780
6781 <h5>Arguments:</h5>
6782 <p>The argument and return value are floating point numbers of the same
6783    type.</p>
6784
6785 <h5>Semantics:</h5>
6786 <p>This function returns the sine of the specified operand, returning the same
6787    values as the libm <tt>sin</tt> functions would, and handles error conditions
6788    in the same way.</p>
6789
6790 </div>
6791
6792 <!-- _______________________________________________________________________ -->
6793 <h4>
6794   <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
6795 </h4>
6796
6797 <div>
6798
6799 <h5>Syntax:</h5>
6800 <p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any
6801    floating point or vector of floating point type. Not all targets support all
6802    types however.</p>
6803
6804 <pre>
6805   declare float     @llvm.cos.f32(float  %Val)
6806   declare double    @llvm.cos.f64(double %Val)
6807   declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
6808   declare fp128     @llvm.cos.f128(fp128 %Val)
6809   declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
6810 </pre>
6811
6812 <h5>Overview:</h5>
6813 <p>The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.</p>
6814
6815 <h5>Arguments:</h5>
6816 <p>The argument and return value are floating point numbers of the same
6817    type.</p>
6818
6819 <h5>Semantics:</h5>
6820 <p>This function returns the cosine of the specified operand, returning the same
6821    values as the libm <tt>cos</tt> functions would, and handles error conditions
6822    in the same way.</p>
6823
6824 </div>
6825
6826 <!-- _______________________________________________________________________ -->
6827 <h4>
6828   <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
6829 </h4>
6830
6831 <div>
6832
6833 <h5>Syntax:</h5>
6834 <p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any
6835    floating point or vector of floating point type. Not all targets support all
6836    types however.</p>
6837
6838 <pre>
6839   declare float     @llvm.pow.f32(float  %Val, float %Power)
6840   declare double    @llvm.pow.f64(double %Val, double %Power)
6841   declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
6842   declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
6843   declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
6844 </pre>
6845
6846 <h5>Overview:</h5>
6847 <p>The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the
6848    specified (positive or negative) power.</p>
6849
6850 <h5>Arguments:</h5>
6851 <p>The second argument is a floating point power, and the first is a value to
6852    raise to that power.</p>
6853
6854 <h5>Semantics:</h5>
6855 <p>This function returns the first value raised to the second power, returning
6856    the same values as the libm <tt>pow</tt> functions would, and handles error
6857    conditions in the same way.</p>
6858
6859 </div>
6860
6861 </div>
6862
6863 <!-- _______________________________________________________________________ -->
6864 <h4>
6865   <a name="int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a>
6866 </h4>
6867
6868 <div>
6869
6870 <h5>Syntax:</h5>
6871 <p>This is an overloaded intrinsic. You can use <tt>llvm.exp</tt> on any
6872    floating point or vector of floating point type. Not all targets support all
6873    types however.</p>
6874
6875 <pre>
6876   declare float     @llvm.exp.f32(float  %Val)
6877   declare double    @llvm.exp.f64(double %Val)
6878   declare x86_fp80  @llvm.exp.f80(x86_fp80  %Val)
6879   declare fp128     @llvm.exp.f128(fp128 %Val)
6880   declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128  %Val)
6881 </pre>
6882
6883 <h5>Overview:</h5>
6884 <p>The '<tt>llvm.exp.*</tt>' intrinsics perform the exp function.</p>
6885
6886 <h5>Arguments:</h5>
6887 <p>The argument and return value are floating point numbers of the same
6888    type.</p>
6889
6890 <h5>Semantics:</h5>
6891 <p>This function returns the same values as the libm <tt>exp</tt> functions
6892    would, and handles error conditions in the same way.</p>
6893
6894 </div>
6895
6896 <!-- _______________________________________________________________________ -->
6897 <h4>
6898   <a name="int_log">'<tt>llvm.log.*</tt>' Intrinsic</a>
6899 </h4>
6900
6901 <div>
6902
6903 <h5>Syntax:</h5>
6904 <p>This is an overloaded intrinsic. You can use <tt>llvm.log</tt> on any
6905    floating point or vector of floating point type. Not all targets support all
6906    types however.</p>
6907
6908 <pre>
6909   declare float     @llvm.log.f32(float  %Val)
6910   declare double    @llvm.log.f64(double %Val)
6911   declare x86_fp80  @llvm.log.f80(x86_fp80  %Val)
6912   declare fp128     @llvm.log.f128(fp128 %Val)
6913   declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128  %Val)
6914 </pre>
6915
6916 <h5>Overview:</h5>
6917 <p>The '<tt>llvm.log.*</tt>' intrinsics perform the log function.</p>
6918
6919 <h5>Arguments:</h5>
6920 <p>The argument and return value are floating point numbers of the same
6921    type.</p>
6922
6923 <h5>Semantics:</h5>
6924 <p>This function returns the same values as the libm <tt>log</tt> functions
6925    would, and handles error conditions in the same way.</p>
6926
6927 <h4>
6928   <a name="int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a>
6929 </h4>
6930
6931 <div>
6932
6933 <h5>Syntax:</h5>
6934 <p>This is an overloaded intrinsic. You can use <tt>llvm.fma</tt> on any
6935    floating point or vector of floating point type. Not all targets support all
6936    types however.</p>
6937
6938 <pre>
6939   declare float     @llvm.fma.f32(float  %a, float  %b, float  %c)
6940   declare double    @llvm.fma.f64(double %a, double %b, double %c)
6941   declare x86_fp80  @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
6942   declare fp128     @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
6943   declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
6944 </pre>
6945
6946 <h5>Overview:</h5>
6947 <p>The '<tt>llvm.fma.*</tt>' intrinsics perform the fused multiply-add
6948    operation.</p>
6949
6950 <h5>Arguments:</h5>
6951 <p>The argument and return value are floating point numbers of the same
6952    type.</p>
6953
6954 <h5>Semantics:</h5>
6955 <p>This function returns the same values as the libm <tt>fma</tt> functions
6956    would.</p>
6957
6958 </div>
6959
6960 <!-- ======================================================================= -->
6961 <h3>
6962   <a name="int_manip">Bit Manipulation Intrinsics</a>
6963 </h3>
6964
6965 <div>
6966
6967 <p>LLVM provides intrinsics for a few important bit manipulation operations.
6968    These allow efficient code generation for some algorithms.</p>
6969
6970 <!-- _______________________________________________________________________ -->
6971 <h4>
6972   <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
6973 </h4>
6974
6975 <div>
6976
6977 <h5>Syntax:</h5>
6978 <p>This is an overloaded intrinsic function. You can use bswap on any integer
6979    type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p>
6980
6981 <pre>
6982   declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
6983   declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
6984   declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
6985 </pre>
6986
6987 <h5>Overview:</h5>
6988 <p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
6989    values with an even number of bytes (positive multiple of 16 bits).  These
6990    are useful for performing operations on data that is not in the target's
6991    native byte order.</p>
6992
6993 <h5>Semantics:</h5>
6994 <p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
6995    and low byte of the input i16 swapped.  Similarly,
6996    the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four
6997    bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1,
6998    2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order.
6999    The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics
7000    extend this concept to additional even-byte lengths (6 bytes, 8 bytes and
7001    more, respectively).</p>
7002
7003 </div>
7004
7005 <!-- _______________________________________________________________________ -->
7006 <h4>
7007   <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
7008 </h4>
7009
7010 <div>
7011
7012 <h5>Syntax:</h5>
7013 <p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
7014    width, or on any vector with integer elements. Not all targets support all
7015   bit widths or vector types, however.</p>
7016
7017 <pre>
7018   declare i8 @llvm.ctpop.i8(i8  &lt;src&gt;)
7019   declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
7020   declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
7021   declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
7022   declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
7023   declare &lt;2 x i32&gt; @llvm.ctpop.v2i32(&lt;2 x i32&gt; &lt;src&gt;)
7024 </pre>
7025
7026 <h5>Overview:</h5>
7027 <p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set
7028    in a value.</p>
7029
7030 <h5>Arguments:</h5>
7031 <p>The only argument is the value to be counted.  The argument may be of any
7032    integer type, or a vector with integer elements.
7033    The return type must match the argument type.</p>
7034
7035 <h5>Semantics:</h5>
7036 <p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable, or within each
7037    element of a vector.</p>
7038
7039 </div>
7040
7041 <!-- _______________________________________________________________________ -->
7042 <h4>
7043   <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
7044 </h4>
7045
7046 <div>
7047
7048 <h5>Syntax:</h5>
7049 <p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
7050    integer bit width, or any vector whose elements are integers. Not all
7051    targets support all bit widths or vector types, however.</p>
7052
7053 <pre>
7054   declare i8 @llvm.ctlz.i8 (i8  &lt;src&gt;)
7055   declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
7056   declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
7057   declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
7058   declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
7059   declare &lt;2 x i32&gt; @llvm.ctlz.v2i32(&lt;2 x i32&gt; &lt;src;gt)
7060 </pre>
7061
7062 <h5>Overview:</h5>
7063 <p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
7064    leading zeros in a variable.</p>
7065
7066 <h5>Arguments:</h5>
7067 <p>The only argument is the value to be counted.  The argument may be of any
7068    integer type, or any vector type with integer element type.
7069    The return type must match the argument type.</p>
7070
7071 <h5>Semantics:</h5>
7072 <p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant)
7073    zeros in a variable, or within each element of the vector if the operation
7074    is of vector type.  If the src == 0 then the result is the size in bits of
7075    the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p>
7076
7077 </div>
7078
7079 <!-- _______________________________________________________________________ -->
7080 <h4>
7081   <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
7082 </h4>
7083
7084 <div>
7085
7086 <h5>Syntax:</h5>
7087 <p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
7088    integer bit width, or any vector of integer elements. Not all targets
7089    support all bit widths or vector types, however.</p>
7090
7091 <pre>
7092   declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
7093   declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
7094   declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
7095   declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
7096   declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
7097   declase &lt;2 x i32&gt; @llvm.cttz.v2i32(&lt;2 x i32&gt; &lt;src&gt;)
7098 </pre>
7099
7100 <h5>Overview:</h5>
7101 <p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of
7102    trailing zeros.</p>
7103
7104 <h5>Arguments:</h5>
7105 <p>The only argument is the value to be counted.  The argument may be of any
7106    integer type, or a vectory with integer element type..  The return type
7107    must match the argument type.</p>
7108
7109 <h5>Semantics:</h5>
7110 <p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant)
7111    zeros in a variable, or within each element of a vector.
7112    If the src == 0 then the result is the size in bits of
7113    the type of src.  For example, <tt>llvm.cttz(2) = 1</tt>.</p>
7114
7115 </div>
7116
7117 </div>
7118
7119 <!-- ======================================================================= -->
7120 <h3>
7121   <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
7122 </h3>
7123
7124 <div>
7125
7126 <p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>
7127
7128 <!-- _______________________________________________________________________ -->
7129 <h4>
7130   <a name="int_sadd_overflow">
7131     '<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics
7132   </a>
7133 </h4>
7134
7135 <div>
7136
7137 <h5>Syntax:</h5>
7138 <p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt>
7139    on any integer bit width.</p>
7140
7141 <pre>
7142   declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
7143   declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
7144   declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
7145 </pre>
7146
7147 <h5>Overview:</h5>
7148 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
7149    a signed addition of the two arguments, and indicate whether an overflow
7150    occurred during the signed summation.</p>
7151
7152 <h5>Arguments:</h5>
7153 <p>The arguments (%a and %b) and the first element of the result structure may
7154    be of integer types of any bit width, but they must have the same bit
7155    width. The second element of the result structure must be of
7156    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7157    undergo signed addition.</p>
7158
7159 <h5>Semantics:</h5>
7160 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
7161    a signed addition of the two variables. They return a structure &mdash; the
7162    first element of which is the signed summation, and the second element of
7163    which is a bit specifying if the signed summation resulted in an
7164    overflow.</p>
7165
7166 <h5>Examples:</h5>
7167 <pre>
7168   %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
7169   %sum = extractvalue {i32, i1} %res, 0
7170   %obit = extractvalue {i32, i1} %res, 1
7171   br i1 %obit, label %overflow, label %normal
7172 </pre>
7173
7174 </div>
7175
7176 <!-- _______________________________________________________________________ -->
7177 <h4>
7178   <a name="int_uadd_overflow">
7179     '<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics
7180   </a>
7181 </h4>
7182
7183 <div>
7184
7185 <h5>Syntax:</h5>
7186 <p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt>
7187    on any integer bit width.</p>
7188
7189 <pre>
7190   declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
7191   declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
7192   declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
7193 </pre>
7194
7195 <h5>Overview:</h5>
7196 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
7197    an unsigned addition of the two arguments, and indicate whether a carry
7198    occurred during the unsigned summation.</p>
7199
7200 <h5>Arguments:</h5>
7201 <p>The arguments (%a and %b) and the first element of the result structure may
7202    be of integer types of any bit width, but they must have the same bit
7203    width. The second element of the result structure must be of
7204    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7205    undergo unsigned addition.</p>
7206
7207 <h5>Semantics:</h5>
7208 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
7209    an unsigned addition of the two arguments. They return a structure &mdash;
7210    the first element of which is the sum, and the second element of which is a
7211    bit specifying if the unsigned summation resulted in a carry.</p>
7212
7213 <h5>Examples:</h5>
7214 <pre>
7215   %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
7216   %sum = extractvalue {i32, i1} %res, 0
7217   %obit = extractvalue {i32, i1} %res, 1
7218   br i1 %obit, label %carry, label %normal
7219 </pre>
7220
7221 </div>
7222
7223 <!-- _______________________________________________________________________ -->
7224 <h4>
7225   <a name="int_ssub_overflow">
7226     '<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics
7227   </a>
7228 </h4>
7229
7230 <div>
7231
7232 <h5>Syntax:</h5>
7233 <p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt>
7234    on any integer bit width.</p>
7235
7236 <pre>
7237   declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
7238   declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
7239   declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
7240 </pre>
7241
7242 <h5>Overview:</h5>
7243 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
7244    a signed subtraction of the two arguments, and indicate whether an overflow
7245    occurred during the signed subtraction.</p>
7246
7247 <h5>Arguments:</h5>
7248 <p>The arguments (%a and %b) and the first element of the result structure may
7249    be of integer types of any bit width, but they must have the same bit
7250    width. The second element of the result structure must be of
7251    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7252    undergo signed subtraction.</p>
7253
7254 <h5>Semantics:</h5>
7255 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
7256    a signed subtraction of the two arguments. They return a structure &mdash;
7257    the first element of which is the subtraction, and the second element of
7258    which is a bit specifying if the signed subtraction resulted in an
7259    overflow.</p>
7260
7261 <h5>Examples:</h5>
7262 <pre>
7263   %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
7264   %sum = extractvalue {i32, i1} %res, 0
7265   %obit = extractvalue {i32, i1} %res, 1
7266   br i1 %obit, label %overflow, label %normal
7267 </pre>
7268
7269 </div>
7270
7271 <!-- _______________________________________________________________________ -->
7272 <h4>
7273   <a name="int_usub_overflow">
7274     '<tt>llvm.usub.with.overflow.*</tt>' Intrinsics
7275   </a>
7276 </h4>
7277
7278 <div>
7279
7280 <h5>Syntax:</h5>
7281 <p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt>
7282    on any integer bit width.</p>
7283
7284 <pre>
7285   declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
7286   declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
7287   declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
7288 </pre>
7289
7290 <h5>Overview:</h5>
7291 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
7292    an unsigned subtraction of the two arguments, and indicate whether an
7293    overflow occurred during the unsigned subtraction.</p>
7294
7295 <h5>Arguments:</h5>
7296 <p>The arguments (%a and %b) and the first element of the result structure may
7297    be of integer types of any bit width, but they must have the same bit
7298    width. The second element of the result structure must be of
7299    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7300    undergo unsigned subtraction.</p>
7301
7302 <h5>Semantics:</h5>
7303 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
7304    an unsigned subtraction of the two arguments. They return a structure &mdash;
7305    the first element of which is the subtraction, and the second element of
7306    which is a bit specifying if the unsigned subtraction resulted in an
7307    overflow.</p>
7308
7309 <h5>Examples:</h5>
7310 <pre>
7311   %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
7312   %sum = extractvalue {i32, i1} %res, 0
7313   %obit = extractvalue {i32, i1} %res, 1
7314   br i1 %obit, label %overflow, label %normal
7315 </pre>
7316
7317 </div>
7318
7319 <!-- _______________________________________________________________________ -->
7320 <h4>
7321   <a name="int_smul_overflow">
7322     '<tt>llvm.smul.with.overflow.*</tt>' Intrinsics
7323   </a>
7324 </h4>
7325
7326 <div>
7327
7328 <h5>Syntax:</h5>
7329 <p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt>
7330    on any integer bit width.</p>
7331
7332 <pre>
7333   declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
7334   declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
7335   declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
7336 </pre>
7337
7338 <h5>Overview:</h5>
7339
7340 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
7341    a signed multiplication of the two arguments, and indicate whether an
7342    overflow occurred during the signed multiplication.</p>
7343
7344 <h5>Arguments:</h5>
7345 <p>The arguments (%a and %b) and the first element of the result structure may
7346    be of integer types of any bit width, but they must have the same bit
7347    width. The second element of the result structure must be of
7348    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7349    undergo signed multiplication.</p>
7350
7351 <h5>Semantics:</h5>
7352 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
7353    a signed multiplication of the two arguments. They return a structure &mdash;
7354    the first element of which is the multiplication, and the second element of
7355    which is a bit specifying if the signed multiplication resulted in an
7356    overflow.</p>
7357
7358 <h5>Examples:</h5>
7359 <pre>
7360   %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
7361   %sum = extractvalue {i32, i1} %res, 0
7362   %obit = extractvalue {i32, i1} %res, 1
7363   br i1 %obit, label %overflow, label %normal
7364 </pre>
7365
7366 </div>
7367
7368 <!-- _______________________________________________________________________ -->
7369 <h4>
7370   <a name="int_umul_overflow">
7371     '<tt>llvm.umul.with.overflow.*</tt>' Intrinsics
7372   </a>
7373 </h4>
7374
7375 <div>
7376
7377 <h5>Syntax:</h5>
7378 <p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt>
7379    on any integer bit width.</p>
7380
7381 <pre>
7382   declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
7383   declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
7384   declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
7385 </pre>
7386
7387 <h5>Overview:</h5>
7388 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
7389    a unsigned multiplication of the two arguments, and indicate whether an
7390    overflow occurred during the unsigned multiplication.</p>
7391
7392 <h5>Arguments:</h5>
7393 <p>The arguments (%a and %b) and the first element of the result structure may
7394    be of integer types of any bit width, but they must have the same bit
7395    width. The second element of the result structure must be of
7396    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7397    undergo unsigned multiplication.</p>
7398
7399 <h5>Semantics:</h5>
7400 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
7401    an unsigned multiplication of the two arguments. They return a structure
7402    &mdash; the first element of which is the multiplication, and the second
7403    element of which is a bit specifying if the unsigned multiplication resulted
7404    in an overflow.</p>
7405
7406 <h5>Examples:</h5>
7407 <pre>
7408   %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
7409   %sum = extractvalue {i32, i1} %res, 0
7410   %obit = extractvalue {i32, i1} %res, 1
7411   br i1 %obit, label %overflow, label %normal
7412 </pre>
7413
7414 </div>
7415
7416 </div>
7417
7418 <!-- ======================================================================= -->
7419 <h3>
7420   <a name="int_fp16">Half Precision Floating Point Intrinsics</a>
7421 </h3>
7422
7423 <div>
7424
7425 <p>Half precision floating point is a storage-only format. This means that it is
7426    a dense encoding (in memory) but does not support computation in the
7427    format.</p>
7428    
7429 <p>This means that code must first load the half-precision floating point
7430    value as an i16, then convert it to float with <a
7431    href="#int_convert_from_fp16"><tt>llvm.convert.from.fp16</tt></a>.
7432    Computation can then be performed on the float value (including extending to
7433    double etc).  To store the value back to memory, it is first converted to
7434    float if needed, then converted to i16 with
7435    <a href="#int_convert_to_fp16"><tt>llvm.convert.to.fp16</tt></a>, then
7436    storing as an i16 value.</p>
7437
7438 <!-- _______________________________________________________________________ -->
7439 <h4>
7440   <a name="int_convert_to_fp16">
7441     '<tt>llvm.convert.to.fp16</tt>' Intrinsic
7442   </a>
7443 </h4>
7444
7445 <div>
7446
7447 <h5>Syntax:</h5>
7448 <pre>
7449   declare i16 @llvm.convert.to.fp16(f32 %a)
7450 </pre>
7451
7452 <h5>Overview:</h5>
7453 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
7454    a conversion from single precision floating point format to half precision
7455    floating point format.</p>
7456
7457 <h5>Arguments:</h5>
7458 <p>The intrinsic function contains single argument - the value to be
7459    converted.</p>
7460
7461 <h5>Semantics:</h5>
7462 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
7463    a conversion from single precision floating point format to half precision
7464    floating point format. The return value is an <tt>i16</tt> which
7465    contains the converted number.</p>
7466
7467 <h5>Examples:</h5>
7468 <pre>
7469   %res = call i16 @llvm.convert.to.fp16(f32 %a)
7470   store i16 %res, i16* @x, align 2
7471 </pre>
7472
7473 </div>
7474
7475 <!-- _______________________________________________________________________ -->
7476 <h4>
7477   <a name="int_convert_from_fp16">
7478     '<tt>llvm.convert.from.fp16</tt>' Intrinsic
7479   </a>
7480 </h4>
7481
7482 <div>
7483
7484 <h5>Syntax:</h5>
7485 <pre>
7486   declare f32 @llvm.convert.from.fp16(i16 %a)
7487 </pre>
7488
7489 <h5>Overview:</h5>
7490 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs
7491    a conversion from half precision floating point format to single precision
7492    floating point format.</p>
7493
7494 <h5>Arguments:</h5>
7495 <p>The intrinsic function contains single argument - the value to be
7496    converted.</p>
7497
7498 <h5>Semantics:</h5>
7499 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs a
7500    conversion from half single precision floating point format to single
7501    precision floating point format. The input half-float value is represented by
7502    an <tt>i16</tt> value.</p>
7503
7504 <h5>Examples:</h5>
7505 <pre>
7506   %a = load i16* @x, align 2
7507   %res = call f32 @llvm.convert.from.fp16(i16 %a)
7508 </pre>
7509
7510 </div>
7511
7512 </div>
7513
7514 <!-- ======================================================================= -->
7515 <h3>
7516   <a name="int_debugger">Debugger Intrinsics</a>
7517 </h3>
7518
7519 <div>
7520
7521 <p>The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt>
7522    prefix), are described in
7523    the <a href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source
7524    Level Debugging</a> document.</p>
7525
7526 </div>
7527
7528 <!-- ======================================================================= -->
7529 <h3>
7530   <a name="int_eh">Exception Handling Intrinsics</a>
7531 </h3>
7532
7533 <div>
7534
7535 <p>The LLVM exception handling intrinsics (which all start with
7536    <tt>llvm.eh.</tt> prefix), are described in
7537    the <a href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
7538    Handling</a> document.</p>
7539
7540 </div>
7541
7542 <!-- ======================================================================= -->
7543 <h3>
7544   <a name="int_trampoline">Trampoline Intrinsic</a>
7545 </h3>
7546
7547 <div>
7548
7549 <p>This intrinsic makes it possible to excise one parameter, marked with
7550    the <a href="#nest"><tt>nest</tt></a> attribute, from a function.
7551    The result is a callable
7552    function pointer lacking the nest parameter - the caller does not need to
7553    provide a value for it.  Instead, the value to use is stored in advance in a
7554    "trampoline", a block of memory usually allocated on the stack, which also
7555    contains code to splice the nest value into the argument list.  This is used
7556    to implement the GCC nested function address extension.</p>
7557
7558 <p>For example, if the function is
7559    <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
7560    pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
7561    follows:</p>
7562
7563 <pre class="doc_code">
7564   %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
7565   %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
7566   %p = call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval)
7567   %fp = bitcast i8* %p to i32 (i32, i32)*
7568 </pre>
7569
7570 <p>The call <tt>%val = call i32 %fp(i32 %x, i32 %y)</tt> is then equivalent
7571    to <tt>%val = call i32 %f(i8* %nval, i32 %x, i32 %y)</tt>.</p>
7572
7573 <!-- _______________________________________________________________________ -->
7574 <h4>
7575   <a name="int_it">
7576     '<tt>llvm.init.trampoline</tt>' Intrinsic
7577   </a>
7578 </h4>
7579
7580 <div>
7581
7582 <h5>Syntax:</h5>
7583 <pre>
7584   declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
7585 </pre>
7586
7587 <h5>Overview:</h5>
7588 <p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a
7589    function pointer suitable for executing it.</p>
7590
7591 <h5>Arguments:</h5>
7592 <p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
7593    pointers.  The <tt>tramp</tt> argument must point to a sufficiently large and
7594    sufficiently aligned block of memory; this memory is written to by the
7595    intrinsic.  Note that the size and the alignment are target-specific - LLVM
7596    currently provides no portable way of determining them, so a front-end that
7597    generates this intrinsic needs to have some target-specific knowledge.
7598    The <tt>func</tt> argument must hold a function bitcast to
7599    an <tt>i8*</tt>.</p>
7600
7601 <h5>Semantics:</h5>
7602 <p>The block of memory pointed to by <tt>tramp</tt> is filled with target
7603    dependent code, turning it into a function.  A pointer to this function is
7604    returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate
7605    function pointer type</a> before being called.  The new function's signature
7606    is the same as that of <tt>func</tt> with any arguments marked with
7607    the <tt>nest</tt> attribute removed.  At most one such <tt>nest</tt> argument
7608    is allowed, and it must be of pointer type.  Calling the new function is
7609    equivalent to calling <tt>func</tt> with the same argument list, but
7610    with <tt>nval</tt> used for the missing <tt>nest</tt> argument.  If, after
7611    calling <tt>llvm.init.trampoline</tt>, the memory pointed to
7612    by <tt>tramp</tt> is modified, then the effect of any later call to the
7613    returned function pointer is undefined.</p>
7614
7615 </div>
7616
7617 </div>
7618
7619 <!-- ======================================================================= -->
7620 <h3>
7621   <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
7622 </h3>
7623
7624 <div>
7625
7626 <p>These intrinsic functions expand the "universal IR" of LLVM to represent
7627    hardware constructs for atomic operations and memory synchronization.  This
7628    provides an interface to the hardware, not an interface to the programmer. It
7629    is aimed at a low enough level to allow any programming models or APIs
7630    (Application Programming Interfaces) which need atomic behaviors to map
7631    cleanly onto it. It is also modeled primarily on hardware behavior. Just as
7632    hardware provides a "universal IR" for source languages, it also provides a
7633    starting point for developing a "universal" atomic operation and
7634    synchronization IR.</p>
7635
7636 <p>These do <em>not</em> form an API such as high-level threading libraries,
7637    software transaction memory systems, atomic primitives, and intrinsic
7638    functions as found in BSD, GNU libc, atomic_ops, APR, and other system and
7639    application libraries.  The hardware interface provided by LLVM should allow
7640    a clean implementation of all of these APIs and parallel programming models.
7641    No one model or paradigm should be selected above others unless the hardware
7642    itself ubiquitously does so.</p>
7643
7644 <!-- _______________________________________________________________________ -->
7645 <h4>
7646   <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
7647 </h4>
7648
7649 <div>
7650 <h5>Syntax:</h5>
7651 <pre>
7652   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;)
7653 </pre>
7654
7655 <h5>Overview:</h5>
7656 <p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between
7657    specific pairs of memory access types.</p>
7658
7659 <h5>Arguments:</h5>
7660 <p>The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments.
7661    The first four arguments enables a specific barrier as listed below.  The
7662    fifth argument specifies that the barrier applies to io or device or uncached
7663    memory.</p>
7664
7665 <ul>
7666   <li><tt>ll</tt>: load-load barrier</li>
7667   <li><tt>ls</tt>: load-store barrier</li>
7668   <li><tt>sl</tt>: store-load barrier</li>
7669   <li><tt>ss</tt>: store-store barrier</li>
7670   <li><tt>device</tt>: barrier applies to device and uncached memory also.</li>
7671 </ul>
7672
7673 <h5>Semantics:</h5>
7674 <p>This intrinsic causes the system to enforce some ordering constraints upon
7675    the loads and stores of the program. This barrier does not
7676    indicate <em>when</em> any events will occur, it only enforces
7677    an <em>order</em> in which they occur. For any of the specified pairs of load
7678    and store operations (f.ex.  load-load, or store-load), all of the first
7679    operations preceding the barrier will complete before any of the second
7680    operations succeeding the barrier begin. Specifically the semantics for each
7681    pairing is as follows:</p>
7682
7683 <ul>
7684   <li><tt>ll</tt>: All loads before the barrier must complete before any load
7685       after the barrier begins.</li>
7686   <li><tt>ls</tt>: All loads before the barrier must complete before any
7687       store after the barrier begins.</li>
7688   <li><tt>ss</tt>: All stores before the barrier must complete before any
7689       store after the barrier begins.</li>
7690   <li><tt>sl</tt>: All stores before the barrier must complete before any
7691       load after the barrier begins.</li>
7692 </ul>
7693
7694 <p>These semantics are applied with a logical "and" behavior when more than one
7695    is enabled in a single memory barrier intrinsic.</p>
7696
7697 <p>Backends may implement stronger barriers than those requested when they do
7698    not support as fine grained a barrier as requested.  Some architectures do
7699    not need all types of barriers and on such architectures, these become
7700    noops.</p>
7701
7702 <h5>Example:</h5>
7703 <pre>
7704 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7705 %ptr      = bitcast i8* %mallocP to i32*
7706             store i32 4, %ptr
7707
7708 %result1  = load i32* %ptr      <i>; yields {i32}:result1 = 4</i>
7709             call void @llvm.memory.barrier(i1 false, i1 true, i1 false, i1 false, i1 true)
7710                                 <i>; guarantee the above finishes</i>
7711             store i32 8, %ptr   <i>; before this begins</i>
7712 </pre>
7713
7714 </div>
7715
7716 <!-- _______________________________________________________________________ -->
7717 <h4>
7718   <a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a>
7719 </h4>
7720
7721 <div>
7722
7723 <h5>Syntax:</h5>
7724 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on
7725    any integer bit width and for different address spaces. Not all targets
7726    support all bit widths however.</p>
7727
7728 <pre>
7729   declare i8 @llvm.atomic.cmp.swap.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt;)
7730   declare i16 @llvm.atomic.cmp.swap.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt;)
7731   declare i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt;)
7732   declare i64 @llvm.atomic.cmp.swap.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt;)
7733 </pre>
7734
7735 <h5>Overview:</h5>
7736 <p>This loads a value in memory and compares it to a given value. If they are
7737    equal, it stores a new value into the memory.</p>
7738
7739 <h5>Arguments:</h5>
7740 <p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result
7741    as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the
7742    same bit width. The <tt>ptr</tt> argument must be a pointer to a value of
7743    this integer type. While any bit width integer may be used, targets may only
7744    lower representations they support in hardware.</p>
7745
7746 <h5>Semantics:</h5>
7747 <p>This entire intrinsic must be executed atomically. It first loads the value
7748    in memory pointed to by <tt>ptr</tt> and compares it with the
7749    value <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the
7750    memory. The loaded value is yielded in all cases. This provides the
7751    equivalent of an atomic compare-and-swap operation within the SSA
7752    framework.</p>
7753
7754 <h5>Examples:</h5>
7755 <pre>
7756 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7757 %ptr      = bitcast i8* %mallocP to i32*
7758             store i32 4, %ptr
7759
7760 %val1     = add i32 4, 4
7761 %result1  = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 4, %val1)
7762                                           <i>; yields {i32}:result1 = 4</i>
7763 %stored1  = icmp eq i32 %result1, 4       <i>; yields {i1}:stored1 = true</i>
7764 %memval1  = load i32* %ptr                <i>; yields {i32}:memval1 = 8</i>
7765
7766 %val2     = add i32 1, 1
7767 %result2  = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 5, %val2)
7768                                           <i>; yields {i32}:result2 = 8</i>
7769 %stored2  = icmp eq i32 %result2, 5       <i>; yields {i1}:stored2 = false</i>
7770
7771 %memval2  = load i32* %ptr                <i>; yields {i32}:memval2 = 8</i>
7772 </pre>
7773
7774 </div>
7775
7776 <!-- _______________________________________________________________________ -->
7777 <h4>
7778   <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
7779 </h4>
7780
7781 <div>
7782 <h5>Syntax:</h5>
7783
7784 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any
7785    integer bit width. Not all targets support all bit widths however.</p>
7786
7787 <pre>
7788   declare i8 @llvm.atomic.swap.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;val&gt;)
7789   declare i16 @llvm.atomic.swap.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;val&gt;)
7790   declare i32 @llvm.atomic.swap.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;val&gt;)
7791   declare i64 @llvm.atomic.swap.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;val&gt;)
7792 </pre>
7793
7794 <h5>Overview:</h5>
7795 <p>This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields
7796    the value from memory. It then stores the value in <tt>val</tt> in the memory
7797    at <tt>ptr</tt>.</p>
7798
7799 <h5>Arguments:</h5>
7800 <p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both
7801   the <tt>val</tt> argument and the result must be integers of the same bit
7802   width.  The first argument, <tt>ptr</tt>, must be a pointer to a value of this
7803   integer type. The targets may only lower integer representations they
7804   support.</p>
7805
7806 <h5>Semantics:</h5>
7807 <p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and
7808    stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the
7809    equivalent of an atomic swap operation within the SSA framework.</p>
7810
7811 <h5>Examples:</h5>
7812 <pre>
7813 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7814 %ptr      = bitcast i8* %mallocP to i32*
7815             store i32 4, %ptr
7816
7817 %val1     = add i32 4, 4
7818 %result1  = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val1)
7819                                         <i>; yields {i32}:result1 = 4</i>
7820 %stored1  = icmp eq i32 %result1, 4     <i>; yields {i1}:stored1 = true</i>
7821 %memval1  = load i32* %ptr              <i>; yields {i32}:memval1 = 8</i>
7822
7823 %val2     = add i32 1, 1
7824 %result2  = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val2)
7825                                         <i>; yields {i32}:result2 = 8</i>
7826
7827 %stored2  = icmp eq i32 %result2, 8     <i>; yields {i1}:stored2 = true</i>
7828 %memval2  = load i32* %ptr              <i>; yields {i32}:memval2 = 2</i>
7829 </pre>
7830
7831 </div>
7832
7833 <!-- _______________________________________________________________________ -->
7834 <h4>
7835   <a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a>
7836 </h4>
7837
7838 <div>
7839
7840 <h5>Syntax:</h5>
7841 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on
7842    any integer bit width. Not all targets support all bit widths however.</p>
7843
7844 <pre>
7845   declare i8 @llvm.atomic.load.add.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7846   declare i16 @llvm.atomic.load.add.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7847   declare i32 @llvm.atomic.load.add.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7848   declare i64 @llvm.atomic.load.add.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7849 </pre>
7850
7851 <h5>Overview:</h5>
7852 <p>This intrinsic adds <tt>delta</tt> to the value stored in memory
7853    at <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
7854
7855 <h5>Arguments:</h5>
7856 <p>The intrinsic takes two arguments, the first a pointer to an integer value
7857    and the second an integer value. The result is also an integer value. These
7858    integer types can have any bit width, but they must all have the same bit
7859    width. The targets may only lower integer representations they support.</p>
7860
7861 <h5>Semantics:</h5>
7862 <p>This intrinsic does a series of operations atomically. It first loads the
7863    value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result
7864    to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p>
7865
7866 <h5>Examples:</h5>
7867 <pre>
7868 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7869 %ptr      = bitcast i8* %mallocP to i32*
7870             store i32 4, %ptr
7871 %result1  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 4)
7872                                 <i>; yields {i32}:result1 = 4</i>
7873 %result2  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 2)
7874                                 <i>; yields {i32}:result2 = 8</i>
7875 %result3  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 5)
7876                                 <i>; yields {i32}:result3 = 10</i>
7877 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
7878 </pre>
7879
7880 </div>
7881
7882 <!-- _______________________________________________________________________ -->
7883 <h4>
7884   <a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a>
7885 </h4>
7886
7887 <div>
7888
7889 <h5>Syntax:</h5>
7890 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on
7891    any integer bit width and for different address spaces. Not all targets
7892    support all bit widths however.</p>
7893
7894 <pre>
7895   declare i8 @llvm.atomic.load.sub.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7896   declare i16 @llvm.atomic.load.sub.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7897   declare i32 @llvm.atomic.load.sub.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7898   declare i64 @llvm.atomic.load.sub.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7899 </pre>
7900
7901 <h5>Overview:</h5>
7902 <p>This intrinsic subtracts <tt>delta</tt> to the value stored in memory at
7903    <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
7904
7905 <h5>Arguments:</h5>
7906 <p>The intrinsic takes two arguments, the first a pointer to an integer value
7907    and the second an integer value. The result is also an integer value. These
7908    integer types can have any bit width, but they must all have the same bit
7909    width. The targets may only lower integer representations they support.</p>
7910
7911 <h5>Semantics:</h5>
7912 <p>This intrinsic does a series of operations atomically. It first loads the
7913    value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the
7914    result to <tt>ptr</tt>. It yields the original value stored
7915    at <tt>ptr</tt>.</p>
7916
7917 <h5>Examples:</h5>
7918 <pre>
7919 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7920 %ptr      = bitcast i8* %mallocP to i32*
7921             store i32 8, %ptr
7922 %result1  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 4)
7923                                 <i>; yields {i32}:result1 = 8</i>
7924 %result2  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 2)
7925                                 <i>; yields {i32}:result2 = 4</i>
7926 %result3  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 5)
7927                                 <i>; yields {i32}:result3 = 2</i>
7928 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = -3</i>
7929 </pre>
7930
7931 </div>
7932
7933 <!-- _______________________________________________________________________ -->
7934 <h4>
7935   <a name="int_atomic_load_and">
7936     '<tt>llvm.atomic.load.and.*</tt>' Intrinsic
7937   </a>
7938   <br>
7939   <a name="int_atomic_load_nand">
7940     '<tt>llvm.atomic.load.nand.*</tt>' Intrinsic
7941   </a>
7942   <br>
7943   <a name="int_atomic_load_or">
7944     '<tt>llvm.atomic.load.or.*</tt>' Intrinsic
7945   </a>
7946   <br>
7947   <a name="int_atomic_load_xor">
7948     '<tt>llvm.atomic.load.xor.*</tt>' Intrinsic
7949   </a>
7950 </h4>
7951
7952 <div>
7953
7954 <h5>Syntax:</h5>
7955 <p>These are overloaded intrinsics. You can
7956   use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>,
7957   <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer
7958   bit width and for different address spaces. Not all targets support all bit
7959   widths however.</p>
7960
7961 <pre>
7962   declare i8 @llvm.atomic.load.and.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7963   declare i16 @llvm.atomic.load.and.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7964   declare i32 @llvm.atomic.load.and.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7965   declare i64 @llvm.atomic.load.and.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7966 </pre>
7967
7968 <pre>
7969   declare i8 @llvm.atomic.load.or.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7970   declare i16 @llvm.atomic.load.or.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7971   declare i32 @llvm.atomic.load.or.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7972   declare i64 @llvm.atomic.load.or.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7973 </pre>
7974
7975 <pre>
7976   declare i8 @llvm.atomic.load.nand.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7977   declare i16 @llvm.atomic.load.nand.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7978   declare i32 @llvm.atomic.load.nand.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7979   declare i64 @llvm.atomic.load.nand.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7980 </pre>
7981
7982 <pre>
7983   declare i8 @llvm.atomic.load.xor.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7984   declare i16 @llvm.atomic.load.xor.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7985   declare i32 @llvm.atomic.load.xor.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7986   declare i64 @llvm.atomic.load.xor.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7987 </pre>
7988
7989 <h5>Overview:</h5>
7990 <p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to
7991    the value stored in memory at <tt>ptr</tt>. It yields the original value
7992    at <tt>ptr</tt>.</p>
7993
7994 <h5>Arguments:</h5>
7995 <p>These intrinsics take two arguments, the first a pointer to an integer value
7996    and the second an integer value. The result is also an integer value. These
7997    integer types can have any bit width, but they must all have the same bit
7998    width. The targets may only lower integer representations they support.</p>
7999
8000 <h5>Semantics:</h5>
8001 <p>These intrinsics does a series of operations atomically. They first load the
8002    value stored at <tt>ptr</tt>. They then do the bitwise
8003    operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the
8004    original value stored at <tt>ptr</tt>.</p>
8005
8006 <h5>Examples:</h5>
8007 <pre>
8008 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
8009 %ptr      = bitcast i8* %mallocP to i32*
8010             store i32 0x0F0F, %ptr
8011 %result0  = call i32 @llvm.atomic.load.nand.i32.p0i32(i32* %ptr, i32 0xFF)
8012                                 <i>; yields {i32}:result0 = 0x0F0F</i>
8013 %result1  = call i32 @llvm.atomic.load.and.i32.p0i32(i32* %ptr, i32 0xFF)
8014                                 <i>; yields {i32}:result1 = 0xFFFFFFF0</i>
8015 %result2  = call i32 @llvm.atomic.load.or.i32.p0i32(i32* %ptr, i32 0F)
8016                                 <i>; yields {i32}:result2 = 0xF0</i>
8017 %result3  = call i32 @llvm.atomic.load.xor.i32.p0i32(i32* %ptr, i32 0F)
8018                                 <i>; yields {i32}:result3 = FF</i>
8019 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = F0</i>
8020 </pre>
8021
8022 </div>
8023
8024 <!-- _______________________________________________________________________ -->
8025 <h4>
8026   <a name="int_atomic_load_max">
8027     '<tt>llvm.atomic.load.max.*</tt>' Intrinsic
8028   </a>
8029   <br>
8030   <a name="int_atomic_load_min">
8031     '<tt>llvm.atomic.load.min.*</tt>' Intrinsic
8032   </a>
8033   <br>
8034   <a name="int_atomic_load_umax">
8035     '<tt>llvm.atomic.load.umax.*</tt>' Intrinsic
8036   </a>
8037   <br>
8038   <a name="int_atomic_load_umin">
8039     '<tt>llvm.atomic.load.umin.*</tt>' Intrinsic
8040   </a>
8041 </h4>
8042
8043 <div>
8044
8045 <h5>Syntax:</h5>
8046 <p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>,
8047    <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and
8048    <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different
8049    address spaces. Not all targets support all bit widths however.</p>
8050
8051 <pre>
8052   declare i8 @llvm.atomic.load.max.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8053   declare i16 @llvm.atomic.load.max.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8054   declare i32 @llvm.atomic.load.max.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8055   declare i64 @llvm.atomic.load.max.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8056 </pre>
8057
8058 <pre>
8059   declare i8 @llvm.atomic.load.min.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8060   declare i16 @llvm.atomic.load.min.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8061   declare i32 @llvm.atomic.load.min.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8062   declare i64 @llvm.atomic.load.min.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8063 </pre>
8064
8065 <pre>
8066   declare i8 @llvm.atomic.load.umax.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8067   declare i16 @llvm.atomic.load.umax.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8068   declare i32 @llvm.atomic.load.umax.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8069   declare i64 @llvm.atomic.load.umax.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8070 </pre>
8071
8072 <pre>
8073   declare i8 @llvm.atomic.load.umin.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8074   declare i16 @llvm.atomic.load.umin.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8075   declare i32 @llvm.atomic.load.umin.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8076   declare i64 @llvm.atomic.load.umin.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8077 </pre>
8078
8079 <h5>Overview:</h5>
8080 <p>These intrinsics takes the signed or unsigned minimum or maximum of
8081    <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the
8082    original value at <tt>ptr</tt>.</p>
8083
8084 <h5>Arguments:</h5>
8085 <p>These intrinsics take two arguments, the first a pointer to an integer value
8086    and the second an integer value. The result is also an integer value. These
8087    integer types can have any bit width, but they must all have the same bit
8088    width. The targets may only lower integer representations they support.</p>
8089
8090 <h5>Semantics:</h5>
8091 <p>These intrinsics does a series of operations atomically. They first load the
8092    value stored at <tt>ptr</tt>. They then do the signed or unsigned min or
8093    max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They
8094    yield the original value stored at <tt>ptr</tt>.</p>
8095
8096 <h5>Examples:</h5>
8097 <pre>
8098 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
8099 %ptr      = bitcast i8* %mallocP to i32*
8100             store i32 7, %ptr
8101 %result0  = call i32 @llvm.atomic.load.min.i32.p0i32(i32* %ptr, i32 -2)
8102                                 <i>; yields {i32}:result0 = 7</i>
8103 %result1  = call i32 @llvm.atomic.load.max.i32.p0i32(i32* %ptr, i32 8)
8104                                 <i>; yields {i32}:result1 = -2</i>
8105 %result2  = call i32 @llvm.atomic.load.umin.i32.p0i32(i32* %ptr, i32 10)
8106                                 <i>; yields {i32}:result2 = 8</i>
8107 %result3  = call i32 @llvm.atomic.load.umax.i32.p0i32(i32* %ptr, i32 30)
8108                                 <i>; yields {i32}:result3 = 8</i>
8109 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 30</i>
8110 </pre>
8111
8112 </div>
8113
8114 </div>
8115
8116 <!-- ======================================================================= -->
8117 <h3>
8118   <a name="int_memorymarkers">Memory Use Markers</a>
8119 </h3>
8120
8121 <div>
8122
8123 <p>This class of intrinsics exists to information about the lifetime of memory
8124    objects and ranges where variables are immutable.</p>
8125
8126 <!-- _______________________________________________________________________ -->
8127 <h4>
8128   <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
8129 </h4>
8130
8131 <div>
8132
8133 <h5>Syntax:</h5>
8134 <pre>
8135   declare void @llvm.lifetime.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8136 </pre>
8137
8138 <h5>Overview:</h5>
8139 <p>The '<tt>llvm.lifetime.start</tt>' intrinsic specifies the start of a memory
8140    object's lifetime.</p>
8141
8142 <h5>Arguments:</h5>
8143 <p>The first argument is a constant integer representing the size of the
8144    object, or -1 if it is variable sized.  The second argument is a pointer to
8145    the object.</p>
8146
8147 <h5>Semantics:</h5>
8148 <p>This intrinsic indicates that before this point in the code, the value of the
8149    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
8150    never be used and has an undefined value.  A load from the pointer that
8151    precedes this intrinsic can be replaced with
8152    <tt>'<a href="#undefvalues">undef</a>'</tt>.</p>
8153
8154 </div>
8155
8156 <!-- _______________________________________________________________________ -->
8157 <h4>
8158   <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
8159 </h4>
8160
8161 <div>
8162
8163 <h5>Syntax:</h5>
8164 <pre>
8165   declare void @llvm.lifetime.end(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8166 </pre>
8167
8168 <h5>Overview:</h5>
8169 <p>The '<tt>llvm.lifetime.end</tt>' intrinsic specifies the end of a memory
8170    object's lifetime.</p>
8171
8172 <h5>Arguments:</h5>
8173 <p>The first argument is a constant integer representing the size of the
8174    object, or -1 if it is variable sized.  The second argument is a pointer to
8175    the object.</p>
8176
8177 <h5>Semantics:</h5>
8178 <p>This intrinsic indicates that after this point in the code, the value of the
8179    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
8180    never be used and has an undefined value.  Any stores into the memory object
8181    following this intrinsic may be removed as dead.
8182
8183 </div>
8184
8185 <!-- _______________________________________________________________________ -->
8186 <h4>
8187   <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
8188 </h4>
8189
8190 <div>
8191
8192 <h5>Syntax:</h5>
8193 <pre>
8194   declare {}* @llvm.invariant.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8195 </pre>
8196
8197 <h5>Overview:</h5>
8198 <p>The '<tt>llvm.invariant.start</tt>' intrinsic specifies that the contents of
8199    a memory object will not change.</p>
8200
8201 <h5>Arguments:</h5>
8202 <p>The first argument is a constant integer representing the size of the
8203    object, or -1 if it is variable sized.  The second argument is a pointer to
8204    the object.</p>
8205
8206 <h5>Semantics:</h5>
8207 <p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses
8208    the return value, the referenced memory location is constant and
8209    unchanging.</p>
8210
8211 </div>
8212
8213 <!-- _______________________________________________________________________ -->
8214 <h4>
8215   <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
8216 </h4>
8217
8218 <div>
8219
8220 <h5>Syntax:</h5>
8221 <pre>
8222   declare void @llvm.invariant.end({}* &lt;start&gt;, i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8223 </pre>
8224
8225 <h5>Overview:</h5>
8226 <p>The '<tt>llvm.invariant.end</tt>' intrinsic specifies that the contents of
8227    a memory object are mutable.</p>
8228
8229 <h5>Arguments:</h5>
8230 <p>The first argument is the matching <tt>llvm.invariant.start</tt> intrinsic.
8231    The second argument is a constant integer representing the size of the
8232    object, or -1 if it is variable sized and the third argument is a pointer
8233    to the object.</p>
8234
8235 <h5>Semantics:</h5>
8236 <p>This intrinsic indicates that the memory is mutable again.</p>
8237
8238 </div>
8239
8240 </div>
8241
8242 <!-- ======================================================================= -->
8243 <h3>
8244   <a name="int_general">General Intrinsics</a>
8245 </h3>
8246
8247 <div>
8248
8249 <p>This class of intrinsics is designed to be generic and has no specific
8250    purpose.</p>
8251
8252 <!-- _______________________________________________________________________ -->
8253 <h4>
8254   <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
8255 </h4>
8256
8257 <div>
8258
8259 <h5>Syntax:</h5>
8260 <pre>
8261   declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8262 </pre>
8263
8264 <h5>Overview:</h5>
8265 <p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p>
8266
8267 <h5>Arguments:</h5>
8268 <p>The first argument is a pointer to a value, the second is a pointer to a
8269    global string, the third is a pointer to a global string which is the source
8270    file name, and the last argument is the line number.</p>
8271
8272 <h5>Semantics:</h5>
8273 <p>This intrinsic allows annotation of local variables with arbitrary strings.
8274    This can be useful for special purpose optimizations that want to look for
8275    these annotations.  These have no other defined use, they are ignored by code
8276    generation and optimization.</p>
8277
8278 </div>
8279
8280 <!-- _______________________________________________________________________ -->
8281 <h4>
8282   <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
8283 </h4>
8284
8285 <div>
8286
8287 <h5>Syntax:</h5>
8288 <p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on
8289    any integer bit width.</p>
8290
8291 <pre>
8292   declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8293   declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8294   declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8295   declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8296   declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8297 </pre>
8298
8299 <h5>Overview:</h5>
8300 <p>The '<tt>llvm.annotation</tt>' intrinsic.</p>
8301
8302 <h5>Arguments:</h5>
8303 <p>The first argument is an integer value (result of some expression), the
8304    second is a pointer to a global string, the third is a pointer to a global
8305    string which is the source file name, and the last argument is the line
8306    number.  It returns the value of the first argument.</p>
8307
8308 <h5>Semantics:</h5>
8309 <p>This intrinsic allows annotations to be put on arbitrary expressions with
8310    arbitrary strings.  This can be useful for special purpose optimizations that
8311    want to look for these annotations.  These have no other defined use, they
8312    are ignored by code generation and optimization.</p>
8313
8314 </div>
8315
8316 <!-- _______________________________________________________________________ -->
8317 <h4>
8318   <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
8319 </h4>
8320
8321 <div>
8322
8323 <h5>Syntax:</h5>
8324 <pre>
8325   declare void @llvm.trap()
8326 </pre>
8327
8328 <h5>Overview:</h5>
8329 <p>The '<tt>llvm.trap</tt>' intrinsic.</p>
8330
8331 <h5>Arguments:</h5>
8332 <p>None.</p>
8333
8334 <h5>Semantics:</h5>
8335 <p>This intrinsics is lowered to the target dependent trap instruction. If the
8336    target does not have a trap instruction, this intrinsic will be lowered to
8337    the call of the <tt>abort()</tt> function.</p>
8338
8339 </div>
8340
8341 <!-- _______________________________________________________________________ -->
8342 <h4>
8343   <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
8344 </h4>
8345
8346 <div>
8347
8348 <h5>Syntax:</h5>
8349 <pre>
8350   declare void @llvm.stackprotector(i8* &lt;guard&gt;, i8** &lt;slot&gt;)
8351 </pre>
8352
8353 <h5>Overview:</h5>
8354 <p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and
8355    stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to
8356    ensure that it is placed on the stack before local variables.</p>
8357
8358 <h5>Arguments:</h5>
8359 <p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer
8360    arguments. The first argument is the value loaded from the stack
8361    guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt>
8362    that has enough space to hold the value of the guard.</p>
8363
8364 <h5>Semantics:</h5>
8365 <p>This intrinsic causes the prologue/epilogue inserter to force the position of
8366    the <tt>AllocaInst</tt> stack slot to be before local variables on the
8367    stack. This is to ensure that if a local variable on the stack is
8368    overwritten, it will destroy the value of the guard. When the function exits,
8369    the guard on the stack is checked against the original guard. If they are
8370    different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
8371    function.</p>
8372
8373 </div>
8374
8375 <!-- _______________________________________________________________________ -->
8376 <h4>
8377   <a name="int_objectsize">'<tt>llvm.objectsize</tt>' Intrinsic</a>
8378 </h4>
8379
8380 <div>
8381
8382 <h5>Syntax:</h5>
8383 <pre>
8384   declare i32 @llvm.objectsize.i32(i8* &lt;object&gt;, i1 &lt;type&gt;)
8385   declare i64 @llvm.objectsize.i64(i8* &lt;object&gt;, i1 &lt;type&gt;)
8386 </pre>
8387
8388 <h5>Overview:</h5>
8389 <p>The <tt>llvm.objectsize</tt> intrinsic is designed to provide information to
8390    the optimizers to determine at compile time whether a) an operation (like
8391    memcpy) will overflow a buffer that corresponds to an object, or b) that a
8392    runtime check for overflow isn't necessary. An object in this context means
8393    an allocation of a specific class, structure, array, or other object.</p>
8394
8395 <h5>Arguments:</h5>
8396 <p>The <tt>llvm.objectsize</tt> intrinsic takes two arguments. The first
8397    argument is a pointer to or into the <tt>object</tt>. The second argument
8398    is a boolean 0 or 1. This argument determines whether you want the 
8399    maximum (0) or minimum (1) bytes remaining. This needs to be a literal 0 or
8400    1, variables are not allowed.</p>
8401    
8402 <h5>Semantics:</h5>
8403 <p>The <tt>llvm.objectsize</tt> intrinsic is lowered to either a constant
8404    representing the size of the object concerned, or <tt>i32/i64 -1 or 0</tt>,
8405    depending on the <tt>type</tt> argument, if the size cannot be determined at
8406    compile time.</p>
8407
8408 </div>
8409
8410 </div>
8411
8412 </div>
8413
8414 <!-- *********************************************************************** -->
8415 <hr>
8416 <address>
8417   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
8418   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
8419   <a href="http://validator.w3.org/check/referer"><img
8420   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
8421
8422   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
8423   <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
8424   Last modified: $Date$
8425 </address>
8426
8427 </body>
8428 </html>