LangRef and basic memory-representation/reading/writing for 'cmpxchg' and
[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 <var>write<sub>3</var>,
1529       then <var>R<sub>byte</sub></var> does not see
1530       <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. Its operand must have the same type as the result of any
3371    '<tt>landingpad</tt>' instruction in the same function.</p>
3372
3373 <h5>Semantics:</h5>
3374 <p>The '<tt>resume</tt>' instruction resumes propagation of an existing
3375    (in-flight) exception.</p>
3376
3377 <h5>Example:</h5>
3378 <pre>
3379  resume { i8*, i32 } %exn
3380 </pre>
3381
3382 </div>
3383
3384 <!-- _______________________________________________________________________ -->
3385
3386 <h4>
3387   <a name="i_unreachable">'<tt>unreachable</tt>' Instruction</a>
3388 </h4>
3389
3390 <div>
3391
3392 <h5>Syntax:</h5>
3393 <pre>
3394   unreachable
3395 </pre>
3396
3397 <h5>Overview:</h5>
3398 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.  This
3399    instruction is used to inform the optimizer that a particular portion of the
3400    code is not reachable.  This can be used to indicate that the code after a
3401    no-return function cannot be reached, and other facts.</p>
3402
3403 <h5>Semantics:</h5>
3404 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p>
3405
3406 </div>
3407
3408 </div>
3409
3410 <!-- ======================================================================= -->
3411 <h3>
3412   <a name="binaryops">Binary Operations</a>
3413 </h3>
3414
3415 <div>
3416
3417 <p>Binary operators are used to do most of the computation in a program.  They
3418    require two operands of the same type, execute an operation on them, and
3419    produce a single value.  The operands might represent multiple data, as is
3420    the case with the <a href="#t_vector">vector</a> data type.  The result value
3421    has the same type as its operands.</p>
3422
3423 <p>There are several different binary operators:</p>
3424
3425 <!-- _______________________________________________________________________ -->
3426 <h4>
3427   <a name="i_add">'<tt>add</tt>' Instruction</a>
3428 </h4>
3429
3430 <div>
3431
3432 <h5>Syntax:</h5>
3433 <pre>
3434   &lt;result&gt; = add &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3435   &lt;result&gt; = add nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3436   &lt;result&gt; = add nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3437   &lt;result&gt; = add nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3438 </pre>
3439
3440 <h5>Overview:</h5>
3441 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p>
3442
3443 <h5>Arguments:</h5>
3444 <p>The two arguments to the '<tt>add</tt>' instruction must
3445    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3446    integer values. Both arguments must have identical types.</p>
3447
3448 <h5>Semantics:</h5>
3449 <p>The value produced is the integer sum of the two operands.</p>
3450
3451 <p>If the sum has unsigned overflow, the result returned is the mathematical
3452    result modulo 2<sup>n</sup>, where n is the bit width of the result.</p>
3453
3454 <p>Because LLVM integers use a two's complement representation, this instruction
3455    is appropriate for both signed and unsigned integers.</p>
3456
3457 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3458    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3459    <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt>
3460    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3461    respectively, occurs.</p>
3462
3463 <h5>Example:</h5>
3464 <pre>
3465   &lt;result&gt; = add i32 4, %var          <i>; yields {i32}:result = 4 + %var</i>
3466 </pre>
3467
3468 </div>
3469
3470 <!-- _______________________________________________________________________ -->
3471 <h4>
3472   <a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
3473 </h4>
3474
3475 <div>
3476
3477 <h5>Syntax:</h5>
3478 <pre>
3479   &lt;result&gt; = fadd &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3480 </pre>
3481
3482 <h5>Overview:</h5>
3483 <p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p>
3484
3485 <h5>Arguments:</h5>
3486 <p>The two arguments to the '<tt>fadd</tt>' instruction must be
3487    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3488    floating point values. Both arguments must have identical types.</p>
3489
3490 <h5>Semantics:</h5>
3491 <p>The value produced is the floating point sum of the two operands.</p>
3492
3493 <h5>Example:</h5>
3494 <pre>
3495   &lt;result&gt; = fadd float 4.0, %var          <i>; yields {float}:result = 4.0 + %var</i>
3496 </pre>
3497
3498 </div>
3499
3500 <!-- _______________________________________________________________________ -->
3501 <h4>
3502    <a name="i_sub">'<tt>sub</tt>' Instruction</a>
3503 </h4>
3504
3505 <div>
3506
3507 <h5>Syntax:</h5>
3508 <pre>
3509   &lt;result&gt; = sub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3510   &lt;result&gt; = sub nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3511   &lt;result&gt; = sub nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3512   &lt;result&gt; = sub nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3513 </pre>
3514
3515 <h5>Overview:</h5>
3516 <p>The '<tt>sub</tt>' instruction returns the difference of its two
3517    operands.</p>
3518
3519 <p>Note that the '<tt>sub</tt>' instruction is used to represent the
3520    '<tt>neg</tt>' instruction present in most other intermediate
3521    representations.</p>
3522
3523 <h5>Arguments:</h5>
3524 <p>The two arguments to the '<tt>sub</tt>' instruction must
3525    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3526    integer values.  Both arguments must have identical types.</p>
3527
3528 <h5>Semantics:</h5>
3529 <p>The value produced is the integer difference of the two operands.</p>
3530
3531 <p>If the difference has unsigned overflow, the result returned is the
3532    mathematical result modulo 2<sup>n</sup>, where n is the bit width of the
3533    result.</p>
3534
3535 <p>Because LLVM integers use a two's complement representation, this instruction
3536    is appropriate for both signed and unsigned integers.</p>
3537
3538 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3539    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3540    <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt>
3541    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3542    respectively, occurs.</p>
3543
3544 <h5>Example:</h5>
3545 <pre>
3546   &lt;result&gt; = sub i32 4, %var          <i>; yields {i32}:result = 4 - %var</i>
3547   &lt;result&gt; = sub i32 0, %val          <i>; yields {i32}:result = -%var</i>
3548 </pre>
3549
3550 </div>
3551
3552 <!-- _______________________________________________________________________ -->
3553 <h4>
3554    <a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
3555 </h4>
3556
3557 <div>
3558
3559 <h5>Syntax:</h5>
3560 <pre>
3561   &lt;result&gt; = fsub &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3562 </pre>
3563
3564 <h5>Overview:</h5>
3565 <p>The '<tt>fsub</tt>' instruction returns the difference of its two
3566    operands.</p>
3567
3568 <p>Note that the '<tt>fsub</tt>' instruction is used to represent the
3569    '<tt>fneg</tt>' instruction present in most other intermediate
3570    representations.</p>
3571
3572 <h5>Arguments:</h5>
3573 <p>The two arguments to the '<tt>fsub</tt>' instruction must be
3574    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3575    floating point values.  Both arguments must have identical types.</p>
3576
3577 <h5>Semantics:</h5>
3578 <p>The value produced is the floating point difference of the two operands.</p>
3579
3580 <h5>Example:</h5>
3581 <pre>
3582   &lt;result&gt; = fsub float 4.0, %var           <i>; yields {float}:result = 4.0 - %var</i>
3583   &lt;result&gt; = fsub float -0.0, %val          <i>; yields {float}:result = -%var</i>
3584 </pre>
3585
3586 </div>
3587
3588 <!-- _______________________________________________________________________ -->
3589 <h4>
3590   <a name="i_mul">'<tt>mul</tt>' Instruction</a>
3591 </h4>
3592
3593 <div>
3594
3595 <h5>Syntax:</h5>
3596 <pre>
3597   &lt;result&gt; = mul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;          <i>; yields {ty}:result</i>
3598   &lt;result&gt; = mul nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3599   &lt;result&gt; = mul nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;      <i>; yields {ty}:result</i>
3600   &lt;result&gt; = mul nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;  <i>; yields {ty}:result</i>
3601 </pre>
3602
3603 <h5>Overview:</h5>
3604 <p>The '<tt>mul</tt>' instruction returns the product of its two operands.</p>
3605
3606 <h5>Arguments:</h5>
3607 <p>The two arguments to the '<tt>mul</tt>' instruction must
3608    be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3609    integer values.  Both arguments must have identical types.</p>
3610
3611 <h5>Semantics:</h5>
3612 <p>The value produced is the integer product of the two operands.</p>
3613
3614 <p>If the result of the multiplication has unsigned overflow, the result
3615    returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit
3616    width of the result.</p>
3617
3618 <p>Because LLVM integers use a two's complement representation, and the result
3619    is the same width as the operands, this instruction returns the correct
3620    result for both signed and unsigned integers.  If a full product
3621    (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should
3622    be sign-extended or zero-extended as appropriate to the width of the full
3623    product.</p>
3624
3625 <p><tt>nuw</tt> and <tt>nsw</tt> stand for &quot;No Unsigned Wrap&quot;
3626    and &quot;No Signed Wrap&quot;, respectively. If the <tt>nuw</tt> and/or
3627    <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt>
3628    is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow,
3629    respectively, occurs.</p>
3630
3631 <h5>Example:</h5>
3632 <pre>
3633   &lt;result&gt; = mul i32 4, %var          <i>; yields {i32}:result = 4 * %var</i>
3634 </pre>
3635
3636 </div>
3637
3638 <!-- _______________________________________________________________________ -->
3639 <h4>
3640   <a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
3641 </h4>
3642
3643 <div>
3644
3645 <h5>Syntax:</h5>
3646 <pre>
3647   &lt;result&gt; = fmul &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3648 </pre>
3649
3650 <h5>Overview:</h5>
3651 <p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p>
3652
3653 <h5>Arguments:</h5>
3654 <p>The two arguments to the '<tt>fmul</tt>' instruction must be
3655    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3656    floating point values.  Both arguments must have identical types.</p>
3657
3658 <h5>Semantics:</h5>
3659 <p>The value produced is the floating point product of the two operands.</p>
3660
3661 <h5>Example:</h5>
3662 <pre>
3663   &lt;result&gt; = fmul float 4.0, %var          <i>; yields {float}:result = 4.0 * %var</i>
3664 </pre>
3665
3666 </div>
3667
3668 <!-- _______________________________________________________________________ -->
3669 <h4>
3670   <a name="i_udiv">'<tt>udiv</tt>' Instruction</a>
3671 </h4>
3672
3673 <div>
3674
3675 <h5>Syntax:</h5>
3676 <pre>
3677   &lt;result&gt; = udiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3678   &lt;result&gt; = udiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3679 </pre>
3680
3681 <h5>Overview:</h5>
3682 <p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p>
3683
3684 <h5>Arguments:</h5>
3685 <p>The two arguments to the '<tt>udiv</tt>' instruction must be
3686    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3687    values.  Both arguments must have identical types.</p>
3688
3689 <h5>Semantics:</h5>
3690 <p>The value produced is the unsigned integer quotient of the two operands.</p>
3691
3692 <p>Note that unsigned integer division and signed integer division are distinct
3693    operations; for signed integer division, use '<tt>sdiv</tt>'.</p>
3694
3695 <p>Division by zero leads to undefined behavior.</p>
3696
3697 <p>If the <tt>exact</tt> keyword is present, the result value of the
3698    <tt>udiv</tt> is a <a href="#trapvalues">trap value</a> if %op1 is not a
3699   multiple of %op2 (as such, "((a udiv exact b) mul b) == a").</p>
3700
3701
3702 <h5>Example:</h5>
3703 <pre>
3704   &lt;result&gt; = udiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3705 </pre>
3706
3707 </div>
3708
3709 <!-- _______________________________________________________________________ -->
3710 <h4>
3711   <a name="i_sdiv">'<tt>sdiv</tt>' Instruction</a>
3712 </h4>
3713
3714 <div>
3715
3716 <h5>Syntax:</h5>
3717 <pre>
3718   &lt;result&gt; = sdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3719   &lt;result&gt; = sdiv exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3720 </pre>
3721
3722 <h5>Overview:</h5>
3723 <p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p>
3724
3725 <h5>Arguments:</h5>
3726 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be
3727    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3728    values.  Both arguments must have identical types.</p>
3729
3730 <h5>Semantics:</h5>
3731 <p>The value produced is the signed integer quotient of the two operands rounded
3732    towards zero.</p>
3733
3734 <p>Note that signed integer division and unsigned integer division are distinct
3735    operations; for unsigned integer division, use '<tt>udiv</tt>'.</p>
3736
3737 <p>Division by zero leads to undefined behavior. Overflow also leads to
3738    undefined behavior; this is a rare case, but can occur, for example, by doing
3739    a 32-bit division of -2147483648 by -1.</p>
3740
3741 <p>If the <tt>exact</tt> keyword is present, the result value of the
3742    <tt>sdiv</tt> is a <a href="#trapvalues">trap value</a> if the result would
3743    be rounded.</p>
3744
3745 <h5>Example:</h5>
3746 <pre>
3747   &lt;result&gt; = sdiv i32 4, %var          <i>; yields {i32}:result = 4 / %var</i>
3748 </pre>
3749
3750 </div>
3751
3752 <!-- _______________________________________________________________________ -->
3753 <h4>
3754   <a name="i_fdiv">'<tt>fdiv</tt>' Instruction</a>
3755 </h4>
3756
3757 <div>
3758
3759 <h5>Syntax:</h5>
3760 <pre>
3761   &lt;result&gt; = fdiv &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3762 </pre>
3763
3764 <h5>Overview:</h5>
3765 <p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p>
3766
3767 <h5>Arguments:</h5>
3768 <p>The two arguments to the '<tt>fdiv</tt>' instruction must be
3769    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3770    floating point values.  Both arguments must have identical types.</p>
3771
3772 <h5>Semantics:</h5>
3773 <p>The value produced is the floating point quotient of the two operands.</p>
3774
3775 <h5>Example:</h5>
3776 <pre>
3777   &lt;result&gt; = fdiv float 4.0, %var          <i>; yields {float}:result = 4.0 / %var</i>
3778 </pre>
3779
3780 </div>
3781
3782 <!-- _______________________________________________________________________ -->
3783 <h4>
3784   <a name="i_urem">'<tt>urem</tt>' Instruction</a>
3785 </h4>
3786
3787 <div>
3788
3789 <h5>Syntax:</h5>
3790 <pre>
3791   &lt;result&gt; = urem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3792 </pre>
3793
3794 <h5>Overview:</h5>
3795 <p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned
3796    division of its two arguments.</p>
3797
3798 <h5>Arguments:</h5>
3799 <p>The two arguments to the '<tt>urem</tt>' instruction must be
3800    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3801    values.  Both arguments must have identical types.</p>
3802
3803 <h5>Semantics:</h5>
3804 <p>This instruction returns the unsigned integer <i>remainder</i> of a division.
3805    This instruction always performs an unsigned division to get the
3806    remainder.</p>
3807
3808 <p>Note that unsigned integer remainder and signed integer remainder are
3809    distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p>
3810
3811 <p>Taking the remainder of a division by zero leads to undefined behavior.</p>
3812
3813 <h5>Example:</h5>
3814 <pre>
3815   &lt;result&gt; = urem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3816 </pre>
3817
3818 </div>
3819
3820 <!-- _______________________________________________________________________ -->
3821 <h4>
3822   <a name="i_srem">'<tt>srem</tt>' Instruction</a>
3823 </h4>
3824
3825 <div>
3826
3827 <h5>Syntax:</h5>
3828 <pre>
3829   &lt;result&gt; = srem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3830 </pre>
3831
3832 <h5>Overview:</h5>
3833 <p>The '<tt>srem</tt>' instruction returns the remainder from the signed
3834    division of its two operands. This instruction can also take
3835    <a href="#t_vector">vector</a> versions of the values in which case the
3836    elements must be integers.</p>
3837
3838 <h5>Arguments:</h5>
3839 <p>The two arguments to the '<tt>srem</tt>' instruction must be
3840    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3841    values.  Both arguments must have identical types.</p>
3842
3843 <h5>Semantics:</h5>
3844 <p>This instruction returns the <i>remainder</i> of a division (where the result
3845    is either zero or has the same sign as the dividend, <tt>op1</tt>), not the
3846    <i>modulo</i> operator (where the result is either zero or has the same sign
3847    as the divisor, <tt>op2</tt>) of a value.
3848    For more information about the difference,
3849    see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
3850    Math Forum</a>. For a table of how this is implemented in various languages,
3851    please see <a href="http://en.wikipedia.org/wiki/Modulo_operation">
3852    Wikipedia: modulo operation</a>.</p>
3853
3854 <p>Note that signed integer remainder and unsigned integer remainder are
3855    distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p>
3856
3857 <p>Taking the remainder of a division by zero leads to undefined behavior.
3858    Overflow also leads to undefined behavior; this is a rare case, but can
3859    occur, for example, by taking the remainder of a 32-bit division of
3860    -2147483648 by -1.  (The remainder doesn't actually overflow, but this rule
3861    lets srem be implemented using instructions that return both the result of
3862    the division and the remainder.)</p>
3863
3864 <h5>Example:</h5>
3865 <pre>
3866   &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
3867 </pre>
3868
3869 </div>
3870
3871 <!-- _______________________________________________________________________ -->
3872 <h4>
3873   <a name="i_frem">'<tt>frem</tt>' Instruction</a>
3874 </h4>
3875
3876 <div>
3877
3878 <h5>Syntax:</h5>
3879 <pre>
3880   &lt;result&gt; = frem &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3881 </pre>
3882
3883 <h5>Overview:</h5>
3884 <p>The '<tt>frem</tt>' instruction returns the remainder from the division of
3885    its two operands.</p>
3886
3887 <h5>Arguments:</h5>
3888 <p>The two arguments to the '<tt>frem</tt>' instruction must be
3889    <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of
3890    floating point values.  Both arguments must have identical types.</p>
3891
3892 <h5>Semantics:</h5>
3893 <p>This instruction returns the <i>remainder</i> of a division.  The remainder
3894    has the same sign as the dividend.</p>
3895
3896 <h5>Example:</h5>
3897 <pre>
3898   &lt;result&gt; = frem float 4.0, %var          <i>; yields {float}:result = 4.0 % %var</i>
3899 </pre>
3900
3901 </div>
3902
3903 </div>
3904
3905 <!-- ======================================================================= -->
3906 <h3>
3907   <a name="bitwiseops">Bitwise Binary Operations</a>
3908 </h3>
3909
3910 <div>
3911
3912 <p>Bitwise binary operators are used to do various forms of bit-twiddling in a
3913    program.  They are generally very efficient instructions and can commonly be
3914    strength reduced from other instructions.  They require two operands of the
3915    same type, execute an operation on them, and produce a single value.  The
3916    resulting value is the same type as its operands.</p>
3917
3918 <!-- _______________________________________________________________________ -->
3919 <h4>
3920   <a name="i_shl">'<tt>shl</tt>' Instruction</a>
3921 </h4>
3922
3923 <div>
3924
3925 <h5>Syntax:</h5>
3926 <pre>
3927   &lt;result&gt; = shl &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;           <i>; yields {ty}:result</i>
3928   &lt;result&gt; = shl nuw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
3929   &lt;result&gt; = shl nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;       <i>; yields {ty}:result</i>
3930   &lt;result&gt; = shl nuw nsw &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3931 </pre>
3932
3933 <h5>Overview:</h5>
3934 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left
3935    a specified number of bits.</p>
3936
3937 <h5>Arguments:</h5>
3938 <p>Both arguments to the '<tt>shl</tt>' instruction must be the
3939     same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of
3940     integer type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
3941
3942 <h5>Semantics:</h5>
3943 <p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod
3944    2<sup>n</sup>, where <tt>n</tt> is the width of the result.  If <tt>op2</tt>
3945    is (statically or dynamically) negative or equal to or larger than the number
3946    of bits in <tt>op1</tt>, the result is undefined.  If the arguments are
3947    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3948    shift amount in <tt>op2</tt>.</p>
3949
3950 <p>If the <tt>nuw</tt> keyword is present, then the shift produces a 
3951    <a href="#trapvalues">trap value</a> if it shifts out any non-zero bits.  If
3952    the <tt>nsw</tt> keyword is present, then the shift produces a
3953    <a href="#trapvalues">trap value</a> if it shifts out any bits that disagree
3954    with the resultant sign bit.  As such, NUW/NSW have the same semantics as
3955    they would if the shift were expressed as a mul instruction with the same
3956    nsw/nuw bits in (mul %op1, (shl 1, %op2)).</p>
3957
3958 <h5>Example:</h5>
3959 <pre>
3960   &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
3961   &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
3962   &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
3963   &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
3964   &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>
3965 </pre>
3966
3967 </div>
3968
3969 <!-- _______________________________________________________________________ -->
3970 <h4>
3971   <a name="i_lshr">'<tt>lshr</tt>' Instruction</a>
3972 </h4>
3973
3974 <div>
3975
3976 <h5>Syntax:</h5>
3977 <pre>
3978   &lt;result&gt; = lshr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
3979   &lt;result&gt; = lshr exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
3980 </pre>
3981
3982 <h5>Overview:</h5>
3983 <p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
3984    operand shifted to the right a specified number of bits with zero fill.</p>
3985
3986 <h5>Arguments:</h5>
3987 <p>Both arguments to the '<tt>lshr</tt>' instruction must be the same
3988    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
3989    type. '<tt>op2</tt>' is treated as an unsigned value.</p>
3990
3991 <h5>Semantics:</h5>
3992 <p>This instruction always performs a logical shift right operation. The most
3993    significant bits of the result will be filled with zero bits after the shift.
3994    If <tt>op2</tt> is (statically or dynamically) equal to or larger than the
3995    number of bits in <tt>op1</tt>, the result is undefined. If the arguments are
3996    vectors, each vector element of <tt>op1</tt> is shifted by the corresponding
3997    shift amount in <tt>op2</tt>.</p>
3998
3999 <p>If the <tt>exact</tt> keyword is present, the result value of the
4000    <tt>lshr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
4001    shifted out are non-zero.</p>
4002
4003
4004 <h5>Example:</h5>
4005 <pre>
4006   &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
4007   &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
4008   &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
4009   &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
4010   &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
4011   &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>
4012 </pre>
4013
4014 </div>
4015
4016 <!-- _______________________________________________________________________ -->
4017 <h4>
4018   <a name="i_ashr">'<tt>ashr</tt>' Instruction</a>
4019 </h4>
4020
4021 <div>
4022
4023 <h5>Syntax:</h5>
4024 <pre>
4025   &lt;result&gt; = ashr &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;         <i>; yields {ty}:result</i>
4026   &lt;result&gt; = ashr exact &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4027 </pre>
4028
4029 <h5>Overview:</h5>
4030 <p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
4031    operand shifted to the right a specified number of bits with sign
4032    extension.</p>
4033
4034 <h5>Arguments:</h5>
4035 <p>Both arguments to the '<tt>ashr</tt>' instruction must be the same
4036    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4037    type.  '<tt>op2</tt>' is treated as an unsigned value.</p>
4038
4039 <h5>Semantics:</h5>
4040 <p>This instruction always performs an arithmetic shift right operation, The
4041    most significant bits of the result will be filled with the sign bit
4042    of <tt>op1</tt>.  If <tt>op2</tt> is (statically or dynamically) equal to or
4043    larger than the number of bits in <tt>op1</tt>, the result is undefined. If
4044    the arguments are vectors, each vector element of <tt>op1</tt> is shifted by
4045    the corresponding shift amount in <tt>op2</tt>.</p>
4046
4047 <p>If the <tt>exact</tt> keyword is present, the result value of the
4048    <tt>ashr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits
4049    shifted out are non-zero.</p>
4050
4051 <h5>Example:</h5>
4052 <pre>
4053   &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
4054   &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
4055   &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
4056   &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
4057   &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
4058   &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>
4059 </pre>
4060
4061 </div>
4062
4063 <!-- _______________________________________________________________________ -->
4064 <h4>
4065   <a name="i_and">'<tt>and</tt>' Instruction</a>
4066 </h4>
4067
4068 <div>
4069
4070 <h5>Syntax:</h5>
4071 <pre>
4072   &lt;result&gt; = and &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4073 </pre>
4074
4075 <h5>Overview:</h5>
4076 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two
4077    operands.</p>
4078
4079 <h5>Arguments:</h5>
4080 <p>The two arguments to the '<tt>and</tt>' instruction must be
4081    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4082    values.  Both arguments must have identical types.</p>
4083
4084 <h5>Semantics:</h5>
4085 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
4086
4087 <table border="1" cellspacing="0" cellpadding="4">
4088   <tbody>
4089     <tr>
4090       <td>In0</td>
4091       <td>In1</td>
4092       <td>Out</td>
4093     </tr>
4094     <tr>
4095       <td>0</td>
4096       <td>0</td>
4097       <td>0</td>
4098     </tr>
4099     <tr>
4100       <td>0</td>
4101       <td>1</td>
4102       <td>0</td>
4103     </tr>
4104     <tr>
4105       <td>1</td>
4106       <td>0</td>
4107       <td>0</td>
4108     </tr>
4109     <tr>
4110       <td>1</td>
4111       <td>1</td>
4112       <td>1</td>
4113     </tr>
4114   </tbody>
4115 </table>
4116
4117 <h5>Example:</h5>
4118 <pre>
4119   &lt;result&gt; = and i32 4, %var         <i>; yields {i32}:result = 4 &amp; %var</i>
4120   &lt;result&gt; = and i32 15, 40          <i>; yields {i32}:result = 8</i>
4121   &lt;result&gt; = and i32 4, 8            <i>; yields {i32}:result = 0</i>
4122 </pre>
4123 </div>
4124 <!-- _______________________________________________________________________ -->
4125 <h4>
4126   <a name="i_or">'<tt>or</tt>' Instruction</a>
4127 </h4>
4128
4129 <div>
4130
4131 <h5>Syntax:</h5>
4132 <pre>
4133   &lt;result&gt; = or &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4134 </pre>
4135
4136 <h5>Overview:</h5>
4137 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its
4138    two operands.</p>
4139
4140 <h5>Arguments:</h5>
4141 <p>The two arguments to the '<tt>or</tt>' instruction must be
4142    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4143    values.  Both arguments must have identical types.</p>
4144
4145 <h5>Semantics:</h5>
4146 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
4147
4148 <table border="1" cellspacing="0" cellpadding="4">
4149   <tbody>
4150     <tr>
4151       <td>In0</td>
4152       <td>In1</td>
4153       <td>Out</td>
4154     </tr>
4155     <tr>
4156       <td>0</td>
4157       <td>0</td>
4158       <td>0</td>
4159     </tr>
4160     <tr>
4161       <td>0</td>
4162       <td>1</td>
4163       <td>1</td>
4164     </tr>
4165     <tr>
4166       <td>1</td>
4167       <td>0</td>
4168       <td>1</td>
4169     </tr>
4170     <tr>
4171       <td>1</td>
4172       <td>1</td>
4173       <td>1</td>
4174     </tr>
4175   </tbody>
4176 </table>
4177
4178 <h5>Example:</h5>
4179 <pre>
4180   &lt;result&gt; = or i32 4, %var         <i>; yields {i32}:result = 4 | %var</i>
4181   &lt;result&gt; = or i32 15, 40          <i>; yields {i32}:result = 47</i>
4182   &lt;result&gt; = or i32 4, 8            <i>; yields {i32}:result = 12</i>
4183 </pre>
4184
4185 </div>
4186
4187 <!-- _______________________________________________________________________ -->
4188 <h4>
4189   <a name="i_xor">'<tt>xor</tt>' Instruction</a>
4190 </h4>
4191
4192 <div>
4193
4194 <h5>Syntax:</h5>
4195 <pre>
4196   &lt;result&gt; = xor &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
4197 </pre>
4198
4199 <h5>Overview:</h5>
4200 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of
4201    its two operands.  The <tt>xor</tt> is used to implement the "one's
4202    complement" operation, which is the "~" operator in C.</p>
4203
4204 <h5>Arguments:</h5>
4205 <p>The two arguments to the '<tt>xor</tt>' instruction must be
4206    <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer
4207    values.  Both arguments must have identical types.</p>
4208
4209 <h5>Semantics:</h5>
4210 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
4211
4212 <table border="1" cellspacing="0" cellpadding="4">
4213   <tbody>
4214     <tr>
4215       <td>In0</td>
4216       <td>In1</td>
4217       <td>Out</td>
4218     </tr>
4219     <tr>
4220       <td>0</td>
4221       <td>0</td>
4222       <td>0</td>
4223     </tr>
4224     <tr>
4225       <td>0</td>
4226       <td>1</td>
4227       <td>1</td>
4228     </tr>
4229     <tr>
4230       <td>1</td>
4231       <td>0</td>
4232       <td>1</td>
4233     </tr>
4234     <tr>
4235       <td>1</td>
4236       <td>1</td>
4237       <td>0</td>
4238     </tr>
4239   </tbody>
4240 </table>
4241
4242 <h5>Example:</h5>
4243 <pre>
4244   &lt;result&gt; = xor i32 4, %var         <i>; yields {i32}:result = 4 ^ %var</i>
4245   &lt;result&gt; = xor i32 15, 40          <i>; yields {i32}:result = 39</i>
4246   &lt;result&gt; = xor i32 4, 8            <i>; yields {i32}:result = 12</i>
4247   &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
4248 </pre>
4249
4250 </div>
4251
4252 </div>
4253
4254 <!-- ======================================================================= -->
4255 <h3>
4256   <a name="vectorops">Vector Operations</a>
4257 </h3>
4258
4259 <div>
4260
4261 <p>LLVM supports several instructions to represent vector operations in a
4262    target-independent manner.  These instructions cover the element-access and
4263    vector-specific operations needed to process vectors effectively.  While LLVM
4264    does directly support these vector operations, many sophisticated algorithms
4265    will want to use target-specific intrinsics to take full advantage of a
4266    specific target.</p>
4267
4268 <!-- _______________________________________________________________________ -->
4269 <h4>
4270    <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
4271 </h4>
4272
4273 <div>
4274
4275 <h5>Syntax:</h5>
4276 <pre>
4277   &lt;result&gt; = extractelement &lt;n x &lt;ty&gt;&gt; &lt;val&gt;, i32 &lt;idx&gt;    <i>; yields &lt;ty&gt;</i>
4278 </pre>
4279
4280 <h5>Overview:</h5>
4281 <p>The '<tt>extractelement</tt>' instruction extracts a single scalar element
4282    from a vector at a specified index.</p>
4283
4284
4285 <h5>Arguments:</h5>
4286 <p>The first operand of an '<tt>extractelement</tt>' instruction is a value
4287    of <a href="#t_vector">vector</a> type.  The second operand is an index
4288    indicating the position from which to extract the element.  The index may be
4289    a variable.</p>
4290
4291 <h5>Semantics:</h5>
4292 <p>The result is a scalar of the same type as the element type of
4293    <tt>val</tt>.  Its value is the value at position <tt>idx</tt> of
4294    <tt>val</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
4295    results are undefined.</p>
4296
4297 <h5>Example:</h5>
4298 <pre>
4299   &lt;result&gt; = extractelement &lt;4 x i32&gt; %vec, i32 0    <i>; yields i32</i>
4300 </pre>
4301
4302 </div>
4303
4304 <!-- _______________________________________________________________________ -->
4305 <h4>
4306    <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
4307 </h4>
4308
4309 <div>
4310
4311 <h5>Syntax:</h5>
4312 <pre>
4313   &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>
4314 </pre>
4315
4316 <h5>Overview:</h5>
4317 <p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a
4318    vector at a specified index.</p>
4319
4320 <h5>Arguments:</h5>
4321 <p>The first operand of an '<tt>insertelement</tt>' instruction is a value
4322    of <a href="#t_vector">vector</a> type.  The second operand is a scalar value
4323    whose type must equal the element type of the first operand.  The third
4324    operand is an index indicating the position at which to insert the value.
4325    The index may be a variable.</p>
4326
4327 <h5>Semantics:</h5>
4328 <p>The result is a vector of the same type as <tt>val</tt>.  Its element values
4329    are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the
4330    value <tt>elt</tt>.  If <tt>idx</tt> exceeds the length of <tt>val</tt>, the
4331    results are undefined.</p>
4332
4333 <h5>Example:</h5>
4334 <pre>
4335   &lt;result&gt; = insertelement &lt;4 x i32&gt; %vec, i32 1, i32 0    <i>; yields &lt;4 x i32&gt;</i>
4336 </pre>
4337
4338 </div>
4339
4340 <!-- _______________________________________________________________________ -->
4341 <h4>
4342    <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
4343 </h4>
4344
4345 <div>
4346
4347 <h5>Syntax:</h5>
4348 <pre>
4349   &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>
4350 </pre>
4351
4352 <h5>Overview:</h5>
4353 <p>The '<tt>shufflevector</tt>' instruction constructs a permutation of elements
4354    from two input vectors, returning a vector with the same element type as the
4355    input and length that is the same as the shuffle mask.</p>
4356
4357 <h5>Arguments:</h5>
4358 <p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors
4359    with types that match each other. The third argument is a shuffle mask whose
4360    element type is always 'i32'.  The result of the instruction is a vector
4361    whose length is the same as the shuffle mask and whose element type is the
4362    same as the element type of the first two operands.</p>
4363
4364 <p>The shuffle mask operand is required to be a constant vector with either
4365    constant integer or undef values.</p>
4366
4367 <h5>Semantics:</h5>
4368 <p>The elements of the two input vectors are numbered from left to right across
4369    both of the vectors.  The shuffle mask operand specifies, for each element of
4370    the result vector, which element of the two input vectors the result element
4371    gets.  The element selector may be undef (meaning "don't care") and the
4372    second operand may be undef if performing a shuffle from only one vector.</p>
4373
4374 <h5>Example:</h5>
4375 <pre>
4376   &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; %v2,
4377                           &lt;4 x i32&gt; &lt;i32 0, i32 4, i32 1, i32 5&gt;  <i>; yields &lt;4 x i32&gt;</i>
4378   &lt;result&gt; = shufflevector &lt;4 x i32&gt; %v1, &lt;4 x i32&gt; undef,
4379                           &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.
4380   &lt;result&gt; = shufflevector &lt;8 x i32&gt; %v1, &lt;8 x i32&gt; undef,
4381                           &lt;4 x i32&gt; &lt;i32 0, i32 1, i32 2, i32 3&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; %v2,
4383                           &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>
4384 </pre>
4385
4386 </div>
4387
4388 </div>
4389
4390 <!-- ======================================================================= -->
4391 <h3>
4392   <a name="aggregateops">Aggregate Operations</a>
4393 </h3>
4394
4395 <div>
4396
4397 <p>LLVM supports several instructions for working with
4398   <a href="#t_aggregate">aggregate</a> values.</p>
4399
4400 <!-- _______________________________________________________________________ -->
4401 <h4>
4402    <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
4403 </h4>
4404
4405 <div>
4406
4407 <h5>Syntax:</h5>
4408 <pre>
4409   &lt;result&gt; = extractvalue &lt;aggregate type&gt; &lt;val&gt;, &lt;idx&gt;{, &lt;idx&gt;}*
4410 </pre>
4411
4412 <h5>Overview:</h5>
4413 <p>The '<tt>extractvalue</tt>' instruction extracts the value of a member field
4414    from an <a href="#t_aggregate">aggregate</a> value.</p>
4415
4416 <h5>Arguments:</h5>
4417 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
4418    of <a href="#t_struct">struct</a> or
4419    <a href="#t_array">array</a> type.  The operands are constant indices to
4420    specify which value to extract in a similar manner as indices in a
4421    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
4422    <p>The major differences to <tt>getelementptr</tt> indexing are:</p>
4423      <ul>
4424        <li>Since the value being indexed is not a pointer, the first index is
4425            omitted and assumed to be zero.</li>
4426        <li>At least one index must be specified.</li>
4427        <li>Not only struct indices but also array indices must be in
4428            bounds.</li>
4429      </ul>
4430
4431 <h5>Semantics:</h5>
4432 <p>The result is the value at the position in the aggregate specified by the
4433    index operands.</p>
4434
4435 <h5>Example:</h5>
4436 <pre>
4437   &lt;result&gt; = extractvalue {i32, float} %agg, 0    <i>; yields i32</i>
4438 </pre>
4439
4440 </div>
4441
4442 <!-- _______________________________________________________________________ -->
4443 <h4>
4444    <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
4445 </h4>
4446
4447 <div>
4448
4449 <h5>Syntax:</h5>
4450 <pre>
4451   &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>
4452 </pre>
4453
4454 <h5>Overview:</h5>
4455 <p>The '<tt>insertvalue</tt>' instruction inserts a value into a member field
4456    in an <a href="#t_aggregate">aggregate</a> value.</p>
4457
4458 <h5>Arguments:</h5>
4459 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
4460    of <a href="#t_struct">struct</a> or
4461    <a href="#t_array">array</a> type.  The second operand is a first-class
4462    value to insert.  The following operands are constant indices indicating
4463    the position at which to insert the value in a similar manner as indices in a
4464    '<tt><a href="#i_extractvalue">extractvalue</a></tt>' instruction.  The
4465    value to insert must have the same type as the value identified by the
4466    indices.</p>
4467
4468 <h5>Semantics:</h5>
4469 <p>The result is an aggregate of the same type as <tt>val</tt>.  Its value is
4470    that of <tt>val</tt> except that the value at the position specified by the
4471    indices is that of <tt>elt</tt>.</p>
4472
4473 <h5>Example:</h5>
4474 <pre>
4475   %agg1 = insertvalue {i32, float} undef, i32 1, 0              <i>; yields {i32 1, float undef}</i>
4476   %agg2 = insertvalue {i32, float} %agg1, float %val, 1         <i>; yields {i32 1, float %val}</i>
4477   %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0    <i>; yields {i32 1, float %val}</i>
4478 </pre>
4479
4480 </div>
4481
4482 </div>
4483
4484 <!-- ======================================================================= -->
4485 <h3>
4486   <a name="memoryops">Memory Access and Addressing Operations</a>
4487 </h3>
4488
4489 <div>
4490
4491 <p>A key design point of an SSA-based representation is how it represents
4492    memory.  In LLVM, no memory locations are in SSA form, which makes things
4493    very simple.  This section describes how to read, write, and allocate
4494    memory in LLVM.</p>
4495
4496 <!-- _______________________________________________________________________ -->
4497 <h4>
4498   <a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
4499 </h4>
4500
4501 <div>
4502
4503 <h5>Syntax:</h5>
4504 <pre>
4505   &lt;result&gt; = alloca &lt;type&gt;[, &lt;ty&gt; &lt;NumElements&gt;][, align &lt;alignment&gt;]     <i>; yields {type*}:result</i>
4506 </pre>
4507
4508 <h5>Overview:</h5>
4509 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
4510    currently executing function, to be automatically released when this function
4511    returns to its caller. The object is always allocated in the generic address
4512    space (address space zero).</p>
4513
4514 <h5>Arguments:</h5>
4515 <p>The '<tt>alloca</tt>' instruction
4516    allocates <tt>sizeof(&lt;type&gt;)*NumElements</tt> bytes of memory on the
4517    runtime stack, returning a pointer of the appropriate type to the program.
4518    If "NumElements" is specified, it is the number of elements allocated,
4519    otherwise "NumElements" is defaulted to be one.  If a constant alignment is
4520    specified, the value result of the allocation is guaranteed to be aligned to
4521    at least that boundary.  If not specified, or if zero, the target can choose
4522    to align the allocation on any convenient boundary compatible with the
4523    type.</p>
4524
4525 <p>'<tt>type</tt>' may be any sized type.</p>
4526
4527 <h5>Semantics:</h5>
4528 <p>Memory is allocated; a pointer is returned.  The operation is undefined if
4529    there is insufficient stack space for the allocation.  '<tt>alloca</tt>'d
4530    memory is automatically released when the function returns.  The
4531    '<tt>alloca</tt>' instruction is commonly used to represent automatic
4532    variables that must have an address available.  When the function returns
4533    (either with the <tt><a href="#i_ret">ret</a></tt>
4534    or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is
4535    reclaimed.  Allocating zero bytes is legal, but the result is undefined.</p>
4536
4537 <h5>Example:</h5>
4538 <pre>
4539   %ptr = alloca i32                             <i>; yields {i32*}:ptr</i>
4540   %ptr = alloca i32, i32 4                      <i>; yields {i32*}:ptr</i>
4541   %ptr = alloca i32, i32 4, align 1024          <i>; yields {i32*}:ptr</i>
4542   %ptr = alloca i32, align 1024                 <i>; yields {i32*}:ptr</i>
4543 </pre>
4544
4545 </div>
4546
4547 <!-- _______________________________________________________________________ -->
4548 <h4>
4549   <a name="i_load">'<tt>load</tt>' Instruction</a>
4550 </h4>
4551
4552 <div>
4553
4554 <h5>Syntax:</h5>
4555 <pre>
4556   &lt;result&gt; = load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]
4557   &lt;result&gt; = volatile load &lt;ty&gt;* &lt;pointer&gt;[, align &lt;alignment&gt;][, !nontemporal !&lt;index&gt;]
4558   !&lt;index&gt; = !{ i32 1 }
4559 </pre>
4560
4561 <h5>Overview:</h5>
4562 <p>The '<tt>load</tt>' instruction is used to read from memory.</p>
4563
4564 <h5>Arguments:</h5>
4565 <p>The argument to the '<tt>load</tt>' instruction specifies the memory address
4566    from which to load.  The pointer must point to
4567    a <a href="#t_firstclass">first class</a> type.  If the <tt>load</tt> is
4568    marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the
4569    number or order of execution of this <tt>load</tt> with other <a
4570    href="#volatile">volatile operations</a>.</p>
4571
4572 <p>The optional constant <tt>align</tt> argument specifies the alignment of the
4573    operation (that is, the alignment of the memory address). A value of 0 or an
4574    omitted <tt>align</tt> argument means that the operation has the preferential
4575    alignment for the target. It is the responsibility of the code emitter to
4576    ensure that the alignment information is correct. Overestimating the
4577    alignment results in undefined behavior. Underestimating the alignment may
4578    produce less efficient code. An alignment of 1 is always safe.</p>
4579
4580 <p>The optional <tt>!nontemporal</tt> metadata must reference a single
4581    metatadata name &lt;index&gt; corresponding to a metadata node with
4582    one <tt>i32</tt> entry of value 1.  The existence of
4583    the <tt>!nontemporal</tt> metatadata on the instruction tells the optimizer
4584    and code generator that this load is not expected to be reused in the cache.
4585    The code generator may select special instructions to save cache bandwidth,
4586    such as the <tt>MOVNT</tt> instruction on x86.</p>
4587
4588 <h5>Semantics:</h5>
4589 <p>The location of memory pointed to is loaded.  If the value being loaded is of
4590    scalar type then the number of bytes read does not exceed the minimum number
4591    of bytes needed to hold all bits of the type.  For example, loading an
4592    <tt>i24</tt> reads at most three bytes.  When loading a value of a type like
4593    <tt>i20</tt> with a size that is not an integral number of bytes, the result
4594    is undefined if the value was not originally written using a store of the
4595    same type.</p>
4596
4597 <h5>Examples:</h5>
4598 <pre>
4599   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
4600   <a href="#i_store">store</a> i32 3, i32* %ptr                          <i>; yields {void}</i>
4601   %val = load i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
4602 </pre>
4603
4604 </div>
4605
4606 <!-- _______________________________________________________________________ -->
4607 <h4>
4608   <a name="i_store">'<tt>store</tt>' Instruction</a>
4609 </h4>
4610
4611 <div>
4612
4613 <h5>Syntax:</h5>
4614 <pre>
4615   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>
4616   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>
4617 </pre>
4618
4619 <h5>Overview:</h5>
4620 <p>The '<tt>store</tt>' instruction is used to write to memory.</p>
4621
4622 <h5>Arguments:</h5>
4623 <p>There are two arguments to the '<tt>store</tt>' instruction: a value to store
4624    and an address at which to store it.  The type of the
4625    '<tt>&lt;pointer&gt;</tt>' operand must be a pointer to
4626    the <a href="#t_firstclass">first class</a> type of the
4627    '<tt>&lt;value&gt;</tt>' operand. If the <tt>store</tt> is marked as
4628    <tt>volatile</tt>, then the optimizer is not allowed to modify the number or
4629    order of execution of this <tt>store</tt> with other <a
4630    href="#volatile">volatile operations</a>.</p>
4631
4632 <p>The optional constant "align" argument specifies the alignment of the
4633    operation (that is, the alignment of the memory address). A value of 0 or an
4634    omitted "align" argument means that the operation has the preferential
4635    alignment for the target. It is the responsibility of the code emitter to
4636    ensure that the alignment information is correct. Overestimating the
4637    alignment results in an undefined behavior. Underestimating the alignment may
4638    produce less efficient code. An alignment of 1 is always safe.</p>
4639
4640 <p>The optional !nontemporal metadata must reference a single metatadata
4641    name &lt;index&gt; corresponding to a metadata node with one i32 entry of
4642    value 1.  The existence of the !nontemporal metatadata on the
4643    instruction tells the optimizer and code generator that this load is
4644    not expected to be reused in the cache.  The code generator may
4645    select special instructions to save cache bandwidth, such as the
4646    MOVNT instruction on x86.</p>
4647
4648
4649 <h5>Semantics:</h5>
4650 <p>The contents of memory are updated to contain '<tt>&lt;value&gt;</tt>' at the
4651    location specified by the '<tt>&lt;pointer&gt;</tt>' operand.  If
4652    '<tt>&lt;value&gt;</tt>' is of scalar type then the number of bytes written
4653    does not exceed the minimum number of bytes needed to hold all bits of the
4654    type.  For example, storing an <tt>i24</tt> writes at most three bytes.  When
4655    writing a value of a type like <tt>i20</tt> with a size that is not an
4656    integral number of bytes, it is unspecified what happens to the extra bits
4657    that do not belong to the type, but they will typically be overwritten.</p>
4658
4659 <h5>Example:</h5>
4660 <pre>
4661   %ptr = <a href="#i_alloca">alloca</a> i32                               <i>; yields {i32*}:ptr</i>
4662   store i32 3, i32* %ptr                          <i>; yields {void}</i>
4663   %val = <a href="#i_load">load</a> i32* %ptr                           <i>; yields {i32}:val = i32 3</i>
4664 </pre>
4665
4666 </div>
4667
4668 <!-- _______________________________________________________________________ -->
4669 <div class="doc_subsubsection"> <a name="i_fence">'<tt>fence</tt>'
4670 Instruction</a> </div>
4671
4672 <div class="doc_text">
4673
4674 <h5>Syntax:</h5>
4675 <pre>
4676   fence [singlethread] &lt;ordering&gt;                   <i>; yields {void}</i>
4677 </pre>
4678
4679 <h5>Overview:</h5>
4680 <p>The '<tt>fence</tt>' instruction is used to introduce happens-before edges
4681 between operations.</p>
4682
4683 <h5>Arguments:</h5> <p>'<code>fence</code>' instructions take an <a
4684 href="#ordering">ordering</a> argument which defines what
4685 <i>synchronizes-with</i> edges they add.  They can only be given
4686 <code>acquire</code>, <code>release</code>, <code>acq_rel</code>, and
4687 <code>seq_cst</code> orderings.</p>
4688
4689 <h5>Semantics:</h5>
4690 <p>A fence <var>A</var> which has (at least) <code>release</code> ordering
4691 semantics <i>synchronizes with</i> a fence <var>B</var> with (at least)
4692 <code>acquire</code> ordering semantics if and only if there exist atomic
4693 operations <var>X</var> and <var>Y</var>, both operating on some atomic object
4694 <var>M</var>, such that <var>A</var> is sequenced before <var>X</var>,
4695 <var>X</var> modifies <var>M</var> (either directly or through some side effect
4696 of a sequence headed by <var>X</var>), <var>Y</var> is sequenced before
4697 <var>B</var>, and <var>Y</var> observes <var>M</var>. This provides a
4698 <i>happens-before</i> dependency between <var>A</var> and <var>B</var>. Rather
4699 than an explicit <code>fence</code>, one (but not both) of the atomic operations
4700 <var>X</var> or <var>Y</var> might provide a <code>release</code> or
4701 <code>acquire</code> (resp.) ordering constraint and still
4702 <i>synchronize-with</i> the explicit <code>fence</code> and establish the
4703 <i>happens-before</i> edge.</p>
4704
4705 <p>A <code>fence</code> which has <code>seq_cst</code> ordering, in addition to
4706 having both <code>acquire</code> and <code>release</code> semantics specified
4707 above, participates in the global program order of other <code>seq_cst</code>
4708 operations and/or fences.</p>
4709
4710 <p>The optional "<a href="#singlethread"><code>singlethread</code></a>" argument
4711 specifies that the fence only synchronizes with other fences in the same
4712 thread.  (This is useful for interacting with signal handlers.)</p>
4713
4714 <p>FIXME: This instruction is a work in progress; until it is finished, use
4715    llvm.memory.barrier.
4716
4717 <h5>Example:</h5>
4718 <pre>
4719   fence acquire                          <i>; yields {void}</i>
4720   fence singlethread seq_cst             <i>; yields {void}</i>
4721 </pre>
4722
4723 </div>
4724
4725 <!-- _______________________________________________________________________ -->
4726 <div class="doc_subsubsection"> <a name="i_cmpxchg">'<tt>cmpxchg</tt>'
4727 Instruction</a> </div>
4728
4729 <div class="doc_text">
4730
4731 <h5>Syntax:</h5>
4732 <pre>
4733   [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>
4734 </pre>
4735
4736 <h5>Overview:</h5>
4737 <p>The '<tt>cmpxchg</tt>' instruction is used to atomically modify memory.
4738 It loads a value in memory and compares it to a given value. If they are
4739 equal, it stores a new value into the memory.</p>
4740
4741 <h5>Arguments:</h5>
4742 <p>There are three arguments to the '<code>cmpxchg</code>' instruction: an
4743 address to operate on, a value to compare to the value currently be at that
4744 address, and a new value to place at that address if the compared values are
4745 equal.  The type of '<var>&lt;cmp&gt;</var>' must be an integer type whose
4746 bit width is a power of two greater than or equal to eight and less than
4747 or equal to a target-specific size limit. '<var>&lt;cmp&gt;</var>' and
4748 '<var>&lt;new&gt;</var>' must have the same type, and the type of
4749 '<var>&lt;pointer&gt;</var>' must be a pointer to that type. If the
4750 <code>cmpxchg</code> is marked as <code>volatile</code>, then the
4751 optimizer is not allowed to modify the number or order of execution
4752 of this <code>cmpxchg</code> with other <a href="#volatile">volatile
4753 operations</a>.</p>
4754
4755 <!-- FIXME: Extend allowed types. -->
4756
4757 <p>The <a href="#ordering"><var>ordering</var></a> argument specifies how this
4758 <code>cmpxchg</code> synchronizes with other atomic operations.</p>
4759
4760 <p>The optional "<code>singlethread</code>" argument declares that the
4761 <code>cmpxchg</code> is only atomic with respect to code (usually signal
4762 handlers) running in the same thread as the <code>cmpxchg</code>.  Otherwise the
4763 cmpxchg is atomic with respect to all other code in the system.</p>
4764
4765 <p>The pointer passed into cmpxchg must have alignment greater than or equal to
4766 the size in memory of the operand.
4767
4768 <h5>Semantics:</h5>
4769 <p>The contents of memory at the location specified by the
4770 '<tt>&lt;pointer&gt;</tt>' operand is read and compared to
4771 '<tt>&lt;cmp&gt;</tt>'; if the read value is the equal,
4772 '<tt>&lt;new&gt;</tt>' is written.  The original value at the location
4773 is returned.
4774
4775 <p>A successful <code>cmpxchg</code> is a read-modify-write instruction for the
4776 purpose of identifying <a href="#release_sequence">release sequences</a>.  A
4777 failed <code>cmpxchg</code> is equivalent to an atomic load with an ordering
4778 parameter determined by dropping any <code>release</code> part of the
4779 <code>cmpxchg</code>'s ordering.</p>
4780
4781 <!--
4782 FIXME: Is compare_exchange_weak() necessary?  (Consider after we've done
4783 optimization work on ARM.)
4784
4785 FIXME: Is a weaker ordering constraint on failure helpful in practice?
4786 -->
4787
4788 <h5>Example:</h5>
4789 <pre>
4790 entry:
4791   %orig = atomic <a href="#i_load">load</a> i32* %ptr unordered                       <i>; yields {i32}</i>
4792   <a href="#i_br">br</a> label %loop
4793
4794 loop:
4795   %cmp = <a href="#i_phi">phi</a> i32 [ %orig, %entry ], [%old, %loop]
4796   %squared = <a href="#i_mul">mul</a> i32 %cmp, %cmp
4797   %old = cmpxchg i32* %ptr, i32 %cmp, i32 %squared                       <i>; yields {i32}</i>
4798   %success = <a href="#i_icmp">icmp</a> eq i32 %cmp, %old
4799   <a href="#i_br">br</a> i1 %success, label %done, label %loop
4800
4801 done:
4802   ...
4803 </pre>
4804
4805 </div>
4806
4807 <!-- _______________________________________________________________________ -->
4808 <div class="doc_subsubsection"> <a name="i_atomicrmw">'<tt>atomicrmw</tt>'
4809 Instruction</a> </div>
4810
4811 <div class="doc_text">
4812
4813 <h5>Syntax:</h5>
4814 <pre>
4815   [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>
4816 </pre>
4817
4818 <h5>Overview:</h5>
4819 <p>The '<tt>atomicrmw</tt>' instruction is used to atomically modify memory.</p>
4820
4821 <h5>Arguments:</h5>
4822 <p>There are three arguments to the '<code>atomicrmw</code>' instruction: an
4823 operation to apply, an address whose value to modify, an argument to the
4824 operation.  The operation must be one of the following keywords:</p>
4825 <ul>
4826   <li>xchg</li>
4827   <li>add</li>
4828   <li>sub</li>
4829   <li>and</li>
4830   <li>nand</li>
4831   <li>or</li>
4832   <li>xor</li>
4833   <li>max</li>
4834   <li>min</li>
4835   <li>umax</li>
4836   <li>umin</li>
4837 </ul>
4838
4839 <p>The type of '<var>&lt;value&gt;</var>' must be an integer type whose
4840 bit width is a power of two greater than or equal to eight and less than
4841 or equal to a target-specific size limit.  The type of the
4842 '<code>&lt;pointer&gt;</code>' operand must be a pointer to that type.
4843 If the <code>atomicrmw</code> is marked as <code>volatile</code>, then the
4844 optimizer is not allowed to modify the number or order of execution of this
4845 <code>atomicrmw</code> with other <a href="#volatile">volatile
4846   operations</a>.</p>
4847
4848 <!-- FIXME: Extend allowed types. -->
4849
4850 <h5>Semantics:</h5>
4851 <p>The contents of memory at the location specified by the
4852 '<tt>&lt;pointer&gt;</tt>' operand are atomically read, modified, and written
4853 back.  The original value at the location is returned.  The modification is
4854 specified by the <var>operation</var> argument:</p>
4855
4856 <ul>
4857   <li>xchg: <code>*ptr = val</code></li>
4858   <li>add: <code>*ptr = *ptr + val</code></li>
4859   <li>sub: <code>*ptr = *ptr - val</code></li>
4860   <li>and: <code>*ptr = *ptr &amp; val</code></li>
4861   <li>nand: <code>*ptr = ~(*ptr &amp; val)</code></li>
4862   <li>or: <code>*ptr = *ptr | val</code></li>
4863   <li>xor: <code>*ptr = *ptr ^ val</code></li>
4864   <li>max: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using a signed comparison)</li>
4865   <li>min: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using a signed comparison)</li>
4866   <li>umax: <code>*ptr = *ptr &gt; val ? *ptr : val</code> (using an unsigned comparison)</li>
4867   <li>umin: <code>*ptr = *ptr &lt; val ? *ptr : val</code> (using an unsigned comparison)</li>
4868 </ul>
4869
4870 <h5>Example:</h5>
4871 <pre>
4872   %old = atomicrmw add i32* %ptr, i32 1 acquire                        <i>; yields {i32}</i>
4873 </pre>
4874
4875 </div>
4876
4877 <!-- _______________________________________________________________________ -->
4878 <h4>
4879    <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
4880 </h4>
4881
4882 <div>
4883
4884 <h5>Syntax:</h5>
4885 <pre>
4886   &lt;result&gt; = getelementptr &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4887   &lt;result&gt; = getelementptr inbounds &lt;pty&gt;* &lt;ptrval&gt;{, &lt;ty&gt; &lt;idx&gt;}*
4888 </pre>
4889
4890 <h5>Overview:</h5>
4891 <p>The '<tt>getelementptr</tt>' instruction is used to get the address of a
4892    subelement of an <a href="#t_aggregate">aggregate</a> data structure.
4893    It performs address calculation only and does not access memory.</p>
4894
4895 <h5>Arguments:</h5>
4896 <p>The first argument is always a pointer, and forms the basis of the
4897    calculation. The remaining arguments are indices that indicate which of the
4898    elements of the aggregate object are indexed. The interpretation of each
4899    index is dependent on the type being indexed into. The first index always
4900    indexes the pointer value given as the first argument, the second index
4901    indexes a value of the type pointed to (not necessarily the value directly
4902    pointed to, since the first index can be non-zero), etc. The first type
4903    indexed into must be a pointer value, subsequent types can be arrays,
4904    vectors, and structs. Note that subsequent types being indexed into
4905    can never be pointers, since that would require loading the pointer before
4906    continuing calculation.</p>
4907
4908 <p>The type of each index argument depends on the type it is indexing into.
4909    When indexing into a (optionally packed) structure, only <tt>i32</tt>
4910    integer <b>constants</b> are allowed.  When indexing into an array, pointer
4911    or vector, integers of any width are allowed, and they are not required to be
4912    constant.</p>
4913
4914 <p>For example, let's consider a C code fragment and how it gets compiled to
4915    LLVM:</p>
4916
4917 <pre class="doc_code">
4918 struct RT {
4919   char A;
4920   int B[10][20];
4921   char C;
4922 };
4923 struct ST {
4924   int X;
4925   double Y;
4926   struct RT Z;
4927 };
4928
4929 int *foo(struct ST *s) {
4930   return &amp;s[1].Z.B[5][13];
4931 }
4932 </pre>
4933
4934 <p>The LLVM code generated by the GCC frontend is:</p>
4935
4936 <pre class="doc_code">
4937 %RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8  }
4938 %ST = <a href="#namedtypes">type</a> { i32, double, %RT }
4939
4940 define i32* @foo(%ST* %s) {
4941 entry:
4942   %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
4943   ret i32* %reg
4944 }
4945 </pre>
4946
4947 <h5>Semantics:</h5>
4948 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>'
4949    type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT
4950    }</tt>' type, a structure.  The second index indexes into the third element
4951    of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]],
4952    i8 }</tt>' type, another structure.  The third index indexes into the second
4953    element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an
4954    array.  The two dimensions of the array are subscripted into, yielding an
4955    '<tt>i32</tt>' type.  The '<tt>getelementptr</tt>' instruction returns a
4956    pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p>
4957
4958 <p>Note that it is perfectly legal to index partially through a structure,
4959    returning a pointer to an inner element.  Because of this, the LLVM code for
4960    the given testcase is equivalent to:</p>
4961
4962 <pre>
4963   define i32* @foo(%ST* %s) {
4964     %t1 = getelementptr %ST* %s, i32 1                        <i>; yields %ST*:%t1</i>
4965     %t2 = getelementptr %ST* %t1, i32 0, i32 2                <i>; yields %RT*:%t2</i>
4966     %t3 = getelementptr %RT* %t2, i32 0, i32 1                <i>; yields [10 x [20 x i32]]*:%t3</i>
4967     %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  <i>; yields [20 x i32]*:%t4</i>
4968     %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        <i>; yields i32*:%t5</i>
4969     ret i32* %t5
4970   }
4971 </pre>
4972
4973 <p>If the <tt>inbounds</tt> keyword is present, the result value of the
4974    <tt>getelementptr</tt> is a <a href="#trapvalues">trap value</a> if the
4975    base pointer is not an <i>in bounds</i> address of an allocated object,
4976    or if any of the addresses that would be formed by successive addition of
4977    the offsets implied by the indices to the base address with infinitely
4978    precise arithmetic are not an <i>in bounds</i> address of that allocated
4979    object. The <i>in bounds</i> addresses for an allocated object are all
4980    the addresses that point into the object, plus the address one byte past
4981    the end.</p>
4982
4983 <p>If the <tt>inbounds</tt> keyword is not present, the offsets are added to
4984    the base address with silently-wrapping two's complement arithmetic, and
4985    the result value of the <tt>getelementptr</tt> may be outside the object
4986    pointed to by the base pointer. The result value may not necessarily be
4987    used to access memory though, even if it happens to point into allocated
4988    storage. See the <a href="#pointeraliasing">Pointer Aliasing Rules</a>
4989    section for more information.</p>
4990
4991 <p>The getelementptr instruction is often confusing.  For some more insight into
4992    how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p>
4993
4994 <h5>Example:</h5>
4995 <pre>
4996     <i>; yields [12 x i8]*:aptr</i>
4997     %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1
4998     <i>; yields i8*:vptr</i>
4999     %vptr = getelementptr {i32, &lt;2 x i8&gt;}* %svptr, i64 0, i32 1, i32 1
5000     <i>; yields i8*:eptr</i>
5001     %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1
5002     <i>; yields i32*:iptr</i>
5003     %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0
5004 </pre>
5005
5006 </div>
5007
5008 </div>
5009
5010 <!-- ======================================================================= -->
5011 <h3>
5012   <a name="convertops">Conversion Operations</a>
5013 </h3>
5014
5015 <div>
5016
5017 <p>The instructions in this category are the conversion instructions (casting)
5018    which all take a single operand and a type. They perform various bit
5019    conversions on the operand.</p>
5020
5021 <!-- _______________________________________________________________________ -->
5022 <h4>
5023    <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
5024 </h4>
5025
5026 <div>
5027
5028 <h5>Syntax:</h5>
5029 <pre>
5030   &lt;result&gt; = trunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5031 </pre>
5032
5033 <h5>Overview:</h5>
5034 <p>The '<tt>trunc</tt>' instruction truncates its operand to the
5035    type <tt>ty2</tt>.</p>
5036
5037 <h5>Arguments:</h5>
5038 <p>The '<tt>trunc</tt>' instruction takes a value to trunc, and a type to trunc it to.
5039    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5040    of the same number of integers.
5041    The bit size of the <tt>value</tt> must be larger than
5042    the bit size of the destination type, <tt>ty2</tt>.
5043    Equal sized types are not allowed.</p>
5044
5045 <h5>Semantics:</h5>
5046 <p>The '<tt>trunc</tt>' instruction truncates the high order bits
5047    in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the
5048    source size must be larger than the destination size, <tt>trunc</tt> cannot
5049    be a <i>no-op cast</i>.  It will always truncate bits.</p>
5050
5051 <h5>Example:</h5>
5052 <pre>
5053   %X = trunc i32 257 to i8                        <i>; yields i8:1</i>
5054   %Y = trunc i32 123 to i1                        <i>; yields i1:true</i>
5055   %Z = trunc i32 122 to i1                        <i>; yields i1:false</i>
5056   %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>
5057 </pre>
5058
5059 </div>
5060
5061 <!-- _______________________________________________________________________ -->
5062 <h4>
5063    <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
5064 </h4>
5065
5066 <div>
5067
5068 <h5>Syntax:</h5>
5069 <pre>
5070   &lt;result&gt; = zext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5071 </pre>
5072
5073 <h5>Overview:</h5>
5074 <p>The '<tt>zext</tt>' instruction zero extends its operand to type
5075    <tt>ty2</tt>.</p>
5076
5077
5078 <h5>Arguments:</h5>
5079 <p>The '<tt>zext</tt>' instruction takes a value to cast, and a type to cast it to.
5080    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5081    of the same number of integers.
5082    The bit size of the <tt>value</tt> must be smaller than
5083    the bit size of the destination type,
5084    <tt>ty2</tt>.</p>
5085
5086 <h5>Semantics:</h5>
5087 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero
5088    bits until it reaches the size of the destination type, <tt>ty2</tt>.</p>
5089
5090 <p>When zero extending from i1, the result will always be either 0 or 1.</p>
5091
5092 <h5>Example:</h5>
5093 <pre>
5094   %X = zext i32 257 to i64              <i>; yields i64:257</i>
5095   %Y = zext i1 true to i32              <i>; yields i32:1</i>
5096   %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>
5097 </pre>
5098
5099 </div>
5100
5101 <!-- _______________________________________________________________________ -->
5102 <h4>
5103    <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
5104 </h4>
5105
5106 <div>
5107
5108 <h5>Syntax:</h5>
5109 <pre>
5110   &lt;result&gt; = sext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5111 </pre>
5112
5113 <h5>Overview:</h5>
5114 <p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p>
5115
5116 <h5>Arguments:</h5>
5117 <p>The '<tt>sext</tt>' instruction takes a value to cast, and a type to cast it to.
5118    Both types must be of <a href="#t_integer">integer</a> types, or vectors
5119    of the same number of integers.
5120    The bit size of the <tt>value</tt> must be smaller than
5121    the bit size of the destination type,
5122    <tt>ty2</tt>.</p>
5123
5124 <h5>Semantics:</h5>
5125 <p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign
5126    bit (highest order bit) of the <tt>value</tt> until it reaches the bit size
5127    of the type <tt>ty2</tt>.</p>
5128
5129 <p>When sign extending from i1, the extension always results in -1 or 0.</p>
5130
5131 <h5>Example:</h5>
5132 <pre>
5133   %X = sext i8  -1 to i16              <i>; yields i16   :65535</i>
5134   %Y = sext i1 true to i32             <i>; yields i32:-1</i>
5135   %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>
5136 </pre>
5137
5138 </div>
5139
5140 <!-- _______________________________________________________________________ -->
5141 <h4>
5142    <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
5143 </h4>
5144
5145 <div>
5146
5147 <h5>Syntax:</h5>
5148 <pre>
5149   &lt;result&gt; = fptrunc &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5150 </pre>
5151
5152 <h5>Overview:</h5>
5153 <p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type
5154    <tt>ty2</tt>.</p>
5155
5156 <h5>Arguments:</h5>
5157 <p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating
5158    point</a> value to cast and a <a href="#t_floating">floating point</a> type
5159    to cast it to. The size of <tt>value</tt> must be larger than the size of
5160    <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a
5161    <i>no-op cast</i>.</p>
5162
5163 <h5>Semantics:</h5>
5164 <p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger
5165    <a href="#t_floating">floating point</a> type to a smaller
5166    <a href="#t_floating">floating point</a> type.  If the value cannot fit
5167    within the destination type, <tt>ty2</tt>, then the results are
5168    undefined.</p>
5169
5170 <h5>Example:</h5>
5171 <pre>
5172   %X = fptrunc double 123.0 to float         <i>; yields float:123.0</i>
5173   %Y = fptrunc double 1.0E+300 to float      <i>; yields undefined</i>
5174 </pre>
5175
5176 </div>
5177
5178 <!-- _______________________________________________________________________ -->
5179 <h4>
5180    <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
5181 </h4>
5182
5183 <div>
5184
5185 <h5>Syntax:</h5>
5186 <pre>
5187   &lt;result&gt; = fpext &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5188 </pre>
5189
5190 <h5>Overview:</h5>
5191 <p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger
5192    floating point value.</p>
5193
5194 <h5>Arguments:</h5>
5195 <p>The '<tt>fpext</tt>' instruction takes a
5196    <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and
5197    a <a href="#t_floating">floating point</a> type to cast it to. The source
5198    type must be smaller than the destination type.</p>
5199
5200 <h5>Semantics:</h5>
5201 <p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller
5202    <a href="#t_floating">floating point</a> type to a larger
5203    <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be
5204    used to make a <i>no-op cast</i> because it always changes bits. Use
5205    <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p>
5206
5207 <h5>Example:</h5>
5208 <pre>
5209   %X = fpext float 3.125 to double         <i>; yields double:3.125000e+00</i>
5210   %Y = fpext double %X to fp128            <i>; yields fp128:0xL00000000000000004000900000000000</i>
5211 </pre>
5212
5213 </div>
5214
5215 <!-- _______________________________________________________________________ -->
5216 <h4>
5217    <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
5218 </h4>
5219
5220 <div>
5221
5222 <h5>Syntax:</h5>
5223 <pre>
5224   &lt;result&gt; = fptoui &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5225 </pre>
5226
5227 <h5>Overview:</h5>
5228 <p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its
5229    unsigned integer equivalent of type <tt>ty2</tt>.</p>
5230
5231 <h5>Arguments:</h5>
5232 <p>The '<tt>fptoui</tt>' instruction takes a value to cast, which must be a
5233    scalar or vector <a href="#t_floating">floating point</a> value, and a type
5234    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
5235    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
5236    vector integer type with the same number of elements as <tt>ty</tt></p>
5237
5238 <h5>Semantics:</h5>
5239 <p>The '<tt>fptoui</tt>' instruction converts its
5240    <a href="#t_floating">floating point</a> operand into the nearest (rounding
5241    towards zero) unsigned integer value. If the value cannot fit
5242    in <tt>ty2</tt>, the results are undefined.</p>
5243
5244 <h5>Example:</h5>
5245 <pre>
5246   %X = fptoui double 123.0 to i32      <i>; yields i32:123</i>
5247   %Y = fptoui float 1.0E+300 to i1     <i>; yields undefined:1</i>
5248   %Z = fptoui float 1.04E+17 to i8     <i>; yields undefined:1</i>
5249 </pre>
5250
5251 </div>
5252
5253 <!-- _______________________________________________________________________ -->
5254 <h4>
5255    <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
5256 </h4>
5257
5258 <div>
5259
5260 <h5>Syntax:</h5>
5261 <pre>
5262   &lt;result&gt; = fptosi &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5263 </pre>
5264
5265 <h5>Overview:</h5>
5266 <p>The '<tt>fptosi</tt>' instruction converts
5267    <a href="#t_floating">floating point</a> <tt>value</tt> to
5268    type <tt>ty2</tt>.</p>
5269
5270 <h5>Arguments:</h5>
5271 <p>The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a
5272    scalar or vector <a href="#t_floating">floating point</a> value, and a type
5273    to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a>
5274    type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a
5275    vector integer type with the same number of elements as <tt>ty</tt></p>
5276
5277 <h5>Semantics:</h5>
5278 <p>The '<tt>fptosi</tt>' instruction converts its
5279    <a href="#t_floating">floating point</a> operand into the nearest (rounding
5280    towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>,
5281    the results are undefined.</p>
5282
5283 <h5>Example:</h5>
5284 <pre>
5285   %X = fptosi double -123.0 to i32      <i>; yields i32:-123</i>
5286   %Y = fptosi float 1.0E-247 to i1      <i>; yields undefined:1</i>
5287   %Z = fptosi float 1.04E+17 to i8      <i>; yields undefined:1</i>
5288 </pre>
5289
5290 </div>
5291
5292 <!-- _______________________________________________________________________ -->
5293 <h4>
5294    <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
5295 </h4>
5296
5297 <div>
5298
5299 <h5>Syntax:</h5>
5300 <pre>
5301   &lt;result&gt; = uitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5302 </pre>
5303
5304 <h5>Overview:</h5>
5305 <p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned
5306    integer and converts that value to the <tt>ty2</tt> type.</p>
5307
5308 <h5>Arguments:</h5>
5309 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be a
5310    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
5311    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
5312    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
5313    floating point type with the same number of elements as <tt>ty</tt></p>
5314
5315 <h5>Semantics:</h5>
5316 <p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned
5317    integer quantity and converts it to the corresponding floating point
5318    value. If the value cannot fit in the floating point value, the results are
5319    undefined.</p>
5320
5321 <h5>Example:</h5>
5322 <pre>
5323   %X = uitofp i32 257 to float         <i>; yields float:257.0</i>
5324   %Y = uitofp i8 -1 to double          <i>; yields double:255.0</i>
5325 </pre>
5326
5327 </div>
5328
5329 <!-- _______________________________________________________________________ -->
5330 <h4>
5331    <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
5332 </h4>
5333
5334 <div>
5335
5336 <h5>Syntax:</h5>
5337 <pre>
5338   &lt;result&gt; = sitofp &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5339 </pre>
5340
5341 <h5>Overview:</h5>
5342 <p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer
5343    and converts that value to the <tt>ty2</tt> type.</p>
5344
5345 <h5>Arguments:</h5>
5346 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be a
5347    scalar or vector <a href="#t_integer">integer</a> value, and a type to cast
5348    it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a>
5349    type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector
5350    floating point type with the same number of elements as <tt>ty</tt></p>
5351
5352 <h5>Semantics:</h5>
5353 <p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer
5354    quantity and converts it to the corresponding floating point value. If the
5355    value cannot fit in the floating point value, the results are undefined.</p>
5356
5357 <h5>Example:</h5>
5358 <pre>
5359   %X = sitofp i32 257 to float         <i>; yields float:257.0</i>
5360   %Y = sitofp i8 -1 to double          <i>; yields double:-1.0</i>
5361 </pre>
5362
5363 </div>
5364
5365 <!-- _______________________________________________________________________ -->
5366 <h4>
5367    <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
5368 </h4>
5369
5370 <div>
5371
5372 <h5>Syntax:</h5>
5373 <pre>
5374   &lt;result&gt; = ptrtoint &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5375 </pre>
5376
5377 <h5>Overview:</h5>
5378 <p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to
5379    the integer type <tt>ty2</tt>.</p>
5380
5381 <h5>Arguments:</h5>
5382 <p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which
5383    must be a <a href="#t_pointer">pointer</a> value, and a type to cast it to
5384    <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.</p>
5385
5386 <h5>Semantics:</h5>
5387 <p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type
5388    <tt>ty2</tt> by interpreting the pointer value as an integer and either
5389    truncating or zero extending that value to the size of the integer type. If
5390    <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If
5391    <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they
5392    are the same size, then nothing is done (<i>no-op cast</i>) other than a type
5393    change.</p>
5394
5395 <h5>Example:</h5>
5396 <pre>
5397   %X = ptrtoint i32* %X to i8           <i>; yields truncation on 32-bit architecture</i>
5398   %Y = ptrtoint i32* %x to i64          <i>; yields zero extension on 32-bit architecture</i>
5399 </pre>
5400
5401 </div>
5402
5403 <!-- _______________________________________________________________________ -->
5404 <h4>
5405    <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
5406 </h4>
5407
5408 <div>
5409
5410 <h5>Syntax:</h5>
5411 <pre>
5412   &lt;result&gt; = inttoptr &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5413 </pre>
5414
5415 <h5>Overview:</h5>
5416 <p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to a
5417    pointer type, <tt>ty2</tt>.</p>
5418
5419 <h5>Arguments:</h5>
5420 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a>
5421    value to cast, and a type to cast it to, which must be a
5422    <a href="#t_pointer">pointer</a> type.</p>
5423
5424 <h5>Semantics:</h5>
5425 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
5426    <tt>ty2</tt> by applying either a zero extension or a truncation depending on
5427    the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the
5428    size of a pointer then a truncation is done. If <tt>value</tt> is smaller
5429    than the size of a pointer then a zero extension is done. If they are the
5430    same size, nothing is done (<i>no-op cast</i>).</p>
5431
5432 <h5>Example:</h5>
5433 <pre>
5434   %X = inttoptr i32 255 to i32*          <i>; yields zero extension on 64-bit architecture</i>
5435   %Y = inttoptr i32 255 to i32*          <i>; yields no-op on 32-bit architecture</i>
5436   %Z = inttoptr i64 0 to i32*            <i>; yields truncation on 32-bit architecture</i>
5437 </pre>
5438
5439 </div>
5440
5441 <!-- _______________________________________________________________________ -->
5442 <h4>
5443    <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
5444 </h4>
5445
5446 <div>
5447
5448 <h5>Syntax:</h5>
5449 <pre>
5450   &lt;result&gt; = bitcast &lt;ty&gt; &lt;value&gt; to &lt;ty2&gt;             <i>; yields ty2</i>
5451 </pre>
5452
5453 <h5>Overview:</h5>
5454 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
5455    <tt>ty2</tt> without changing any bits.</p>
5456
5457 <h5>Arguments:</h5>
5458 <p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a
5459    non-aggregate first class value, and a type to cast it to, which must also be
5460    a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes
5461    of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be
5462    identical. If the source type is a pointer, the destination type must also be
5463    a pointer.  This instruction supports bitwise conversion of vectors to
5464    integers and to vectors of other types (as long as they have the same
5465    size).</p>
5466
5467 <h5>Semantics:</h5>
5468 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type
5469    <tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with
5470    this conversion.  The conversion is done as if the <tt>value</tt> had been
5471    stored to memory and read back as type <tt>ty2</tt>. Pointer types may only
5472    be converted to other pointer types with this instruction. To convert
5473    pointers to other types, use the <a href="#i_inttoptr">inttoptr</a> or
5474    <a href="#i_ptrtoint">ptrtoint</a> instructions first.</p>
5475
5476 <h5>Example:</h5>
5477 <pre>
5478   %X = bitcast i8 255 to i8              <i>; yields i8 :-1</i>
5479   %Y = bitcast i32* %x to sint*          <i>; yields sint*:%x</i>
5480   %Z = bitcast &lt;2 x int&gt; %V to i64;      <i>; yields i64: %V</i>
5481 </pre>
5482
5483 </div>
5484
5485 </div>
5486
5487 <!-- ======================================================================= -->
5488 <h3>
5489   <a name="otherops">Other Operations</a>
5490 </h3>
5491
5492 <div>
5493
5494 <p>The instructions in this category are the "miscellaneous" instructions, which
5495    defy better classification.</p>
5496
5497 <!-- _______________________________________________________________________ -->
5498 <h4>
5499   <a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
5500 </h4>
5501
5502 <div>
5503
5504 <h5>Syntax:</h5>
5505 <pre>
5506   &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>
5507 </pre>
5508
5509 <h5>Overview:</h5>
5510 <p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of
5511    boolean values based on comparison of its two integer, integer vector, or
5512    pointer operands.</p>
5513
5514 <h5>Arguments:</h5>
5515 <p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is
5516    the condition code indicating the kind of comparison to perform. It is not a
5517    value, just a keyword. The possible condition code are:</p>
5518
5519 <ol>
5520   <li><tt>eq</tt>: equal</li>
5521   <li><tt>ne</tt>: not equal </li>
5522   <li><tt>ugt</tt>: unsigned greater than</li>
5523   <li><tt>uge</tt>: unsigned greater or equal</li>
5524   <li><tt>ult</tt>: unsigned less than</li>
5525   <li><tt>ule</tt>: unsigned less or equal</li>
5526   <li><tt>sgt</tt>: signed greater than</li>
5527   <li><tt>sge</tt>: signed greater or equal</li>
5528   <li><tt>slt</tt>: signed less than</li>
5529   <li><tt>sle</tt>: signed less or equal</li>
5530 </ol>
5531
5532 <p>The remaining two arguments must be <a href="#t_integer">integer</a> or
5533    <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a>
5534    typed.  They must also be identical types.</p>
5535
5536 <h5>Semantics:</h5>
5537 <p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the
5538    condition code given as <tt>cond</tt>. The comparison performed always yields
5539    either an <a href="#t_integer"><tt>i1</tt></a> or vector of <tt>i1</tt>
5540    result, as follows:</p>
5541
5542 <ol>
5543   <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal,
5544       <tt>false</tt> otherwise. No sign interpretation is necessary or
5545       performed.</li>
5546
5547   <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal,
5548       <tt>false</tt> otherwise. No sign interpretation is necessary or
5549       performed.</li>
5550
5551   <li><tt>ugt</tt>: interprets the operands as unsigned values and yields
5552       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5553
5554   <li><tt>uge</tt>: interprets the operands as unsigned values and yields
5555       <tt>true</tt> if <tt>op1</tt> is greater than or equal
5556       to <tt>op2</tt>.</li>
5557
5558   <li><tt>ult</tt>: interprets the operands as unsigned values and yields
5559       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
5560
5561   <li><tt>ule</tt>: interprets the operands as unsigned values and yields
5562       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5563
5564   <li><tt>sgt</tt>: interprets the operands as signed values and yields
5565       <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5566
5567   <li><tt>sge</tt>: interprets the operands as signed values and yields
5568       <tt>true</tt> if <tt>op1</tt> is greater than or equal
5569       to <tt>op2</tt>.</li>
5570
5571   <li><tt>slt</tt>: interprets the operands as signed values and yields
5572       <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li>
5573
5574   <li><tt>sle</tt>: interprets the operands as signed values and yields
5575       <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5576 </ol>
5577
5578 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
5579    values are compared as if they were integers.</p>
5580
5581 <p>If the operands are integer vectors, then they are compared element by
5582    element. The result is an <tt>i1</tt> vector with the same number of elements
5583    as the values being compared.  Otherwise, the result is an <tt>i1</tt>.</p>
5584
5585 <h5>Example:</h5>
5586 <pre>
5587   &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
5588   &lt;result&gt; = icmp ne float* %X, %X     <i>; yields: result=false</i>
5589   &lt;result&gt; = icmp ult i16  4, 5        <i>; yields: result=true</i>
5590   &lt;result&gt; = icmp sgt i16  4, 5        <i>; yields: result=false</i>
5591   &lt;result&gt; = icmp ule i16 -4, 5        <i>; yields: result=false</i>
5592   &lt;result&gt; = icmp sge i16  4, 5        <i>; yields: result=false</i>
5593 </pre>
5594
5595 <p>Note that the code generator does not yet support vector types with
5596    the <tt>icmp</tt> instruction.</p>
5597
5598 </div>
5599
5600 <!-- _______________________________________________________________________ -->
5601 <h4>
5602   <a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
5603 </h4>
5604
5605 <div>
5606
5607 <h5>Syntax:</h5>
5608 <pre>
5609   &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>
5610 </pre>
5611
5612 <h5>Overview:</h5>
5613 <p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean
5614    values based on comparison of its operands.</p>
5615
5616 <p>If the operands are floating point scalars, then the result type is a boolean
5617 (<a href="#t_integer"><tt>i1</tt></a>).</p>
5618
5619 <p>If the operands are floating point vectors, then the result type is a vector
5620    of boolean with the same number of elements as the operands being
5621    compared.</p>
5622
5623 <h5>Arguments:</h5>
5624 <p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is
5625    the condition code indicating the kind of comparison to perform. It is not a
5626    value, just a keyword. The possible condition code are:</p>
5627
5628 <ol>
5629   <li><tt>false</tt>: no comparison, always returns false</li>
5630   <li><tt>oeq</tt>: ordered and equal</li>
5631   <li><tt>ogt</tt>: ordered and greater than </li>
5632   <li><tt>oge</tt>: ordered and greater than or equal</li>
5633   <li><tt>olt</tt>: ordered and less than </li>
5634   <li><tt>ole</tt>: ordered and less than or equal</li>
5635   <li><tt>one</tt>: ordered and not equal</li>
5636   <li><tt>ord</tt>: ordered (no nans)</li>
5637   <li><tt>ueq</tt>: unordered or equal</li>
5638   <li><tt>ugt</tt>: unordered or greater than </li>
5639   <li><tt>uge</tt>: unordered or greater than or equal</li>
5640   <li><tt>ult</tt>: unordered or less than </li>
5641   <li><tt>ule</tt>: unordered or less than or equal</li>
5642   <li><tt>une</tt>: unordered or not equal</li>
5643   <li><tt>uno</tt>: unordered (either nans)</li>
5644   <li><tt>true</tt>: no comparison, always returns true</li>
5645 </ol>
5646
5647 <p><i>Ordered</i> means that neither operand is a QNAN while
5648    <i>unordered</i> means that either operand may be a QNAN.</p>
5649
5650 <p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either
5651    a <a href="#t_floating">floating point</a> type or
5652    a <a href="#t_vector">vector</a> of floating point type.  They must have
5653    identical types.</p>
5654
5655 <h5>Semantics:</h5>
5656 <p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
5657    according to the condition code given as <tt>cond</tt>.  If the operands are
5658    vectors, then the vectors are compared element by element.  Each comparison
5659    performed always yields an <a href="#t_integer">i1</a> result, as
5660    follows:</p>
5661
5662 <ol>
5663   <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li>
5664
5665   <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5666       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
5667
5668   <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5669       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5670
5671   <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5672       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
5673
5674   <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5675       <tt>op1</tt> is less than <tt>op2</tt>.</li>
5676
5677   <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5678       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5679
5680   <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and
5681       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
5682
5683   <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li>
5684
5685   <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or
5686       <tt>op1</tt> is equal to <tt>op2</tt>.</li>
5687
5688   <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or
5689       <tt>op1</tt> is greater than <tt>op2</tt>.</li>
5690
5691   <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or
5692       <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li>
5693
5694   <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or
5695       <tt>op1</tt> is less than <tt>op2</tt>.</li>
5696
5697   <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or
5698       <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li>
5699
5700   <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or
5701       <tt>op1</tt> is not equal to <tt>op2</tt>.</li>
5702
5703   <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
5704
5705   <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
5706 </ol>
5707
5708 <h5>Example:</h5>
5709 <pre>
5710   &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
5711   &lt;result&gt; = fcmp one float 4.0, 5.0    <i>; yields: result=true</i>
5712   &lt;result&gt; = fcmp olt float 4.0, 5.0    <i>; yields: result=true</i>
5713   &lt;result&gt; = fcmp ueq double 1.0, 2.0   <i>; yields: result=false</i>
5714 </pre>
5715
5716 <p>Note that the code generator does not yet support vector types with
5717    the <tt>fcmp</tt> instruction.</p>
5718
5719 </div>
5720
5721 <!-- _______________________________________________________________________ -->
5722 <h4>
5723   <a name="i_phi">'<tt>phi</tt>' Instruction</a>
5724 </h4>
5725
5726 <div>
5727
5728 <h5>Syntax:</h5>
5729 <pre>
5730   &lt;result&gt; = phi &lt;ty&gt; [ &lt;val0&gt;, &lt;label0&gt;], ...
5731 </pre>
5732
5733 <h5>Overview:</h5>
5734 <p>The '<tt>phi</tt>' instruction is used to implement the &#966; node in the
5735    SSA graph representing the function.</p>
5736
5737 <h5>Arguments:</h5>
5738 <p>The type of the incoming values is specified with the first type field. After
5739    this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with
5740    one pair for each predecessor basic block of the current block.  Only values
5741    of <a href="#t_firstclass">first class</a> type may be used as the value
5742    arguments to the PHI node.  Only labels may be used as the label
5743    arguments.</p>
5744
5745 <p>There must be no non-phi instructions between the start of a basic block and
5746    the PHI instructions: i.e. PHI instructions must be first in a basic
5747    block.</p>
5748
5749 <p>For the purposes of the SSA form, the use of each incoming value is deemed to
5750    occur on the edge from the corresponding predecessor block to the current
5751    block (but after any definition of an '<tt>invoke</tt>' instruction's return
5752    value on the same edge).</p>
5753
5754 <h5>Semantics:</h5>
5755 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value
5756    specified by the pair corresponding to the predecessor basic block that
5757    executed just prior to the current block.</p>
5758
5759 <h5>Example:</h5>
5760 <pre>
5761 Loop:       ; Infinite loop that counts from 0 on up...
5762   %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
5763   %nextindvar = add i32 %indvar, 1
5764   br label %Loop
5765 </pre>
5766
5767 </div>
5768
5769 <!-- _______________________________________________________________________ -->
5770 <h4>
5771    <a name="i_select">'<tt>select</tt>' Instruction</a>
5772 </h4>
5773
5774 <div>
5775
5776 <h5>Syntax:</h5>
5777 <pre>
5778   &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>
5779
5780   <i>selty</i> is either i1 or {&lt;N x i1&gt;}
5781 </pre>
5782
5783 <h5>Overview:</h5>
5784 <p>The '<tt>select</tt>' instruction is used to choose one value based on a
5785    condition, without branching.</p>
5786
5787
5788 <h5>Arguments:</h5>
5789 <p>The '<tt>select</tt>' instruction requires an 'i1' value or a vector of 'i1'
5790    values indicating the condition, and two values of the
5791    same <a href="#t_firstclass">first class</a> type.  If the val1/val2 are
5792    vectors and the condition is a scalar, then entire vectors are selected, not
5793    individual elements.</p>
5794
5795 <h5>Semantics:</h5>
5796 <p>If the condition is an i1 and it evaluates to 1, the instruction returns the
5797    first value argument; otherwise, it returns the second value argument.</p>
5798
5799 <p>If the condition is a vector of i1, then the value arguments must be vectors
5800    of the same size, and the selection is done element by element.</p>
5801
5802 <h5>Example:</h5>
5803 <pre>
5804   %X = select i1 true, i8 17, i8 42          <i>; yields i8:17</i>
5805 </pre>
5806
5807 <p>Note that the code generator does not yet support conditions
5808    with vector type.</p>
5809
5810 </div>
5811
5812 <!-- _______________________________________________________________________ -->
5813 <h4>
5814   <a name="i_call">'<tt>call</tt>' Instruction</a>
5815 </h4>
5816
5817 <div>
5818
5819 <h5>Syntax:</h5>
5820 <pre>
5821   &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>]
5822 </pre>
5823
5824 <h5>Overview:</h5>
5825 <p>The '<tt>call</tt>' instruction represents a simple function call.</p>
5826
5827 <h5>Arguments:</h5>
5828 <p>This instruction requires several arguments:</p>
5829
5830 <ol>
5831   <li>The optional "tail" marker indicates that the callee function does not
5832       access any allocas or varargs in the caller.  Note that calls may be
5833       marked "tail" even if they do not occur before
5834       a <a href="#i_ret"><tt>ret</tt></a> instruction.  If the "tail" marker is
5835       present, the function call is eligible for tail call optimization,
5836       but <a href="CodeGenerator.html#tailcallopt">might not in fact be
5837       optimized into a jump</a>.  The code generator may optimize calls marked
5838       "tail" with either 1) automatic <a href="CodeGenerator.html#sibcallopt">
5839       sibling call optimization</a> when the caller and callee have
5840       matching signatures, or 2) forced tail call optimization when the
5841       following extra requirements are met:
5842       <ul>
5843         <li>Caller and callee both have the calling
5844             convention <tt>fastcc</tt>.</li>
5845         <li>The call is in tail position (ret immediately follows call and ret
5846             uses value of call or is void).</li>
5847         <li>Option <tt>-tailcallopt</tt> is enabled,
5848             or <code>llvm::GuaranteedTailCallOpt</code> is <code>true</code>.</li>
5849         <li><a href="CodeGenerator.html#tailcallopt">Platform specific
5850             constraints are met.</a></li>
5851       </ul>
5852   </li>
5853
5854   <li>The optional "cconv" marker indicates which <a href="#callingconv">calling
5855       convention</a> the call should use.  If none is specified, the call
5856       defaults to using C calling conventions.  The calling convention of the
5857       call must match the calling convention of the target function, or else the
5858       behavior is undefined.</li>
5859
5860   <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for
5861       return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and
5862       '<tt>inreg</tt>' attributes are valid here.</li>
5863
5864   <li>'<tt>ty</tt>': the type of the call instruction itself which is also the
5865       type of the return value.  Functions that return no value are marked
5866       <tt><a href="#t_void">void</a></tt>.</li>
5867
5868   <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value
5869       being invoked.  The argument types must match the types implied by this
5870       signature.  This type can be omitted if the function is not varargs and if
5871       the function type does not return a pointer to a function.</li>
5872
5873   <li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to
5874       be invoked. In most cases, this is a direct function invocation, but
5875       indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer
5876       to function value.</li>
5877
5878   <li>'<tt>function args</tt>': argument list whose types match the function
5879       signature argument types and parameter attributes. All arguments must be
5880       of <a href="#t_firstclass">first class</a> type. If the function
5881       signature indicates the function accepts a variable number of arguments,
5882       the extra arguments can be specified.</li>
5883
5884   <li>The optional <a href="#fnattrs">function attributes</a> list. Only
5885       '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and
5886       '<tt>readnone</tt>' attributes are valid here.</li>
5887 </ol>
5888
5889 <h5>Semantics:</h5>
5890 <p>The '<tt>call</tt>' instruction is used to cause control flow to transfer to
5891    a specified function, with its incoming arguments bound to the specified
5892    values. Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called
5893    function, control flow continues with the instruction after the function
5894    call, and the return value of the function is bound to the result
5895    argument.</p>
5896
5897 <h5>Example:</h5>
5898 <pre>
5899   %retval = call i32 @test(i32 %argc)
5900   call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42)        <i>; yields i32</i>
5901   %X = tail call i32 @foo()                                    <i>; yields i32</i>
5902   %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo()  <i>; yields i32</i>
5903   call void %foo(i8 97 signext)
5904
5905   %struct.A = type { i32, i8 }
5906   %r = call %struct.A @foo()                        <i>; yields { 32, i8 }</i>
5907   %gr = extractvalue %struct.A %r, 0                <i>; yields i32</i>
5908   %gr1 = extractvalue %struct.A %r, 1               <i>; yields i8</i>
5909   %Z = call void @foo() noreturn                    <i>; indicates that %foo never returns normally</i>
5910   %ZZ = call zeroext i32 @bar()                     <i>; Return value is %zero extended</i>
5911 </pre>
5912
5913 <p>llvm treats calls to some functions with names and arguments that match the
5914 standard C99 library as being the C99 library functions, and may perform
5915 optimizations or generate code for them under that assumption.  This is
5916 something we'd like to change in the future to provide better support for
5917 freestanding environments and non-C-based languages.</p>
5918
5919 </div>
5920
5921 <!-- _______________________________________________________________________ -->
5922 <h4>
5923   <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
5924 </h4>
5925
5926 <div>
5927
5928 <h5>Syntax:</h5>
5929 <pre>
5930   &lt;resultval&gt; = va_arg &lt;va_list*&gt; &lt;arglist&gt;, &lt;argty&gt;
5931 </pre>
5932
5933 <h5>Overview:</h5>
5934 <p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through
5935    the "variable argument" area of a function call.  It is used to implement the
5936    <tt>va_arg</tt> macro in C.</p>
5937
5938 <h5>Arguments:</h5>
5939 <p>This instruction takes a <tt>va_list*</tt> value and the type of the
5940    argument. It returns a value of the specified argument type and increments
5941    the <tt>va_list</tt> to point to the next argument.  The actual type
5942    of <tt>va_list</tt> is target specific.</p>
5943
5944 <h5>Semantics:</h5>
5945 <p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type
5946    from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point
5947    to the next argument.  For more information, see the variable argument
5948    handling <a href="#int_varargs">Intrinsic Functions</a>.</p>
5949
5950 <p>It is legal for this instruction to be called in a function which does not
5951    take a variable number of arguments, for example, the <tt>vfprintf</tt>
5952    function.</p>
5953
5954 <p><tt>va_arg</tt> is an LLVM instruction instead of
5955    an <a href="#intrinsics">intrinsic function</a> because it takes a type as an
5956    argument.</p>
5957
5958 <h5>Example:</h5>
5959 <p>See the <a href="#int_varargs">variable argument processing</a> section.</p>
5960
5961 <p>Note that the code generator does not yet fully support va_arg on many
5962    targets. Also, it does not currently support va_arg with aggregate types on
5963    any target.</p>
5964
5965 </div>
5966
5967 </div>
5968
5969 </div>
5970
5971 <!-- *********************************************************************** -->
5972 <h2><a name="intrinsics">Intrinsic Functions</a></h2>
5973 <!-- *********************************************************************** -->
5974
5975 <div>
5976
5977 <p>LLVM supports the notion of an "intrinsic function".  These functions have
5978    well known names and semantics and are required to follow certain
5979    restrictions.  Overall, these intrinsics represent an extension mechanism for
5980    the LLVM language that does not require changing all of the transformations
5981    in LLVM when adding to the language (or the bitcode reader/writer, the
5982    parser, etc...).</p>
5983
5984 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This
5985    prefix is reserved in LLVM for intrinsic names; thus, function names may not
5986    begin with this prefix.  Intrinsic functions must always be external
5987    functions: you cannot define the body of intrinsic functions.  Intrinsic
5988    functions may only be used in call or invoke instructions: it is illegal to
5989    take the address of an intrinsic function.  Additionally, because intrinsic
5990    functions are part of the LLVM language, it is required if any are added that
5991    they be documented here.</p>
5992
5993 <p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents a
5994    family of functions that perform the same operation but on different data
5995    types. Because LLVM can represent over 8 million different integer types,
5996    overloading is used commonly to allow an intrinsic function to operate on any
5997    integer type. One or more of the argument types or the result type can be
5998    overloaded to accept any integer type. Argument types may also be defined as
5999    exactly matching a previous argument's type or the result type. This allows
6000    an intrinsic function which accepts multiple arguments, but needs all of them
6001    to be of the same type, to only be overloaded with respect to a single
6002    argument or the result.</p>
6003
6004 <p>Overloaded intrinsics will have the names of its overloaded argument types
6005    encoded into its function name, each preceded by a period. Only those types
6006    which are overloaded result in a name suffix. Arguments whose type is matched
6007    against another type do not. For example, the <tt>llvm.ctpop</tt> function
6008    can take an integer of any width and returns an integer of exactly the same
6009    integer width. This leads to a family of functions such as
6010    <tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29
6011    %val)</tt>.  Only one type, the return type, is overloaded, and only one type
6012    suffix is required. Because the argument's type is matched against the return
6013    type, it does not require its own name suffix.</p>
6014
6015 <p>To learn how to add an intrinsic function, please see the
6016    <a href="ExtendingLLVM.html">Extending LLVM Guide</a>.</p>
6017
6018 <!-- ======================================================================= -->
6019 <h3>
6020   <a name="int_varargs">Variable Argument Handling Intrinsics</a>
6021 </h3>
6022
6023 <div>
6024
6025 <p>Variable argument support is defined in LLVM with
6026    the <a href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three
6027    intrinsic functions.  These functions are related to the similarly named
6028    macros defined in the <tt>&lt;stdarg.h&gt;</tt> header file.</p>
6029
6030 <p>All of these functions operate on arguments that use a target-specific value
6031    type "<tt>va_list</tt>".  The LLVM assembly language reference manual does
6032    not define what this type is, so all transformations should be prepared to
6033    handle these functions regardless of the type used.</p>
6034
6035 <p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a>
6036    instruction and the variable argument handling intrinsic functions are
6037    used.</p>
6038
6039 <pre class="doc_code">
6040 define i32 @test(i32 %X, ...) {
6041   ; Initialize variable argument processing
6042   %ap = alloca i8*
6043   %ap2 = bitcast i8** %ap to i8*
6044   call void @llvm.va_start(i8* %ap2)
6045
6046   ; Read a single integer argument
6047   %tmp = va_arg i8** %ap, i32
6048
6049   ; Demonstrate usage of llvm.va_copy and llvm.va_end
6050   %aq = alloca i8*
6051   %aq2 = bitcast i8** %aq to i8*
6052   call void @llvm.va_copy(i8* %aq2, i8* %ap2)
6053   call void @llvm.va_end(i8* %aq2)
6054
6055   ; Stop processing of arguments.
6056   call void @llvm.va_end(i8* %ap2)
6057   ret i32 %tmp
6058 }
6059
6060 declare void @llvm.va_start(i8*)
6061 declare void @llvm.va_copy(i8*, i8*)
6062 declare void @llvm.va_end(i8*)
6063 </pre>
6064
6065 <!-- _______________________________________________________________________ -->
6066 <h4>
6067   <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
6068 </h4>
6069
6070
6071 <div>
6072
6073 <h5>Syntax:</h5>
6074 <pre>
6075   declare void %llvm.va_start(i8* &lt;arglist&gt;)
6076 </pre>
6077
6078 <h5>Overview:</h5>
6079 <p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*&lt;arglist&gt;</tt>
6080    for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p>
6081
6082 <h5>Arguments:</h5>
6083 <p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p>
6084
6085 <h5>Semantics:</h5>
6086 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt>
6087    macro available in C.  In a target-dependent way, it initializes
6088    the <tt>va_list</tt> element to which the argument points, so that the next
6089    call to <tt>va_arg</tt> will produce the first variable argument passed to
6090    the function.  Unlike the C <tt>va_start</tt> macro, this intrinsic does not
6091    need to know the last argument of the function as the compiler can figure
6092    that out.</p>
6093
6094 </div>
6095
6096 <!-- _______________________________________________________________________ -->
6097 <h4>
6098  <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
6099 </h4>
6100
6101 <div>
6102
6103 <h5>Syntax:</h5>
6104 <pre>
6105   declare void @llvm.va_end(i8* &lt;arglist&gt;)
6106 </pre>
6107
6108 <h5>Overview:</h5>
6109 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*&lt;arglist&gt;</tt>,
6110    which has been initialized previously
6111    with <tt><a href="#int_va_start">llvm.va_start</a></tt>
6112    or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p>
6113
6114 <h5>Arguments:</h5>
6115 <p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p>
6116
6117 <h5>Semantics:</h5>
6118 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt>
6119    macro available in C.  In a target-dependent way, it destroys
6120    the <tt>va_list</tt> element to which the argument points.  Calls
6121    to <a href="#int_va_start"><tt>llvm.va_start</tt></a>
6122    and <a href="#int_va_copy"> <tt>llvm.va_copy</tt></a> must be matched exactly
6123    with calls to <tt>llvm.va_end</tt>.</p>
6124
6125 </div>
6126
6127 <!-- _______________________________________________________________________ -->
6128 <h4>
6129   <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
6130 </h4>
6131
6132 <div>
6133
6134 <h5>Syntax:</h5>
6135 <pre>
6136   declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
6137 </pre>
6138
6139 <h5>Overview:</h5>
6140 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position
6141    from the source argument list to the destination argument list.</p>
6142
6143 <h5>Arguments:</h5>
6144 <p>The first argument is a pointer to a <tt>va_list</tt> element to initialize.
6145    The second argument is a pointer to a <tt>va_list</tt> element to copy
6146    from.</p>
6147
6148 <h5>Semantics:</h5>
6149 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt>
6150    macro available in C.  In a target-dependent way, it copies the
6151    source <tt>va_list</tt> element into the destination <tt>va_list</tt>
6152    element.  This intrinsic is necessary because
6153    the <tt><a href="#int_va_start"> llvm.va_start</a></tt> intrinsic may be
6154    arbitrarily complex and require, for example, memory allocation.</p>
6155
6156 </div>
6157
6158 </div>
6159
6160 <!-- ======================================================================= -->
6161 <h3>
6162   <a name="int_gc">Accurate Garbage Collection Intrinsics</a>
6163 </h3>
6164
6165 <div>
6166
6167 <p>LLVM support for <a href="GarbageCollection.html">Accurate Garbage
6168 Collection</a> (GC) requires the implementation and generation of these
6169 intrinsics. These intrinsics allow identification of <a href="#int_gcroot">GC
6170 roots on the stack</a>, as well as garbage collector implementations that
6171 require <a href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a>
6172 barriers.  Front-ends for type-safe garbage collected languages should generate
6173 these intrinsics to make use of the LLVM garbage collectors.  For more details,
6174 see <a href="GarbageCollection.html">Accurate Garbage Collection with
6175 LLVM</a>.</p>
6176
6177 <p>The garbage collection intrinsics only operate on objects in the generic
6178    address space (address space zero).</p>
6179
6180 <!-- _______________________________________________________________________ -->
6181 <h4>
6182   <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
6183 </h4>
6184
6185 <div>
6186
6187 <h5>Syntax:</h5>
6188 <pre>
6189   declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
6190 </pre>
6191
6192 <h5>Overview:</h5>
6193 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to
6194    the code generator, and allows some metadata to be associated with it.</p>
6195
6196 <h5>Arguments:</h5>
6197 <p>The first argument specifies the address of a stack object that contains the
6198    root pointer.  The second pointer (which must be either a constant or a
6199    global value address) contains the meta-data to be associated with the
6200    root.</p>
6201
6202 <h5>Semantics:</h5>
6203 <p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc"
6204    location.  At compile-time, the code generator generates information to allow
6205    the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>'
6206    intrinsic may only be used in a function which <a href="#gc">specifies a GC
6207    algorithm</a>.</p>
6208
6209 </div>
6210
6211 <!-- _______________________________________________________________________ -->
6212 <h4>
6213   <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
6214 </h4>
6215
6216 <div>
6217
6218 <h5>Syntax:</h5>
6219 <pre>
6220   declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr)
6221 </pre>
6222
6223 <h5>Overview:</h5>
6224 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap
6225    locations, allowing garbage collector implementations that require read
6226    barriers.</p>
6227
6228 <h5>Arguments:</h5>
6229 <p>The second argument is the address to read from, which should be an address
6230    allocated from the garbage collector.  The first object is a pointer to the
6231    start of the referenced object, if needed by the language runtime (otherwise
6232    null).</p>
6233
6234 <h5>Semantics:</h5>
6235 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load
6236    instruction, but may be replaced with substantially more complex code by the
6237    garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic
6238    may only be used in a function which <a href="#gc">specifies a GC
6239    algorithm</a>.</p>
6240
6241 </div>
6242
6243 <!-- _______________________________________________________________________ -->
6244 <h4>
6245   <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
6246 </h4>
6247
6248 <div>
6249
6250 <h5>Syntax:</h5>
6251 <pre>
6252   declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2)
6253 </pre>
6254
6255 <h5>Overview:</h5>
6256 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap
6257    locations, allowing garbage collector implementations that require write
6258    barriers (such as generational or reference counting collectors).</p>
6259
6260 <h5>Arguments:</h5>
6261 <p>The first argument is the reference to store, the second is the start of the
6262    object to store it to, and the third is the address of the field of Obj to
6263    store to.  If the runtime does not require a pointer to the object, Obj may
6264    be null.</p>
6265
6266 <h5>Semantics:</h5>
6267 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store
6268    instruction, but may be replaced with substantially more complex code by the
6269    garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic
6270    may only be used in a function which <a href="#gc">specifies a GC
6271    algorithm</a>.</p>
6272
6273 </div>
6274
6275 </div>
6276
6277 <!-- ======================================================================= -->
6278 <h3>
6279   <a name="int_codegen">Code Generator Intrinsics</a>
6280 </h3>
6281
6282 <div>
6283
6284 <p>These intrinsics are provided by LLVM to expose special features that may
6285    only be implemented with code generator support.</p>
6286
6287 <!-- _______________________________________________________________________ -->
6288 <h4>
6289   <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
6290 </h4>
6291
6292 <div>
6293
6294 <h5>Syntax:</h5>
6295 <pre>
6296   declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
6297 </pre>
6298
6299 <h5>Overview:</h5>
6300 <p>The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a
6301    target-specific value indicating the return address of the current function
6302    or one of its callers.</p>
6303
6304 <h5>Arguments:</h5>
6305 <p>The argument to this intrinsic indicates which function to return the address
6306    for.  Zero indicates the calling function, one indicates its caller, etc.
6307    The argument is <b>required</b> to be a constant integer value.</p>
6308
6309 <h5>Semantics:</h5>
6310 <p>The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer
6311    indicating the return address of the specified call frame, or zero if it
6312    cannot be identified.  The value returned by this intrinsic is likely to be
6313    incorrect or 0 for arguments other than zero, so it should only be used for
6314    debugging purposes.</p>
6315
6316 <p>Note that calling this intrinsic does not prevent function inlining or other
6317    aggressive transformations, so the value returned may not be that of the
6318    obvious source-language caller.</p>
6319
6320 </div>
6321
6322 <!-- _______________________________________________________________________ -->
6323 <h4>
6324   <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
6325 </h4>
6326
6327 <div>
6328
6329 <h5>Syntax:</h5>
6330 <pre>
6331   declare i8* @llvm.frameaddress(i32 &lt;level&gt;)
6332 </pre>
6333
6334 <h5>Overview:</h5>
6335 <p>The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the
6336    target-specific frame pointer value for the specified stack frame.</p>
6337
6338 <h5>Arguments:</h5>
6339 <p>The argument to this intrinsic indicates which function to return the frame
6340    pointer for.  Zero indicates the calling function, one indicates its caller,
6341    etc.  The argument is <b>required</b> to be a constant integer value.</p>
6342
6343 <h5>Semantics:</h5>
6344 <p>The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer
6345    indicating the frame address of the specified call frame, or zero if it
6346    cannot be identified.  The value returned by this intrinsic is likely to be
6347    incorrect or 0 for arguments other than zero, so it should only be used for
6348    debugging purposes.</p>
6349
6350 <p>Note that calling this intrinsic does not prevent function inlining or other
6351    aggressive transformations, so the value returned may not be that of the
6352    obvious source-language caller.</p>
6353
6354 </div>
6355
6356 <!-- _______________________________________________________________________ -->
6357 <h4>
6358   <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
6359 </h4>
6360
6361 <div>
6362
6363 <h5>Syntax:</h5>
6364 <pre>
6365   declare i8* @llvm.stacksave()
6366 </pre>
6367
6368 <h5>Overview:</h5>
6369 <p>The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state
6370    of the function stack, for use
6371    with <a href="#int_stackrestore"> <tt>llvm.stackrestore</tt></a>.  This is
6372    useful for implementing language features like scoped automatic variable
6373    sized arrays in C99.</p>
6374
6375 <h5>Semantics:</h5>
6376 <p>This intrinsic returns a opaque pointer value that can be passed
6377    to <a href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>.  When
6378    an <tt>llvm.stackrestore</tt> intrinsic is executed with a value saved
6379    from <tt>llvm.stacksave</tt>, it effectively restores the state of the stack
6380    to the state it was in when the <tt>llvm.stacksave</tt> intrinsic executed.
6381    In practice, this pops any <a href="#i_alloca">alloca</a> blocks from the
6382    stack that were allocated after the <tt>llvm.stacksave</tt> was executed.</p>
6383
6384 </div>
6385
6386 <!-- _______________________________________________________________________ -->
6387 <h4>
6388   <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
6389 </h4>
6390
6391 <div>
6392
6393 <h5>Syntax:</h5>
6394 <pre>
6395   declare void @llvm.stackrestore(i8* %ptr)
6396 </pre>
6397
6398 <h5>Overview:</h5>
6399 <p>The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of
6400    the function stack to the state it was in when the
6401    corresponding <a href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic
6402    executed.  This is useful for implementing language features like scoped
6403    automatic variable sized arrays in C99.</p>
6404
6405 <h5>Semantics:</h5>
6406 <p>See the description
6407    for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.</p>
6408
6409 </div>
6410
6411 <!-- _______________________________________________________________________ -->
6412 <h4>
6413   <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
6414 </h4>
6415
6416 <div>
6417
6418 <h5>Syntax:</h5>
6419 <pre>
6420   declare void @llvm.prefetch(i8* &lt;address&gt;, i32 &lt;rw&gt;, i32 &lt;locality&gt;, i32 &lt;cache type&gt;)
6421 </pre>
6422
6423 <h5>Overview:</h5>
6424 <p>The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to
6425    insert a prefetch instruction if supported; otherwise, it is a noop.
6426    Prefetches have no effect on the behavior of the program but can change its
6427    performance characteristics.</p>
6428
6429 <h5>Arguments:</h5>
6430 <p><tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the
6431    specifier determining if the fetch should be for a read (0) or write (1),
6432    and <tt>locality</tt> is a temporal locality specifier ranging from (0) - no
6433    locality, to (3) - extremely local keep in cache. The <tt>cache type</tt>
6434    specifies whether the prefetch is performed on the data (1) or instruction (0)
6435    cache. The <tt>rw</tt>, <tt>locality</tt> and <tt>cache type</tt> arguments
6436    must be constant integers.</p>
6437
6438 <h5>Semantics:</h5>
6439 <p>This intrinsic does not modify the behavior of the program.  In particular,
6440    prefetches cannot trap and do not produce a value.  On targets that support
6441    this intrinsic, the prefetch can provide hints to the processor cache for
6442    better performance.</p>
6443
6444 </div>
6445
6446 <!-- _______________________________________________________________________ -->
6447 <h4>
6448   <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
6449 </h4>
6450
6451 <div>
6452
6453 <h5>Syntax:</h5>
6454 <pre>
6455   declare void @llvm.pcmarker(i32 &lt;id&gt;)
6456 </pre>
6457
6458 <h5>Overview:</h5>
6459 <p>The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program
6460    Counter (PC) in a region of code to simulators and other tools.  The method
6461    is target specific, but it is expected that the marker will use exported
6462    symbols to transmit the PC of the marker.  The marker makes no guarantees
6463    that it will remain with any specific instruction after optimizations.  It is
6464    possible that the presence of a marker will inhibit optimizations.  The
6465    intended use is to be inserted after optimizations to allow correlations of
6466    simulation runs.</p>
6467
6468 <h5>Arguments:</h5>
6469 <p><tt>id</tt> is a numerical id identifying the marker.</p>
6470
6471 <h5>Semantics:</h5>
6472 <p>This intrinsic does not modify the behavior of the program.  Backends that do
6473    not support this intrinsic may ignore it.</p>
6474
6475 </div>
6476
6477 <!-- _______________________________________________________________________ -->
6478 <h4>
6479   <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
6480 </h4>
6481
6482 <div>
6483
6484 <h5>Syntax:</h5>
6485 <pre>
6486   declare i64 @llvm.readcyclecounter()
6487 </pre>
6488
6489 <h5>Overview:</h5>
6490 <p>The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle
6491    counter register (or similar low latency, high accuracy clocks) on those
6492    targets that support it.  On X86, it should map to RDTSC.  On Alpha, it
6493    should map to RPCC.  As the backing counters overflow quickly (on the order
6494    of 9 seconds on alpha), this should only be used for small timings.</p>
6495
6496 <h5>Semantics:</h5>
6497 <p>When directly supported, reading the cycle counter should not modify any
6498    memory.  Implementations are allowed to either return a application specific
6499    value or a system wide value.  On backends without support, this is lowered
6500    to a constant 0.</p>
6501
6502 </div>
6503
6504 </div>
6505
6506 <!-- ======================================================================= -->
6507 <h3>
6508   <a name="int_libc">Standard C Library Intrinsics</a>
6509 </h3>
6510
6511 <div>
6512
6513 <p>LLVM provides intrinsics for a few important standard C library functions.
6514    These intrinsics allow source-language front-ends to pass information about
6515    the alignment of the pointer arguments to the code generator, providing
6516    opportunity for more efficient code generation.</p>
6517
6518 <!-- _______________________________________________________________________ -->
6519 <h4>
6520   <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
6521 </h4>
6522
6523 <div>
6524
6525 <h5>Syntax:</h5>
6526 <p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any
6527    integer bit width and for different address spaces. Not all targets support
6528    all bit widths however.</p>
6529
6530 <pre>
6531   declare void @llvm.memcpy.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6532                                           i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6533   declare void @llvm.memcpy.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6534                                           i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6535 </pre>
6536
6537 <h5>Overview:</h5>
6538 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
6539    source location to the destination location.</p>
6540
6541 <p>Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt>
6542    intrinsics do not return a value, takes extra alignment/isvolatile arguments
6543    and the pointers can be in specified address spaces.</p>
6544
6545 <h5>Arguments:</h5>
6546
6547 <p>The first argument is a pointer to the destination, the second is a pointer
6548    to the source.  The third argument is an integer argument specifying the
6549    number of bytes to copy, the fourth argument is the alignment of the
6550    source and destination locations, and the fifth is a boolean indicating a
6551    volatile access.</p>
6552
6553 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6554    then the caller guarantees that both the source and destination pointers are
6555    aligned to that boundary.</p>
6556
6557 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6558    <tt>llvm.memcpy</tt> call is a <a href="#volatile">volatile operation</a>.
6559    The detailed access behavior is not very cleanly specified and it is unwise
6560    to depend on it.</p>
6561
6562 <h5>Semantics:</h5>
6563
6564 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the
6565    source location to the destination location, which are not allowed to
6566    overlap.  It copies "len" bytes of memory over.  If the argument is known to
6567    be aligned to some boundary, this can be specified as the fourth argument,
6568    otherwise it should be set to 0 or 1.</p>
6569
6570 </div>
6571
6572 <!-- _______________________________________________________________________ -->
6573 <h4>
6574   <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
6575 </h4>
6576
6577 <div>
6578
6579 <h5>Syntax:</h5>
6580 <p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit
6581    width and for different address space. Not all targets support all bit
6582    widths however.</p>
6583
6584 <pre>
6585   declare void @llvm.memmove.p0i8.p0i8.i32(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6586                                            i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6587   declare void @llvm.memmove.p0i8.p0i8.i64(i8* &lt;dest&gt;, i8* &lt;src&gt;,
6588                                            i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6589 </pre>
6590
6591 <h5>Overview:</h5>
6592 <p>The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the
6593    source location to the destination location. It is similar to the
6594    '<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to
6595    overlap.</p>
6596
6597 <p>Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt>
6598    intrinsics do not return a value, takes extra alignment/isvolatile arguments
6599    and the pointers can be in specified address spaces.</p>
6600
6601 <h5>Arguments:</h5>
6602
6603 <p>The first argument is a pointer to the destination, the second is a pointer
6604    to the source.  The third argument is an integer argument specifying the
6605    number of bytes to copy, the fourth argument is the alignment of the
6606    source and destination locations, and the fifth is a boolean indicating a
6607    volatile access.</p>
6608
6609 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6610    then the caller guarantees that the source and destination pointers are
6611    aligned to that boundary.</p>
6612
6613 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6614    <tt>llvm.memmove</tt> call is a <a href="#volatile">volatile operation</a>.
6615    The detailed access behavior is not very cleanly specified and it is unwise
6616    to depend on it.</p>
6617
6618 <h5>Semantics:</h5>
6619
6620 <p>The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the
6621    source location to the destination location, which may overlap.  It copies
6622    "len" bytes of memory over.  If the argument is known to be aligned to some
6623    boundary, this can be specified as the fourth argument, otherwise it should
6624    be set to 0 or 1.</p>
6625
6626 </div>
6627
6628 <!-- _______________________________________________________________________ -->
6629 <h4>
6630   <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
6631 </h4>
6632
6633 <div>
6634
6635 <h5>Syntax:</h5>
6636 <p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
6637    width and for different address spaces. However, not all targets support all
6638    bit widths.</p>
6639
6640 <pre>
6641   declare void @llvm.memset.p0i8.i32(i8* &lt;dest&gt;, i8 &lt;val&gt;,
6642                                      i32 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6643   declare void @llvm.memset.p0i8.i64(i8* &lt;dest&gt;, i8 &lt;val&gt;,
6644                                      i64 &lt;len&gt;, i32 &lt;align&gt;, i1 &lt;isvolatile&gt;)
6645 </pre>
6646
6647 <h5>Overview:</h5>
6648 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a
6649    particular byte value.</p>
6650
6651 <p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt>
6652    intrinsic does not return a value and takes extra alignment/volatile
6653    arguments.  Also, the destination can be in an arbitrary address space.</p>
6654
6655 <h5>Arguments:</h5>
6656 <p>The first argument is a pointer to the destination to fill, the second is the
6657    byte value with which to fill it, the third argument is an integer argument
6658    specifying the number of bytes to fill, and the fourth argument is the known
6659    alignment of the destination location.</p>
6660
6661 <p>If the call to this intrinsic has an alignment value that is not 0 or 1,
6662    then the caller guarantees that the destination pointer is aligned to that
6663    boundary.</p>
6664
6665 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the
6666    <tt>llvm.memset</tt> call is a <a href="#volatile">volatile operation</a>.
6667    The detailed access behavior is not very cleanly specified and it is unwise
6668    to depend on it.</p>
6669
6670 <h5>Semantics:</h5>
6671 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting
6672    at the destination location.  If the argument is known to be aligned to some
6673    boundary, this can be specified as the fourth argument, otherwise it should
6674    be set to 0 or 1.</p>
6675
6676 </div>
6677
6678 <!-- _______________________________________________________________________ -->
6679 <h4>
6680   <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
6681 </h4>
6682
6683 <div>
6684
6685 <h5>Syntax:</h5>
6686 <p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any
6687    floating point or vector of floating point type. Not all targets support all
6688    types however.</p>
6689
6690 <pre>
6691   declare float     @llvm.sqrt.f32(float %Val)
6692   declare double    @llvm.sqrt.f64(double %Val)
6693   declare x86_fp80  @llvm.sqrt.f80(x86_fp80 %Val)
6694   declare fp128     @llvm.sqrt.f128(fp128 %Val)
6695   declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val)
6696 </pre>
6697
6698 <h5>Overview:</h5>
6699 <p>The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand,
6700    returning the same value as the libm '<tt>sqrt</tt>' functions would.
6701    Unlike <tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined
6702    behavior for negative numbers other than -0.0 (which allows for better
6703    optimization, because there is no need to worry about errno being
6704    set).  <tt>llvm.sqrt(-0.0)</tt> is defined to return -0.0 like IEEE sqrt.</p>
6705
6706 <h5>Arguments:</h5>
6707 <p>The argument and return value are floating point numbers of the same
6708    type.</p>
6709
6710 <h5>Semantics:</h5>
6711 <p>This function returns the sqrt of the specified operand if it is a
6712    nonnegative floating point number.</p>
6713
6714 </div>
6715
6716 <!-- _______________________________________________________________________ -->
6717 <h4>
6718   <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
6719 </h4>
6720
6721 <div>
6722
6723 <h5>Syntax:</h5>
6724 <p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any
6725    floating point or vector of floating point type. Not all targets support all
6726    types however.</p>
6727
6728 <pre>
6729   declare float     @llvm.powi.f32(float  %Val, i32 %power)
6730   declare double    @llvm.powi.f64(double %Val, i32 %power)
6731   declare x86_fp80  @llvm.powi.f80(x86_fp80  %Val, i32 %power)
6732   declare fp128     @llvm.powi.f128(fp128 %Val, i32 %power)
6733   declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128  %Val, i32 %power)
6734 </pre>
6735
6736 <h5>Overview:</h5>
6737 <p>The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the
6738    specified (positive or negative) power.  The order of evaluation of
6739    multiplications is not defined.  When a vector of floating point type is
6740    used, the second argument remains a scalar integer value.</p>
6741
6742 <h5>Arguments:</h5>
6743 <p>The second argument is an integer power, and the first is a value to raise to
6744    that power.</p>
6745
6746 <h5>Semantics:</h5>
6747 <p>This function returns the first value raised to the second power with an
6748    unspecified sequence of rounding operations.</p>
6749
6750 </div>
6751
6752 <!-- _______________________________________________________________________ -->
6753 <h4>
6754   <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
6755 </h4>
6756
6757 <div>
6758
6759 <h5>Syntax:</h5>
6760 <p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any
6761    floating point or vector of floating point type. Not all targets support all
6762    types however.</p>
6763
6764 <pre>
6765   declare float     @llvm.sin.f32(float  %Val)
6766   declare double    @llvm.sin.f64(double %Val)
6767   declare x86_fp80  @llvm.sin.f80(x86_fp80  %Val)
6768   declare fp128     @llvm.sin.f128(fp128 %Val)
6769   declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128  %Val)
6770 </pre>
6771
6772 <h5>Overview:</h5>
6773 <p>The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.</p>
6774
6775 <h5>Arguments:</h5>
6776 <p>The argument and return value are floating point numbers of the same
6777    type.</p>
6778
6779 <h5>Semantics:</h5>
6780 <p>This function returns the sine of the specified operand, returning the same
6781    values as the libm <tt>sin</tt> functions would, and handles error conditions
6782    in the same way.</p>
6783
6784 </div>
6785
6786 <!-- _______________________________________________________________________ -->
6787 <h4>
6788   <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
6789 </h4>
6790
6791 <div>
6792
6793 <h5>Syntax:</h5>
6794 <p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any
6795    floating point or vector of floating point type. Not all targets support all
6796    types however.</p>
6797
6798 <pre>
6799   declare float     @llvm.cos.f32(float  %Val)
6800   declare double    @llvm.cos.f64(double %Val)
6801   declare x86_fp80  @llvm.cos.f80(x86_fp80  %Val)
6802   declare fp128     @llvm.cos.f128(fp128 %Val)
6803   declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128  %Val)
6804 </pre>
6805
6806 <h5>Overview:</h5>
6807 <p>The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.</p>
6808
6809 <h5>Arguments:</h5>
6810 <p>The argument and return value are floating point numbers of the same
6811    type.</p>
6812
6813 <h5>Semantics:</h5>
6814 <p>This function returns the cosine of the specified operand, returning the same
6815    values as the libm <tt>cos</tt> functions would, and handles error conditions
6816    in the same way.</p>
6817
6818 </div>
6819
6820 <!-- _______________________________________________________________________ -->
6821 <h4>
6822   <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
6823 </h4>
6824
6825 <div>
6826
6827 <h5>Syntax:</h5>
6828 <p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any
6829    floating point or vector of floating point type. Not all targets support all
6830    types however.</p>
6831
6832 <pre>
6833   declare float     @llvm.pow.f32(float  %Val, float %Power)
6834   declare double    @llvm.pow.f64(double %Val, double %Power)
6835   declare x86_fp80  @llvm.pow.f80(x86_fp80  %Val, x86_fp80 %Power)
6836   declare fp128     @llvm.pow.f128(fp128 %Val, fp128 %Power)
6837   declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128  %Val, ppc_fp128 Power)
6838 </pre>
6839
6840 <h5>Overview:</h5>
6841 <p>The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the
6842    specified (positive or negative) power.</p>
6843
6844 <h5>Arguments:</h5>
6845 <p>The second argument is a floating point power, and the first is a value to
6846    raise to that power.</p>
6847
6848 <h5>Semantics:</h5>
6849 <p>This function returns the first value raised to the second power, returning
6850    the same values as the libm <tt>pow</tt> functions would, and handles error
6851    conditions in the same way.</p>
6852
6853 </div>
6854
6855 </div>
6856
6857 <!-- _______________________________________________________________________ -->
6858 <h4>
6859   <a name="int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a>
6860 </h4>
6861
6862 <div>
6863
6864 <h5>Syntax:</h5>
6865 <p>This is an overloaded intrinsic. You can use <tt>llvm.exp</tt> on any
6866    floating point or vector of floating point type. Not all targets support all
6867    types however.</p>
6868
6869 <pre>
6870   declare float     @llvm.exp.f32(float  %Val)
6871   declare double    @llvm.exp.f64(double %Val)
6872   declare x86_fp80  @llvm.exp.f80(x86_fp80  %Val)
6873   declare fp128     @llvm.exp.f128(fp128 %Val)
6874   declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128  %Val)
6875 </pre>
6876
6877 <h5>Overview:</h5>
6878 <p>The '<tt>llvm.exp.*</tt>' intrinsics perform the exp function.</p>
6879
6880 <h5>Arguments:</h5>
6881 <p>The argument and return value are floating point numbers of the same
6882    type.</p>
6883
6884 <h5>Semantics:</h5>
6885 <p>This function returns the same values as the libm <tt>exp</tt> functions
6886    would, and handles error conditions in the same way.</p>
6887
6888 </div>
6889
6890 <!-- _______________________________________________________________________ -->
6891 <h4>
6892   <a name="int_log">'<tt>llvm.log.*</tt>' Intrinsic</a>
6893 </h4>
6894
6895 <div>
6896
6897 <h5>Syntax:</h5>
6898 <p>This is an overloaded intrinsic. You can use <tt>llvm.log</tt> on any
6899    floating point or vector of floating point type. Not all targets support all
6900    types however.</p>
6901
6902 <pre>
6903   declare float     @llvm.log.f32(float  %Val)
6904   declare double    @llvm.log.f64(double %Val)
6905   declare x86_fp80  @llvm.log.f80(x86_fp80  %Val)
6906   declare fp128     @llvm.log.f128(fp128 %Val)
6907   declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128  %Val)
6908 </pre>
6909
6910 <h5>Overview:</h5>
6911 <p>The '<tt>llvm.log.*</tt>' intrinsics perform the log function.</p>
6912
6913 <h5>Arguments:</h5>
6914 <p>The argument and return value are floating point numbers of the same
6915    type.</p>
6916
6917 <h5>Semantics:</h5>
6918 <p>This function returns the same values as the libm <tt>log</tt> functions
6919    would, and handles error conditions in the same way.</p>
6920
6921 <h4>
6922   <a name="int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a>
6923 </h4>
6924
6925 <div>
6926
6927 <h5>Syntax:</h5>
6928 <p>This is an overloaded intrinsic. You can use <tt>llvm.fma</tt> on any
6929    floating point or vector of floating point type. Not all targets support all
6930    types however.</p>
6931
6932 <pre>
6933   declare float     @llvm.fma.f32(float  %a, float  %b, float  %c)
6934   declare double    @llvm.fma.f64(double %a, double %b, double %c)
6935   declare x86_fp80  @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c)
6936   declare fp128     @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
6937   declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c)
6938 </pre>
6939
6940 <h5>Overview:</h5>
6941 <p>The '<tt>llvm.fma.*</tt>' intrinsics perform the fused multiply-add
6942    operation.</p>
6943
6944 <h5>Arguments:</h5>
6945 <p>The argument and return value are floating point numbers of the same
6946    type.</p>
6947
6948 <h5>Semantics:</h5>
6949 <p>This function returns the same values as the libm <tt>fma</tt> functions
6950    would.</p>
6951
6952 </div>
6953
6954 <!-- ======================================================================= -->
6955 <h3>
6956   <a name="int_manip">Bit Manipulation Intrinsics</a>
6957 </h3>
6958
6959 <div>
6960
6961 <p>LLVM provides intrinsics for a few important bit manipulation operations.
6962    These allow efficient code generation for some algorithms.</p>
6963
6964 <!-- _______________________________________________________________________ -->
6965 <h4>
6966   <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
6967 </h4>
6968
6969 <div>
6970
6971 <h5>Syntax:</h5>
6972 <p>This is an overloaded intrinsic function. You can use bswap on any integer
6973    type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p>
6974
6975 <pre>
6976   declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
6977   declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
6978   declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
6979 </pre>
6980
6981 <h5>Overview:</h5>
6982 <p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer
6983    values with an even number of bytes (positive multiple of 16 bits).  These
6984    are useful for performing operations on data that is not in the target's
6985    native byte order.</p>
6986
6987 <h5>Semantics:</h5>
6988 <p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high
6989    and low byte of the input i16 swapped.  Similarly,
6990    the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four
6991    bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1,
6992    2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order.
6993    The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics
6994    extend this concept to additional even-byte lengths (6 bytes, 8 bytes and
6995    more, respectively).</p>
6996
6997 </div>
6998
6999 <!-- _______________________________________________________________________ -->
7000 <h4>
7001   <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
7002 </h4>
7003
7004 <div>
7005
7006 <h5>Syntax:</h5>
7007 <p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit
7008    width, or on any vector with integer elements. Not all targets support all
7009   bit widths or vector types, however.</p>
7010
7011 <pre>
7012   declare i8 @llvm.ctpop.i8(i8  &lt;src&gt;)
7013   declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
7014   declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
7015   declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
7016   declare i256 @llvm.ctpop.i256(i256 &lt;src&gt;)
7017   declare &lt;2 x i32&gt; @llvm.ctpop.v2i32(&lt;2 x i32&gt; &lt;src&gt;)
7018 </pre>
7019
7020 <h5>Overview:</h5>
7021 <p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set
7022    in a value.</p>
7023
7024 <h5>Arguments:</h5>
7025 <p>The only argument is the value to be counted.  The argument may be of any
7026    integer type, or a vector with integer elements.
7027    The return type must match the argument type.</p>
7028
7029 <h5>Semantics:</h5>
7030 <p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable, or within each
7031    element of a vector.</p>
7032
7033 </div>
7034
7035 <!-- _______________________________________________________________________ -->
7036 <h4>
7037   <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
7038 </h4>
7039
7040 <div>
7041
7042 <h5>Syntax:</h5>
7043 <p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any
7044    integer bit width, or any vector whose elements are integers. Not all
7045    targets support all bit widths or vector types, however.</p>
7046
7047 <pre>
7048   declare i8 @llvm.ctlz.i8 (i8  &lt;src&gt;)
7049   declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
7050   declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
7051   declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
7052   declare i256 @llvm.ctlz.i256(i256 &lt;src&gt;)
7053   declare &lt;2 x i32&gt; @llvm.ctlz.v2i32(&lt;2 x i32&gt; &lt;src;gt)
7054 </pre>
7055
7056 <h5>Overview:</h5>
7057 <p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of
7058    leading zeros in a variable.</p>
7059
7060 <h5>Arguments:</h5>
7061 <p>The only argument is the value to be counted.  The argument may be of any
7062    integer type, or any vector type with integer element type.
7063    The return type must match the argument type.</p>
7064
7065 <h5>Semantics:</h5>
7066 <p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant)
7067    zeros in a variable, or within each element of the vector if the operation
7068    is of vector type.  If the src == 0 then the result is the size in bits of
7069    the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p>
7070
7071 </div>
7072
7073 <!-- _______________________________________________________________________ -->
7074 <h4>
7075   <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
7076 </h4>
7077
7078 <div>
7079
7080 <h5>Syntax:</h5>
7081 <p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any
7082    integer bit width, or any vector of integer elements. Not all targets
7083    support all bit widths or vector types, however.</p>
7084
7085 <pre>
7086   declare i8 @llvm.cttz.i8 (i8  &lt;src&gt;)
7087   declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
7088   declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
7089   declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
7090   declare i256 @llvm.cttz.i256(i256 &lt;src&gt;)
7091   declase &lt;2 x i32&gt; @llvm.cttz.v2i32(&lt;2 x i32&gt; &lt;src&gt;)
7092 </pre>
7093
7094 <h5>Overview:</h5>
7095 <p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of
7096    trailing zeros.</p>
7097
7098 <h5>Arguments:</h5>
7099 <p>The only argument is the value to be counted.  The argument may be of any
7100    integer type, or a vectory with integer element type..  The return type
7101    must match the argument type.</p>
7102
7103 <h5>Semantics:</h5>
7104 <p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant)
7105    zeros in a variable, or within each element of a vector.
7106    If the src == 0 then the result is the size in bits of
7107    the type of src.  For example, <tt>llvm.cttz(2) = 1</tt>.</p>
7108
7109 </div>
7110
7111 </div>
7112
7113 <!-- ======================================================================= -->
7114 <h3>
7115   <a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
7116 </h3>
7117
7118 <div>
7119
7120 <p>LLVM provides intrinsics for some arithmetic with overflow operations.</p>
7121
7122 <!-- _______________________________________________________________________ -->
7123 <h4>
7124   <a name="int_sadd_overflow">
7125     '<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics
7126   </a>
7127 </h4>
7128
7129 <div>
7130
7131 <h5>Syntax:</h5>
7132 <p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt>
7133    on any integer bit width.</p>
7134
7135 <pre>
7136   declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
7137   declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
7138   declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)
7139 </pre>
7140
7141 <h5>Overview:</h5>
7142 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
7143    a signed addition of the two arguments, and indicate whether an overflow
7144    occurred during the signed summation.</p>
7145
7146 <h5>Arguments:</h5>
7147 <p>The arguments (%a and %b) and the first element of the result structure may
7148    be of integer types of any bit width, but they must have the same bit
7149    width. The second element of the result structure must be of
7150    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7151    undergo signed addition.</p>
7152
7153 <h5>Semantics:</h5>
7154 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform
7155    a signed addition of the two variables. They return a structure &mdash; the
7156    first element of which is the signed summation, and the second element of
7157    which is a bit specifying if the signed summation resulted in an
7158    overflow.</p>
7159
7160 <h5>Examples:</h5>
7161 <pre>
7162   %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
7163   %sum = extractvalue {i32, i1} %res, 0
7164   %obit = extractvalue {i32, i1} %res, 1
7165   br i1 %obit, label %overflow, label %normal
7166 </pre>
7167
7168 </div>
7169
7170 <!-- _______________________________________________________________________ -->
7171 <h4>
7172   <a name="int_uadd_overflow">
7173     '<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics
7174   </a>
7175 </h4>
7176
7177 <div>
7178
7179 <h5>Syntax:</h5>
7180 <p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt>
7181    on any integer bit width.</p>
7182
7183 <pre>
7184   declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
7185   declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
7186   declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
7187 </pre>
7188
7189 <h5>Overview:</h5>
7190 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
7191    an unsigned addition of the two arguments, and indicate whether a carry
7192    occurred during the unsigned summation.</p>
7193
7194 <h5>Arguments:</h5>
7195 <p>The arguments (%a and %b) and the first element of the result structure may
7196    be of integer types of any bit width, but they must have the same bit
7197    width. The second element of the result structure must be of
7198    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7199    undergo unsigned addition.</p>
7200
7201 <h5>Semantics:</h5>
7202 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform
7203    an unsigned addition of the two arguments. They return a structure &mdash;
7204    the first element of which is the sum, and the second element of which is a
7205    bit specifying if the unsigned summation resulted in a carry.</p>
7206
7207 <h5>Examples:</h5>
7208 <pre>
7209   %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
7210   %sum = extractvalue {i32, i1} %res, 0
7211   %obit = extractvalue {i32, i1} %res, 1
7212   br i1 %obit, label %carry, label %normal
7213 </pre>
7214
7215 </div>
7216
7217 <!-- _______________________________________________________________________ -->
7218 <h4>
7219   <a name="int_ssub_overflow">
7220     '<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics
7221   </a>
7222 </h4>
7223
7224 <div>
7225
7226 <h5>Syntax:</h5>
7227 <p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt>
7228    on any integer bit width.</p>
7229
7230 <pre>
7231   declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
7232   declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
7233   declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)
7234 </pre>
7235
7236 <h5>Overview:</h5>
7237 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
7238    a signed subtraction of the two arguments, and indicate whether an overflow
7239    occurred during the signed subtraction.</p>
7240
7241 <h5>Arguments:</h5>
7242 <p>The arguments (%a and %b) and the first element of the result structure may
7243    be of integer types of any bit width, but they must have the same bit
7244    width. The second element of the result structure must be of
7245    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7246    undergo signed subtraction.</p>
7247
7248 <h5>Semantics:</h5>
7249 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform
7250    a signed subtraction of the two arguments. They return a structure &mdash;
7251    the first element of which is the subtraction, and the second element of
7252    which is a bit specifying if the signed subtraction resulted in an
7253    overflow.</p>
7254
7255 <h5>Examples:</h5>
7256 <pre>
7257   %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
7258   %sum = extractvalue {i32, i1} %res, 0
7259   %obit = extractvalue {i32, i1} %res, 1
7260   br i1 %obit, label %overflow, label %normal
7261 </pre>
7262
7263 </div>
7264
7265 <!-- _______________________________________________________________________ -->
7266 <h4>
7267   <a name="int_usub_overflow">
7268     '<tt>llvm.usub.with.overflow.*</tt>' Intrinsics
7269   </a>
7270 </h4>
7271
7272 <div>
7273
7274 <h5>Syntax:</h5>
7275 <p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt>
7276    on any integer bit width.</p>
7277
7278 <pre>
7279   declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
7280   declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
7281   declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b)
7282 </pre>
7283
7284 <h5>Overview:</h5>
7285 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
7286    an unsigned subtraction of the two arguments, and indicate whether an
7287    overflow occurred during the unsigned subtraction.</p>
7288
7289 <h5>Arguments:</h5>
7290 <p>The arguments (%a and %b) and the first element of the result structure may
7291    be of integer types of any bit width, but they must have the same bit
7292    width. The second element of the result structure must be of
7293    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7294    undergo unsigned subtraction.</p>
7295
7296 <h5>Semantics:</h5>
7297 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform
7298    an unsigned subtraction of the two arguments. They return a structure &mdash;
7299    the first element of which is the subtraction, and the second element of
7300    which is a bit specifying if the unsigned subtraction resulted in an
7301    overflow.</p>
7302
7303 <h5>Examples:</h5>
7304 <pre>
7305   %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
7306   %sum = extractvalue {i32, i1} %res, 0
7307   %obit = extractvalue {i32, i1} %res, 1
7308   br i1 %obit, label %overflow, label %normal
7309 </pre>
7310
7311 </div>
7312
7313 <!-- _______________________________________________________________________ -->
7314 <h4>
7315   <a name="int_smul_overflow">
7316     '<tt>llvm.smul.with.overflow.*</tt>' Intrinsics
7317   </a>
7318 </h4>
7319
7320 <div>
7321
7322 <h5>Syntax:</h5>
7323 <p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt>
7324    on any integer bit width.</p>
7325
7326 <pre>
7327   declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
7328   declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
7329   declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)
7330 </pre>
7331
7332 <h5>Overview:</h5>
7333
7334 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
7335    a signed multiplication of the two arguments, and indicate whether an
7336    overflow occurred during the signed multiplication.</p>
7337
7338 <h5>Arguments:</h5>
7339 <p>The arguments (%a and %b) and the first element of the result structure may
7340    be of integer types of any bit width, but they must have the same bit
7341    width. The second element of the result structure must be of
7342    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7343    undergo signed multiplication.</p>
7344
7345 <h5>Semantics:</h5>
7346 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform
7347    a signed multiplication of the two arguments. They return a structure &mdash;
7348    the first element of which is the multiplication, and the second element of
7349    which is a bit specifying if the signed multiplication resulted in an
7350    overflow.</p>
7351
7352 <h5>Examples:</h5>
7353 <pre>
7354   %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
7355   %sum = extractvalue {i32, i1} %res, 0
7356   %obit = extractvalue {i32, i1} %res, 1
7357   br i1 %obit, label %overflow, label %normal
7358 </pre>
7359
7360 </div>
7361
7362 <!-- _______________________________________________________________________ -->
7363 <h4>
7364   <a name="int_umul_overflow">
7365     '<tt>llvm.umul.with.overflow.*</tt>' Intrinsics
7366   </a>
7367 </h4>
7368
7369 <div>
7370
7371 <h5>Syntax:</h5>
7372 <p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt>
7373    on any integer bit width.</p>
7374
7375 <pre>
7376   declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
7377   declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
7378   declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
7379 </pre>
7380
7381 <h5>Overview:</h5>
7382 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
7383    a unsigned multiplication of the two arguments, and indicate whether an
7384    overflow occurred during the unsigned multiplication.</p>
7385
7386 <h5>Arguments:</h5>
7387 <p>The arguments (%a and %b) and the first element of the result structure may
7388    be of integer types of any bit width, but they must have the same bit
7389    width. The second element of the result structure must be of
7390    type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will
7391    undergo unsigned multiplication.</p>
7392
7393 <h5>Semantics:</h5>
7394 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform
7395    an unsigned multiplication of the two arguments. They return a structure
7396    &mdash; the first element of which is the multiplication, and the second
7397    element of which is a bit specifying if the unsigned multiplication resulted
7398    in an overflow.</p>
7399
7400 <h5>Examples:</h5>
7401 <pre>
7402   %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
7403   %sum = extractvalue {i32, i1} %res, 0
7404   %obit = extractvalue {i32, i1} %res, 1
7405   br i1 %obit, label %overflow, label %normal
7406 </pre>
7407
7408 </div>
7409
7410 </div>
7411
7412 <!-- ======================================================================= -->
7413 <h3>
7414   <a name="int_fp16">Half Precision Floating Point Intrinsics</a>
7415 </h3>
7416
7417 <div>
7418
7419 <p>Half precision floating point is a storage-only format. This means that it is
7420    a dense encoding (in memory) but does not support computation in the
7421    format.</p>
7422    
7423 <p>This means that code must first load the half-precision floating point
7424    value as an i16, then convert it to float with <a
7425    href="#int_convert_from_fp16"><tt>llvm.convert.from.fp16</tt></a>.
7426    Computation can then be performed on the float value (including extending to
7427    double etc).  To store the value back to memory, it is first converted to
7428    float if needed, then converted to i16 with
7429    <a href="#int_convert_to_fp16"><tt>llvm.convert.to.fp16</tt></a>, then
7430    storing as an i16 value.</p>
7431
7432 <!-- _______________________________________________________________________ -->
7433 <h4>
7434   <a name="int_convert_to_fp16">
7435     '<tt>llvm.convert.to.fp16</tt>' Intrinsic
7436   </a>
7437 </h4>
7438
7439 <div>
7440
7441 <h5>Syntax:</h5>
7442 <pre>
7443   declare i16 @llvm.convert.to.fp16(f32 %a)
7444 </pre>
7445
7446 <h5>Overview:</h5>
7447 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
7448    a conversion from single precision floating point format to half precision
7449    floating point format.</p>
7450
7451 <h5>Arguments:</h5>
7452 <p>The intrinsic function contains single argument - the value to be
7453    converted.</p>
7454
7455 <h5>Semantics:</h5>
7456 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs
7457    a conversion from single precision floating point format to half precision
7458    floating point format. The return value is an <tt>i16</tt> which
7459    contains the converted number.</p>
7460
7461 <h5>Examples:</h5>
7462 <pre>
7463   %res = call i16 @llvm.convert.to.fp16(f32 %a)
7464   store i16 %res, i16* @x, align 2
7465 </pre>
7466
7467 </div>
7468
7469 <!-- _______________________________________________________________________ -->
7470 <h4>
7471   <a name="int_convert_from_fp16">
7472     '<tt>llvm.convert.from.fp16</tt>' Intrinsic
7473   </a>
7474 </h4>
7475
7476 <div>
7477
7478 <h5>Syntax:</h5>
7479 <pre>
7480   declare f32 @llvm.convert.from.fp16(i16 %a)
7481 </pre>
7482
7483 <h5>Overview:</h5>
7484 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs
7485    a conversion from half precision floating point format to single precision
7486    floating point format.</p>
7487
7488 <h5>Arguments:</h5>
7489 <p>The intrinsic function contains single argument - the value to be
7490    converted.</p>
7491
7492 <h5>Semantics:</h5>
7493 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs a
7494    conversion from half single precision floating point format to single
7495    precision floating point format. The input half-float value is represented by
7496    an <tt>i16</tt> value.</p>
7497
7498 <h5>Examples:</h5>
7499 <pre>
7500   %a = load i16* @x, align 2
7501   %res = call f32 @llvm.convert.from.fp16(i16 %a)
7502 </pre>
7503
7504 </div>
7505
7506 </div>
7507
7508 <!-- ======================================================================= -->
7509 <h3>
7510   <a name="int_debugger">Debugger Intrinsics</a>
7511 </h3>
7512
7513 <div>
7514
7515 <p>The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt>
7516    prefix), are described in
7517    the <a href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source
7518    Level Debugging</a> document.</p>
7519
7520 </div>
7521
7522 <!-- ======================================================================= -->
7523 <h3>
7524   <a name="int_eh">Exception Handling Intrinsics</a>
7525 </h3>
7526
7527 <div>
7528
7529 <p>The LLVM exception handling intrinsics (which all start with
7530    <tt>llvm.eh.</tt> prefix), are described in
7531    the <a href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
7532    Handling</a> document.</p>
7533
7534 </div>
7535
7536 <!-- ======================================================================= -->
7537 <h3>
7538   <a name="int_trampoline">Trampoline Intrinsic</a>
7539 </h3>
7540
7541 <div>
7542
7543 <p>This intrinsic makes it possible to excise one parameter, marked with
7544    the <a href="#nest"><tt>nest</tt></a> attribute, from a function.
7545    The result is a callable
7546    function pointer lacking the nest parameter - the caller does not need to
7547    provide a value for it.  Instead, the value to use is stored in advance in a
7548    "trampoline", a block of memory usually allocated on the stack, which also
7549    contains code to splice the nest value into the argument list.  This is used
7550    to implement the GCC nested function address extension.</p>
7551
7552 <p>For example, if the function is
7553    <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function
7554    pointer has signature <tt>i32 (i32, i32)*</tt>.  It can be created as
7555    follows:</p>
7556
7557 <pre class="doc_code">
7558   %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86
7559   %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0
7560   %p = call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval)
7561   %fp = bitcast i8* %p to i32 (i32, i32)*
7562 </pre>
7563
7564 <p>The call <tt>%val = call i32 %fp(i32 %x, i32 %y)</tt> is then equivalent
7565    to <tt>%val = call i32 %f(i8* %nval, i32 %x, i32 %y)</tt>.</p>
7566
7567 <!-- _______________________________________________________________________ -->
7568 <h4>
7569   <a name="int_it">
7570     '<tt>llvm.init.trampoline</tt>' Intrinsic
7571   </a>
7572 </h4>
7573
7574 <div>
7575
7576 <h5>Syntax:</h5>
7577 <pre>
7578   declare i8* @llvm.init.trampoline(i8* &lt;tramp&gt;, i8* &lt;func&gt;, i8* &lt;nval&gt;)
7579 </pre>
7580
7581 <h5>Overview:</h5>
7582 <p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a
7583    function pointer suitable for executing it.</p>
7584
7585 <h5>Arguments:</h5>
7586 <p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all
7587    pointers.  The <tt>tramp</tt> argument must point to a sufficiently large and
7588    sufficiently aligned block of memory; this memory is written to by the
7589    intrinsic.  Note that the size and the alignment are target-specific - LLVM
7590    currently provides no portable way of determining them, so a front-end that
7591    generates this intrinsic needs to have some target-specific knowledge.
7592    The <tt>func</tt> argument must hold a function bitcast to
7593    an <tt>i8*</tt>.</p>
7594
7595 <h5>Semantics:</h5>
7596 <p>The block of memory pointed to by <tt>tramp</tt> is filled with target
7597    dependent code, turning it into a function.  A pointer to this function is
7598    returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate
7599    function pointer type</a> before being called.  The new function's signature
7600    is the same as that of <tt>func</tt> with any arguments marked with
7601    the <tt>nest</tt> attribute removed.  At most one such <tt>nest</tt> argument
7602    is allowed, and it must be of pointer type.  Calling the new function is
7603    equivalent to calling <tt>func</tt> with the same argument list, but
7604    with <tt>nval</tt> used for the missing <tt>nest</tt> argument.  If, after
7605    calling <tt>llvm.init.trampoline</tt>, the memory pointed to
7606    by <tt>tramp</tt> is modified, then the effect of any later call to the
7607    returned function pointer is undefined.</p>
7608
7609 </div>
7610
7611 </div>
7612
7613 <!-- ======================================================================= -->
7614 <h3>
7615   <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
7616 </h3>
7617
7618 <div>
7619
7620 <p>These intrinsic functions expand the "universal IR" of LLVM to represent
7621    hardware constructs for atomic operations and memory synchronization.  This
7622    provides an interface to the hardware, not an interface to the programmer. It
7623    is aimed at a low enough level to allow any programming models or APIs
7624    (Application Programming Interfaces) which need atomic behaviors to map
7625    cleanly onto it. It is also modeled primarily on hardware behavior. Just as
7626    hardware provides a "universal IR" for source languages, it also provides a
7627    starting point for developing a "universal" atomic operation and
7628    synchronization IR.</p>
7629
7630 <p>These do <em>not</em> form an API such as high-level threading libraries,
7631    software transaction memory systems, atomic primitives, and intrinsic
7632    functions as found in BSD, GNU libc, atomic_ops, APR, and other system and
7633    application libraries.  The hardware interface provided by LLVM should allow
7634    a clean implementation of all of these APIs and parallel programming models.
7635    No one model or paradigm should be selected above others unless the hardware
7636    itself ubiquitously does so.</p>
7637
7638 <!-- _______________________________________________________________________ -->
7639 <h4>
7640   <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
7641 </h4>
7642
7643 <div>
7644 <h5>Syntax:</h5>
7645 <pre>
7646   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;)
7647 </pre>
7648
7649 <h5>Overview:</h5>
7650 <p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between
7651    specific pairs of memory access types.</p>
7652
7653 <h5>Arguments:</h5>
7654 <p>The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments.
7655    The first four arguments enables a specific barrier as listed below.  The
7656    fifth argument specifies that the barrier applies to io or device or uncached
7657    memory.</p>
7658
7659 <ul>
7660   <li><tt>ll</tt>: load-load barrier</li>
7661   <li><tt>ls</tt>: load-store barrier</li>
7662   <li><tt>sl</tt>: store-load barrier</li>
7663   <li><tt>ss</tt>: store-store barrier</li>
7664   <li><tt>device</tt>: barrier applies to device and uncached memory also.</li>
7665 </ul>
7666
7667 <h5>Semantics:</h5>
7668 <p>This intrinsic causes the system to enforce some ordering constraints upon
7669    the loads and stores of the program. This barrier does not
7670    indicate <em>when</em> any events will occur, it only enforces
7671    an <em>order</em> in which they occur. For any of the specified pairs of load
7672    and store operations (f.ex.  load-load, or store-load), all of the first
7673    operations preceding the barrier will complete before any of the second
7674    operations succeeding the barrier begin. Specifically the semantics for each
7675    pairing is as follows:</p>
7676
7677 <ul>
7678   <li><tt>ll</tt>: All loads before the barrier must complete before any load
7679       after the barrier begins.</li>
7680   <li><tt>ls</tt>: All loads before the barrier must complete before any
7681       store after the barrier begins.</li>
7682   <li><tt>ss</tt>: All stores before the barrier must complete before any
7683       store after the barrier begins.</li>
7684   <li><tt>sl</tt>: All stores before the barrier must complete before any
7685       load after the barrier begins.</li>
7686 </ul>
7687
7688 <p>These semantics are applied with a logical "and" behavior when more than one
7689    is enabled in a single memory barrier intrinsic.</p>
7690
7691 <p>Backends may implement stronger barriers than those requested when they do
7692    not support as fine grained a barrier as requested.  Some architectures do
7693    not need all types of barriers and on such architectures, these become
7694    noops.</p>
7695
7696 <h5>Example:</h5>
7697 <pre>
7698 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7699 %ptr      = bitcast i8* %mallocP to i32*
7700             store i32 4, %ptr
7701
7702 %result1  = load i32* %ptr      <i>; yields {i32}:result1 = 4</i>
7703             call void @llvm.memory.barrier(i1 false, i1 true, i1 false, i1 false, i1 true)
7704                                 <i>; guarantee the above finishes</i>
7705             store i32 8, %ptr   <i>; before this begins</i>
7706 </pre>
7707
7708 </div>
7709
7710 <!-- _______________________________________________________________________ -->
7711 <h4>
7712   <a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a>
7713 </h4>
7714
7715 <div>
7716
7717 <h5>Syntax:</h5>
7718 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on
7719    any integer bit width and for different address spaces. Not all targets
7720    support all bit widths however.</p>
7721
7722 <pre>
7723   declare i8 @llvm.atomic.cmp.swap.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;cmp&gt;, i8 &lt;val&gt;)
7724   declare i16 @llvm.atomic.cmp.swap.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;cmp&gt;, i16 &lt;val&gt;)
7725   declare i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;cmp&gt;, i32 &lt;val&gt;)
7726   declare i64 @llvm.atomic.cmp.swap.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;cmp&gt;, i64 &lt;val&gt;)
7727 </pre>
7728
7729 <h5>Overview:</h5>
7730 <p>This loads a value in memory and compares it to a given value. If they are
7731    equal, it stores a new value into the memory.</p>
7732
7733 <h5>Arguments:</h5>
7734 <p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result
7735    as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the
7736    same bit width. The <tt>ptr</tt> argument must be a pointer to a value of
7737    this integer type. While any bit width integer may be used, targets may only
7738    lower representations they support in hardware.</p>
7739
7740 <h5>Semantics:</h5>
7741 <p>This entire intrinsic must be executed atomically. It first loads the value
7742    in memory pointed to by <tt>ptr</tt> and compares it with the
7743    value <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the
7744    memory. The loaded value is yielded in all cases. This provides the
7745    equivalent of an atomic compare-and-swap operation within the SSA
7746    framework.</p>
7747
7748 <h5>Examples:</h5>
7749 <pre>
7750 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7751 %ptr      = bitcast i8* %mallocP to i32*
7752             store i32 4, %ptr
7753
7754 %val1     = add i32 4, 4
7755 %result1  = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 4, %val1)
7756                                           <i>; yields {i32}:result1 = 4</i>
7757 %stored1  = icmp eq i32 %result1, 4       <i>; yields {i1}:stored1 = true</i>
7758 %memval1  = load i32* %ptr                <i>; yields {i32}:memval1 = 8</i>
7759
7760 %val2     = add i32 1, 1
7761 %result2  = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 5, %val2)
7762                                           <i>; yields {i32}:result2 = 8</i>
7763 %stored2  = icmp eq i32 %result2, 5       <i>; yields {i1}:stored2 = false</i>
7764
7765 %memval2  = load i32* %ptr                <i>; yields {i32}:memval2 = 8</i>
7766 </pre>
7767
7768 </div>
7769
7770 <!-- _______________________________________________________________________ -->
7771 <h4>
7772   <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
7773 </h4>
7774
7775 <div>
7776 <h5>Syntax:</h5>
7777
7778 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any
7779    integer bit width. Not all targets support all bit widths however.</p>
7780
7781 <pre>
7782   declare i8 @llvm.atomic.swap.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;val&gt;)
7783   declare i16 @llvm.atomic.swap.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;val&gt;)
7784   declare i32 @llvm.atomic.swap.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;val&gt;)
7785   declare i64 @llvm.atomic.swap.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;val&gt;)
7786 </pre>
7787
7788 <h5>Overview:</h5>
7789 <p>This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields
7790    the value from memory. It then stores the value in <tt>val</tt> in the memory
7791    at <tt>ptr</tt>.</p>
7792
7793 <h5>Arguments:</h5>
7794 <p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both
7795   the <tt>val</tt> argument and the result must be integers of the same bit
7796   width.  The first argument, <tt>ptr</tt>, must be a pointer to a value of this
7797   integer type. The targets may only lower integer representations they
7798   support.</p>
7799
7800 <h5>Semantics:</h5>
7801 <p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and
7802    stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the
7803    equivalent of an atomic swap operation within the SSA framework.</p>
7804
7805 <h5>Examples:</h5>
7806 <pre>
7807 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7808 %ptr      = bitcast i8* %mallocP to i32*
7809             store i32 4, %ptr
7810
7811 %val1     = add i32 4, 4
7812 %result1  = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val1)
7813                                         <i>; yields {i32}:result1 = 4</i>
7814 %stored1  = icmp eq i32 %result1, 4     <i>; yields {i1}:stored1 = true</i>
7815 %memval1  = load i32* %ptr              <i>; yields {i32}:memval1 = 8</i>
7816
7817 %val2     = add i32 1, 1
7818 %result2  = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val2)
7819                                         <i>; yields {i32}:result2 = 8</i>
7820
7821 %stored2  = icmp eq i32 %result2, 8     <i>; yields {i1}:stored2 = true</i>
7822 %memval2  = load i32* %ptr              <i>; yields {i32}:memval2 = 2</i>
7823 </pre>
7824
7825 </div>
7826
7827 <!-- _______________________________________________________________________ -->
7828 <h4>
7829   <a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a>
7830 </h4>
7831
7832 <div>
7833
7834 <h5>Syntax:</h5>
7835 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on
7836    any integer bit width. Not all targets support all bit widths however.</p>
7837
7838 <pre>
7839   declare i8 @llvm.atomic.load.add.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7840   declare i16 @llvm.atomic.load.add.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7841   declare i32 @llvm.atomic.load.add.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7842   declare i64 @llvm.atomic.load.add.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7843 </pre>
7844
7845 <h5>Overview:</h5>
7846 <p>This intrinsic adds <tt>delta</tt> to the value stored in memory
7847    at <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
7848
7849 <h5>Arguments:</h5>
7850 <p>The intrinsic takes two arguments, the first a pointer to an integer value
7851    and the second an integer value. The result is also an integer value. These
7852    integer types can have any bit width, but they must all have the same bit
7853    width. The targets may only lower integer representations they support.</p>
7854
7855 <h5>Semantics:</h5>
7856 <p>This intrinsic does a series of operations atomically. It first loads the
7857    value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result
7858    to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p>
7859
7860 <h5>Examples:</h5>
7861 <pre>
7862 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7863 %ptr      = bitcast i8* %mallocP to i32*
7864             store i32 4, %ptr
7865 %result1  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 4)
7866                                 <i>; yields {i32}:result1 = 4</i>
7867 %result2  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 2)
7868                                 <i>; yields {i32}:result2 = 8</i>
7869 %result3  = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 5)
7870                                 <i>; yields {i32}:result3 = 10</i>
7871 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 15</i>
7872 </pre>
7873
7874 </div>
7875
7876 <!-- _______________________________________________________________________ -->
7877 <h4>
7878   <a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a>
7879 </h4>
7880
7881 <div>
7882
7883 <h5>Syntax:</h5>
7884 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on
7885    any integer bit width and for different address spaces. Not all targets
7886    support all bit widths however.</p>
7887
7888 <pre>
7889   declare i8 @llvm.atomic.load.sub.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7890   declare i16 @llvm.atomic.load.sub.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7891   declare i32 @llvm.atomic.load.sub.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7892   declare i64 @llvm.atomic.load.sub.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7893 </pre>
7894
7895 <h5>Overview:</h5>
7896 <p>This intrinsic subtracts <tt>delta</tt> to the value stored in memory at
7897    <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p>
7898
7899 <h5>Arguments:</h5>
7900 <p>The intrinsic takes two arguments, the first a pointer to an integer value
7901    and the second an integer value. The result is also an integer value. These
7902    integer types can have any bit width, but they must all have the same bit
7903    width. The targets may only lower integer representations they support.</p>
7904
7905 <h5>Semantics:</h5>
7906 <p>This intrinsic does a series of operations atomically. It first loads the
7907    value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the
7908    result to <tt>ptr</tt>. It yields the original value stored
7909    at <tt>ptr</tt>.</p>
7910
7911 <h5>Examples:</h5>
7912 <pre>
7913 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
7914 %ptr      = bitcast i8* %mallocP to i32*
7915             store i32 8, %ptr
7916 %result1  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 4)
7917                                 <i>; yields {i32}:result1 = 8</i>
7918 %result2  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 2)
7919                                 <i>; yields {i32}:result2 = 4</i>
7920 %result3  = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 5)
7921                                 <i>; yields {i32}:result3 = 2</i>
7922 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = -3</i>
7923 </pre>
7924
7925 </div>
7926
7927 <!-- _______________________________________________________________________ -->
7928 <h4>
7929   <a name="int_atomic_load_and">
7930     '<tt>llvm.atomic.load.and.*</tt>' Intrinsic
7931   </a>
7932   <br>
7933   <a name="int_atomic_load_nand">
7934     '<tt>llvm.atomic.load.nand.*</tt>' Intrinsic
7935   </a>
7936   <br>
7937   <a name="int_atomic_load_or">
7938     '<tt>llvm.atomic.load.or.*</tt>' Intrinsic
7939   </a>
7940   <br>
7941   <a name="int_atomic_load_xor">
7942     '<tt>llvm.atomic.load.xor.*</tt>' Intrinsic
7943   </a>
7944 </h4>
7945
7946 <div>
7947
7948 <h5>Syntax:</h5>
7949 <p>These are overloaded intrinsics. You can
7950   use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>,
7951   <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer
7952   bit width and for different address spaces. Not all targets support all bit
7953   widths however.</p>
7954
7955 <pre>
7956   declare i8 @llvm.atomic.load.and.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7957   declare i16 @llvm.atomic.load.and.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7958   declare i32 @llvm.atomic.load.and.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7959   declare i64 @llvm.atomic.load.and.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7960 </pre>
7961
7962 <pre>
7963   declare i8 @llvm.atomic.load.or.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7964   declare i16 @llvm.atomic.load.or.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7965   declare i32 @llvm.atomic.load.or.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7966   declare i64 @llvm.atomic.load.or.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7967 </pre>
7968
7969 <pre>
7970   declare i8 @llvm.atomic.load.nand.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7971   declare i16 @llvm.atomic.load.nand.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7972   declare i32 @llvm.atomic.load.nand.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7973   declare i64 @llvm.atomic.load.nand.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7974 </pre>
7975
7976 <pre>
7977   declare i8 @llvm.atomic.load.xor.i8.p0i32(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
7978   declare i16 @llvm.atomic.load.xor.i16.p0i32(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
7979   declare i32 @llvm.atomic.load.xor.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
7980   declare i64 @llvm.atomic.load.xor.i64.p0i32(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
7981 </pre>
7982
7983 <h5>Overview:</h5>
7984 <p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to
7985    the value stored in memory at <tt>ptr</tt>. It yields the original value
7986    at <tt>ptr</tt>.</p>
7987
7988 <h5>Arguments:</h5>
7989 <p>These intrinsics take two arguments, the first a pointer to an integer value
7990    and the second an integer value. The result is also an integer value. These
7991    integer types can have any bit width, but they must all have the same bit
7992    width. The targets may only lower integer representations they support.</p>
7993
7994 <h5>Semantics:</h5>
7995 <p>These intrinsics does a series of operations atomically. They first load the
7996    value stored at <tt>ptr</tt>. They then do the bitwise
7997    operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the
7998    original value stored at <tt>ptr</tt>.</p>
7999
8000 <h5>Examples:</h5>
8001 <pre>
8002 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
8003 %ptr      = bitcast i8* %mallocP to i32*
8004             store i32 0x0F0F, %ptr
8005 %result0  = call i32 @llvm.atomic.load.nand.i32.p0i32(i32* %ptr, i32 0xFF)
8006                                 <i>; yields {i32}:result0 = 0x0F0F</i>
8007 %result1  = call i32 @llvm.atomic.load.and.i32.p0i32(i32* %ptr, i32 0xFF)
8008                                 <i>; yields {i32}:result1 = 0xFFFFFFF0</i>
8009 %result2  = call i32 @llvm.atomic.load.or.i32.p0i32(i32* %ptr, i32 0F)
8010                                 <i>; yields {i32}:result2 = 0xF0</i>
8011 %result3  = call i32 @llvm.atomic.load.xor.i32.p0i32(i32* %ptr, i32 0F)
8012                                 <i>; yields {i32}:result3 = FF</i>
8013 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = F0</i>
8014 </pre>
8015
8016 </div>
8017
8018 <!-- _______________________________________________________________________ -->
8019 <h4>
8020   <a name="int_atomic_load_max">
8021     '<tt>llvm.atomic.load.max.*</tt>' Intrinsic
8022   </a>
8023   <br>
8024   <a name="int_atomic_load_min">
8025     '<tt>llvm.atomic.load.min.*</tt>' Intrinsic
8026   </a>
8027   <br>
8028   <a name="int_atomic_load_umax">
8029     '<tt>llvm.atomic.load.umax.*</tt>' Intrinsic
8030   </a>
8031   <br>
8032   <a name="int_atomic_load_umin">
8033     '<tt>llvm.atomic.load.umin.*</tt>' Intrinsic
8034   </a>
8035 </h4>
8036
8037 <div>
8038
8039 <h5>Syntax:</h5>
8040 <p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>,
8041    <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and
8042    <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different
8043    address spaces. Not all targets support all bit widths however.</p>
8044
8045 <pre>
8046   declare i8 @llvm.atomic.load.max.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8047   declare i16 @llvm.atomic.load.max.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8048   declare i32 @llvm.atomic.load.max.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8049   declare i64 @llvm.atomic.load.max.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8050 </pre>
8051
8052 <pre>
8053   declare i8 @llvm.atomic.load.min.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8054   declare i16 @llvm.atomic.load.min.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8055   declare i32 @llvm.atomic.load.min.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8056   declare i64 @llvm.atomic.load.min.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8057 </pre>
8058
8059 <pre>
8060   declare i8 @llvm.atomic.load.umax.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8061   declare i16 @llvm.atomic.load.umax.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8062   declare i32 @llvm.atomic.load.umax.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8063   declare i64 @llvm.atomic.load.umax.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8064 </pre>
8065
8066 <pre>
8067   declare i8 @llvm.atomic.load.umin.i8.p0i8(i8* &lt;ptr&gt;, i8 &lt;delta&gt;)
8068   declare i16 @llvm.atomic.load.umin.i16.p0i16(i16* &lt;ptr&gt;, i16 &lt;delta&gt;)
8069   declare i32 @llvm.atomic.load.umin.i32.p0i32(i32* &lt;ptr&gt;, i32 &lt;delta&gt;)
8070   declare i64 @llvm.atomic.load.umin.i64.p0i64(i64* &lt;ptr&gt;, i64 &lt;delta&gt;)
8071 </pre>
8072
8073 <h5>Overview:</h5>
8074 <p>These intrinsics takes the signed or unsigned minimum or maximum of
8075    <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the
8076    original value at <tt>ptr</tt>.</p>
8077
8078 <h5>Arguments:</h5>
8079 <p>These intrinsics take two arguments, the first a pointer to an integer value
8080    and the second an integer value. The result is also an integer value. These
8081    integer types can have any bit width, but they must all have the same bit
8082    width. The targets may only lower integer representations they support.</p>
8083
8084 <h5>Semantics:</h5>
8085 <p>These intrinsics does a series of operations atomically. They first load the
8086    value stored at <tt>ptr</tt>. They then do the signed or unsigned min or
8087    max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They
8088    yield the original value stored at <tt>ptr</tt>.</p>
8089
8090 <h5>Examples:</h5>
8091 <pre>
8092 %mallocP  = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))
8093 %ptr      = bitcast i8* %mallocP to i32*
8094             store i32 7, %ptr
8095 %result0  = call i32 @llvm.atomic.load.min.i32.p0i32(i32* %ptr, i32 -2)
8096                                 <i>; yields {i32}:result0 = 7</i>
8097 %result1  = call i32 @llvm.atomic.load.max.i32.p0i32(i32* %ptr, i32 8)
8098                                 <i>; yields {i32}:result1 = -2</i>
8099 %result2  = call i32 @llvm.atomic.load.umin.i32.p0i32(i32* %ptr, i32 10)
8100                                 <i>; yields {i32}:result2 = 8</i>
8101 %result3  = call i32 @llvm.atomic.load.umax.i32.p0i32(i32* %ptr, i32 30)
8102                                 <i>; yields {i32}:result3 = 8</i>
8103 %memval1  = load i32* %ptr      <i>; yields {i32}:memval1 = 30</i>
8104 </pre>
8105
8106 </div>
8107
8108 </div>
8109
8110 <!-- ======================================================================= -->
8111 <h3>
8112   <a name="int_memorymarkers">Memory Use Markers</a>
8113 </h3>
8114
8115 <div>
8116
8117 <p>This class of intrinsics exists to information about the lifetime of memory
8118    objects and ranges where variables are immutable.</p>
8119
8120 <!-- _______________________________________________________________________ -->
8121 <h4>
8122   <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
8123 </h4>
8124
8125 <div>
8126
8127 <h5>Syntax:</h5>
8128 <pre>
8129   declare void @llvm.lifetime.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8130 </pre>
8131
8132 <h5>Overview:</h5>
8133 <p>The '<tt>llvm.lifetime.start</tt>' intrinsic specifies the start of a memory
8134    object's lifetime.</p>
8135
8136 <h5>Arguments:</h5>
8137 <p>The first argument is a constant integer representing the size of the
8138    object, or -1 if it is variable sized.  The second argument is a pointer to
8139    the object.</p>
8140
8141 <h5>Semantics:</h5>
8142 <p>This intrinsic indicates that before this point in the code, the value of the
8143    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
8144    never be used and has an undefined value.  A load from the pointer that
8145    precedes this intrinsic can be replaced with
8146    <tt>'<a href="#undefvalues">undef</a>'</tt>.</p>
8147
8148 </div>
8149
8150 <!-- _______________________________________________________________________ -->
8151 <h4>
8152   <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
8153 </h4>
8154
8155 <div>
8156
8157 <h5>Syntax:</h5>
8158 <pre>
8159   declare void @llvm.lifetime.end(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8160 </pre>
8161
8162 <h5>Overview:</h5>
8163 <p>The '<tt>llvm.lifetime.end</tt>' intrinsic specifies the end of a memory
8164    object's lifetime.</p>
8165
8166 <h5>Arguments:</h5>
8167 <p>The first argument is a constant integer representing the size of the
8168    object, or -1 if it is variable sized.  The second argument is a pointer to
8169    the object.</p>
8170
8171 <h5>Semantics:</h5>
8172 <p>This intrinsic indicates that after this point in the code, the value of the
8173    memory pointed to by <tt>ptr</tt> is dead.  This means that it is known to
8174    never be used and has an undefined value.  Any stores into the memory object
8175    following this intrinsic may be removed as dead.
8176
8177 </div>
8178
8179 <!-- _______________________________________________________________________ -->
8180 <h4>
8181   <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
8182 </h4>
8183
8184 <div>
8185
8186 <h5>Syntax:</h5>
8187 <pre>
8188   declare {}* @llvm.invariant.start(i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8189 </pre>
8190
8191 <h5>Overview:</h5>
8192 <p>The '<tt>llvm.invariant.start</tt>' intrinsic specifies that the contents of
8193    a memory object will not change.</p>
8194
8195 <h5>Arguments:</h5>
8196 <p>The first argument is a constant integer representing the size of the
8197    object, or -1 if it is variable sized.  The second argument is a pointer to
8198    the object.</p>
8199
8200 <h5>Semantics:</h5>
8201 <p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses
8202    the return value, the referenced memory location is constant and
8203    unchanging.</p>
8204
8205 </div>
8206
8207 <!-- _______________________________________________________________________ -->
8208 <h4>
8209   <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
8210 </h4>
8211
8212 <div>
8213
8214 <h5>Syntax:</h5>
8215 <pre>
8216   declare void @llvm.invariant.end({}* &lt;start&gt;, i64 &lt;size&gt;, i8* nocapture &lt;ptr&gt;)
8217 </pre>
8218
8219 <h5>Overview:</h5>
8220 <p>The '<tt>llvm.invariant.end</tt>' intrinsic specifies that the contents of
8221    a memory object are mutable.</p>
8222
8223 <h5>Arguments:</h5>
8224 <p>The first argument is the matching <tt>llvm.invariant.start</tt> intrinsic.
8225    The second argument is a constant integer representing the size of the
8226    object, or -1 if it is variable sized and the third argument is a pointer
8227    to the object.</p>
8228
8229 <h5>Semantics:</h5>
8230 <p>This intrinsic indicates that the memory is mutable again.</p>
8231
8232 </div>
8233
8234 </div>
8235
8236 <!-- ======================================================================= -->
8237 <h3>
8238   <a name="int_general">General Intrinsics</a>
8239 </h3>
8240
8241 <div>
8242
8243 <p>This class of intrinsics is designed to be generic and has no specific
8244    purpose.</p>
8245
8246 <!-- _______________________________________________________________________ -->
8247 <h4>
8248   <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
8249 </h4>
8250
8251 <div>
8252
8253 <h5>Syntax:</h5>
8254 <pre>
8255   declare void @llvm.var.annotation(i8* &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8256 </pre>
8257
8258 <h5>Overview:</h5>
8259 <p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p>
8260
8261 <h5>Arguments:</h5>
8262 <p>The first argument is a pointer to a value, the second is a pointer to a
8263    global string, the third is a pointer to a global string which is the source
8264    file name, and the last argument is the line number.</p>
8265
8266 <h5>Semantics:</h5>
8267 <p>This intrinsic allows annotation of local variables with arbitrary strings.
8268    This can be useful for special purpose optimizations that want to look for
8269    these annotations.  These have no other defined use, they are ignored by code
8270    generation and optimization.</p>
8271
8272 </div>
8273
8274 <!-- _______________________________________________________________________ -->
8275 <h4>
8276   <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
8277 </h4>
8278
8279 <div>
8280
8281 <h5>Syntax:</h5>
8282 <p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on
8283    any integer bit width.</p>
8284
8285 <pre>
8286   declare i8 @llvm.annotation.i8(i8 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8287   declare i16 @llvm.annotation.i16(i16 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8288   declare i32 @llvm.annotation.i32(i32 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8289   declare i64 @llvm.annotation.i64(i64 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8290   declare i256 @llvm.annotation.i256(i256 &lt;val&gt;, i8* &lt;str&gt;, i8* &lt;str&gt;, i32  &lt;int&gt;)
8291 </pre>
8292
8293 <h5>Overview:</h5>
8294 <p>The '<tt>llvm.annotation</tt>' intrinsic.</p>
8295
8296 <h5>Arguments:</h5>
8297 <p>The first argument is an integer value (result of some expression), the
8298    second is a pointer to a global string, the third is a pointer to a global
8299    string which is the source file name, and the last argument is the line
8300    number.  It returns the value of the first argument.</p>
8301
8302 <h5>Semantics:</h5>
8303 <p>This intrinsic allows annotations to be put on arbitrary expressions with
8304    arbitrary strings.  This can be useful for special purpose optimizations that
8305    want to look for these annotations.  These have no other defined use, they
8306    are ignored by code generation and optimization.</p>
8307
8308 </div>
8309
8310 <!-- _______________________________________________________________________ -->
8311 <h4>
8312   <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
8313 </h4>
8314
8315 <div>
8316
8317 <h5>Syntax:</h5>
8318 <pre>
8319   declare void @llvm.trap()
8320 </pre>
8321
8322 <h5>Overview:</h5>
8323 <p>The '<tt>llvm.trap</tt>' intrinsic.</p>
8324
8325 <h5>Arguments:</h5>
8326 <p>None.</p>
8327
8328 <h5>Semantics:</h5>
8329 <p>This intrinsics is lowered to the target dependent trap instruction. If the
8330    target does not have a trap instruction, this intrinsic will be lowered to
8331    the call of the <tt>abort()</tt> function.</p>
8332
8333 </div>
8334
8335 <!-- _______________________________________________________________________ -->
8336 <h4>
8337   <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
8338 </h4>
8339
8340 <div>
8341
8342 <h5>Syntax:</h5>
8343 <pre>
8344   declare void @llvm.stackprotector(i8* &lt;guard&gt;, i8** &lt;slot&gt;)
8345 </pre>
8346
8347 <h5>Overview:</h5>
8348 <p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and
8349    stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to
8350    ensure that it is placed on the stack before local variables.</p>
8351
8352 <h5>Arguments:</h5>
8353 <p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer
8354    arguments. The first argument is the value loaded from the stack
8355    guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt>
8356    that has enough space to hold the value of the guard.</p>
8357
8358 <h5>Semantics:</h5>
8359 <p>This intrinsic causes the prologue/epilogue inserter to force the position of
8360    the <tt>AllocaInst</tt> stack slot to be before local variables on the
8361    stack. This is to ensure that if a local variable on the stack is
8362    overwritten, it will destroy the value of the guard. When the function exits,
8363    the guard on the stack is checked against the original guard. If they are
8364    different, then the program aborts by calling the <tt>__stack_chk_fail()</tt>
8365    function.</p>
8366
8367 </div>
8368
8369 <!-- _______________________________________________________________________ -->
8370 <h4>
8371   <a name="int_objectsize">'<tt>llvm.objectsize</tt>' Intrinsic</a>
8372 </h4>
8373
8374 <div>
8375
8376 <h5>Syntax:</h5>
8377 <pre>
8378   declare i32 @llvm.objectsize.i32(i8* &lt;object&gt;, i1 &lt;type&gt;)
8379   declare i64 @llvm.objectsize.i64(i8* &lt;object&gt;, i1 &lt;type&gt;)
8380 </pre>
8381
8382 <h5>Overview:</h5>
8383 <p>The <tt>llvm.objectsize</tt> intrinsic is designed to provide information to
8384    the optimizers to determine at compile time whether a) an operation (like
8385    memcpy) will overflow a buffer that corresponds to an object, or b) that a
8386    runtime check for overflow isn't necessary. An object in this context means
8387    an allocation of a specific class, structure, array, or other object.</p>
8388
8389 <h5>Arguments:</h5>
8390 <p>The <tt>llvm.objectsize</tt> intrinsic takes two arguments. The first
8391    argument is a pointer to or into the <tt>object</tt>. The second argument
8392    is a boolean 0 or 1. This argument determines whether you want the 
8393    maximum (0) or minimum (1) bytes remaining. This needs to be a literal 0 or
8394    1, variables are not allowed.</p>
8395    
8396 <h5>Semantics:</h5>
8397 <p>The <tt>llvm.objectsize</tt> intrinsic is lowered to either a constant
8398    representing the size of the object concerned, or <tt>i32/i64 -1 or 0</tt>,
8399    depending on the <tt>type</tt> argument, if the size cannot be determined at
8400    compile time.</p>
8401
8402 </div>
8403
8404 </div>
8405
8406 </div>
8407
8408 <!-- *********************************************************************** -->
8409 <hr>
8410 <address>
8411   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
8412   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
8413   <a href="http://validator.w3.org/check/referer"><img
8414   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
8415
8416   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
8417   <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
8418   Last modified: $Date$
8419 </address>
8420
8421 </body>
8422 </html>