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 </ol> 57 </li> 58 <li><a href="#typesystem">Type System</a> 59 <ol> 60 <li><a href="#t_classifications">Type Classifications</a></li> 61 <li><a href="#t_primitive">Primitive Types</a> 62 <ol> 63 <li><a href="#t_integer">Integer Type</a></li> 64 <li><a href="#t_floating">Floating Point Types</a></li> 65 <li><a href="#t_x86mmx">X86mmx Type</a></li> 66 <li><a href="#t_void">Void Type</a></li> 67 <li><a href="#t_label">Label Type</a></li> 68 <li><a href="#t_metadata">Metadata Type</a></li> 69 </ol> 70 </li> 71 <li><a href="#t_derived">Derived Types</a> 72 <ol> 73 <li><a href="#t_aggregate">Aggregate Types</a> 74 <ol> 75 <li><a href="#t_array">Array Type</a></li> 76 <li><a href="#t_struct">Structure Type</a></li> 77 <li><a href="#t_opaque">Opaque Type</a></li> 78 <li><a href="#t_vector">Vector Type</a></li> 79 </ol> 80 </li> 81 <li><a href="#t_function">Function Type</a></li> 82 <li><a href="#t_pointer">Pointer Type</a></li> 83 </ol> 84 </li> 85 </ol> 86 </li> 87 <li><a href="#constants">Constants</a> 88 <ol> 89 <li><a href="#simpleconstants">Simple Constants</a></li> 90 <li><a href="#complexconstants">Complex Constants</a></li> 91 <li><a href="#globalconstants">Global Variable and Function Addresses</a></li> 92 <li><a href="#undefvalues">Undefined Values</a></li> 93 <li><a href="#trapvalues">Trap Values</a></li> 94 <li><a href="#blockaddress">Addresses of Basic Blocks</a></li> 95 <li><a href="#constantexprs">Constant Expressions</a></li> 96 </ol> 97 </li> 98 <li><a href="#othervalues">Other Values</a> 99 <ol> 100 <li><a href="#inlineasm">Inline Assembler Expressions</a></li> 101 <li><a href="#metadata">Metadata Nodes and Metadata Strings</a></li> 102 </ol> 103 </li> 104 <li><a href="#intrinsic_globals">Intrinsic Global Variables</a> 105 <ol> 106 <li><a href="#intg_used">The '<tt>llvm.used</tt>' Global Variable</a></li> 107 <li><a href="#intg_compiler_used">The '<tt>llvm.compiler.used</tt>' 108 Global Variable</a></li> 109 <li><a href="#intg_global_ctors">The '<tt>llvm.global_ctors</tt>' 110 Global Variable</a></li> 111 <li><a href="#intg_global_dtors">The '<tt>llvm.global_dtors</tt>' 112 Global Variable</a></li> 113 </ol> 114 </li> 115 <li><a href="#instref">Instruction Reference</a> 116 <ol> 117 <li><a href="#terminators">Terminator Instructions</a> 118 <ol> 119 <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li> 120 <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li> 121 <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li> 122 <li><a href="#i_indirectbr">'<tt>indirectbr</tt>' Instruction</a></li> 123 <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li> 124 <li><a href="#i_unwind">'<tt>unwind</tt>' Instruction</a></li> 125 <li><a href="#i_unreachable">'<tt>unreachable</tt>' Instruction</a></li> 126 </ol> 127 </li> 128 <li><a href="#binaryops">Binary Operations</a> 129 <ol> 130 <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li> 131 <li><a href="#i_fadd">'<tt>fadd</tt>' Instruction</a></li> 132 <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li> 133 <li><a href="#i_fsub">'<tt>fsub</tt>' Instruction</a></li> 134 <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li> 135 <li><a href="#i_fmul">'<tt>fmul</tt>' Instruction</a></li> 136 <li><a href="#i_udiv">'<tt>udiv</tt>' Instruction</a></li> 137 <li><a href="#i_sdiv">'<tt>sdiv</tt>' Instruction</a></li> 138 <li><a href="#i_fdiv">'<tt>fdiv</tt>' Instruction</a></li> 139 <li><a href="#i_urem">'<tt>urem</tt>' Instruction</a></li> 140 <li><a href="#i_srem">'<tt>srem</tt>' Instruction</a></li> 141 <li><a href="#i_frem">'<tt>frem</tt>' Instruction</a></li> 142 </ol> 143 </li> 144 <li><a href="#bitwiseops">Bitwise Binary Operations</a> 145 <ol> 146 <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li> 147 <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li> 148 <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li> 149 <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li> 150 <li><a href="#i_or">'<tt>or</tt>' Instruction</a></li> 151 <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li> 152 </ol> 153 </li> 154 <li><a href="#vectorops">Vector Operations</a> 155 <ol> 156 <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li> 157 <li><a href="#i_insertelement">'<tt>insertelement</tt>' Instruction</a></li> 158 <li><a href="#i_shufflevector">'<tt>shufflevector</tt>' Instruction</a></li> 159 </ol> 160 </li> 161 <li><a href="#aggregateops">Aggregate Operations</a> 162 <ol> 163 <li><a href="#i_extractvalue">'<tt>extractvalue</tt>' Instruction</a></li> 164 <li><a href="#i_insertvalue">'<tt>insertvalue</tt>' Instruction</a></li> 165 </ol> 166 </li> 167 <li><a href="#memoryops">Memory Access and Addressing Operations</a> 168 <ol> 169 <li><a href="#i_alloca">'<tt>alloca</tt>' Instruction</a></li> 170 <li><a href="#i_load">'<tt>load</tt>' Instruction</a></li> 171 <li><a href="#i_store">'<tt>store</tt>' Instruction</a></li> 172 <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li> 173 </ol> 174 </li> 175 <li><a href="#convertops">Conversion Operations</a> 176 <ol> 177 <li><a href="#i_trunc">'<tt>trunc .. to</tt>' Instruction</a></li> 178 <li><a href="#i_zext">'<tt>zext .. to</tt>' Instruction</a></li> 179 <li><a href="#i_sext">'<tt>sext .. to</tt>' Instruction</a></li> 180 <li><a href="#i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a></li> 181 <li><a href="#i_fpext">'<tt>fpext .. to</tt>' Instruction</a></li> 182 <li><a href="#i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a></li> 183 <li><a href="#i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a></li> 184 <li><a href="#i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a></li> 185 <li><a href="#i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a></li> 186 <li><a href="#i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a></li> 187 <li><a href="#i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a></li> 188 <li><a href="#i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a></li> 189 </ol> 190 </li> 191 <li><a href="#otherops">Other Operations</a> 192 <ol> 193 <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li> 194 <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li> 195 <li><a href="#i_phi">'<tt>phi</tt>' Instruction</a></li> 196 <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li> 197 <li><a href="#i_call">'<tt>call</tt>' Instruction</a></li> 198 <li><a href="#i_va_arg">'<tt>va_arg</tt>' Instruction</a></li> 199 </ol> 200 </li> 201 </ol> 202 </li> 203 <li><a href="#intrinsics">Intrinsic Functions</a> 204 <ol> 205 <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a> 206 <ol> 207 <li><a href="#int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li> 208 <li><a href="#int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a></li> 209 <li><a href="#int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a></li> 210 </ol> 211 </li> 212 <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a> 213 <ol> 214 <li><a href="#int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li> 215 <li><a href="#int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li> 216 <li><a href="#int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li> 217 </ol> 218 </li> 219 <li><a href="#int_codegen">Code Generator Intrinsics</a> 220 <ol> 221 <li><a href="#int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li> 222 <li><a href="#int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a></li> 223 <li><a href="#int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a></li> 224 <li><a href="#int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a></li> 225 <li><a href="#int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li> 226 <li><a href="#int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li> 227 <li><a href="#int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a></li> 228 </ol> 229 </li> 230 <li><a href="#int_libc">Standard C Library Intrinsics</a> 231 <ol> 232 <li><a href="#int_memcpy">'<tt>llvm.memcpy.*</tt>' Intrinsic</a></li> 233 <li><a href="#int_memmove">'<tt>llvm.memmove.*</tt>' Intrinsic</a></li> 234 <li><a href="#int_memset">'<tt>llvm.memset.*</tt>' Intrinsic</a></li> 235 <li><a href="#int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a></li> 236 <li><a href="#int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a></li> 237 <li><a href="#int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a></li> 238 <li><a href="#int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a></li> 239 <li><a href="#int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a></li> 240 <li><a href="#int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a></li> 241 <li><a href="#int_log">'<tt>llvm.log.*</tt>' Intrinsic</a></li> 242 <li><a href="#int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a></li> 243 </ol> 244 </li> 245 <li><a href="#int_manip">Bit Manipulation Intrinsics</a> 246 <ol> 247 <li><a href="#int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a></li> 248 <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li> 249 <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li> 250 <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li> 251 </ol> 252 </li> 253 <li><a href="#int_overflow">Arithmetic with Overflow Intrinsics</a> 254 <ol> 255 <li><a href="#int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt> Intrinsics</a></li> 256 <li><a href="#int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt> Intrinsics</a></li> 257 <li><a href="#int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt> Intrinsics</a></li> 258 <li><a href="#int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt> Intrinsics</a></li> 259 <li><a href="#int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt> Intrinsics</a></li> 260 <li><a href="#int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt> Intrinsics</a></li> 261 </ol> 262 </li> 263 <li><a href="#int_fp16">Half Precision Floating Point Intrinsics</a> 264 <ol> 265 <li><a href="#int_convert_to_fp16">'<tt>llvm.convert.to.fp16</tt>' Intrinsic</a></li> 266 <li><a href="#int_convert_from_fp16">'<tt>llvm.convert.from.fp16</tt>' Intrinsic</a></li> 267 </ol> 268 </li> 269 <li><a href="#int_debugger">Debugger intrinsics</a></li> 270 <li><a href="#int_eh">Exception Handling intrinsics</a></li> 271 <li><a href="#int_trampoline">Trampoline Intrinsic</a> 272 <ol> 273 <li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li> 274 </ol> 275 </li> 276 <li><a href="#int_atomics">Atomic intrinsics</a> 277 <ol> 278 <li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li> 279 <li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li> 280 <li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li> 281 <li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li> 282 <li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li> 283 <li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li> 284 <li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li> 285 <li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li> 286 <li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li> 287 <li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li> 288 <li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li> 289 <li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li> 290 <li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li> 291 </ol> 292 </li> 293 <li><a href="#int_memorymarkers">Memory Use Markers</a> 294 <ol> 295 <li><a href="#int_lifetime_start"><tt>llvm.lifetime.start</tt></a></li> 296 <li><a href="#int_lifetime_end"><tt>llvm.lifetime.end</tt></a></li> 297 <li><a href="#int_invariant_start"><tt>llvm.invariant.start</tt></a></li> 298 <li><a href="#int_invariant_end"><tt>llvm.invariant.end</tt></a></li> 299 </ol> 300 </li> 301 <li><a href="#int_general">General intrinsics</a> 302 <ol> 303 <li><a href="#int_var_annotation"> 304 '<tt>llvm.var.annotation</tt>' Intrinsic</a></li> 305 <li><a href="#int_annotation"> 306 '<tt>llvm.annotation.*</tt>' Intrinsic</a></li> 307 <li><a href="#int_trap"> 308 '<tt>llvm.trap</tt>' Intrinsic</a></li> 309 <li><a href="#int_stackprotector"> 310 '<tt>llvm.stackprotector</tt>' Intrinsic</a></li> 311 <li><a href="#int_objectsize"> 312 '<tt>llvm.objectsize</tt>' Intrinsic</a></li> 313 </ol> 314 </li> 315 </ol> 316 </li> 317 </ol> 318 319 <div class="doc_author"> 320 <p>Written by <a href="mailto:sabre (a] nondot.org">Chris Lattner</a> 321 and <a href="mailto:vadve (a] cs.uiuc.edu">Vikram Adve</a></p> 322 </div> 323 324 <!-- *********************************************************************** --> 325 <h2><a name="abstract">Abstract</a></h2> 326 <!-- *********************************************************************** --> 327 328 <div> 329 330 <p>This document is a reference manual for the LLVM assembly language. LLVM is 331 a Static Single Assignment (SSA) based representation that provides type 332 safety, low-level operations, flexibility, and the capability of representing 333 'all' high-level languages cleanly. It is the common code representation 334 used throughout all phases of the LLVM compilation strategy.</p> 335 336 </div> 337 338 <!-- *********************************************************************** --> 339 <h2><a name="introduction">Introduction</a></h2> 340 <!-- *********************************************************************** --> 341 342 <div> 343 344 <p>The LLVM code representation is designed to be used in three different forms: 345 as an in-memory compiler IR, as an on-disk bitcode representation (suitable 346 for fast loading by a Just-In-Time compiler), and as a human readable 347 assembly language representation. This allows LLVM to provide a powerful 348 intermediate representation for efficient compiler transformations and 349 analysis, while providing a natural means to debug and visualize the 350 transformations. The three different forms of LLVM are all equivalent. This 351 document describes the human readable representation and notation.</p> 352 353 <p>The LLVM representation aims to be light-weight and low-level while being 354 expressive, typed, and extensible at the same time. It aims to be a 355 "universal IR" of sorts, by being at a low enough level that high-level ideas 356 may be cleanly mapped to it (similar to how microprocessors are "universal 357 IR's", allowing many source languages to be mapped to them). By providing 358 type information, LLVM can be used as the target of optimizations: for 359 example, through pointer analysis, it can be proven that a C automatic 360 variable is never accessed outside of the current function, allowing it to 361 be promoted to a simple SSA value instead of a memory location.</p> 362 363 <!-- _______________________________________________________________________ --> 364 <h4> 365 <a name="wellformed">Well-Formedness</a> 366 </h4> 367 368 <div> 369 370 <p>It is important to note that this document describes 'well formed' LLVM 371 assembly language. There is a difference between what the parser accepts and 372 what is considered 'well formed'. For example, the following instruction is 373 syntactically okay, but not well formed:</p> 374 375 <pre class="doc_code"> 376 %x = <a href="#i_add">add</a> i32 1, %x 377 </pre> 378 379 <p>because the definition of <tt>%x</tt> does not dominate all of its uses. The 380 LLVM infrastructure provides a verification pass that may be used to verify 381 that an LLVM module is well formed. This pass is automatically run by the 382 parser after parsing input assembly and by the optimizer before it outputs 383 bitcode. The violations pointed out by the verifier pass indicate bugs in 384 transformation passes or input to the parser.</p> 385 386 </div> 387 388 </div> 389 390 <!-- Describe the typesetting conventions here. --> 391 392 <!-- *********************************************************************** --> 393 <h2><a name="identifiers">Identifiers</a></h2> 394 <!-- *********************************************************************** --> 395 396 <div> 397 398 <p>LLVM identifiers come in two basic types: global and local. Global 399 identifiers (functions, global variables) begin with the <tt>'@'</tt> 400 character. Local identifiers (register names, types) begin with 401 the <tt>'%'</tt> character. Additionally, there are three different formats 402 for identifiers, for different purposes:</p> 403 404 <ol> 405 <li>Named values are represented as a string of characters with their prefix. 406 For example, <tt>%foo</tt>, <tt>@DivisionByZero</tt>, 407 <tt>%a.really.long.identifier</tt>. The actual regular expression used is 408 '<tt>[%@][a-zA-Z$._][a-zA-Z$._0-9]*</tt>'. Identifiers which require 409 other characters in their names can be surrounded with quotes. Special 410 characters may be escaped using <tt>"\xx"</tt> where <tt>xx</tt> is the 411 ASCII code for the character in hexadecimal. In this way, any character 412 can be used in a name value, even quotes themselves.</li> 413 414 <li>Unnamed values are represented as an unsigned numeric value with their 415 prefix. For example, <tt>%12</tt>, <tt>@2</tt>, <tt>%44</tt>.</li> 416 417 <li>Constants, which are described in a <a href="#constants">section about 418 constants</a>, below.</li> 419 </ol> 420 421 <p>LLVM requires that values start with a prefix for two reasons: Compilers 422 don't need to worry about name clashes with reserved words, and the set of 423 reserved words may be expanded in the future without penalty. Additionally, 424 unnamed identifiers allow a compiler to quickly come up with a temporary 425 variable without having to avoid symbol table conflicts.</p> 426 427 <p>Reserved words in LLVM are very similar to reserved words in other 428 languages. There are keywords for different opcodes 429 ('<tt><a href="#i_add">add</a></tt>', 430 '<tt><a href="#i_bitcast">bitcast</a></tt>', 431 '<tt><a href="#i_ret">ret</a></tt>', etc...), for primitive type names 432 ('<tt><a href="#t_void">void</a></tt>', 433 '<tt><a href="#t_primitive">i32</a></tt>', etc...), and others. These 434 reserved words cannot conflict with variable names, because none of them 435 start with a prefix character (<tt>'%'</tt> or <tt>'@'</tt>).</p> 436 437 <p>Here is an example of LLVM code to multiply the integer variable 438 '<tt>%X</tt>' by 8:</p> 439 440 <p>The easy way:</p> 441 442 <pre class="doc_code"> 443 %result = <a href="#i_mul">mul</a> i32 %X, 8 444 </pre> 445 446 <p>After strength reduction:</p> 447 448 <pre class="doc_code"> 449 %result = <a href="#i_shl">shl</a> i32 %X, i8 3 450 </pre> 451 452 <p>And the hard way:</p> 453 454 <pre class="doc_code"> 455 %0 = <a href="#i_add">add</a> i32 %X, %X <i>; yields {i32}:%0</i> 456 %1 = <a href="#i_add">add</a> i32 %0, %0 <i>; yields {i32}:%1</i> 457 %result = <a href="#i_add">add</a> i32 %1, %1 458 </pre> 459 460 <p>This last way of multiplying <tt>%X</tt> by 8 illustrates several important 461 lexical features of LLVM:</p> 462 463 <ol> 464 <li>Comments are delimited with a '<tt>;</tt>' and go until the end of 465 line.</li> 466 467 <li>Unnamed temporaries are created when the result of a computation is not 468 assigned to a named value.</li> 469 470 <li>Unnamed temporaries are numbered sequentially</li> 471 </ol> 472 473 <p>It also shows a convention that we follow in this document. When 474 demonstrating instructions, we will follow an instruction with a comment that 475 defines the type and name of value produced. Comments are shown in italic 476 text.</p> 477 478 </div> 479 480 <!-- *********************************************************************** --> 481 <h2><a name="highlevel">High Level Structure</a></h2> 482 <!-- *********************************************************************** --> 483 <div> 484 <!-- ======================================================================= --> 485 <h3> 486 <a name="modulestructure">Module Structure</a> 487 </h3> 488 489 <div> 490 491 <p>LLVM programs are composed of "Module"s, each of which is a translation unit 492 of the input programs. Each module consists of functions, global variables, 493 and symbol table entries. Modules may be combined together with the LLVM 494 linker, which merges function (and global variable) definitions, resolves 495 forward declarations, and merges symbol table entries. Here is an example of 496 the "hello world" module:</p> 497 498 <pre class="doc_code"> 499 <i>; Declare the string constant as a global constant.</i> 500 <a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00" <i>; [13 x i8]*</i> 501 502 <i>; External declaration of the puts function</i> 503 <a href="#functionstructure">declare</a> i32 @puts(i8*) <i>; i32 (i8*)* </i> 504 505 <i>; Definition of main function</i> 506 define i32 @main() { <i>; i32()* </i> 507 <i>; Convert [13 x i8]* to i8 *...</i> 508 %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0 <i>; i8*</i> 509 510 <i>; Call puts function to write out the string to stdout.</i> 511 <a href="#i_call">call</a> i32 @puts(i8* %cast210) <i>; i32</i> 512 <a href="#i_ret">ret</a> i32 0 513 } 514 515 <i>; Named metadata</i> 516 !1 = metadata !{i32 41} 517 !foo = !{!1, null} 518 </pre> 519 520 <p>This example is made up of a <a href="#globalvars">global variable</a> named 521 "<tt>.LC0</tt>", an external declaration of the "<tt>puts</tt>" function, 522 a <a href="#functionstructure">function definition</a> for 523 "<tt>main</tt>" and <a href="#namedmetadatastructure">named metadata</a> 524 "<tt>foo"</tt>.</p> 525 526 <p>In general, a module is made up of a list of global values, where both 527 functions and global variables are global values. Global values are 528 represented by a pointer to a memory location (in this case, a pointer to an 529 array of char, and a pointer to a function), and have one of the 530 following <a href="#linkage">linkage types</a>.</p> 531 532 </div> 533 534 <!-- ======================================================================= --> 535 <h3> 536 <a name="linkage">Linkage Types</a> 537 </h3> 538 539 <div> 540 541 <p>All Global Variables and Functions have one of the following types of 542 linkage:</p> 543 544 <dl> 545 <dt><tt><b><a name="linkage_private">private</a></b></tt></dt> 546 <dd>Global values with "<tt>private</tt>" linkage are only directly accessible 547 by objects in the current module. In particular, linking code into a 548 module with an private global value may cause the private to be renamed as 549 necessary to avoid collisions. Because the symbol is private to the 550 module, all references can be updated. This doesn't show up in any symbol 551 table in the object file.</dd> 552 553 <dt><tt><b><a name="linkage_linker_private">linker_private</a></b></tt></dt> 554 <dd>Similar to <tt>private</tt>, but the symbol is passed through the 555 assembler and evaluated by the linker. Unlike normal strong symbols, they 556 are removed by the linker from the final linked image (executable or 557 dynamic library).</dd> 558 559 <dt><tt><b><a name="linkage_linker_private_weak">linker_private_weak</a></b></tt></dt> 560 <dd>Similar to "<tt>linker_private</tt>", but the symbol is weak. Note that 561 <tt>linker_private_weak</tt> symbols are subject to coalescing by the 562 linker. The symbols are removed by the linker from the final linked image 563 (executable or dynamic library).</dd> 564 565 <dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt> 566 <dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address 567 of the object is not taken. For instance, functions that had an inline 568 definition, but the compiler decided not to inline it. Note, 569 unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>, 570 <tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt> 571 visibility. The symbols are removed by the linker from the final linked 572 image (executable or dynamic library).</dd> 573 574 <dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt> 575 <dd>Similar to private, but the value shows as a local symbol 576 (<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This 577 corresponds to the notion of the '<tt>static</tt>' keyword in C.</dd> 578 579 <dt><tt><b><a name="linkage_available_externally">available_externally</a></b></tt></dt> 580 <dd>Globals with "<tt>available_externally</tt>" linkage are never emitted 581 into the object file corresponding to the LLVM module. They exist to 582 allow inlining and other optimizations to take place given knowledge of 583 the definition of the global, which is known to be somewhere outside the 584 module. Globals with <tt>available_externally</tt> linkage are allowed to 585 be discarded at will, and are otherwise the same as <tt>linkonce_odr</tt>. 586 This linkage type is only allowed on definitions, not declarations.</dd> 587 588 <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt></dt> 589 <dd>Globals with "<tt>linkonce</tt>" linkage are merged with other globals of 590 the same name when linkage occurs. This can be used to implement 591 some forms of inline functions, templates, or other code which must be 592 generated in each translation unit that uses it, but where the body may 593 be overridden with a more definitive definition later. Unreferenced 594 <tt>linkonce</tt> globals are allowed to be discarded. Note that 595 <tt>linkonce</tt> linkage does not actually allow the optimizer to 596 inline the body of this function into callers because it doesn't know if 597 this definition of the function is the definitive definition within the 598 program or whether it will be overridden by a stronger definition. 599 To enable inlining and other optimizations, use "<tt>linkonce_odr</tt>" 600 linkage.</dd> 601 602 <dt><tt><b><a name="linkage_weak">weak</a></b></tt></dt> 603 <dd>"<tt>weak</tt>" linkage has the same merging semantics as 604 <tt>linkonce</tt> linkage, except that unreferenced globals with 605 <tt>weak</tt> linkage may not be discarded. This is used for globals that 606 are declared "weak" in C source code.</dd> 607 608 <dt><tt><b><a name="linkage_common">common</a></b></tt></dt> 609 <dd>"<tt>common</tt>" linkage is most similar to "<tt>weak</tt>" linkage, but 610 they are used for tentative definitions in C, such as "<tt>int X;</tt>" at 611 global scope. 612 Symbols with "<tt>common</tt>" linkage are merged in the same way as 613 <tt>weak symbols</tt>, and they may not be deleted if unreferenced. 614 <tt>common</tt> symbols may not have an explicit section, 615 must have a zero initializer, and may not be marked '<a 616 href="#globalvars"><tt>constant</tt></a>'. Functions and aliases may not 617 have common linkage.</dd> 618 619 620 <dt><tt><b><a name="linkage_appending">appending</a></b></tt></dt> 621 <dd>"<tt>appending</tt>" linkage may only be applied to global variables of 622 pointer to array type. When two global variables with appending linkage 623 are linked together, the two global arrays are appended together. This is 624 the LLVM, typesafe, equivalent of having the system linker append together 625 "sections" with identical names when .o files are linked.</dd> 626 627 <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt></dt> 628 <dd>The semantics of this linkage follow the ELF object file model: the symbol 629 is weak until linked, if not linked, the symbol becomes null instead of 630 being an undefined reference.</dd> 631 632 <dt><tt><b><a name="linkage_linkonce_odr">linkonce_odr</a></b></tt></dt> 633 <dt><tt><b><a name="linkage_weak_odr">weak_odr</a></b></tt></dt> 634 <dd>Some languages allow differing globals to be merged, such as two functions 635 with different semantics. Other languages, such as <tt>C++</tt>, ensure 636 that only equivalent globals are ever merged (the "one definition rule" 637 — "ODR"). Such languages can use the <tt>linkonce_odr</tt> 638 and <tt>weak_odr</tt> linkage types to indicate that the global will only 639 be merged with equivalent globals. These linkage types are otherwise the 640 same as their non-<tt>odr</tt> versions.</dd> 641 642 <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt> 643 <dd>If none of the above identifiers are used, the global is externally 644 visible, meaning that it participates in linkage and can be used to 645 resolve external symbol references.</dd> 646 </dl> 647 648 <p>The next two types of linkage are targeted for Microsoft Windows platform 649 only. They are designed to support importing (exporting) symbols from (to) 650 DLLs (Dynamic Link Libraries).</p> 651 652 <dl> 653 <dt><tt><b><a name="linkage_dllimport">dllimport</a></b></tt></dt> 654 <dd>"<tt>dllimport</tt>" linkage causes the compiler to reference a function 655 or variable via a global pointer to a pointer that is set up by the DLL 656 exporting the symbol. On Microsoft Windows targets, the pointer name is 657 formed by combining <code>__imp_</code> and the function or variable 658 name.</dd> 659 660 <dt><tt><b><a name="linkage_dllexport">dllexport</a></b></tt></dt> 661 <dd>"<tt>dllexport</tt>" linkage causes the compiler to provide a global 662 pointer to a pointer in a DLL, so that it can be referenced with the 663 <tt>dllimport</tt> attribute. On Microsoft Windows targets, the pointer 664 name is formed by combining <code>__imp_</code> and the function or 665 variable name.</dd> 666 </dl> 667 668 <p>For example, since the "<tt>.LC0</tt>" variable is defined to be internal, if 669 another module defined a "<tt>.LC0</tt>" variable and was linked with this 670 one, one of the two would be renamed, preventing a collision. Since 671 "<tt>main</tt>" and "<tt>puts</tt>" are external (i.e., lacking any linkage 672 declarations), they are accessible outside of the current module.</p> 673 674 <p>It is illegal for a function <i>declaration</i> to have any linkage type 675 other than "externally visible", <tt>dllimport</tt> 676 or <tt>extern_weak</tt>.</p> 677 678 <p>Aliases can have only <tt>external</tt>, <tt>internal</tt>, <tt>weak</tt> 679 or <tt>weak_odr</tt> linkages.</p> 680 681 </div> 682 683 <!-- ======================================================================= --> 684 <h3> 685 <a name="callingconv">Calling Conventions</a> 686 </h3> 687 688 <div> 689 690 <p>LLVM <a href="#functionstructure">functions</a>, <a href="#i_call">calls</a> 691 and <a href="#i_invoke">invokes</a> can all have an optional calling 692 convention specified for the call. The calling convention of any pair of 693 dynamic caller/callee must match, or the behavior of the program is 694 undefined. The following calling conventions are supported by LLVM, and more 695 may be added in the future:</p> 696 697 <dl> 698 <dt><b>"<tt>ccc</tt>" - The C calling convention</b>:</dt> 699 <dd>This calling convention (the default if no other calling convention is 700 specified) matches the target C calling conventions. This calling 701 convention supports varargs function calls and tolerates some mismatch in 702 the declared prototype and implemented declaration of the function (as 703 does normal C).</dd> 704 705 <dt><b>"<tt>fastcc</tt>" - The fast calling convention</b>:</dt> 706 <dd>This calling convention attempts to make calls as fast as possible 707 (e.g. by passing things in registers). This calling convention allows the 708 target to use whatever tricks it wants to produce fast code for the 709 target, without having to conform to an externally specified ABI 710 (Application Binary Interface). 711 <a href="CodeGenerator.html#tailcallopt">Tail calls can only be optimized 712 when this or the GHC convention is used.</a> This calling convention 713 does not support varargs and requires the prototype of all callees to 714 exactly match the prototype of the function definition.</dd> 715 716 <dt><b>"<tt>coldcc</tt>" - The cold calling convention</b>:</dt> 717 <dd>This calling convention attempts to make code in the caller as efficient 718 as possible under the assumption that the call is not commonly executed. 719 As such, these calls often preserve all registers so that the call does 720 not break any live ranges in the caller side. This calling convention 721 does not support varargs and requires the prototype of all callees to 722 exactly match the prototype of the function definition.</dd> 723 724 <dt><b>"<tt>cc <em>10</em></tt>" - GHC convention</b>:</dt> 725 <dd>This calling convention has been implemented specifically for use by the 726 <a href="http://www.haskell.org/ghc">Glasgow Haskell Compiler (GHC)</a>. 727 It passes everything in registers, going to extremes to achieve this by 728 disabling callee save registers. This calling convention should not be 729 used lightly but only for specific situations such as an alternative to 730 the <em>register pinning</em> performance technique often used when 731 implementing functional programming languages.At the moment only X86 732 supports this convention and it has the following limitations: 733 <ul> 734 <li>On <em>X86-32</em> only supports up to 4 bit type parameters. No 735 floating point types are supported.</li> 736 <li>On <em>X86-64</em> only supports up to 10 bit type parameters and 737 6 floating point parameters.</li> 738 </ul> 739 This calling convention supports 740 <a href="CodeGenerator.html#tailcallopt">tail call optimization</a> but 741 requires both the caller and callee are using it. 742 </dd> 743 744 <dt><b>"<tt>cc <<em>n</em>></tt>" - Numbered convention</b>:</dt> 745 <dd>Any calling convention may be specified by number, allowing 746 target-specific calling conventions to be used. Target specific calling 747 conventions start at 64.</dd> 748 </dl> 749 750 <p>More calling conventions can be added/defined on an as-needed basis, to 751 support Pascal conventions or any other well-known target-independent 752 convention.</p> 753 754 </div> 755 756 <!-- ======================================================================= --> 757 <h3> 758 <a name="visibility">Visibility Styles</a> 759 </h3> 760 761 <div> 762 763 <p>All Global Variables and Functions have one of the following visibility 764 styles:</p> 765 766 <dl> 767 <dt><b>"<tt>default</tt>" - Default style</b>:</dt> 768 <dd>On targets that use the ELF object file format, default visibility means 769 that the declaration is visible to other modules and, in shared libraries, 770 means that the declared entity may be overridden. On Darwin, default 771 visibility means that the declaration is visible to other modules. Default 772 visibility corresponds to "external linkage" in the language.</dd> 773 774 <dt><b>"<tt>hidden</tt>" - Hidden style</b>:</dt> 775 <dd>Two declarations of an object with hidden visibility refer to the same 776 object if they are in the same shared object. Usually, hidden visibility 777 indicates that the symbol will not be placed into the dynamic symbol 778 table, so no other module (executable or shared library) can reference it 779 directly.</dd> 780 781 <dt><b>"<tt>protected</tt>" - Protected style</b>:</dt> 782 <dd>On ELF, protected visibility indicates that the symbol will be placed in 783 the dynamic symbol table, but that references within the defining module 784 will bind to the local symbol. That is, the symbol cannot be overridden by 785 another module.</dd> 786 </dl> 787 788 </div> 789 790 <!-- ======================================================================= --> 791 <h3> 792 <a name="namedtypes">Named Types</a> 793 </h3> 794 795 <div> 796 797 <p>LLVM IR allows you to specify name aliases for certain types. This can make 798 it easier to read the IR and make the IR more condensed (particularly when 799 recursive types are involved). An example of a name specification is:</p> 800 801 <pre class="doc_code"> 802 %mytype = type { %mytype*, i32 } 803 </pre> 804 805 <p>You may give a name to any <a href="#typesystem">type</a> except 806 "<a href="#t_void">void</a>". Type name aliases may be used anywhere a type 807 is expected with the syntax "%mytype".</p> 808 809 <p>Note that type names are aliases for the structural type that they indicate, 810 and that you can therefore specify multiple names for the same type. This 811 often leads to confusing behavior when dumping out a .ll file. Since LLVM IR 812 uses structural typing, the name is not part of the type. When printing out 813 LLVM IR, the printer will pick <em>one name</em> to render all types of a 814 particular shape. This means that if you have code where two different 815 source types end up having the same LLVM type, that the dumper will sometimes 816 print the "wrong" or unexpected type. This is an important design point and 817 isn't going to change.</p> 818 819 </div> 820 821 <!-- ======================================================================= --> 822 <h3> 823 <a name="globalvars">Global Variables</a> 824 </h3> 825 826 <div> 827 828 <p>Global variables define regions of memory allocated at compilation time 829 instead of run-time. Global variables may optionally be initialized, may 830 have an explicit section to be placed in, and may have an optional explicit 831 alignment specified. A variable may be defined as "thread_local", which 832 means that it will not be shared by threads (each thread will have a 833 separated copy of the variable). A variable may be defined as a global 834 "constant," which indicates that the contents of the variable 835 will <b>never</b> be modified (enabling better optimization, allowing the 836 global data to be placed in the read-only section of an executable, etc). 837 Note that variables that need runtime initialization cannot be marked 838 "constant" as there is a store to the variable.</p> 839 840 <p>LLVM explicitly allows <em>declarations</em> of global variables to be marked 841 constant, even if the final definition of the global is not. This capability 842 can be used to enable slightly better optimization of the program, but 843 requires the language definition to guarantee that optimizations based on the 844 'constantness' are valid for the translation units that do not include the 845 definition.</p> 846 847 <p>As SSA values, global variables define pointer values that are in scope 848 (i.e. they dominate) all basic blocks in the program. Global variables 849 always define a pointer to their "content" type because they describe a 850 region of memory, and all memory objects in LLVM are accessed through 851 pointers.</p> 852 853 <p>Global variables can be marked with <tt>unnamed_addr</tt> which indicates 854 that the address is not significant, only the content. Constants marked 855 like this can be merged with other constants if they have the same 856 initializer. Note that a constant with significant address <em>can</em> 857 be merged with a <tt>unnamed_addr</tt> constant, the result being a 858 constant whose address is significant.</p> 859 860 <p>A global variable may be declared to reside in a target-specific numbered 861 address space. For targets that support them, address spaces may affect how 862 optimizations are performed and/or what target instructions are used to 863 access the variable. The default address space is zero. The address space 864 qualifier must precede any other attributes.</p> 865 866 <p>LLVM allows an explicit section to be specified for globals. If the target 867 supports it, it will emit globals to the section specified.</p> 868 869 <p>An explicit alignment may be specified for a global, which must be a power 870 of 2. If not present, or if the alignment is set to zero, the alignment of 871 the global is set by the target to whatever it feels convenient. If an 872 explicit alignment is specified, the global is forced to have exactly that 873 alignment. Targets and optimizers are not allowed to over-align the global 874 if the global has an assigned section. In this case, the extra alignment 875 could be observable: for example, code could assume that the globals are 876 densely packed in their section and try to iterate over them as an array, 877 alignment padding would break this iteration.</p> 878 879 <p>For example, the following defines a global in a numbered address space with 880 an initializer, section, and alignment:</p> 881 882 <pre class="doc_code"> 883 @G = addrspace(5) constant float 1.0, section "foo", align 4 884 </pre> 885 886 </div> 887 888 889 <!-- ======================================================================= --> 890 <h3> 891 <a name="functionstructure">Functions</a> 892 </h3> 893 894 <div> 895 896 <p>LLVM function definitions consist of the "<tt>define</tt>" keyword, an 897 optional <a href="#linkage">linkage type</a>, an optional 898 <a href="#visibility">visibility style</a>, an optional 899 <a href="#callingconv">calling convention</a>, 900 an optional <tt>unnamed_addr</tt> attribute, a return type, an optional 901 <a href="#paramattrs">parameter attribute</a> for the return type, a function 902 name, a (possibly empty) argument list (each with optional 903 <a href="#paramattrs">parameter attributes</a>), optional 904 <a href="#fnattrs">function attributes</a>, an optional section, an optional 905 alignment, an optional <a href="#gc">garbage collector name</a>, an opening 906 curly brace, a list of basic blocks, and a closing curly brace.</p> 907 908 <p>LLVM function declarations consist of the "<tt>declare</tt>" keyword, an 909 optional <a href="#linkage">linkage type</a>, an optional 910 <a href="#visibility">visibility style</a>, an optional 911 <a href="#callingconv">calling convention</a>, 912 an optional <tt>unnamed_addr</tt> attribute, a return type, an optional 913 <a href="#paramattrs">parameter attribute</a> for the return type, a function 914 name, a possibly empty list of arguments, an optional alignment, and an 915 optional <a href="#gc">garbage collector name</a>.</p> 916 917 <p>A function definition contains a list of basic blocks, forming the CFG 918 (Control Flow Graph) for the function. Each basic block may optionally start 919 with a label (giving the basic block a symbol table entry), contains a list 920 of instructions, and ends with a <a href="#terminators">terminator</a> 921 instruction (such as a branch or function return).</p> 922 923 <p>The first basic block in a function is special in two ways: it is immediately 924 executed on entrance to the function, and it is not allowed to have 925 predecessor basic blocks (i.e. there can not be any branches to the entry 926 block of a function). Because the block can have no predecessors, it also 927 cannot have any <a href="#i_phi">PHI nodes</a>.</p> 928 929 <p>LLVM allows an explicit section to be specified for functions. If the target 930 supports it, it will emit functions to the section specified.</p> 931 932 <p>An explicit alignment may be specified for a function. If not present, or if 933 the alignment is set to zero, the alignment of the function is set by the 934 target to whatever it feels convenient. If an explicit alignment is 935 specified, the function is forced to have at least that much alignment. All 936 alignments must be a power of 2.</p> 937 938 <p>If the <tt>unnamed_addr</tt> attribute is given, the address is know to not 939 be significant and two identical functions can be merged</p>. 940 941 <h5>Syntax:</h5> 942 <pre class="doc_code"> 943 define [<a href="#linkage">linkage</a>] [<a href="#visibility">visibility</a>] 944 [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>] 945 <ResultType> @<FunctionName> ([argument list]) 946 [<a href="#fnattrs">fn Attrs</a>] [section "name"] [align N] 947 [<a href="#gc">gc</a>] { ... } 948 </pre> 949 950 </div> 951 952 <!-- ======================================================================= --> 953 <h3> 954 <a name="aliasstructure">Aliases</a> 955 </h3> 956 957 <div> 958 959 <p>Aliases act as "second name" for the aliasee value (which can be either 960 function, global variable, another alias or bitcast of global value). Aliases 961 may have an optional <a href="#linkage">linkage type</a>, and an 962 optional <a href="#visibility">visibility style</a>.</p> 963 964 <h5>Syntax:</h5> 965 <pre class="doc_code"> 966 @<Name> = alias [Linkage] [Visibility] <AliaseeTy> @<Aliasee> 967 </pre> 968 969 </div> 970 971 <!-- ======================================================================= --> 972 <h3> 973 <a name="namedmetadatastructure">Named Metadata</a> 974 </h3> 975 976 <div> 977 978 <p>Named metadata is a collection of metadata. <a href="#metadata">Metadata 979 nodes</a> (but not metadata strings) are the only valid operands for 980 a named metadata.</p> 981 982 <h5>Syntax:</h5> 983 <pre class="doc_code"> 984 ; Some unnamed metadata nodes, which are referenced by the named metadata. 985 !0 = metadata !{metadata !"zero"} 986 !1 = metadata !{metadata !"one"} 987 !2 = metadata !{metadata !"two"} 988 ; A named metadata. 989 !name = !{!0, !1, !2} 990 </pre> 991 992 </div> 993 994 <!-- ======================================================================= --> 995 <h3> 996 <a name="paramattrs">Parameter Attributes</a> 997 </h3> 998 999 <div> 1000 1001 <p>The return type and each parameter of a function type may have a set of 1002 <i>parameter attributes</i> associated with them. Parameter attributes are 1003 used to communicate additional information about the result or parameters of 1004 a function. Parameter attributes are considered to be part of the function, 1005 not of the function type, so functions with different parameter attributes 1006 can have the same function type.</p> 1007 1008 <p>Parameter attributes are simple keywords that follow the type specified. If 1009 multiple parameter attributes are needed, they are space separated. For 1010 example:</p> 1011 1012 <pre class="doc_code"> 1013 declare i32 @printf(i8* noalias nocapture, ...) 1014 declare i32 @atoi(i8 zeroext) 1015 declare signext i8 @returns_signed_char() 1016 </pre> 1017 1018 <p>Note that any attributes for the function result (<tt>nounwind</tt>, 1019 <tt>readonly</tt>) come immediately after the argument list.</p> 1020 1021 <p>Currently, only the following parameter attributes are defined:</p> 1022 1023 <dl> 1024 <dt><tt><b>zeroext</b></tt></dt> 1025 <dd>This indicates to the code generator that the parameter or return value 1026 should be zero-extended to the extent required by the target's ABI (which 1027 is usually 32-bits, but is 8-bits for a i1 on x86-64) by the caller (for a 1028 parameter) or the callee (for a return value).</dd> 1029 1030 <dt><tt><b>signext</b></tt></dt> 1031 <dd>This indicates to the code generator that the parameter or return value 1032 should be sign-extended to the extent required by the target's ABI (which 1033 is usually 32-bits) by the caller (for a parameter) or the callee (for a 1034 return value).</dd> 1035 1036 <dt><tt><b>inreg</b></tt></dt> 1037 <dd>This indicates that this parameter or return value should be treated in a 1038 special target-dependent fashion during while emitting code for a function 1039 call or return (usually, by putting it in a register as opposed to memory, 1040 though some targets use it to distinguish between two different kinds of 1041 registers). Use of this attribute is target-specific.</dd> 1042 1043 <dt><tt><b><a name="byval">byval</a></b></tt></dt> 1044 <dd><p>This indicates that the pointer parameter should really be passed by 1045 value to the function. The attribute implies that a hidden copy of the 1046 pointee 1047 is made between the caller and the callee, so the callee is unable to 1048 modify the value in the callee. This attribute is only valid on LLVM 1049 pointer arguments. It is generally used to pass structs and arrays by 1050 value, but is also valid on pointers to scalars. The copy is considered 1051 to belong to the caller not the callee (for example, 1052 <tt><a href="#readonly">readonly</a></tt> functions should not write to 1053 <tt>byval</tt> parameters). This is not a valid attribute for return 1054 values.</p> 1055 1056 <p>The byval attribute also supports specifying an alignment with 1057 the align attribute. It indicates the alignment of the stack slot to 1058 form and the known alignment of the pointer specified to the call site. If 1059 the alignment is not specified, then the code generator makes a 1060 target-specific assumption.</p></dd> 1061 1062 <dt><tt><b><a name="sret">sret</a></b></tt></dt> 1063 <dd>This indicates that the pointer parameter specifies the address of a 1064 structure that is the return value of the function in the source program. 1065 This pointer must be guaranteed by the caller to be valid: loads and 1066 stores to the structure may be assumed by the callee to not to trap. This 1067 may only be applied to the first parameter. This is not a valid attribute 1068 for return values. </dd> 1069 1070 <dt><tt><b><a name="noalias">noalias</a></b></tt></dt> 1071 <dd>This indicates that pointer values 1072 <a href="#pointeraliasing"><i>based</i></a> on the argument or return 1073 value do not alias pointer values which are not <i>based</i> on it, 1074 ignoring certain "irrelevant" dependencies. 1075 For a call to the parent function, dependencies between memory 1076 references from before or after the call and from those during the call 1077 are "irrelevant" to the <tt>noalias</tt> keyword for the arguments and 1078 return value used in that call. 1079 The caller shares the responsibility with the callee for ensuring that 1080 these requirements are met. 1081 For further details, please see the discussion of the NoAlias response in 1082 <a href="AliasAnalysis.html#MustMayNo">alias analysis</a>.<br> 1083 <br> 1084 Note that this definition of <tt>noalias</tt> is intentionally 1085 similar to the definition of <tt>restrict</tt> in C99 for function 1086 arguments, though it is slightly weaker. 1087 <br> 1088 For function return values, C99's <tt>restrict</tt> is not meaningful, 1089 while LLVM's <tt>noalias</tt> is. 1090 </dd> 1091 1092 <dt><tt><b><a name="nocapture">nocapture</a></b></tt></dt> 1093 <dd>This indicates that the callee does not make any copies of the pointer 1094 that outlive the callee itself. This is not a valid attribute for return 1095 values.</dd> 1096 1097 <dt><tt><b><a name="nest">nest</a></b></tt></dt> 1098 <dd>This indicates that the pointer parameter can be excised using the 1099 <a href="#int_trampoline">trampoline intrinsics</a>. This is not a valid 1100 attribute for return values.</dd> 1101 </dl> 1102 1103 </div> 1104 1105 <!-- ======================================================================= --> 1106 <h3> 1107 <a name="gc">Garbage Collector Names</a> 1108 </h3> 1109 1110 <div> 1111 1112 <p>Each function may specify a garbage collector name, which is simply a 1113 string:</p> 1114 1115 <pre class="doc_code"> 1116 define void @f() gc "name" { ... } 1117 </pre> 1118 1119 <p>The compiler declares the supported values of <i>name</i>. Specifying a 1120 collector which will cause the compiler to alter its output in order to 1121 support the named garbage collection algorithm.</p> 1122 1123 </div> 1124 1125 <!-- ======================================================================= --> 1126 <h3> 1127 <a name="fnattrs">Function Attributes</a> 1128 </h3> 1129 1130 <div> 1131 1132 <p>Function attributes are set to communicate additional information about a 1133 function. Function attributes are considered to be part of the function, not 1134 of the function type, so functions with different parameter attributes can 1135 have the same function type.</p> 1136 1137 <p>Function attributes are simple keywords that follow the type specified. If 1138 multiple attributes are needed, they are space separated. For example:</p> 1139 1140 <pre class="doc_code"> 1141 define void @f() noinline { ... } 1142 define void @f() alwaysinline { ... } 1143 define void @f() alwaysinline optsize { ... } 1144 define void @f() optsize { ... } 1145 </pre> 1146 1147 <dl> 1148 <dt><tt><b>alignstack(<<em>n</em>>)</b></tt></dt> 1149 <dd>This attribute indicates that, when emitting the prologue and epilogue, 1150 the backend should forcibly align the stack pointer. Specify the 1151 desired alignment, which must be a power of two, in parentheses. 1152 1153 <dt><tt><b>alwaysinline</b></tt></dt> 1154 <dd>This attribute indicates that the inliner should attempt to inline this 1155 function into callers whenever possible, ignoring any active inlining size 1156 threshold for this caller.</dd> 1157 1158 <dt><tt><b>hotpatch</b></tt></dt> 1159 <dd>This attribute indicates that the function should be 'hotpatchable', 1160 meaning the function can be patched and/or hooked even while it is 1161 loaded into memory. On x86, the function prologue will be preceded 1162 by six bytes of padding and will begin with a two-byte instruction. 1163 Most of the functions in the Windows system DLLs in Windows XP SP2 or 1164 higher were compiled in this fashion.</dd> 1165 1166 <dt><tt><b>nonlazybind</b></tt></dt> 1167 <dd>This attribute suppresses lazy symbol binding for the function. This 1168 may make calls to the function faster, at the cost of extra program 1169 startup time if the function is not called during program startup.</dd> 1170 1171 <dt><tt><b>inlinehint</b></tt></dt> 1172 <dd>This attribute indicates that the source code contained a hint that inlining 1173 this function is desirable (such as the "inline" keyword in C/C++). It 1174 is just a hint; it imposes no requirements on the inliner.</dd> 1175 1176 <dt><tt><b>naked</b></tt></dt> 1177 <dd>This attribute disables prologue / epilogue emission for the function. 1178 This can have very system-specific consequences.</dd> 1179 1180 <dt><tt><b>noimplicitfloat</b></tt></dt> 1181 <dd>This attributes disables implicit floating point instructions.</dd> 1182 1183 <dt><tt><b>noinline</b></tt></dt> 1184 <dd>This attribute indicates that the inliner should never inline this 1185 function in any situation. This attribute may not be used together with 1186 the <tt>alwaysinline</tt> attribute.</dd> 1187 1188 <dt><tt><b>noredzone</b></tt></dt> 1189 <dd>This attribute indicates that the code generator should not use a red 1190 zone, even if the target-specific ABI normally permits it.</dd> 1191 1192 <dt><tt><b>noreturn</b></tt></dt> 1193 <dd>This function attribute indicates that the function never returns 1194 normally. This produces undefined behavior at runtime if the function 1195 ever does dynamically return.</dd> 1196 1197 <dt><tt><b>nounwind</b></tt></dt> 1198 <dd>This function attribute indicates that the function never returns with an 1199 unwind or exceptional control flow. If the function does unwind, its 1200 runtime behavior is undefined.</dd> 1201 1202 <dt><tt><b>optsize</b></tt></dt> 1203 <dd>This attribute suggests that optimization passes and code generator passes 1204 make choices that keep the code size of this function low, and otherwise 1205 do optimizations specifically to reduce code size.</dd> 1206 1207 <dt><tt><b>readnone</b></tt></dt> 1208 <dd>This attribute indicates that the function computes its result (or decides 1209 to unwind an exception) based strictly on its arguments, without 1210 dereferencing any pointer arguments or otherwise accessing any mutable 1211 state (e.g. memory, control registers, etc) visible to caller functions. 1212 It does not write through any pointer arguments 1213 (including <tt><a href="#byval">byval</a></tt> arguments) and never 1214 changes any state visible to callers. This means that it cannot unwind 1215 exceptions by calling the <tt>C++</tt> exception throwing methods, but 1216 could use the <tt>unwind</tt> instruction.</dd> 1217 1218 <dt><tt><b><a name="readonly">readonly</a></b></tt></dt> 1219 <dd>This attribute indicates that the function does not write through any 1220 pointer arguments (including <tt><a href="#byval">byval</a></tt> 1221 arguments) or otherwise modify any state (e.g. memory, control registers, 1222 etc) visible to caller functions. It may dereference pointer arguments 1223 and read state that may be set in the caller. A readonly function always 1224 returns the same value (or unwinds an exception identically) when called 1225 with the same set of arguments and global state. It cannot unwind an 1226 exception by calling the <tt>C++</tt> exception throwing methods, but may 1227 use the <tt>unwind</tt> instruction.</dd> 1228 1229 <dt><tt><b><a name="ssp">ssp</a></b></tt></dt> 1230 <dd>This attribute indicates that the function should emit a stack smashing 1231 protector. It is in the form of a "canary"—a random value placed on 1232 the stack before the local variables that's checked upon return from the 1233 function to see if it has been overwritten. A heuristic is used to 1234 determine if a function needs stack protectors or not.<br> 1235 <br> 1236 If a function that has an <tt>ssp</tt> attribute is inlined into a 1237 function that doesn't have an <tt>ssp</tt> attribute, then the resulting 1238 function will have an <tt>ssp</tt> attribute.</dd> 1239 1240 <dt><tt><b>sspreq</b></tt></dt> 1241 <dd>This attribute indicates that the function should <em>always</em> emit a 1242 stack smashing protector. This overrides 1243 the <tt><a href="#ssp">ssp</a></tt> function attribute.<br> 1244 <br> 1245 If a function that has an <tt>sspreq</tt> attribute is inlined into a 1246 function that doesn't have an <tt>sspreq</tt> attribute or which has 1247 an <tt>ssp</tt> attribute, then the resulting function will have 1248 an <tt>sspreq</tt> attribute.</dd> 1249 </dl> 1250 1251 </div> 1252 1253 <!-- ======================================================================= --> 1254 <h3> 1255 <a name="moduleasm">Module-Level Inline Assembly</a> 1256 </h3> 1257 1258 <div> 1259 1260 <p>Modules may contain "module-level inline asm" blocks, which corresponds to 1261 the GCC "file scope inline asm" blocks. These blocks are internally 1262 concatenated by LLVM and treated as a single unit, but may be separated in 1263 the <tt>.ll</tt> file if desired. The syntax is very simple:</p> 1264 1265 <pre class="doc_code"> 1266 module asm "inline asm code goes here" 1267 module asm "more can go here" 1268 </pre> 1269 1270 <p>The strings can contain any character by escaping non-printable characters. 1271 The escape sequence used is simply "\xx" where "xx" is the two digit hex code 1272 for the number.</p> 1273 1274 <p>The inline asm code is simply printed to the machine code .s file when 1275 assembly code is generated.</p> 1276 1277 </div> 1278 1279 <!-- ======================================================================= --> 1280 <h3> 1281 <a name="datalayout">Data Layout</a> 1282 </h3> 1283 1284 <div> 1285 1286 <p>A module may specify a target specific data layout string that specifies how 1287 data is to be laid out in memory. The syntax for the data layout is 1288 simply:</p> 1289 1290 <pre class="doc_code"> 1291 target datalayout = "<i>layout specification</i>" 1292 </pre> 1293 1294 <p>The <i>layout specification</i> consists of a list of specifications 1295 separated by the minus sign character ('-'). Each specification starts with 1296 a letter and may include other information after the letter to define some 1297 aspect of the data layout. The specifications accepted are as follows:</p> 1298 1299 <dl> 1300 <dt><tt>E</tt></dt> 1301 <dd>Specifies that the target lays out data in big-endian form. That is, the 1302 bits with the most significance have the lowest address location.</dd> 1303 1304 <dt><tt>e</tt></dt> 1305 <dd>Specifies that the target lays out data in little-endian form. That is, 1306 the bits with the least significance have the lowest address 1307 location.</dd> 1308 1309 <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1310 <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and 1311 <i>preferred</i> alignments. All sizes are in bits. Specifying 1312 the <i>pref</i> alignment is optional. If omitted, the 1313 preceding <tt>:</tt> should be omitted too.</dd> 1314 1315 <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1316 <dd>This specifies the alignment for an integer type of a given bit 1317 <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd> 1318 1319 <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1320 <dd>This specifies the alignment for a vector type of a given bit 1321 <i>size</i>.</dd> 1322 1323 <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1324 <dd>This specifies the alignment for a floating point type of a given bit 1325 <i>size</i>. Only values of <i>size</i> that are supported by the target 1326 will work. 32 (float) and 64 (double) are supported on all targets; 1327 80 or 128 (different flavors of long double) are also supported on some 1328 targets. 1329 1330 <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1331 <dd>This specifies the alignment for an aggregate type of a given bit 1332 <i>size</i>.</dd> 1333 1334 <dt><tt>s<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt> 1335 <dd>This specifies the alignment for a stack object of a given bit 1336 <i>size</i>.</dd> 1337 1338 <dt><tt>n<i>size1</i>:<i>size2</i>:<i>size3</i>...</tt></dt> 1339 <dd>This specifies a set of native integer widths for the target CPU 1340 in bits. For example, it might contain "n32" for 32-bit PowerPC, 1341 "n32:64" for PowerPC 64, or "n8:16:32:64" for X86-64. Elements of 1342 this set are considered to support most general arithmetic 1343 operations efficiently.</dd> 1344 </dl> 1345 1346 <p>When constructing the data layout for a given target, LLVM starts with a 1347 default set of specifications which are then (possibly) overridden by the 1348 specifications in the <tt>datalayout</tt> keyword. The default specifications 1349 are given in this list:</p> 1350 1351 <ul> 1352 <li><tt>E</tt> - big endian</li> 1353 <li><tt>p:64:64:64</tt> - 64-bit pointers with 64-bit alignment</li> 1354 <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li> 1355 <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li> 1356 <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li> 1357 <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li> 1358 <li><tt>i64:32:64</tt> - i64 has ABI alignment of 32-bits but preferred 1359 alignment of 64-bits</li> 1360 <li><tt>f32:32:32</tt> - float is 32-bit aligned</li> 1361 <li><tt>f64:64:64</tt> - double is 64-bit aligned</li> 1362 <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li> 1363 <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li> 1364 <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li> 1365 <li><tt>s0:64:64</tt> - stack objects are 64-bit aligned</li> 1366 </ul> 1367 1368 <p>When LLVM is determining the alignment for a given type, it uses the 1369 following rules:</p> 1370 1371 <ol> 1372 <li>If the type sought is an exact match for one of the specifications, that 1373 specification is used.</li> 1374 1375 <li>If no match is found, and the type sought is an integer type, then the 1376 smallest integer type that is larger than the bitwidth of the sought type 1377 is used. If none of the specifications are larger than the bitwidth then 1378 the the largest integer type is used. For example, given the default 1379 specifications above, the i7 type will use the alignment of i8 (next 1380 largest) while both i65 and i256 will use the alignment of i64 (largest 1381 specified).</li> 1382 1383 <li>If no match is found, and the type sought is a vector type, then the 1384 largest vector type that is smaller than the sought vector type will be 1385 used as a fall back. This happens because <128 x double> can be 1386 implemented in terms of 64 <2 x double>, for example.</li> 1387 </ol> 1388 1389 </div> 1390 1391 <!-- ======================================================================= --> 1392 <h3> 1393 <a name="pointeraliasing">Pointer Aliasing Rules</a> 1394 </h3> 1395 1396 <div> 1397 1398 <p>Any memory access must be done through a pointer value associated 1399 with an address range of the memory access, otherwise the behavior 1400 is undefined. Pointer values are associated with address ranges 1401 according to the following rules:</p> 1402 1403 <ul> 1404 <li>A pointer value is associated with the addresses associated with 1405 any value it is <i>based</i> on. 1406 <li>An address of a global variable is associated with the address 1407 range of the variable's storage.</li> 1408 <li>The result value of an allocation instruction is associated with 1409 the address range of the allocated storage.</li> 1410 <li>A null pointer in the default address-space is associated with 1411 no address.</li> 1412 <li>An integer constant other than zero or a pointer value returned 1413 from a function not defined within LLVM may be associated with address 1414 ranges allocated through mechanisms other than those provided by 1415 LLVM. Such ranges shall not overlap with any ranges of addresses 1416 allocated by mechanisms provided by LLVM.</li> 1417 </ul> 1418 1419 <p>A pointer value is <i>based</i> on another pointer value according 1420 to the following rules:</p> 1421 1422 <ul> 1423 <li>A pointer value formed from a 1424 <tt><a href="#i_getelementptr">getelementptr</a></tt> operation 1425 is <i>based</i> on the first operand of the <tt>getelementptr</tt>.</li> 1426 <li>The result value of a 1427 <tt><a href="#i_bitcast">bitcast</a></tt> is <i>based</i> on the operand 1428 of the <tt>bitcast</tt>.</li> 1429 <li>A pointer value formed by an 1430 <tt><a href="#i_inttoptr">inttoptr</a></tt> is <i>based</i> on all 1431 pointer values that contribute (directly or indirectly) to the 1432 computation of the pointer's value.</li> 1433 <li>The "<i>based</i> on" relationship is transitive.</li> 1434 </ul> 1435 1436 <p>Note that this definition of <i>"based"</i> is intentionally 1437 similar to the definition of <i>"based"</i> in C99, though it is 1438 slightly weaker.</p> 1439 1440 <p>LLVM IR does not associate types with memory. The result type of a 1441 <tt><a href="#i_load">load</a></tt> merely indicates the size and 1442 alignment of the memory from which to load, as well as the 1443 interpretation of the value. The first operand type of a 1444 <tt><a href="#i_store">store</a></tt> similarly only indicates the size 1445 and alignment of the store.</p> 1446 1447 <p>Consequently, type-based alias analysis, aka TBAA, aka 1448 <tt>-fstrict-aliasing</tt>, is not applicable to general unadorned 1449 LLVM IR. <a href="#metadata">Metadata</a> may be used to encode 1450 additional information which specialized optimization passes may use 1451 to implement type-based alias analysis.</p> 1452 1453 </div> 1454 1455 <!-- ======================================================================= --> 1456 <h3> 1457 <a name="volatile">Volatile Memory Accesses</a> 1458 </h3> 1459 1460 <div> 1461 1462 <p>Certain memory accesses, such as <a href="#i_load"><tt>load</tt></a>s, <a 1463 href="#i_store"><tt>store</tt></a>s, and <a 1464 href="#int_memcpy"><tt>llvm.memcpy</tt></a>s may be marked <tt>volatile</tt>. 1465 The optimizers must not change the number of volatile operations or change their 1466 order of execution relative to other volatile operations. The optimizers 1467 <i>may</i> change the order of volatile operations relative to non-volatile 1468 operations. This is not Java's "volatile" and has no cross-thread 1469 synchronization behavior.</p> 1470 1471 </div> 1472 1473 </div> 1474 1475 <!-- *********************************************************************** --> 1476 <h2><a name="typesystem">Type System</a></h2> 1477 <!-- *********************************************************************** --> 1478 1479 <div> 1480 1481 <p>The LLVM type system is one of the most important features of the 1482 intermediate representation. Being typed enables a number of optimizations 1483 to be performed on the intermediate representation directly, without having 1484 to do extra analyses on the side before the transformation. A strong type 1485 system makes it easier to read the generated code and enables novel analyses 1486 and transformations that are not feasible to perform on normal three address 1487 code representations.</p> 1488 1489 <!-- ======================================================================= --> 1490 <h3> 1491 <a name="t_classifications">Type Classifications</a> 1492 </h3> 1493 1494 <div> 1495 1496 <p>The types fall into a few useful classifications:</p> 1497 1498 <table border="1" cellspacing="0" cellpadding="4"> 1499 <tbody> 1500 <tr><th>Classification</th><th>Types</th></tr> 1501 <tr> 1502 <td><a href="#t_integer">integer</a></td> 1503 <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td> 1504 </tr> 1505 <tr> 1506 <td><a href="#t_floating">floating point</a></td> 1507 <td><tt>float, double, x86_fp80, fp128, ppc_fp128</tt></td> 1508 </tr> 1509 <tr> 1510 <td><a name="t_firstclass">first class</a></td> 1511 <td><a href="#t_integer">integer</a>, 1512 <a href="#t_floating">floating point</a>, 1513 <a href="#t_pointer">pointer</a>, 1514 <a href="#t_vector">vector</a>, 1515 <a href="#t_struct">structure</a>, 1516 <a href="#t_array">array</a>, 1517 <a href="#t_label">label</a>, 1518 <a href="#t_metadata">metadata</a>. 1519 </td> 1520 </tr> 1521 <tr> 1522 <td><a href="#t_primitive">primitive</a></td> 1523 <td><a href="#t_label">label</a>, 1524 <a href="#t_void">void</a>, 1525 <a href="#t_integer">integer</a>, 1526 <a href="#t_floating">floating point</a>, 1527 <a href="#t_x86mmx">x86mmx</a>, 1528 <a href="#t_metadata">metadata</a>.</td> 1529 </tr> 1530 <tr> 1531 <td><a href="#t_derived">derived</a></td> 1532 <td><a href="#t_array">array</a>, 1533 <a href="#t_function">function</a>, 1534 <a href="#t_pointer">pointer</a>, 1535 <a href="#t_struct">structure</a>, 1536 <a href="#t_vector">vector</a>, 1537 <a href="#t_opaque">opaque</a>. 1538 </td> 1539 </tr> 1540 </tbody> 1541 </table> 1542 1543 <p>The <a href="#t_firstclass">first class</a> types are perhaps the most 1544 important. Values of these types are the only ones which can be produced by 1545 instructions.</p> 1546 1547 </div> 1548 1549 <!-- ======================================================================= --> 1550 <h3> 1551 <a name="t_primitive">Primitive Types</a> 1552 </h3> 1553 1554 <div> 1555 1556 <p>The primitive types are the fundamental building blocks of the LLVM 1557 system.</p> 1558 1559 <!-- _______________________________________________________________________ --> 1560 <h4> 1561 <a name="t_integer">Integer Type</a> 1562 </h4> 1563 1564 <div> 1565 1566 <h5>Overview:</h5> 1567 <p>The integer type is a very simple type that simply specifies an arbitrary 1568 bit width for the integer type desired. Any bit width from 1 bit to 1569 2<sup>23</sup>-1 (about 8 million) can be specified.</p> 1570 1571 <h5>Syntax:</h5> 1572 <pre> 1573 iN 1574 </pre> 1575 1576 <p>The number of bits the integer will occupy is specified by the <tt>N</tt> 1577 value.</p> 1578 1579 <h5>Examples:</h5> 1580 <table class="layout"> 1581 <tr class="layout"> 1582 <td class="left"><tt>i1</tt></td> 1583 <td class="left">a single-bit integer.</td> 1584 </tr> 1585 <tr class="layout"> 1586 <td class="left"><tt>i32</tt></td> 1587 <td class="left">a 32-bit integer.</td> 1588 </tr> 1589 <tr class="layout"> 1590 <td class="left"><tt>i1942652</tt></td> 1591 <td class="left">a really big integer of over 1 million bits.</td> 1592 </tr> 1593 </table> 1594 1595 </div> 1596 1597 <!-- _______________________________________________________________________ --> 1598 <h4> 1599 <a name="t_floating">Floating Point Types</a> 1600 </h4> 1601 1602 <div> 1603 1604 <table> 1605 <tbody> 1606 <tr><th>Type</th><th>Description</th></tr> 1607 <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr> 1608 <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr> 1609 <tr><td><tt>fp128</tt></td><td>128-bit floating point value (112-bit mantissa)</td></tr> 1610 <tr><td><tt>x86_fp80</tt></td><td>80-bit floating point value (X87)</td></tr> 1611 <tr><td><tt>ppc_fp128</tt></td><td>128-bit floating point value (two 64-bits)</td></tr> 1612 </tbody> 1613 </table> 1614 1615 </div> 1616 1617 <!-- _______________________________________________________________________ --> 1618 <h4> 1619 <a name="t_x86mmx">X86mmx Type</a> 1620 </h4> 1621 1622 <div> 1623 1624 <h5>Overview:</h5> 1625 <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> 1626 1627 <h5>Syntax:</h5> 1628 <pre> 1629 x86mmx 1630 </pre> 1631 1632 </div> 1633 1634 <!-- _______________________________________________________________________ --> 1635 <h4> 1636 <a name="t_void">Void Type</a> 1637 </h4> 1638 1639 <div> 1640 1641 <h5>Overview:</h5> 1642 <p>The void type does not represent any value and has no size.</p> 1643 1644 <h5>Syntax:</h5> 1645 <pre> 1646 void 1647 </pre> 1648 1649 </div> 1650 1651 <!-- _______________________________________________________________________ --> 1652 <h4> 1653 <a name="t_label">Label Type</a> 1654 </h4> 1655 1656 <div> 1657 1658 <h5>Overview:</h5> 1659 <p>The label type represents code labels.</p> 1660 1661 <h5>Syntax:</h5> 1662 <pre> 1663 label 1664 </pre> 1665 1666 </div> 1667 1668 <!-- _______________________________________________________________________ --> 1669 <h4> 1670 <a name="t_metadata">Metadata Type</a> 1671 </h4> 1672 1673 <div> 1674 1675 <h5>Overview:</h5> 1676 <p>The metadata type represents embedded metadata. No derived types may be 1677 created from metadata except for <a href="#t_function">function</a> 1678 arguments. 1679 1680 <h5>Syntax:</h5> 1681 <pre> 1682 metadata 1683 </pre> 1684 1685 </div> 1686 1687 </div> 1688 1689 <!-- ======================================================================= --> 1690 <h3> 1691 <a name="t_derived">Derived Types</a> 1692 </h3> 1693 1694 <div> 1695 1696 <p>The real power in LLVM comes from the derived types in the system. This is 1697 what allows a programmer to represent arrays, functions, pointers, and other 1698 useful types. Each of these types contain one or more element types which 1699 may be a primitive type, or another derived type. For example, it is 1700 possible to have a two dimensional array, using an array as the element type 1701 of another array.</p> 1702 1703 </div> 1704 1705 1706 <!-- _______________________________________________________________________ --> 1707 <h4> 1708 <a name="t_aggregate">Aggregate Types</a> 1709 </h4> 1710 1711 <div> 1712 1713 <p>Aggregate Types are a subset of derived types that can contain multiple 1714 member types. <a href="#t_array">Arrays</a>, 1715 <a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are 1716 aggregate types.</p> 1717 1718 </div> 1719 1720 <!-- _______________________________________________________________________ --> 1721 <h4> 1722 <a name="t_array">Array Type</a> 1723 </h4> 1724 1725 <div> 1726 1727 <h5>Overview:</h5> 1728 <p>The array type is a very simple derived type that arranges elements 1729 sequentially in memory. The array type requires a size (number of elements) 1730 and an underlying data type.</p> 1731 1732 <h5>Syntax:</h5> 1733 <pre> 1734 [<# elements> x <elementtype>] 1735 </pre> 1736 1737 <p>The number of elements is a constant integer value; <tt>elementtype</tt> may 1738 be any type with a size.</p> 1739 1740 <h5>Examples:</h5> 1741 <table class="layout"> 1742 <tr class="layout"> 1743 <td class="left"><tt>[40 x i32]</tt></td> 1744 <td class="left">Array of 40 32-bit integer values.</td> 1745 </tr> 1746 <tr class="layout"> 1747 <td class="left"><tt>[41 x i32]</tt></td> 1748 <td class="left">Array of 41 32-bit integer values.</td> 1749 </tr> 1750 <tr class="layout"> 1751 <td class="left"><tt>[4 x i8]</tt></td> 1752 <td class="left">Array of 4 8-bit integer values.</td> 1753 </tr> 1754 </table> 1755 <p>Here are some examples of multidimensional arrays:</p> 1756 <table class="layout"> 1757 <tr class="layout"> 1758 <td class="left"><tt>[3 x [4 x i32]]</tt></td> 1759 <td class="left">3x4 array of 32-bit integer values.</td> 1760 </tr> 1761 <tr class="layout"> 1762 <td class="left"><tt>[12 x [10 x float]]</tt></td> 1763 <td class="left">12x10 array of single precision floating point values.</td> 1764 </tr> 1765 <tr class="layout"> 1766 <td class="left"><tt>[2 x [3 x [4 x i16]]]</tt></td> 1767 <td class="left">2x3x4 array of 16-bit integer values.</td> 1768 </tr> 1769 </table> 1770 1771 <p>There is no restriction on indexing beyond the end of the array implied by 1772 a static type (though there are restrictions on indexing beyond the bounds 1773 of an allocated object in some cases). This means that single-dimension 1774 'variable sized array' addressing can be implemented in LLVM with a zero 1775 length array type. An implementation of 'pascal style arrays' in LLVM could 1776 use the type "<tt>{ i32, [0 x float]}</tt>", for example.</p> 1777 1778 </div> 1779 1780 <!-- _______________________________________________________________________ --> 1781 <h4> 1782 <a name="t_function">Function Type</a> 1783 </h4> 1784 1785 <div> 1786 1787 <h5>Overview:</h5> 1788 <p>The function type can be thought of as a function signature. It consists of 1789 a return type and a list of formal parameter types. The return type of a 1790 function type is a first class type or a void type.</p> 1791 1792 <h5>Syntax:</h5> 1793 <pre> 1794 <returntype> (<parameter list>) 1795 </pre> 1796 1797 <p>...where '<tt><parameter list></tt>' is a comma-separated list of type 1798 specifiers. Optionally, the parameter list may include a type <tt>...</tt>, 1799 which indicates that the function takes a variable number of arguments. 1800 Variable argument functions can access their arguments with 1801 the <a href="#int_varargs">variable argument handling intrinsic</a> 1802 functions. '<tt><returntype></tt>' is any type except 1803 <a href="#t_label">label</a>.</p> 1804 1805 <h5>Examples:</h5> 1806 <table class="layout"> 1807 <tr class="layout"> 1808 <td class="left"><tt>i32 (i32)</tt></td> 1809 <td class="left">function taking an <tt>i32</tt>, returning an <tt>i32</tt> 1810 </td> 1811 </tr><tr class="layout"> 1812 <td class="left"><tt>float (i16, i32 *) * 1813 </tt></td> 1814 <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes 1815 an <tt>i16</tt> and a <a href="#t_pointer">pointer</a> to <tt>i32</tt>, 1816 returning <tt>float</tt>. 1817 </td> 1818 </tr><tr class="layout"> 1819 <td class="left"><tt>i32 (i8*, ...)</tt></td> 1820 <td class="left">A vararg function that takes at least one 1821 <a href="#t_pointer">pointer</a> to <tt>i8 </tt> (char in C), 1822 which returns an integer. This is the signature for <tt>printf</tt> in 1823 LLVM. 1824 </td> 1825 </tr><tr class="layout"> 1826 <td class="left"><tt>{i32, i32} (i32)</tt></td> 1827 <td class="left">A function taking an <tt>i32</tt>, returning a 1828 <a href="#t_struct">structure</a> containing two <tt>i32</tt> values 1829 </td> 1830 </tr> 1831 </table> 1832 1833 </div> 1834 1835 <!-- _______________________________________________________________________ --> 1836 <h4> 1837 <a name="t_struct">Structure Type</a> 1838 </h4> 1839 1840 <div> 1841 1842 <h5>Overview:</h5> 1843 <p>The structure type is used to represent a collection of data members together 1844 in memory. The elements of a structure may be any type that has a size.</p> 1845 1846 <p>Structures in memory are accessed using '<tt><a href="#i_load">load</a></tt>' 1847 and '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field 1848 with the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction. 1849 Structures in registers are accessed using the 1850 '<tt><a href="#i_extractvalue">extractvalue</a></tt>' and 1851 '<tt><a href="#i_insertvalue">insertvalue</a></tt>' instructions.</p> 1852 1853 <p>Structures may optionally be "packed" structures, which indicate that the 1854 alignment of the struct is one byte, and that there is no padding between 1855 the elements. In non-packed structs, padding between field types is defined 1856 by the target data string to match the underlying processor.</p> 1857 1858 <p>Structures can either be "anonymous" or "named". An anonymous structure is 1859 defined inline with other types (e.g. <tt>{i32, i32}*</tt>) and a named types 1860 are always defined at the top level with a name. Anonmyous types are uniqued 1861 by their contents and can never be recursive since there is no way to write 1862 one. Named types can be recursive. 1863 </p> 1864 1865 <h5>Syntax:</h5> 1866 <pre> 1867 %T1 = type { <type list> } <i>; Named normal struct type</i> 1868 %T2 = type <{ <type list> }> <i>; Named packed struct type</i> 1869 </pre> 1870 1871 <h5>Examples:</h5> 1872 <table class="layout"> 1873 <tr class="layout"> 1874 <td class="left"><tt>{ i32, i32, i32 }</tt></td> 1875 <td class="left">A triple of three <tt>i32</tt> values</td> 1876 </tr> 1877 <tr class="layout"> 1878 <td class="left"><tt>{ float, i32 (i32) * }</tt></td> 1879 <td class="left">A pair, where the first element is a <tt>float</tt> and the 1880 second element is a <a href="#t_pointer">pointer</a> to a 1881 <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning 1882 an <tt>i32</tt>.</td> 1883 </tr> 1884 <tr class="layout"> 1885 <td class="left"><tt><{ i8, i32 }></tt></td> 1886 <td class="left">A packed struct known to be 5 bytes in size.</td> 1887 </tr> 1888 </table> 1889 1890 </div> 1891 1892 <!-- _______________________________________________________________________ --> 1893 <h4> 1894 <a name="t_opaque">Opaque Type</a> 1895 </h4> 1896 1897 <div> 1898 1899 <h5>Overview:</h5> 1900 <p>Opaque types are used to represent named structure types that do not have a 1901 body specified. This corresponds (for example) to the C notion of a forward 1902 declared structure.</p> 1903 1904 <h5>Syntax:</h5> 1905 <pre> 1906 %X = type opaque 1907 %52 = type opaque 1908 </pre> 1909 1910 <h5>Examples:</h5> 1911 <table class="layout"> 1912 <tr class="layout"> 1913 <td class="left"><tt>opaque</tt></td> 1914 <td class="left">An opaque type.</td> 1915 </tr> 1916 </table> 1917 1918 </div> 1919 1920 1921 1922 <!-- _______________________________________________________________________ --> 1923 <h4> 1924 <a name="t_pointer">Pointer Type</a> 1925 </h4> 1926 1927 <div> 1928 1929 <h5>Overview:</h5> 1930 <p>The pointer type is used to specify memory locations. 1931 Pointers are commonly used to reference objects in memory.</p> 1932 1933 <p>Pointer types may have an optional address space attribute defining the 1934 numbered address space where the pointed-to object resides. The default 1935 address space is number zero. The semantics of non-zero address 1936 spaces are target-specific.</p> 1937 1938 <p>Note that LLVM does not permit pointers to void (<tt>void*</tt>) nor does it 1939 permit pointers to labels (<tt>label*</tt>). Use <tt>i8*</tt> instead.</p> 1940 1941 <h5>Syntax:</h5> 1942 <pre> 1943 <type> * 1944 </pre> 1945 1946 <h5>Examples:</h5> 1947 <table class="layout"> 1948 <tr class="layout"> 1949 <td class="left"><tt>[4 x i32]*</tt></td> 1950 <td class="left">A <a href="#t_pointer">pointer</a> to <a 1951 href="#t_array">array</a> of four <tt>i32</tt> values.</td> 1952 </tr> 1953 <tr class="layout"> 1954 <td class="left"><tt>i32 (i32*) *</tt></td> 1955 <td class="left"> A <a href="#t_pointer">pointer</a> to a <a 1956 href="#t_function">function</a> that takes an <tt>i32*</tt>, returning an 1957 <tt>i32</tt>.</td> 1958 </tr> 1959 <tr class="layout"> 1960 <td class="left"><tt>i32 addrspace(5)*</tt></td> 1961 <td class="left">A <a href="#t_pointer">pointer</a> to an <tt>i32</tt> value 1962 that resides in address space #5.</td> 1963 </tr> 1964 </table> 1965 1966 </div> 1967 1968 <!-- _______________________________________________________________________ --> 1969 <h4> 1970 <a name="t_vector">Vector Type</a> 1971 </h4> 1972 1973 <div> 1974 1975 <h5>Overview:</h5> 1976 <p>A vector type is a simple derived type that represents a vector of elements. 1977 Vector types are used when multiple primitive data are operated in parallel 1978 using a single instruction (SIMD). A vector type requires a size (number of 1979 elements) and an underlying primitive data type. Vector types are considered 1980 <a href="#t_firstclass">first class</a>.</p> 1981 1982 <h5>Syntax:</h5> 1983 <pre> 1984 < <# elements> x <elementtype> > 1985 </pre> 1986 1987 <p>The number of elements is a constant integer value larger than 0; elementtype 1988 may be any integer or floating point type. Vectors of size zero are not 1989 allowed, and pointers are not allowed as the element type.</p> 1990 1991 <h5>Examples:</h5> 1992 <table class="layout"> 1993 <tr class="layout"> 1994 <td class="left"><tt><4 x i32></tt></td> 1995 <td class="left">Vector of 4 32-bit integer values.</td> 1996 </tr> 1997 <tr class="layout"> 1998 <td class="left"><tt><8 x float></tt></td> 1999 <td class="left">Vector of 8 32-bit floating-point values.</td> 2000 </tr> 2001 <tr class="layout"> 2002 <td class="left"><tt><2 x i64></tt></td> 2003 <td class="left">Vector of 2 64-bit integer values.</td> 2004 </tr> 2005 </table> 2006 2007 </div> 2008 2009 <!-- *********************************************************************** --> 2010 <h2><a name="constants">Constants</a></h2> 2011 <!-- *********************************************************************** --> 2012 2013 <div> 2014 2015 <p>LLVM has several different basic types of constants. This section describes 2016 them all and their syntax.</p> 2017 2018 <!-- ======================================================================= --> 2019 <h3> 2020 <a name="simpleconstants">Simple Constants</a> 2021 </h3> 2022 2023 <div> 2024 2025 <dl> 2026 <dt><b>Boolean constants</b></dt> 2027 <dd>The two strings '<tt>true</tt>' and '<tt>false</tt>' are both valid 2028 constants of the <tt><a href="#t_integer">i1</a></tt> type.</dd> 2029 2030 <dt><b>Integer constants</b></dt> 2031 <dd>Standard integers (such as '4') are constants of 2032 the <a href="#t_integer">integer</a> type. Negative numbers may be used 2033 with integer types.</dd> 2034 2035 <dt><b>Floating point constants</b></dt> 2036 <dd>Floating point constants use standard decimal notation (e.g. 123.421), 2037 exponential notation (e.g. 1.23421e+2), or a more precise hexadecimal 2038 notation (see below). The assembler requires the exact decimal value of a 2039 floating-point constant. For example, the assembler accepts 1.25 but 2040 rejects 1.3 because 1.3 is a repeating decimal in binary. Floating point 2041 constants must have a <a href="#t_floating">floating point</a> type. </dd> 2042 2043 <dt><b>Null pointer constants</b></dt> 2044 <dd>The identifier '<tt>null</tt>' is recognized as a null pointer constant 2045 and must be of <a href="#t_pointer">pointer type</a>.</dd> 2046 </dl> 2047 2048 <p>The one non-intuitive notation for constants is the hexadecimal form of 2049 floating point constants. For example, the form '<tt>double 2050 0x432ff973cafa8000</tt>' is equivalent to (but harder to read than) 2051 '<tt>double 4.5e+15</tt>'. The only time hexadecimal floating point 2052 constants are required (and the only time that they are generated by the 2053 disassembler) is when a floating point constant must be emitted but it cannot 2054 be represented as a decimal floating point number in a reasonable number of 2055 digits. For example, NaN's, infinities, and other special values are 2056 represented in their IEEE hexadecimal format so that assembly and disassembly 2057 do not cause any bits to change in the constants.</p> 2058 2059 <p>When using the hexadecimal form, constants of types float and double are 2060 represented using the 16-digit form shown above (which matches the IEEE754 2061 representation for double); float values must, however, be exactly 2062 representable as IEE754 single precision. Hexadecimal format is always used 2063 for long double, and there are three forms of long double. The 80-bit format 2064 used by x86 is represented as <tt>0xK</tt> followed by 20 hexadecimal digits. 2065 The 128-bit format used by PowerPC (two adjacent doubles) is represented 2066 by <tt>0xM</tt> followed by 32 hexadecimal digits. The IEEE 128-bit format 2067 is represented by <tt>0xL</tt> followed by 32 hexadecimal digits; no 2068 currently supported target uses this format. Long doubles will only work if 2069 they match the long double format on your target. All hexadecimal formats 2070 are big-endian (sign bit at the left).</p> 2071 2072 <p>There are no constants of type x86mmx.</p> 2073 </div> 2074 2075 <!-- ======================================================================= --> 2076 <h3> 2077 <a name="aggregateconstants"></a> <!-- old anchor --> 2078 <a name="complexconstants">Complex Constants</a> 2079 </h3> 2080 2081 <div> 2082 2083 <p>Complex constants are a (potentially recursive) combination of simple 2084 constants and smaller complex constants.</p> 2085 2086 <dl> 2087 <dt><b>Structure constants</b></dt> 2088 <dd>Structure constants are represented with notation similar to structure 2089 type definitions (a comma separated list of elements, surrounded by braces 2090 (<tt>{}</tt>)). For example: "<tt>{ i32 4, float 17.0, i32* @G }</tt>", 2091 where "<tt>@G</tt>" is declared as "<tt>@G = external global i32</tt>". 2092 Structure constants must have <a href="#t_struct">structure type</a>, and 2093 the number and types of elements must match those specified by the 2094 type.</dd> 2095 2096 <dt><b>Array constants</b></dt> 2097 <dd>Array constants are represented with notation similar to array type 2098 definitions (a comma separated list of elements, surrounded by square 2099 brackets (<tt>[]</tt>)). For example: "<tt>[ i32 42, i32 11, i32 74 2100 ]</tt>". Array constants must have <a href="#t_array">array type</a>, and 2101 the number and types of elements must match those specified by the 2102 type.</dd> 2103 2104 <dt><b>Vector constants</b></dt> 2105 <dd>Vector constants are represented with notation similar to vector type 2106 definitions (a comma separated list of elements, surrounded by 2107 less-than/greater-than's (<tt><></tt>)). For example: "<tt>< i32 2108 42, i32 11, i32 74, i32 100 ></tt>". Vector constants must 2109 have <a href="#t_vector">vector type</a>, and the number and types of 2110 elements must match those specified by the type.</dd> 2111 2112 <dt><b>Zero initialization</b></dt> 2113 <dd>The string '<tt>zeroinitializer</tt>' can be used to zero initialize a 2114 value to zero of <em>any</em> type, including scalar and 2115 <a href="#t_aggregate">aggregate</a> types. 2116 This is often used to avoid having to print large zero initializers 2117 (e.g. for large arrays) and is always exactly equivalent to using explicit 2118 zero initializers.</dd> 2119 2120 <dt><b>Metadata node</b></dt> 2121 <dd>A metadata node is a structure-like constant with 2122 <a href="#t_metadata">metadata type</a>. For example: "<tt>metadata !{ 2123 i32 0, metadata !"test" }</tt>". Unlike other constants that are meant to 2124 be interpreted as part of the instruction stream, metadata is a place to 2125 attach additional information such as debug info.</dd> 2126 </dl> 2127 2128 </div> 2129 2130 <!-- ======================================================================= --> 2131 <h3> 2132 <a name="globalconstants">Global Variable and Function Addresses</a> 2133 </h3> 2134 2135 <div> 2136 2137 <p>The addresses of <a href="#globalvars">global variables</a> 2138 and <a href="#functionstructure">functions</a> are always implicitly valid 2139 (link-time) constants. These constants are explicitly referenced when 2140 the <a href="#identifiers">identifier for the global</a> is used and always 2141 have <a href="#t_pointer">pointer</a> type. For example, the following is a 2142 legal LLVM file:</p> 2143 2144 <pre class="doc_code"> 2145 @X = global i32 17 2146 @Y = global i32 42 2147 @Z = global [2 x i32*] [ i32* @X, i32* @Y ] 2148 </pre> 2149 2150 </div> 2151 2152 <!-- ======================================================================= --> 2153 <h3> 2154 <a name="undefvalues">Undefined Values</a> 2155 </h3> 2156 2157 <div> 2158 2159 <p>The string '<tt>undef</tt>' can be used anywhere a constant is expected, and 2160 indicates that the user of the value may receive an unspecified bit-pattern. 2161 Undefined values may be of any type (other than '<tt>label</tt>' 2162 or '<tt>void</tt>') and be used anywhere a constant is permitted.</p> 2163 2164 <p>Undefined values are useful because they indicate to the compiler that the 2165 program is well defined no matter what value is used. This gives the 2166 compiler more freedom to optimize. Here are some examples of (potentially 2167 surprising) transformations that are valid (in pseudo IR):</p> 2168 2169 2170 <pre class="doc_code"> 2171 %A = add %X, undef 2172 %B = sub %X, undef 2173 %C = xor %X, undef 2174 Safe: 2175 %A = undef 2176 %B = undef 2177 %C = undef 2178 </pre> 2179 2180 <p>This is safe because all of the output bits are affected by the undef bits. 2181 Any output bit can have a zero or one depending on the input bits.</p> 2182 2183 <pre class="doc_code"> 2184 %A = or %X, undef 2185 %B = and %X, undef 2186 Safe: 2187 %A = -1 2188 %B = 0 2189 Unsafe: 2190 %A = undef 2191 %B = undef 2192 </pre> 2193 2194 <p>These logical operations have bits that are not always affected by the input. 2195 For example, if <tt>%X</tt> has a zero bit, then the output of the 2196 '<tt>and</tt>' operation will always be a zero for that bit, no matter what 2197 the corresponding bit from the '<tt>undef</tt>' is. As such, it is unsafe to 2198 optimize or assume that the result of the '<tt>and</tt>' is '<tt>undef</tt>'. 2199 However, it is safe to assume that all bits of the '<tt>undef</tt>' could be 2200 0, and optimize the '<tt>and</tt>' to 0. Likewise, it is safe to assume that 2201 all the bits of the '<tt>undef</tt>' operand to the '<tt>or</tt>' could be 2202 set, allowing the '<tt>or</tt>' to be folded to -1.</p> 2203 2204 <pre class="doc_code"> 2205 %A = select undef, %X, %Y 2206 %B = select undef, 42, %Y 2207 %C = select %X, %Y, undef 2208 Safe: 2209 %A = %X (or %Y) 2210 %B = 42 (or %Y) 2211 %C = %Y 2212 Unsafe: 2213 %A = undef 2214 %B = undef 2215 %C = undef 2216 </pre> 2217 2218 <p>This set of examples shows that undefined '<tt>select</tt>' (and conditional 2219 branch) conditions can go <em>either way</em>, but they have to come from one 2220 of the two operands. In the <tt>%A</tt> example, if <tt>%X</tt> and 2221 <tt>%Y</tt> were both known to have a clear low bit, then <tt>%A</tt> would 2222 have to have a cleared low bit. However, in the <tt>%C</tt> example, the 2223 optimizer is allowed to assume that the '<tt>undef</tt>' operand could be the 2224 same as <tt>%Y</tt>, allowing the whole '<tt>select</tt>' to be 2225 eliminated.</p> 2226 2227 <pre class="doc_code"> 2228 %A = xor undef, undef 2229 2230 %B = undef 2231 %C = xor %B, %B 2232 2233 %D = undef 2234 %E = icmp lt %D, 4 2235 %F = icmp gte %D, 4 2236 2237 Safe: 2238 %A = undef 2239 %B = undef 2240 %C = undef 2241 %D = undef 2242 %E = undef 2243 %F = undef 2244 </pre> 2245 2246 <p>This example points out that two '<tt>undef</tt>' operands are not 2247 necessarily the same. This can be surprising to people (and also matches C 2248 semantics) where they assume that "<tt>X^X</tt>" is always zero, even 2249 if <tt>X</tt> is undefined. This isn't true for a number of reasons, but the 2250 short answer is that an '<tt>undef</tt>' "variable" can arbitrarily change 2251 its value over its "live range". This is true because the variable doesn't 2252 actually <em>have a live range</em>. Instead, the value is logically read 2253 from arbitrary registers that happen to be around when needed, so the value 2254 is not necessarily consistent over time. In fact, <tt>%A</tt> and <tt>%C</tt> 2255 need to have the same semantics or the core LLVM "replace all uses with" 2256 concept would not hold.</p> 2257 2258 <pre class="doc_code"> 2259 %A = fdiv undef, %X 2260 %B = fdiv %X, undef 2261 Safe: 2262 %A = undef 2263 b: unreachable 2264 </pre> 2265 2266 <p>These examples show the crucial difference between an <em>undefined 2267 value</em> and <em>undefined behavior</em>. An undefined value (like 2268 '<tt>undef</tt>') is allowed to have an arbitrary bit-pattern. This means that 2269 the <tt>%A</tt> operation can be constant folded to '<tt>undef</tt>', because 2270 the '<tt>undef</tt>' could be an SNaN, and <tt>fdiv</tt> is not (currently) 2271 defined on SNaN's. However, in the second example, we can make a more 2272 aggressive assumption: because the <tt>undef</tt> is allowed to be an 2273 arbitrary value, we are allowed to assume that it could be zero. Since a 2274 divide by zero has <em>undefined behavior</em>, we are allowed to assume that 2275 the operation does not execute at all. This allows us to delete the divide and 2276 all code after it. Because the undefined operation "can't happen", the 2277 optimizer can assume that it occurs in dead code.</p> 2278 2279 <pre class="doc_code"> 2280 a: store undef -> %X 2281 b: store %X -> undef 2282 Safe: 2283 a: <deleted> 2284 b: unreachable 2285 </pre> 2286 2287 <p>These examples reiterate the <tt>fdiv</tt> example: a store <em>of</em> an 2288 undefined value can be assumed to not have any effect; we can assume that the 2289 value is overwritten with bits that happen to match what was already there. 2290 However, a store <em>to</em> an undefined location could clobber arbitrary 2291 memory, therefore, it has undefined behavior.</p> 2292 2293 </div> 2294 2295 <!-- ======================================================================= --> 2296 <h3> 2297 <a name="trapvalues">Trap Values</a> 2298 </h3> 2299 2300 <div> 2301 2302 <p>Trap values are similar to <a href="#undefvalues">undef values</a>, however 2303 instead of representing an unspecified bit pattern, they represent the 2304 fact that an instruction or constant expression which cannot evoke side 2305 effects has nevertheless detected a condition which results in undefined 2306 behavior.</p> 2307 2308 <p>There is currently no way of representing a trap value in the IR; they 2309 only exist when produced by operations such as 2310 <a href="#i_add"><tt>add</tt></a> with the <tt>nsw</tt> flag.</p> 2311 2312 <p>Trap value behavior is defined in terms of value <i>dependence</i>:</p> 2313 2314 <ul> 2315 <li>Values other than <a href="#i_phi"><tt>phi</tt></a> nodes depend on 2316 their operands.</li> 2317 2318 <li><a href="#i_phi"><tt>Phi</tt></a> nodes depend on the operand corresponding 2319 to their dynamic predecessor basic block.</li> 2320 2321 <li>Function arguments depend on the corresponding actual argument values in 2322 the dynamic callers of their functions.</li> 2323 2324 <li><a href="#i_call"><tt>Call</tt></a> instructions depend on the 2325 <a href="#i_ret"><tt>ret</tt></a> instructions that dynamically transfer 2326 control back to them.</li> 2327 2328 <li><a href="#i_invoke"><tt>Invoke</tt></a> instructions depend on the 2329 <a href="#i_ret"><tt>ret</tt></a>, <a href="#i_unwind"><tt>unwind</tt></a>, 2330 or exception-throwing call instructions that dynamically transfer control 2331 back to them.</li> 2332 2333 <li>Non-volatile loads and stores depend on the most recent stores to all of the 2334 referenced memory addresses, following the order in the IR 2335 (including loads and stores implied by intrinsics such as 2336 <a href="#int_memcpy"><tt>@llvm.memcpy</tt></a>.)</li> 2337 2338 <!-- TODO: In the case of multiple threads, this only applies if the store 2339 "happens-before" the load or store. --> 2340 2341 <!-- TODO: floating-point exception state --> 2342 2343 <li>An instruction with externally visible side effects depends on the most 2344 recent preceding instruction with externally visible side effects, following 2345 the order in the IR. (This includes 2346 <a href="#volatile">volatile operations</a>.)</li> 2347 2348 <li>An instruction <i>control-depends</i> on a 2349 <a href="#terminators">terminator instruction</a> 2350 if the terminator instruction has multiple successors and the instruction 2351 is always executed when control transfers to one of the successors, and 2352 may not be executed when control is transferred to another.</li> 2353 2354 <li>Additionally, an instruction also <i>control-depends</i> on a terminator 2355 instruction if the set of instructions it otherwise depends on would be 2356 different if the terminator had transferred control to a different 2357 successor.</li> 2358 2359 <li>Dependence is transitive.</li> 2360 2361 </ul> 2362 2363 <p>Whenever a trap value is generated, all values which depend on it evaluate 2364 to trap. If they have side effects, the evoke their side effects as if each 2365 operand with a trap value were undef. If they have externally-visible side 2366 effects, the behavior is undefined.</p> 2367 2368 <p>Here are some examples:</p> 2369 2370 <pre class="doc_code"> 2371 entry: 2372 %trap = sub nuw i32 0, 1 ; Results in a trap value. 2373 %still_trap = and i32 %trap, 0 ; Whereas (and i32 undef, 0) would return 0. 2374 %trap_yet_again = getelementptr i32* @h, i32 %still_trap 2375 store i32 0, i32* %trap_yet_again ; undefined behavior 2376 2377 store i32 %trap, i32* @g ; Trap value conceptually stored to memory. 2378 %trap2 = load i32* @g ; Returns a trap value, not just undef. 2379 2380 volatile store i32 %trap, i32* @g ; External observation; undefined behavior. 2381 2382 %narrowaddr = bitcast i32* @g to i16* 2383 %wideaddr = bitcast i32* @g to i64* 2384 %trap3 = load i16* %narrowaddr ; Returns a trap value. 2385 %trap4 = load i64* %wideaddr ; Returns a trap value. 2386 2387 %cmp = icmp slt i32 %trap, 0 ; Returns a trap value. 2388 br i1 %cmp, label %true, label %end ; Branch to either destination. 2389 2390 true: 2391 volatile store i32 0, i32* @g ; This is control-dependent on %cmp, so 2392 ; it has undefined behavior. 2393 br label %end 2394 2395 end: 2396 %p = phi i32 [ 0, %entry ], [ 1, %true ] 2397 ; Both edges into this PHI are 2398 ; control-dependent on %cmp, so this 2399 ; always results in a trap value. 2400 2401 volatile store i32 0, i32* @g ; This would depend on the store in %true 2402 ; if %cmp is true, or the store in %entry 2403 ; otherwise, so this is undefined behavior. 2404 2405 br i1 %cmp, label %second_true, label %second_end 2406 ; The same branch again, but this time the 2407 ; true block doesn't have side effects. 2408 2409 second_true: 2410 ; No side effects! 2411 ret void 2412 2413 second_end: 2414 volatile store i32 0, i32* @g ; This time, the instruction always depends 2415 ; on the store in %end. Also, it is 2416 ; control-equivalent to %end, so this is 2417 ; well-defined (again, ignoring earlier 2418 ; undefined behavior in this example). 2419 </pre> 2420 2421 </div> 2422 2423 <!-- ======================================================================= --> 2424 <h3> 2425 <a name="blockaddress">Addresses of Basic Blocks</a> 2426 </h3> 2427 2428 <div> 2429 2430 <p><b><tt>blockaddress(@function, %block)</tt></b></p> 2431 2432 <p>The '<tt>blockaddress</tt>' constant computes the address of the specified 2433 basic block in the specified function, and always has an i8* type. Taking 2434 the address of the entry block is illegal.</p> 2435 2436 <p>This value only has defined behavior when used as an operand to the 2437 '<a href="#i_indirectbr"><tt>indirectbr</tt></a>' instruction, or for 2438 comparisons against null. Pointer equality tests between labels addresses 2439 results in undefined behavior — though, again, comparison against null 2440 is ok, and no label is equal to the null pointer. This may be passed around 2441 as an opaque pointer sized value as long as the bits are not inspected. This 2442 allows <tt>ptrtoint</tt> and arithmetic to be performed on these values so 2443 long as the original value is reconstituted before the <tt>indirectbr</tt> 2444 instruction.</p> 2445 2446 <p>Finally, some targets may provide defined semantics when using the value as 2447 the operand to an inline assembly, but that is target specific.</p> 2448 2449 </div> 2450 2451 2452 <!-- ======================================================================= --> 2453 <h3> 2454 <a name="constantexprs">Constant Expressions</a> 2455 </h3> 2456 2457 <div> 2458 2459 <p>Constant expressions are used to allow expressions involving other constants 2460 to be used as constants. Constant expressions may be of 2461 any <a href="#t_firstclass">first class</a> type and may involve any LLVM 2462 operation that does not have side effects (e.g. load and call are not 2463 supported). The following is the syntax for constant expressions:</p> 2464 2465 <dl> 2466 <dt><b><tt>trunc (CST to TYPE)</tt></b></dt> 2467 <dd>Truncate a constant to another type. The bit size of CST must be larger 2468 than the bit size of TYPE. Both types must be integers.</dd> 2469 2470 <dt><b><tt>zext (CST to TYPE)</tt></b></dt> 2471 <dd>Zero extend a constant to another type. The bit size of CST must be 2472 smaller than the bit size of TYPE. Both types must be integers.</dd> 2473 2474 <dt><b><tt>sext (CST to TYPE)</tt></b></dt> 2475 <dd>Sign extend a constant to another type. The bit size of CST must be 2476 smaller than the bit size of TYPE. Both types must be integers.</dd> 2477 2478 <dt><b><tt>fptrunc (CST to TYPE)</tt></b></dt> 2479 <dd>Truncate a floating point constant to another floating point type. The 2480 size of CST must be larger than the size of TYPE. Both types must be 2481 floating point.</dd> 2482 2483 <dt><b><tt>fpext (CST to TYPE)</tt></b></dt> 2484 <dd>Floating point extend a constant to another type. The size of CST must be 2485 smaller or equal to the size of TYPE. Both types must be floating 2486 point.</dd> 2487 2488 <dt><b><tt>fptoui (CST to TYPE)</tt></b></dt> 2489 <dd>Convert a floating point constant to the corresponding unsigned integer 2490 constant. TYPE must be a scalar or vector integer type. CST must be of 2491 scalar or vector floating point type. Both CST and TYPE must be scalars, 2492 or vectors of the same number of elements. If the value won't fit in the 2493 integer type, the results are undefined.</dd> 2494 2495 <dt><b><tt>fptosi (CST to TYPE)</tt></b></dt> 2496 <dd>Convert a floating point constant to the corresponding signed integer 2497 constant. TYPE must be a scalar or vector integer type. CST must be of 2498 scalar or vector floating point type. Both CST and TYPE must be scalars, 2499 or vectors of the same number of elements. If the value won't fit in the 2500 integer type, the results are undefined.</dd> 2501 2502 <dt><b><tt>uitofp (CST to TYPE)</tt></b></dt> 2503 <dd>Convert an unsigned integer constant to the corresponding floating point 2504 constant. TYPE must be a scalar or vector floating point type. CST must be 2505 of scalar or vector integer type. Both CST and TYPE must be scalars, or 2506 vectors of the same number of elements. If the value won't fit in the 2507 floating point type, the results are undefined.</dd> 2508 2509 <dt><b><tt>sitofp (CST to TYPE)</tt></b></dt> 2510 <dd>Convert a signed integer constant to the corresponding floating point 2511 constant. TYPE must be a scalar or vector floating point type. CST must be 2512 of scalar or vector integer type. Both CST and TYPE must be scalars, or 2513 vectors of the same number of elements. If the value won't fit in the 2514 floating point type, the results are undefined.</dd> 2515 2516 <dt><b><tt>ptrtoint (CST to TYPE)</tt></b></dt> 2517 <dd>Convert a pointer typed constant to the corresponding integer constant 2518 <tt>TYPE</tt> must be an integer type. <tt>CST</tt> must be of pointer 2519 type. The <tt>CST</tt> value is zero extended, truncated, or unchanged to 2520 make it fit in <tt>TYPE</tt>.</dd> 2521 2522 <dt><b><tt>inttoptr (CST to TYPE)</tt></b></dt> 2523 <dd>Convert a integer constant to a pointer constant. TYPE must be a pointer 2524 type. CST must be of integer type. The CST value is zero extended, 2525 truncated, or unchanged to make it fit in a pointer size. This one is 2526 <i>really</i> dangerous!</dd> 2527 2528 <dt><b><tt>bitcast (CST to TYPE)</tt></b></dt> 2529 <dd>Convert a constant, CST, to another TYPE. The constraints of the operands 2530 are the same as those for the <a href="#i_bitcast">bitcast 2531 instruction</a>.</dd> 2532 2533 <dt><b><tt>getelementptr (CSTPTR, IDX0, IDX1, ...)</tt></b></dt> 2534 <dt><b><tt>getelementptr inbounds (CSTPTR, IDX0, IDX1, ...)</tt></b></dt> 2535 <dd>Perform the <a href="#i_getelementptr">getelementptr operation</a> on 2536 constants. As with the <a href="#i_getelementptr">getelementptr</a> 2537 instruction, the index list may have zero or more indexes, which are 2538 required to make sense for the type of "CSTPTR".</dd> 2539 2540 <dt><b><tt>select (COND, VAL1, VAL2)</tt></b></dt> 2541 <dd>Perform the <a href="#i_select">select operation</a> on constants.</dd> 2542 2543 <dt><b><tt>icmp COND (VAL1, VAL2)</tt></b></dt> 2544 <dd>Performs the <a href="#i_icmp">icmp operation</a> on constants.</dd> 2545 2546 <dt><b><tt>fcmp COND (VAL1, VAL2)</tt></b></dt> 2547 <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd> 2548 2549 <dt><b><tt>extractelement (VAL, IDX)</tt></b></dt> 2550 <dd>Perform the <a href="#i_extractelement">extractelement operation</a> on 2551 constants.</dd> 2552 2553 <dt><b><tt>insertelement (VAL, ELT, IDX)</tt></b></dt> 2554 <dd>Perform the <a href="#i_insertelement">insertelement operation</a> on 2555 constants.</dd> 2556 2557 <dt><b><tt>shufflevector (VEC1, VEC2, IDXMASK)</tt></b></dt> 2558 <dd>Perform the <a href="#i_shufflevector">shufflevector operation</a> on 2559 constants.</dd> 2560 2561 <dt><b><tt>extractvalue (VAL, IDX0, IDX1, ...)</tt></b></dt> 2562 <dd>Perform the <a href="#i_extractvalue">extractvalue operation</a> on 2563 constants. The index list is interpreted in a similar manner as indices in 2564 a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one 2565 index value must be specified.</dd> 2566 2567 <dt><b><tt>insertvalue (VAL, ELT, IDX0, IDX1, ...)</tt></b></dt> 2568 <dd>Perform the <a href="#i_insertvalue">insertvalue operation</a> on 2569 constants. The index list is interpreted in a similar manner as indices in 2570 a '<a href="#i_getelementptr">getelementptr</a>' operation. At least one 2571 index value must be specified.</dd> 2572 2573 <dt><b><tt>OPCODE (LHS, RHS)</tt></b></dt> 2574 <dd>Perform the specified operation of the LHS and RHS constants. OPCODE may 2575 be any of the <a href="#binaryops">binary</a> 2576 or <a href="#bitwiseops">bitwise binary</a> operations. The constraints 2577 on operands are the same as those for the corresponding instruction 2578 (e.g. no bitwise operations on floating point values are allowed).</dd> 2579 </dl> 2580 2581 </div> 2582 2583 </div> 2584 2585 <!-- *********************************************************************** --> 2586 <h2><a name="othervalues">Other Values</a></h2> 2587 <!-- *********************************************************************** --> 2588 <div> 2589 <!-- ======================================================================= --> 2590 <h3> 2591 <a name="inlineasm">Inline Assembler Expressions</a> 2592 </h3> 2593 2594 <div> 2595 2596 <p>LLVM supports inline assembler expressions (as opposed 2597 to <a href="#moduleasm"> Module-Level Inline Assembly</a>) through the use of 2598 a special value. This value represents the inline assembler as a string 2599 (containing the instructions to emit), a list of operand constraints (stored 2600 as a string), a flag that indicates whether or not the inline asm 2601 expression has side effects, and a flag indicating whether the function 2602 containing the asm needs to align its stack conservatively. An example 2603 inline assembler expression is:</p> 2604 2605 <pre class="doc_code"> 2606 i32 (i32) asm "bswap $0", "=r,r" 2607 </pre> 2608 2609 <p>Inline assembler expressions may <b>only</b> be used as the callee operand of 2610 a <a href="#i_call"><tt>call</tt> instruction</a>. Thus, typically we 2611 have:</p> 2612 2613 <pre class="doc_code"> 2614 %X = call i32 asm "<a href="#int_bswap">bswap</a> $0", "=r,r"(i32 %Y) 2615 </pre> 2616 2617 <p>Inline asms with side effects not visible in the constraint list must be 2618 marked as having side effects. This is done through the use of the 2619 '<tt>sideeffect</tt>' keyword, like so:</p> 2620 2621 <pre class="doc_code"> 2622 call void asm sideeffect "eieio", ""() 2623 </pre> 2624 2625 <p>In some cases inline asms will contain code that will not work unless the 2626 stack is aligned in some way, such as calls or SSE instructions on x86, 2627 yet will not contain code that does that alignment within the asm. 2628 The compiler should make conservative assumptions about what the asm might 2629 contain and should generate its usual stack alignment code in the prologue 2630 if the '<tt>alignstack</tt>' keyword is present:</p> 2631 2632 <pre class="doc_code"> 2633 call void asm alignstack "eieio", ""() 2634 </pre> 2635 2636 <p>If both keywords appear the '<tt>sideeffect</tt>' keyword must come 2637 first.</p> 2638 2639 <p>TODO: The format of the asm and constraints string still need to be 2640 documented here. Constraints on what can be done (e.g. duplication, moving, 2641 etc need to be documented). This is probably best done by reference to 2642 another document that covers inline asm from a holistic perspective.</p> 2643 2644 <h4> 2645 <a name="inlineasm_md">Inline Asm Metadata</a> 2646 </h4> 2647 2648 <div> 2649 2650 <p>The call instructions that wrap inline asm nodes may have a "!srcloc" MDNode 2651 attached to it that contains a list of constant integers. If present, the 2652 code generator will use the integer as the location cookie value when report 2653 errors through the LLVMContext error reporting mechanisms. This allows a 2654 front-end to correlate backend errors that occur with inline asm back to the 2655 source code that produced it. For example:</p> 2656 2657 <pre class="doc_code"> 2658 call void asm sideeffect "something bad", ""()<b>, !srcloc !42</b> 2659 ... 2660 !42 = !{ i32 1234567 } 2661 </pre> 2662 2663 <p>It is up to the front-end to make sense of the magic numbers it places in the 2664 IR. If the MDNode contains multiple constants, the code generator will use 2665 the one that corresponds to the line of the asm that the error occurs on.</p> 2666 2667 </div> 2668 2669 </div> 2670 2671 <!-- ======================================================================= --> 2672 <h3> 2673 <a name="metadata">Metadata Nodes and Metadata Strings</a> 2674 </h3> 2675 2676 <div> 2677 2678 <p>LLVM IR allows metadata to be attached to instructions in the program that 2679 can convey extra information about the code to the optimizers and code 2680 generator. One example application of metadata is source-level debug 2681 information. There are two metadata primitives: strings and nodes. All 2682 metadata has the <tt>metadata</tt> type and is identified in syntax by a 2683 preceding exclamation point ('<tt>!</tt>').</p> 2684 2685 <p>A metadata string is a string surrounded by double quotes. It can contain 2686 any character by escaping non-printable characters with "\xx" where "xx" is 2687 the two digit hex code. For example: "<tt>!"test\00"</tt>".</p> 2688 2689 <p>Metadata nodes are represented with notation similar to structure constants 2690 (a comma separated list of elements, surrounded by braces and preceded by an 2691 exclamation point). For example: "<tt>!{ metadata !"test\00", i32 2692 10}</tt>". Metadata nodes can have any values as their operand.</p> 2693 2694 <p>A <a href="#namedmetadatastructure">named metadata</a> is a collection of 2695 metadata nodes, which can be looked up in the module symbol table. For 2696 example: "<tt>!foo = metadata !{!4, !3}</tt>". 2697 2698 <p>Metadata can be used as function arguments. Here <tt>llvm.dbg.value</tt> 2699 function is using two metadata arguments.</p> 2700 2701 <div class="doc_code"> 2702 <pre> 2703 call void @llvm.dbg.value(metadata !24, i64 0, metadata !25) 2704 </pre> 2705 </div> 2706 2707 <p>Metadata can be attached with an instruction. Here metadata <tt>!21</tt> is 2708 attached with <tt>add</tt> instruction using <tt>!dbg</tt> identifier.</p> 2709 2710 <div class="doc_code"> 2711 <pre> 2712 %indvar.next = add i64 %indvar, 1, !dbg !21 2713 </pre> 2714 </div> 2715 2716 </div> 2717 2718 </div> 2719 2720 <!-- *********************************************************************** --> 2721 <h2> 2722 <a name="intrinsic_globals">Intrinsic Global Variables</a> 2723 </h2> 2724 <!-- *********************************************************************** --> 2725 <div> 2726 <p>LLVM has a number of "magic" global variables that contain data that affect 2727 code generation or other IR semantics. These are documented here. All globals 2728 of this sort should have a section specified as "<tt>llvm.metadata</tt>". This 2729 section and all globals that start with "<tt>llvm.</tt>" are reserved for use 2730 by LLVM.</p> 2731 2732 <!-- ======================================================================= --> 2733 <h3> 2734 <a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a> 2735 </h3> 2736 2737 <div> 2738 2739 <p>The <tt>@llvm.used</tt> global is an array with i8* element type which has <a 2740 href="#linkage_appending">appending linkage</a>. This array contains a list of 2741 pointers to global variables and functions which may optionally have a pointer 2742 cast formed of bitcast or getelementptr. For example, a legal use of it is:</p> 2743 2744 <pre> 2745 @X = global i8 4 2746 @Y = global i32 123 2747 2748 @llvm.used = appending global [2 x i8*] [ 2749 i8* @X, 2750 i8* bitcast (i32* @Y to i8*) 2751 ], section "llvm.metadata" 2752 </pre> 2753 2754 <p>If a global variable appears in the <tt>@llvm.used</tt> list, then the 2755 compiler, assembler, and linker are required to treat the symbol as if there is 2756 a reference to the global that it cannot see. For example, if a variable has 2757 internal linkage and no references other than that from the <tt>@llvm.used</tt> 2758 list, it cannot be deleted. This is commonly used to represent references from 2759 inline asms and other things the compiler cannot "see", and corresponds to 2760 "attribute((used))" in GNU C.</p> 2761 2762 <p>On some targets, the code generator must emit a directive to the assembler or 2763 object file to prevent the assembler and linker from molesting the symbol.</p> 2764 2765 </div> 2766 2767 <!-- ======================================================================= --> 2768 <h3> 2769 <a name="intg_compiler_used"> 2770 The '<tt>llvm.compiler.used</tt>' Global Variable 2771 </a> 2772 </h3> 2773 2774 <div> 2775 2776 <p>The <tt>@llvm.compiler.used</tt> directive is the same as the 2777 <tt>@llvm.used</tt> directive, except that it only prevents the compiler from 2778 touching the symbol. On targets that support it, this allows an intelligent 2779 linker to optimize references to the symbol without being impeded as it would be 2780 by <tt>@llvm.used</tt>.</p> 2781 2782 <p>This is a rare construct that should only be used in rare circumstances, and 2783 should not be exposed to source languages.</p> 2784 2785 </div> 2786 2787 <!-- ======================================================================= --> 2788 <h3> 2789 <a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a> 2790 </h3> 2791 2792 <div> 2793 <pre> 2794 %0 = type { i32, void ()* } 2795 @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @ctor }] 2796 </pre> 2797 <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. 2798 </p> 2799 2800 </div> 2801 2802 <!-- ======================================================================= --> 2803 <h3> 2804 <a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a> 2805 </h3> 2806 2807 <div> 2808 <pre> 2809 %0 = type { i32, void ()* } 2810 @llvm.global_dtors = appending global [1 x %0] [%0 { i32 65535, void ()* @dtor }] 2811 </pre> 2812 2813 <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. 2814 </p> 2815 2816 </div> 2817 2818 </div> 2819 2820 <!-- *********************************************************************** --> 2821 <h2><a name="instref">Instruction Reference</a></h2> 2822 <!-- *********************************************************************** --> 2823 2824 <div> 2825 2826 <p>The LLVM instruction set consists of several different classifications of 2827 instructions: <a href="#terminators">terminator 2828 instructions</a>, <a href="#binaryops">binary instructions</a>, 2829 <a href="#bitwiseops">bitwise binary instructions</a>, 2830 <a href="#memoryops">memory instructions</a>, and 2831 <a href="#otherops">other instructions</a>.</p> 2832 2833 <!-- ======================================================================= --> 2834 <h3> 2835 <a name="terminators">Terminator Instructions</a> 2836 </h3> 2837 2838 <div> 2839 2840 <p>As mentioned <a href="#functionstructure">previously</a>, every basic block 2841 in a program ends with a "Terminator" instruction, which indicates which 2842 block should be executed after the current block is finished. These 2843 terminator instructions typically yield a '<tt>void</tt>' value: they produce 2844 control flow, not values (the one exception being the 2845 '<a href="#i_invoke"><tt>invoke</tt></a>' instruction).</p> 2846 2847 <p>There are seven different terminator instructions: the 2848 '<a href="#i_ret"><tt>ret</tt></a>' instruction, the 2849 '<a href="#i_br"><tt>br</tt></a>' instruction, the 2850 '<a href="#i_switch"><tt>switch</tt></a>' instruction, the 2851 '<a href="#i_indirectbr">'<tt>indirectbr</tt></a>' Instruction, the 2852 '<a href="#i_invoke"><tt>invoke</tt></a>' instruction, the 2853 '<a href="#i_unwind"><tt>unwind</tt></a>' instruction, and the 2854 '<a href="#i_unreachable"><tt>unreachable</tt></a>' instruction.</p> 2855 2856 <!-- _______________________________________________________________________ --> 2857 <h4> 2858 <a name="i_ret">'<tt>ret</tt>' Instruction</a> 2859 </h4> 2860 2861 <div> 2862 2863 <h5>Syntax:</h5> 2864 <pre> 2865 ret <type> <value> <i>; Return a value from a non-void function</i> 2866 ret void <i>; Return from void function</i> 2867 </pre> 2868 2869 <h5>Overview:</h5> 2870 <p>The '<tt>ret</tt>' instruction is used to return control flow (and optionally 2871 a value) from a function back to the caller.</p> 2872 2873 <p>There are two forms of the '<tt>ret</tt>' instruction: one that returns a 2874 value and then causes control flow, and one that just causes control flow to 2875 occur.</p> 2876 2877 <h5>Arguments:</h5> 2878 <p>The '<tt>ret</tt>' instruction optionally accepts a single argument, the 2879 return value. The type of the return value must be a 2880 '<a href="#t_firstclass">first class</a>' type.</p> 2881 2882 <p>A function is not <a href="#wellformed">well formed</a> if it it has a 2883 non-void return type and contains a '<tt>ret</tt>' instruction with no return 2884 value or a return value with a type that does not match its type, or if it 2885 has a void return type and contains a '<tt>ret</tt>' instruction with a 2886 return value.</p> 2887 2888 <h5>Semantics:</h5> 2889 <p>When the '<tt>ret</tt>' instruction is executed, control flow returns back to 2890 the calling function's context. If the caller is a 2891 "<a href="#i_call"><tt>call</tt></a>" instruction, execution continues at the 2892 instruction after the call. If the caller was an 2893 "<a href="#i_invoke"><tt>invoke</tt></a>" instruction, execution continues at 2894 the beginning of the "normal" destination block. If the instruction returns 2895 a value, that value shall set the call or invoke instruction's return 2896 value.</p> 2897 2898 <h5>Example:</h5> 2899 <pre> 2900 ret i32 5 <i>; Return an integer value of 5</i> 2901 ret void <i>; Return from a void function</i> 2902 ret { i32, i8 } { i32 4, i8 2 } <i>; Return a struct of values 4 and 2</i> 2903 </pre> 2904 2905 </div> 2906 <!-- _______________________________________________________________________ --> 2907 <h4> 2908 <a name="i_br">'<tt>br</tt>' Instruction</a> 2909 </h4> 2910 2911 <div> 2912 2913 <h5>Syntax:</h5> 2914 <pre> 2915 br i1 <cond>, label <iftrue>, label <iffalse><br> br label <dest> <i>; Unconditional branch</i> 2916 </pre> 2917 2918 <h5>Overview:</h5> 2919 <p>The '<tt>br</tt>' instruction is used to cause control flow to transfer to a 2920 different basic block in the current function. There are two forms of this 2921 instruction, corresponding to a conditional branch and an unconditional 2922 branch.</p> 2923 2924 <h5>Arguments:</h5> 2925 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a single 2926 '<tt>i1</tt>' value and two '<tt>label</tt>' values. The unconditional form 2927 of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>' value as a 2928 target.</p> 2929 2930 <h5>Semantics:</h5> 2931 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>' 2932 argument is evaluated. If the value is <tt>true</tt>, control flows to the 2933 '<tt>iftrue</tt>' <tt>label</tt> argument. If "cond" is <tt>false</tt>, 2934 control flows to the '<tt>iffalse</tt>' <tt>label</tt> argument.</p> 2935 2936 <h5>Example:</h5> 2937 <pre> 2938 Test: 2939 %cond = <a href="#i_icmp">icmp</a> eq i32 %a, %b 2940 br i1 %cond, label %IfEqual, label %IfUnequal 2941 IfEqual: 2942 <a href="#i_ret">ret</a> i32 1 2943 IfUnequal: 2944 <a href="#i_ret">ret</a> i32 0 2945 </pre> 2946 2947 </div> 2948 2949 <!-- _______________________________________________________________________ --> 2950 <h4> 2951 <a name="i_switch">'<tt>switch</tt>' Instruction</a> 2952 </h4> 2953 2954 <div> 2955 2956 <h5>Syntax:</h5> 2957 <pre> 2958 switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ] 2959 </pre> 2960 2961 <h5>Overview:</h5> 2962 <p>The '<tt>switch</tt>' instruction is used to transfer control flow to one of 2963 several different places. It is a generalization of the '<tt>br</tt>' 2964 instruction, allowing a branch to occur to one of many possible 2965 destinations.</p> 2966 2967 <h5>Arguments:</h5> 2968 <p>The '<tt>switch</tt>' instruction uses three parameters: an integer 2969 comparison value '<tt>value</tt>', a default '<tt>label</tt>' destination, 2970 and an array of pairs of comparison value constants and '<tt>label</tt>'s. 2971 The table is not allowed to contain duplicate constant entries.</p> 2972 2973 <h5>Semantics:</h5> 2974 <p>The <tt>switch</tt> instruction specifies a table of values and 2975 destinations. When the '<tt>switch</tt>' instruction is executed, this table 2976 is searched for the given value. If the value is found, control flow is 2977 transferred to the corresponding destination; otherwise, control flow is 2978 transferred to the default destination.</p> 2979 2980 <h5>Implementation:</h5> 2981 <p>Depending on properties of the target machine and the particular 2982 <tt>switch</tt> instruction, this instruction may be code generated in 2983 different ways. For example, it could be generated as a series of chained 2984 conditional branches or with a lookup table.</p> 2985 2986 <h5>Example:</h5> 2987 <pre> 2988 <i>; Emulate a conditional br instruction</i> 2989 %Val = <a href="#i_zext">zext</a> i1 %value to i32 2990 switch i32 %Val, label %truedest [ i32 0, label %falsedest ] 2991 2992 <i>; Emulate an unconditional br instruction</i> 2993 switch i32 0, label %dest [ ] 2994 2995 <i>; Implement a jump table:</i> 2996 switch i32 %val, label %otherwise [ i32 0, label %onzero 2997 i32 1, label %onone 2998 i32 2, label %ontwo ] 2999 </pre> 3000 3001 </div> 3002 3003 3004 <!-- _______________________________________________________________________ --> 3005 <h4> 3006 <a name="i_indirectbr">'<tt>indirectbr</tt>' Instruction</a> 3007 </h4> 3008 3009 <div> 3010 3011 <h5>Syntax:</h5> 3012 <pre> 3013 indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ] 3014 </pre> 3015 3016 <h5>Overview:</h5> 3017 3018 <p>The '<tt>indirectbr</tt>' instruction implements an indirect branch to a label 3019 within the current function, whose address is specified by 3020 "<tt>address</tt>". Address must be derived from a <a 3021 href="#blockaddress">blockaddress</a> constant.</p> 3022 3023 <h5>Arguments:</h5> 3024 3025 <p>The '<tt>address</tt>' argument is the address of the label to jump to. The 3026 rest of the arguments indicate the full set of possible destinations that the 3027 address may point to. Blocks are allowed to occur multiple times in the 3028 destination list, though this isn't particularly useful.</p> 3029 3030 <p>This destination list is required so that dataflow analysis has an accurate 3031 understanding of the CFG.</p> 3032 3033 <h5>Semantics:</h5> 3034 3035 <p>Control transfers to the block specified in the address argument. All 3036 possible destination blocks must be listed in the label list, otherwise this 3037 instruction has undefined behavior. This implies that jumps to labels 3038 defined in other functions have undefined behavior as well.</p> 3039 3040 <h5>Implementation:</h5> 3041 3042 <p>This is typically implemented with a jump through a register.</p> 3043 3044 <h5>Example:</h5> 3045 <pre> 3046 indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ] 3047 </pre> 3048 3049 </div> 3050 3051 3052 <!-- _______________________________________________________________________ --> 3053 <h4> 3054 <a name="i_invoke">'<tt>invoke</tt>' Instruction</a> 3055 </h4> 3056 3057 <div> 3058 3059 <h5>Syntax:</h5> 3060 <pre> 3061 <result> = invoke [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>] <ptr to function ty> <function ptr val>(<function args>) [<a href="#fnattrs">fn attrs</a>] 3062 to label <normal label> unwind label <exception label> 3063 </pre> 3064 3065 <h5>Overview:</h5> 3066 <p>The '<tt>invoke</tt>' instruction causes control to transfer to a specified 3067 function, with the possibility of control flow transfer to either the 3068 '<tt>normal</tt>' label or the '<tt>exception</tt>' label. If the callee 3069 function returns with the "<tt><a href="#i_ret">ret</a></tt>" instruction, 3070 control flow will return to the "normal" label. If the callee (or any 3071 indirect callees) returns with the "<a href="#i_unwind"><tt>unwind</tt></a>" 3072 instruction, control is interrupted and continued at the dynamically nearest 3073 "exception" label.</p> 3074 3075 <h5>Arguments:</h5> 3076 <p>This instruction requires several arguments:</p> 3077 3078 <ol> 3079 <li>The optional "cconv" marker indicates which <a href="#callingconv">calling 3080 convention</a> the call should use. If none is specified, the call 3081 defaults to using C calling conventions.</li> 3082 3083 <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for 3084 return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and 3085 '<tt>inreg</tt>' attributes are valid here.</li> 3086 3087 <li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to 3088 function value being invoked. In most cases, this is a direct function 3089 invocation, but indirect <tt>invoke</tt>s are just as possible, branching 3090 off an arbitrary pointer to function value.</li> 3091 3092 <li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a 3093 function to be invoked. </li> 3094 3095 <li>'<tt>function args</tt>': argument list whose types match the function 3096 signature argument types and parameter attributes. All arguments must be 3097 of <a href="#t_firstclass">first class</a> type. If the function 3098 signature indicates the function accepts a variable number of arguments, 3099 the extra arguments can be specified.</li> 3100 3101 <li>'<tt>normal label</tt>': the label reached when the called function 3102 executes a '<tt><a href="#i_ret">ret</a></tt>' instruction. </li> 3103 3104 <li>'<tt>exception label</tt>': the label reached when a callee returns with 3105 the <a href="#i_unwind"><tt>unwind</tt></a> instruction. </li> 3106 3107 <li>The optional <a href="#fnattrs">function attributes</a> list. Only 3108 '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and 3109 '<tt>readnone</tt>' attributes are valid here.</li> 3110 </ol> 3111 3112 <h5>Semantics:</h5> 3113 <p>This instruction is designed to operate as a standard 3114 '<tt><a href="#i_call">call</a></tt>' instruction in most regards. The 3115 primary difference is that it establishes an association with a label, which 3116 is used by the runtime library to unwind the stack.</p> 3117 3118 <p>This instruction is used in languages with destructors to ensure that proper 3119 cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown 3120 exception. Additionally, this is important for implementation of 3121 '<tt>catch</tt>' clauses in high-level languages that support them.</p> 3122 3123 <p>For the purposes of the SSA form, the definition of the value returned by the 3124 '<tt>invoke</tt>' instruction is deemed to occur on the edge from the current 3125 block to the "normal" label. If the callee unwinds then no return value is 3126 available.</p> 3127 3128 <p>Note that the code generator does not yet completely support unwind, and 3129 that the invoke/unwind semantics are likely to change in future versions.</p> 3130 3131 <h5>Example:</h5> 3132 <pre> 3133 %retval = invoke i32 @Test(i32 15) to label %Continue 3134 unwind label %TestCleanup <i>; {i32}:retval set</i> 3135 %retval = invoke <a href="#callingconv">coldcc</a> i32 %Testfnptr(i32 15) to label %Continue 3136 unwind label %TestCleanup <i>; {i32}:retval set</i> 3137 </pre> 3138 3139 </div> 3140 3141 <!-- _______________________________________________________________________ --> 3142 3143 <h4> 3144 <a name="i_unwind">'<tt>unwind</tt>' Instruction</a> 3145 </h4> 3146 3147 <div> 3148 3149 <h5>Syntax:</h5> 3150 <pre> 3151 unwind 3152 </pre> 3153 3154 <h5>Overview:</h5> 3155 <p>The '<tt>unwind</tt>' instruction unwinds the stack, continuing control flow 3156 at the first callee in the dynamic call stack which used 3157 an <a href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call. 3158 This is primarily used to implement exception handling.</p> 3159 3160 <h5>Semantics:</h5> 3161 <p>The '<tt>unwind</tt>' instruction causes execution of the current function to 3162 immediately halt. The dynamic call stack is then searched for the 3163 first <a href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack. 3164 Once found, execution continues at the "exceptional" destination block 3165 specified by the <tt>invoke</tt> instruction. If there is no <tt>invoke</tt> 3166 instruction in the dynamic call chain, undefined behavior results.</p> 3167 3168 <p>Note that the code generator does not yet completely support unwind, and 3169 that the invoke/unwind semantics are likely to change in future versions.</p> 3170 3171 </div> 3172 3173 <!-- _______________________________________________________________________ --> 3174 3175 <h4> 3176 <a name="i_unreachable">'<tt>unreachable</tt>' Instruction</a> 3177 </h4> 3178 3179 <div> 3180 3181 <h5>Syntax:</h5> 3182 <pre> 3183 unreachable 3184 </pre> 3185 3186 <h5>Overview:</h5> 3187 <p>The '<tt>unreachable</tt>' instruction has no defined semantics. This 3188 instruction is used to inform the optimizer that a particular portion of the 3189 code is not reachable. This can be used to indicate that the code after a 3190 no-return function cannot be reached, and other facts.</p> 3191 3192 <h5>Semantics:</h5> 3193 <p>The '<tt>unreachable</tt>' instruction has no defined semantics.</p> 3194 3195 </div> 3196 3197 </div> 3198 3199 <!-- ======================================================================= --> 3200 <h3> 3201 <a name="binaryops">Binary Operations</a> 3202 </h3> 3203 3204 <div> 3205 3206 <p>Binary operators are used to do most of the computation in a program. They 3207 require two operands of the same type, execute an operation on them, and 3208 produce a single value. The operands might represent multiple data, as is 3209 the case with the <a href="#t_vector">vector</a> data type. The result value 3210 has the same type as its operands.</p> 3211 3212 <p>There are several different binary operators:</p> 3213 3214 <!-- _______________________________________________________________________ --> 3215 <h4> 3216 <a name="i_add">'<tt>add</tt>' Instruction</a> 3217 </h4> 3218 3219 <div> 3220 3221 <h5>Syntax:</h5> 3222 <pre> 3223 <result> = add <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3224 <result> = add nuw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3225 <result> = add nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3226 <result> = add nuw nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3227 </pre> 3228 3229 <h5>Overview:</h5> 3230 <p>The '<tt>add</tt>' instruction returns the sum of its two operands.</p> 3231 3232 <h5>Arguments:</h5> 3233 <p>The two arguments to the '<tt>add</tt>' instruction must 3234 be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of 3235 integer values. Both arguments must have identical types.</p> 3236 3237 <h5>Semantics:</h5> 3238 <p>The value produced is the integer sum of the two operands.</p> 3239 3240 <p>If the sum has unsigned overflow, the result returned is the mathematical 3241 result modulo 2<sup>n</sup>, where n is the bit width of the result.</p> 3242 3243 <p>Because LLVM integers use a two's complement representation, this instruction 3244 is appropriate for both signed and unsigned integers.</p> 3245 3246 <p><tt>nuw</tt> and <tt>nsw</tt> stand for "No Unsigned Wrap" 3247 and "No Signed Wrap", respectively. If the <tt>nuw</tt> and/or 3248 <tt>nsw</tt> keywords are present, the result value of the <tt>add</tt> 3249 is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow, 3250 respectively, occurs.</p> 3251 3252 <h5>Example:</h5> 3253 <pre> 3254 <result> = add i32 4, %var <i>; yields {i32}:result = 4 + %var</i> 3255 </pre> 3256 3257 </div> 3258 3259 <!-- _______________________________________________________________________ --> 3260 <h4> 3261 <a name="i_fadd">'<tt>fadd</tt>' Instruction</a> 3262 </h4> 3263 3264 <div> 3265 3266 <h5>Syntax:</h5> 3267 <pre> 3268 <result> = fadd <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3269 </pre> 3270 3271 <h5>Overview:</h5> 3272 <p>The '<tt>fadd</tt>' instruction returns the sum of its two operands.</p> 3273 3274 <h5>Arguments:</h5> 3275 <p>The two arguments to the '<tt>fadd</tt>' instruction must be 3276 <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of 3277 floating point values. Both arguments must have identical types.</p> 3278 3279 <h5>Semantics:</h5> 3280 <p>The value produced is the floating point sum of the two operands.</p> 3281 3282 <h5>Example:</h5> 3283 <pre> 3284 <result> = fadd float 4.0, %var <i>; yields {float}:result = 4.0 + %var</i> 3285 </pre> 3286 3287 </div> 3288 3289 <!-- _______________________________________________________________________ --> 3290 <h4> 3291 <a name="i_sub">'<tt>sub</tt>' Instruction</a> 3292 </h4> 3293 3294 <div> 3295 3296 <h5>Syntax:</h5> 3297 <pre> 3298 <result> = sub <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3299 <result> = sub nuw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3300 <result> = sub nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3301 <result> = sub nuw nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3302 </pre> 3303 3304 <h5>Overview:</h5> 3305 <p>The '<tt>sub</tt>' instruction returns the difference of its two 3306 operands.</p> 3307 3308 <p>Note that the '<tt>sub</tt>' instruction is used to represent the 3309 '<tt>neg</tt>' instruction present in most other intermediate 3310 representations.</p> 3311 3312 <h5>Arguments:</h5> 3313 <p>The two arguments to the '<tt>sub</tt>' instruction must 3314 be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of 3315 integer values. Both arguments must have identical types.</p> 3316 3317 <h5>Semantics:</h5> 3318 <p>The value produced is the integer difference of the two operands.</p> 3319 3320 <p>If the difference has unsigned overflow, the result returned is the 3321 mathematical result modulo 2<sup>n</sup>, where n is the bit width of the 3322 result.</p> 3323 3324 <p>Because LLVM integers use a two's complement representation, this instruction 3325 is appropriate for both signed and unsigned integers.</p> 3326 3327 <p><tt>nuw</tt> and <tt>nsw</tt> stand for "No Unsigned Wrap" 3328 and "No Signed Wrap", respectively. If the <tt>nuw</tt> and/or 3329 <tt>nsw</tt> keywords are present, the result value of the <tt>sub</tt> 3330 is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow, 3331 respectively, occurs.</p> 3332 3333 <h5>Example:</h5> 3334 <pre> 3335 <result> = sub i32 4, %var <i>; yields {i32}:result = 4 - %var</i> 3336 <result> = sub i32 0, %val <i>; yields {i32}:result = -%var</i> 3337 </pre> 3338 3339 </div> 3340 3341 <!-- _______________________________________________________________________ --> 3342 <h4> 3343 <a name="i_fsub">'<tt>fsub</tt>' Instruction</a> 3344 </h4> 3345 3346 <div> 3347 3348 <h5>Syntax:</h5> 3349 <pre> 3350 <result> = fsub <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3351 </pre> 3352 3353 <h5>Overview:</h5> 3354 <p>The '<tt>fsub</tt>' instruction returns the difference of its two 3355 operands.</p> 3356 3357 <p>Note that the '<tt>fsub</tt>' instruction is used to represent the 3358 '<tt>fneg</tt>' instruction present in most other intermediate 3359 representations.</p> 3360 3361 <h5>Arguments:</h5> 3362 <p>The two arguments to the '<tt>fsub</tt>' instruction must be 3363 <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of 3364 floating point values. Both arguments must have identical types.</p> 3365 3366 <h5>Semantics:</h5> 3367 <p>The value produced is the floating point difference of the two operands.</p> 3368 3369 <h5>Example:</h5> 3370 <pre> 3371 <result> = fsub float 4.0, %var <i>; yields {float}:result = 4.0 - %var</i> 3372 <result> = fsub float -0.0, %val <i>; yields {float}:result = -%var</i> 3373 </pre> 3374 3375 </div> 3376 3377 <!-- _______________________________________________________________________ --> 3378 <h4> 3379 <a name="i_mul">'<tt>mul</tt>' Instruction</a> 3380 </h4> 3381 3382 <div> 3383 3384 <h5>Syntax:</h5> 3385 <pre> 3386 <result> = mul <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3387 <result> = mul nuw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3388 <result> = mul nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3389 <result> = mul nuw nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3390 </pre> 3391 3392 <h5>Overview:</h5> 3393 <p>The '<tt>mul</tt>' instruction returns the product of its two operands.</p> 3394 3395 <h5>Arguments:</h5> 3396 <p>The two arguments to the '<tt>mul</tt>' instruction must 3397 be <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of 3398 integer values. Both arguments must have identical types.</p> 3399 3400 <h5>Semantics:</h5> 3401 <p>The value produced is the integer product of the two operands.</p> 3402 3403 <p>If the result of the multiplication has unsigned overflow, the result 3404 returned is the mathematical result modulo 2<sup>n</sup>, where n is the bit 3405 width of the result.</p> 3406 3407 <p>Because LLVM integers use a two's complement representation, and the result 3408 is the same width as the operands, this instruction returns the correct 3409 result for both signed and unsigned integers. If a full product 3410 (e.g. <tt>i32</tt>x<tt>i32</tt>-><tt>i64</tt>) is needed, the operands should 3411 be sign-extended or zero-extended as appropriate to the width of the full 3412 product.</p> 3413 3414 <p><tt>nuw</tt> and <tt>nsw</tt> stand for "No Unsigned Wrap" 3415 and "No Signed Wrap", respectively. If the <tt>nuw</tt> and/or 3416 <tt>nsw</tt> keywords are present, the result value of the <tt>mul</tt> 3417 is a <a href="#trapvalues">trap value</a> if unsigned and/or signed overflow, 3418 respectively, occurs.</p> 3419 3420 <h5>Example:</h5> 3421 <pre> 3422 <result> = mul i32 4, %var <i>; yields {i32}:result = 4 * %var</i> 3423 </pre> 3424 3425 </div> 3426 3427 <!-- _______________________________________________________________________ --> 3428 <h4> 3429 <a name="i_fmul">'<tt>fmul</tt>' Instruction</a> 3430 </h4> 3431 3432 <div> 3433 3434 <h5>Syntax:</h5> 3435 <pre> 3436 <result> = fmul <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3437 </pre> 3438 3439 <h5>Overview:</h5> 3440 <p>The '<tt>fmul</tt>' instruction returns the product of its two operands.</p> 3441 3442 <h5>Arguments:</h5> 3443 <p>The two arguments to the '<tt>fmul</tt>' instruction must be 3444 <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of 3445 floating point values. Both arguments must have identical types.</p> 3446 3447 <h5>Semantics:</h5> 3448 <p>The value produced is the floating point product of the two operands.</p> 3449 3450 <h5>Example:</h5> 3451 <pre> 3452 <result> = fmul float 4.0, %var <i>; yields {float}:result = 4.0 * %var</i> 3453 </pre> 3454 3455 </div> 3456 3457 <!-- _______________________________________________________________________ --> 3458 <h4> 3459 <a name="i_udiv">'<tt>udiv</tt>' Instruction</a> 3460 </h4> 3461 3462 <div> 3463 3464 <h5>Syntax:</h5> 3465 <pre> 3466 <result> = udiv <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3467 <result> = udiv exact <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3468 </pre> 3469 3470 <h5>Overview:</h5> 3471 <p>The '<tt>udiv</tt>' instruction returns the quotient of its two operands.</p> 3472 3473 <h5>Arguments:</h5> 3474 <p>The two arguments to the '<tt>udiv</tt>' instruction must be 3475 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3476 values. Both arguments must have identical types.</p> 3477 3478 <h5>Semantics:</h5> 3479 <p>The value produced is the unsigned integer quotient of the two operands.</p> 3480 3481 <p>Note that unsigned integer division and signed integer division are distinct 3482 operations; for signed integer division, use '<tt>sdiv</tt>'.</p> 3483 3484 <p>Division by zero leads to undefined behavior.</p> 3485 3486 <p>If the <tt>exact</tt> keyword is present, the result value of the 3487 <tt>udiv</tt> is a <a href="#trapvalues">trap value</a> if %op1 is not a 3488 multiple of %op2 (as such, "((a udiv exact b) mul b) == a").</p> 3489 3490 3491 <h5>Example:</h5> 3492 <pre> 3493 <result> = udiv i32 4, %var <i>; yields {i32}:result = 4 / %var</i> 3494 </pre> 3495 3496 </div> 3497 3498 <!-- _______________________________________________________________________ --> 3499 <h4> 3500 <a name="i_sdiv">'<tt>sdiv</tt>' Instruction</a> 3501 </h4> 3502 3503 <div> 3504 3505 <h5>Syntax:</h5> 3506 <pre> 3507 <result> = sdiv <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3508 <result> = sdiv exact <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3509 </pre> 3510 3511 <h5>Overview:</h5> 3512 <p>The '<tt>sdiv</tt>' instruction returns the quotient of its two operands.</p> 3513 3514 <h5>Arguments:</h5> 3515 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be 3516 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3517 values. Both arguments must have identical types.</p> 3518 3519 <h5>Semantics:</h5> 3520 <p>The value produced is the signed integer quotient of the two operands rounded 3521 towards zero.</p> 3522 3523 <p>Note that signed integer division and unsigned integer division are distinct 3524 operations; for unsigned integer division, use '<tt>udiv</tt>'.</p> 3525 3526 <p>Division by zero leads to undefined behavior. Overflow also leads to 3527 undefined behavior; this is a rare case, but can occur, for example, by doing 3528 a 32-bit division of -2147483648 by -1.</p> 3529 3530 <p>If the <tt>exact</tt> keyword is present, the result value of the 3531 <tt>sdiv</tt> is a <a href="#trapvalues">trap value</a> if the result would 3532 be rounded.</p> 3533 3534 <h5>Example:</h5> 3535 <pre> 3536 <result> = sdiv i32 4, %var <i>; yields {i32}:result = 4 / %var</i> 3537 </pre> 3538 3539 </div> 3540 3541 <!-- _______________________________________________________________________ --> 3542 <h4> 3543 <a name="i_fdiv">'<tt>fdiv</tt>' Instruction</a> 3544 </h4> 3545 3546 <div> 3547 3548 <h5>Syntax:</h5> 3549 <pre> 3550 <result> = fdiv <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3551 </pre> 3552 3553 <h5>Overview:</h5> 3554 <p>The '<tt>fdiv</tt>' instruction returns the quotient of its two operands.</p> 3555 3556 <h5>Arguments:</h5> 3557 <p>The two arguments to the '<tt>fdiv</tt>' instruction must be 3558 <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of 3559 floating point values. Both arguments must have identical types.</p> 3560 3561 <h5>Semantics:</h5> 3562 <p>The value produced is the floating point quotient of the two operands.</p> 3563 3564 <h5>Example:</h5> 3565 <pre> 3566 <result> = fdiv float 4.0, %var <i>; yields {float}:result = 4.0 / %var</i> 3567 </pre> 3568 3569 </div> 3570 3571 <!-- _______________________________________________________________________ --> 3572 <h4> 3573 <a name="i_urem">'<tt>urem</tt>' Instruction</a> 3574 </h4> 3575 3576 <div> 3577 3578 <h5>Syntax:</h5> 3579 <pre> 3580 <result> = urem <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3581 </pre> 3582 3583 <h5>Overview:</h5> 3584 <p>The '<tt>urem</tt>' instruction returns the remainder from the unsigned 3585 division of its two arguments.</p> 3586 3587 <h5>Arguments:</h5> 3588 <p>The two arguments to the '<tt>urem</tt>' instruction must be 3589 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3590 values. Both arguments must have identical types.</p> 3591 3592 <h5>Semantics:</h5> 3593 <p>This instruction returns the unsigned integer <i>remainder</i> of a division. 3594 This instruction always performs an unsigned division to get the 3595 remainder.</p> 3596 3597 <p>Note that unsigned integer remainder and signed integer remainder are 3598 distinct operations; for signed integer remainder, use '<tt>srem</tt>'.</p> 3599 3600 <p>Taking the remainder of a division by zero leads to undefined behavior.</p> 3601 3602 <h5>Example:</h5> 3603 <pre> 3604 <result> = urem i32 4, %var <i>; yields {i32}:result = 4 % %var</i> 3605 </pre> 3606 3607 </div> 3608 3609 <!-- _______________________________________________________________________ --> 3610 <h4> 3611 <a name="i_srem">'<tt>srem</tt>' Instruction</a> 3612 </h4> 3613 3614 <div> 3615 3616 <h5>Syntax:</h5> 3617 <pre> 3618 <result> = srem <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3619 </pre> 3620 3621 <h5>Overview:</h5> 3622 <p>The '<tt>srem</tt>' instruction returns the remainder from the signed 3623 division of its two operands. This instruction can also take 3624 <a href="#t_vector">vector</a> versions of the values in which case the 3625 elements must be integers.</p> 3626 3627 <h5>Arguments:</h5> 3628 <p>The two arguments to the '<tt>srem</tt>' instruction must be 3629 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3630 values. Both arguments must have identical types.</p> 3631 3632 <h5>Semantics:</h5> 3633 <p>This instruction returns the <i>remainder</i> of a division (where the result 3634 is either zero or has the same sign as the dividend, <tt>op1</tt>), not the 3635 <i>modulo</i> operator (where the result is either zero or has the same sign 3636 as the divisor, <tt>op2</tt>) of a value. 3637 For more information about the difference, 3638 see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The 3639 Math Forum</a>. For a table of how this is implemented in various languages, 3640 please see <a href="http://en.wikipedia.org/wiki/Modulo_operation"> 3641 Wikipedia: modulo operation</a>.</p> 3642 3643 <p>Note that signed integer remainder and unsigned integer remainder are 3644 distinct operations; for unsigned integer remainder, use '<tt>urem</tt>'.</p> 3645 3646 <p>Taking the remainder of a division by zero leads to undefined behavior. 3647 Overflow also leads to undefined behavior; this is a rare case, but can 3648 occur, for example, by taking the remainder of a 32-bit division of 3649 -2147483648 by -1. (The remainder doesn't actually overflow, but this rule 3650 lets srem be implemented using instructions that return both the result of 3651 the division and the remainder.)</p> 3652 3653 <h5>Example:</h5> 3654 <pre> 3655 <result> = srem i32 4, %var <i>; yields {i32}:result = 4 % %var</i> 3656 </pre> 3657 3658 </div> 3659 3660 <!-- _______________________________________________________________________ --> 3661 <h4> 3662 <a name="i_frem">'<tt>frem</tt>' Instruction</a> 3663 </h4> 3664 3665 <div> 3666 3667 <h5>Syntax:</h5> 3668 <pre> 3669 <result> = frem <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3670 </pre> 3671 3672 <h5>Overview:</h5> 3673 <p>The '<tt>frem</tt>' instruction returns the remainder from the division of 3674 its two operands.</p> 3675 3676 <h5>Arguments:</h5> 3677 <p>The two arguments to the '<tt>frem</tt>' instruction must be 3678 <a href="#t_floating">floating point</a> or <a href="#t_vector">vector</a> of 3679 floating point values. Both arguments must have identical types.</p> 3680 3681 <h5>Semantics:</h5> 3682 <p>This instruction returns the <i>remainder</i> of a division. The remainder 3683 has the same sign as the dividend.</p> 3684 3685 <h5>Example:</h5> 3686 <pre> 3687 <result> = frem float 4.0, %var <i>; yields {float}:result = 4.0 % %var</i> 3688 </pre> 3689 3690 </div> 3691 3692 </div> 3693 3694 <!-- ======================================================================= --> 3695 <h3> 3696 <a name="bitwiseops">Bitwise Binary Operations</a> 3697 </h3> 3698 3699 <div> 3700 3701 <p>Bitwise binary operators are used to do various forms of bit-twiddling in a 3702 program. They are generally very efficient instructions and can commonly be 3703 strength reduced from other instructions. They require two operands of the 3704 same type, execute an operation on them, and produce a single value. The 3705 resulting value is the same type as its operands.</p> 3706 3707 <!-- _______________________________________________________________________ --> 3708 <h4> 3709 <a name="i_shl">'<tt>shl</tt>' Instruction</a> 3710 </h4> 3711 3712 <div> 3713 3714 <h5>Syntax:</h5> 3715 <pre> 3716 <result> = shl <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3717 <result> = shl nuw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3718 <result> = shl nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3719 <result> = shl nuw nsw <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3720 </pre> 3721 3722 <h5>Overview:</h5> 3723 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to the left 3724 a specified number of bits.</p> 3725 3726 <h5>Arguments:</h5> 3727 <p>Both arguments to the '<tt>shl</tt>' instruction must be the 3728 same <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of 3729 integer type. '<tt>op2</tt>' is treated as an unsigned value.</p> 3730 3731 <h5>Semantics:</h5> 3732 <p>The value produced is <tt>op1</tt> * 2<sup><tt>op2</tt></sup> mod 3733 2<sup>n</sup>, where <tt>n</tt> is the width of the result. If <tt>op2</tt> 3734 is (statically or dynamically) negative or equal to or larger than the number 3735 of bits in <tt>op1</tt>, the result is undefined. If the arguments are 3736 vectors, each vector element of <tt>op1</tt> is shifted by the corresponding 3737 shift amount in <tt>op2</tt>.</p> 3738 3739 <p>If the <tt>nuw</tt> keyword is present, then the shift produces a 3740 <a href="#trapvalues">trap value</a> if it shifts out any non-zero bits. If 3741 the <tt>nsw</tt> keyword is present, then the shift produces a 3742 <a href="#trapvalues">trap value</a> if it shifts out any bits that disagree 3743 with the resultant sign bit. As such, NUW/NSW have the same semantics as 3744 they would if the shift were expressed as a mul instruction with the same 3745 nsw/nuw bits in (mul %op1, (shl 1, %op2)).</p> 3746 3747 <h5>Example:</h5> 3748 <pre> 3749 <result> = shl i32 4, %var <i>; yields {i32}: 4 << %var</i> 3750 <result> = shl i32 4, 2 <i>; yields {i32}: 16</i> 3751 <result> = shl i32 1, 10 <i>; yields {i32}: 1024</i> 3752 <result> = shl i32 1, 32 <i>; undefined</i> 3753 <result> = shl <2 x i32> < i32 1, i32 1>, < i32 1, i32 2> <i>; yields: result=<2 x i32> < i32 2, i32 4></i> 3754 </pre> 3755 3756 </div> 3757 3758 <!-- _______________________________________________________________________ --> 3759 <h4> 3760 <a name="i_lshr">'<tt>lshr</tt>' Instruction</a> 3761 </h4> 3762 3763 <div> 3764 3765 <h5>Syntax:</h5> 3766 <pre> 3767 <result> = lshr <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3768 <result> = lshr exact <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3769 </pre> 3770 3771 <h5>Overview:</h5> 3772 <p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first 3773 operand shifted to the right a specified number of bits with zero fill.</p> 3774 3775 <h5>Arguments:</h5> 3776 <p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 3777 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3778 type. '<tt>op2</tt>' is treated as an unsigned value.</p> 3779 3780 <h5>Semantics:</h5> 3781 <p>This instruction always performs a logical shift right operation. The most 3782 significant bits of the result will be filled with zero bits after the shift. 3783 If <tt>op2</tt> is (statically or dynamically) equal to or larger than the 3784 number of bits in <tt>op1</tt>, the result is undefined. If the arguments are 3785 vectors, each vector element of <tt>op1</tt> is shifted by the corresponding 3786 shift amount in <tt>op2</tt>.</p> 3787 3788 <p>If the <tt>exact</tt> keyword is present, the result value of the 3789 <tt>lshr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits 3790 shifted out are non-zero.</p> 3791 3792 3793 <h5>Example:</h5> 3794 <pre> 3795 <result> = lshr i32 4, 1 <i>; yields {i32}:result = 2</i> 3796 <result> = lshr i32 4, 2 <i>; yields {i32}:result = 1</i> 3797 <result> = lshr i8 4, 3 <i>; yields {i8}:result = 0</i> 3798 <result> = lshr i8 -2, 1 <i>; yields {i8}:result = 0x7FFFFFFF </i> 3799 <result> = lshr i32 1, 32 <i>; undefined</i> 3800 <result> = lshr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 2> <i>; yields: result=<2 x i32> < i32 0x7FFFFFFF, i32 1></i> 3801 </pre> 3802 3803 </div> 3804 3805 <!-- _______________________________________________________________________ --> 3806 <h4> 3807 <a name="i_ashr">'<tt>ashr</tt>' Instruction</a> 3808 </h4> 3809 3810 <div> 3811 3812 <h5>Syntax:</h5> 3813 <pre> 3814 <result> = ashr <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3815 <result> = ashr exact <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3816 </pre> 3817 3818 <h5>Overview:</h5> 3819 <p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first 3820 operand shifted to the right a specified number of bits with sign 3821 extension.</p> 3822 3823 <h5>Arguments:</h5> 3824 <p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 3825 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3826 type. '<tt>op2</tt>' is treated as an unsigned value.</p> 3827 3828 <h5>Semantics:</h5> 3829 <p>This instruction always performs an arithmetic shift right operation, The 3830 most significant bits of the result will be filled with the sign bit 3831 of <tt>op1</tt>. If <tt>op2</tt> is (statically or dynamically) equal to or 3832 larger than the number of bits in <tt>op1</tt>, the result is undefined. If 3833 the arguments are vectors, each vector element of <tt>op1</tt> is shifted by 3834 the corresponding shift amount in <tt>op2</tt>.</p> 3835 3836 <p>If the <tt>exact</tt> keyword is present, the result value of the 3837 <tt>ashr</tt> is a <a href="#trapvalues">trap value</a> if any of the bits 3838 shifted out are non-zero.</p> 3839 3840 <h5>Example:</h5> 3841 <pre> 3842 <result> = ashr i32 4, 1 <i>; yields {i32}:result = 2</i> 3843 <result> = ashr i32 4, 2 <i>; yields {i32}:result = 1</i> 3844 <result> = ashr i8 4, 3 <i>; yields {i8}:result = 0</i> 3845 <result> = ashr i8 -2, 1 <i>; yields {i8}:result = -1</i> 3846 <result> = ashr i32 1, 32 <i>; undefined</i> 3847 <result> = ashr <2 x i32> < i32 -2, i32 4>, < i32 1, i32 3> <i>; yields: result=<2 x i32> < i32 -1, i32 0></i> 3848 </pre> 3849 3850 </div> 3851 3852 <!-- _______________________________________________________________________ --> 3853 <h4> 3854 <a name="i_and">'<tt>and</tt>' Instruction</a> 3855 </h4> 3856 3857 <div> 3858 3859 <h5>Syntax:</h5> 3860 <pre> 3861 <result> = and <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3862 </pre> 3863 3864 <h5>Overview:</h5> 3865 <p>The '<tt>and</tt>' instruction returns the bitwise logical and of its two 3866 operands.</p> 3867 3868 <h5>Arguments:</h5> 3869 <p>The two arguments to the '<tt>and</tt>' instruction must be 3870 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3871 values. Both arguments must have identical types.</p> 3872 3873 <h5>Semantics:</h5> 3874 <p>The truth table used for the '<tt>and</tt>' instruction is:</p> 3875 3876 <table border="1" cellspacing="0" cellpadding="4"> 3877 <tbody> 3878 <tr> 3879 <td>In0</td> 3880 <td>In1</td> 3881 <td>Out</td> 3882 </tr> 3883 <tr> 3884 <td>0</td> 3885 <td>0</td> 3886 <td>0</td> 3887 </tr> 3888 <tr> 3889 <td>0</td> 3890 <td>1</td> 3891 <td>0</td> 3892 </tr> 3893 <tr> 3894 <td>1</td> 3895 <td>0</td> 3896 <td>0</td> 3897 </tr> 3898 <tr> 3899 <td>1</td> 3900 <td>1</td> 3901 <td>1</td> 3902 </tr> 3903 </tbody> 3904 </table> 3905 3906 <h5>Example:</h5> 3907 <pre> 3908 <result> = and i32 4, %var <i>; yields {i32}:result = 4 & %var</i> 3909 <result> = and i32 15, 40 <i>; yields {i32}:result = 8</i> 3910 <result> = and i32 4, 8 <i>; yields {i32}:result = 0</i> 3911 </pre> 3912 </div> 3913 <!-- _______________________________________________________________________ --> 3914 <h4> 3915 <a name="i_or">'<tt>or</tt>' Instruction</a> 3916 </h4> 3917 3918 <div> 3919 3920 <h5>Syntax:</h5> 3921 <pre> 3922 <result> = or <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3923 </pre> 3924 3925 <h5>Overview:</h5> 3926 <p>The '<tt>or</tt>' instruction returns the bitwise logical inclusive or of its 3927 two operands.</p> 3928 3929 <h5>Arguments:</h5> 3930 <p>The two arguments to the '<tt>or</tt>' instruction must be 3931 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3932 values. Both arguments must have identical types.</p> 3933 3934 <h5>Semantics:</h5> 3935 <p>The truth table used for the '<tt>or</tt>' instruction is:</p> 3936 3937 <table border="1" cellspacing="0" cellpadding="4"> 3938 <tbody> 3939 <tr> 3940 <td>In0</td> 3941 <td>In1</td> 3942 <td>Out</td> 3943 </tr> 3944 <tr> 3945 <td>0</td> 3946 <td>0</td> 3947 <td>0</td> 3948 </tr> 3949 <tr> 3950 <td>0</td> 3951 <td>1</td> 3952 <td>1</td> 3953 </tr> 3954 <tr> 3955 <td>1</td> 3956 <td>0</td> 3957 <td>1</td> 3958 </tr> 3959 <tr> 3960 <td>1</td> 3961 <td>1</td> 3962 <td>1</td> 3963 </tr> 3964 </tbody> 3965 </table> 3966 3967 <h5>Example:</h5> 3968 <pre> 3969 <result> = or i32 4, %var <i>; yields {i32}:result = 4 | %var</i> 3970 <result> = or i32 15, 40 <i>; yields {i32}:result = 47</i> 3971 <result> = or i32 4, 8 <i>; yields {i32}:result = 12</i> 3972 </pre> 3973 3974 </div> 3975 3976 <!-- _______________________________________________________________________ --> 3977 <h4> 3978 <a name="i_xor">'<tt>xor</tt>' Instruction</a> 3979 </h4> 3980 3981 <div> 3982 3983 <h5>Syntax:</h5> 3984 <pre> 3985 <result> = xor <ty> <op1>, <op2> <i>; yields {ty}:result</i> 3986 </pre> 3987 3988 <h5>Overview:</h5> 3989 <p>The '<tt>xor</tt>' instruction returns the bitwise logical exclusive or of 3990 its two operands. The <tt>xor</tt> is used to implement the "one's 3991 complement" operation, which is the "~" operator in C.</p> 3992 3993 <h5>Arguments:</h5> 3994 <p>The two arguments to the '<tt>xor</tt>' instruction must be 3995 <a href="#t_integer">integer</a> or <a href="#t_vector">vector</a> of integer 3996 values. Both arguments must have identical types.</p> 3997 3998 <h5>Semantics:</h5> 3999 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p> 4000 4001 <table border="1" cellspacing="0" cellpadding="4"> 4002 <tbody> 4003 <tr> 4004 <td>In0</td> 4005 <td>In1</td> 4006 <td>Out</td> 4007 </tr> 4008 <tr> 4009 <td>0</td> 4010 <td>0</td> 4011 <td>0</td> 4012 </tr> 4013 <tr> 4014 <td>0</td> 4015 <td>1</td> 4016 <td>1</td> 4017 </tr> 4018 <tr> 4019 <td>1</td> 4020 <td>0</td> 4021 <td>1</td> 4022 </tr> 4023 <tr> 4024 <td>1</td> 4025 <td>1</td> 4026 <td>0</td> 4027 </tr> 4028 </tbody> 4029 </table> 4030 4031 <h5>Example:</h5> 4032 <pre> 4033 <result> = xor i32 4, %var <i>; yields {i32}:result = 4 ^ %var</i> 4034 <result> = xor i32 15, 40 <i>; yields {i32}:result = 39</i> 4035 <result> = xor i32 4, 8 <i>; yields {i32}:result = 12</i> 4036 <result> = xor i32 %V, -1 <i>; yields {i32}:result = ~%V</i> 4037 </pre> 4038 4039 </div> 4040 4041 </div> 4042 4043 <!-- ======================================================================= --> 4044 <h3> 4045 <a name="vectorops">Vector Operations</a> 4046 </h3> 4047 4048 <div> 4049 4050 <p>LLVM supports several instructions to represent vector operations in a 4051 target-independent manner. These instructions cover the element-access and 4052 vector-specific operations needed to process vectors effectively. While LLVM 4053 does directly support these vector operations, many sophisticated algorithms 4054 will want to use target-specific intrinsics to take full advantage of a 4055 specific target.</p> 4056 4057 <!-- _______________________________________________________________________ --> 4058 <h4> 4059 <a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a> 4060 </h4> 4061 4062 <div> 4063 4064 <h5>Syntax:</h5> 4065 <pre> 4066 <result> = extractelement <n x <ty>> <val>, i32 <idx> <i>; yields <ty></i> 4067 </pre> 4068 4069 <h5>Overview:</h5> 4070 <p>The '<tt>extractelement</tt>' instruction extracts a single scalar element 4071 from a vector at a specified index.</p> 4072 4073 4074 <h5>Arguments:</h5> 4075 <p>The first operand of an '<tt>extractelement</tt>' instruction is a value 4076 of <a href="#t_vector">vector</a> type. The second operand is an index 4077 indicating the position from which to extract the element. The index may be 4078 a variable.</p> 4079 4080 <h5>Semantics:</h5> 4081 <p>The result is a scalar of the same type as the element type of 4082 <tt>val</tt>. Its value is the value at position <tt>idx</tt> of 4083 <tt>val</tt>. If <tt>idx</tt> exceeds the length of <tt>val</tt>, the 4084 results are undefined.</p> 4085 4086 <h5>Example:</h5> 4087 <pre> 4088 <result> = extractelement <4 x i32> %vec, i32 0 <i>; yields i32</i> 4089 </pre> 4090 4091 </div> 4092 4093 <!-- _______________________________________________________________________ --> 4094 <h4> 4095 <a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a> 4096 </h4> 4097 4098 <div> 4099 4100 <h5>Syntax:</h5> 4101 <pre> 4102 <result> = insertelement <n x <ty>> <val>, <ty> <elt>, i32 <idx> <i>; yields <n x <ty>></i> 4103 </pre> 4104 4105 <h5>Overview:</h5> 4106 <p>The '<tt>insertelement</tt>' instruction inserts a scalar element into a 4107 vector at a specified index.</p> 4108 4109 <h5>Arguments:</h5> 4110 <p>The first operand of an '<tt>insertelement</tt>' instruction is a value 4111 of <a href="#t_vector">vector</a> type. The second operand is a scalar value 4112 whose type must equal the element type of the first operand. The third 4113 operand is an index indicating the position at which to insert the value. 4114 The index may be a variable.</p> 4115 4116 <h5>Semantics:</h5> 4117 <p>The result is a vector of the same type as <tt>val</tt>. Its element values 4118 are those of <tt>val</tt> except at position <tt>idx</tt>, where it gets the 4119 value <tt>elt</tt>. If <tt>idx</tt> exceeds the length of <tt>val</tt>, the 4120 results are undefined.</p> 4121 4122 <h5>Example:</h5> 4123 <pre> 4124 <result> = insertelement <4 x i32> %vec, i32 1, i32 0 <i>; yields <4 x i32></i> 4125 </pre> 4126 4127 </div> 4128 4129 <!-- _______________________________________________________________________ --> 4130 <h4> 4131 <a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a> 4132 </h4> 4133 4134 <div> 4135 4136 <h5>Syntax:</h5> 4137 <pre> 4138 <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask> <i>; yields <m x <ty>></i> 4139 </pre> 4140 4141 <h5>Overview:</h5> 4142 <p>The '<tt>shufflevector</tt>' instruction constructs a permutation of elements 4143 from two input vectors, returning a vector with the same element type as the 4144 input and length that is the same as the shuffle mask.</p> 4145 4146 <h5>Arguments:</h5> 4147 <p>The first two operands of a '<tt>shufflevector</tt>' instruction are vectors 4148 with types that match each other. The third argument is a shuffle mask whose 4149 element type is always 'i32'. The result of the instruction is a vector 4150 whose length is the same as the shuffle mask and whose element type is the 4151 same as the element type of the first two operands.</p> 4152 4153 <p>The shuffle mask operand is required to be a constant vector with either 4154 constant integer or undef values.</p> 4155 4156 <h5>Semantics:</h5> 4157 <p>The elements of the two input vectors are numbered from left to right across 4158 both of the vectors. The shuffle mask operand specifies, for each element of 4159 the result vector, which element of the two input vectors the result element 4160 gets. The element selector may be undef (meaning "don't care") and the 4161 second operand may be undef if performing a shuffle from only one vector.</p> 4162 4163 <h5>Example:</h5> 4164 <pre> 4165 <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2, 4166 <4 x i32> <i32 0, i32 4, i32 1, i32 5> <i>; yields <4 x i32></i> 4167 <result> = shufflevector <4 x i32> %v1, <4 x i32> undef, 4168 <4 x i32> <i32 0, i32 1, i32 2, i32 3> <i>; yields <4 x i32></i> - Identity shuffle. 4169 <result> = shufflevector <8 x i32> %v1, <8 x i32> undef, 4170 <4 x i32> <i32 0, i32 1, i32 2, i32 3> <i>; yields <4 x i32></i> 4171 <result> = shufflevector <4 x i32> %v1, <4 x i32> %v2, 4172 <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 > <i>; yields <8 x i32></i> 4173 </pre> 4174 4175 </div> 4176 4177 </div> 4178 4179 <!-- ======================================================================= --> 4180 <h3> 4181 <a name="aggregateops">Aggregate Operations</a> 4182 </h3> 4183 4184 <div> 4185 4186 <p>LLVM supports several instructions for working with 4187 <a href="#t_aggregate">aggregate</a> values.</p> 4188 4189 <!-- _______________________________________________________________________ --> 4190 <h4> 4191 <a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a> 4192 </h4> 4193 4194 <div> 4195 4196 <h5>Syntax:</h5> 4197 <pre> 4198 <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}* 4199 </pre> 4200 4201 <h5>Overview:</h5> 4202 <p>The '<tt>extractvalue</tt>' instruction extracts the value of a member field 4203 from an <a href="#t_aggregate">aggregate</a> value.</p> 4204 4205 <h5>Arguments:</h5> 4206 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value 4207 of <a href="#t_struct">struct</a> or 4208 <a href="#t_array">array</a> type. The operands are constant indices to 4209 specify which value to extract in a similar manner as indices in a 4210 '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p> 4211 <p>The major differences to <tt>getelementptr</tt> indexing are:</p> 4212 <ul> 4213 <li>Since the value being indexed is not a pointer, the first index is 4214 omitted and assumed to be zero.</li> 4215 <li>At least one index must be specified.</li> 4216 <li>Not only struct indices but also array indices must be in 4217 bounds.</li> 4218 </ul> 4219 4220 <h5>Semantics:</h5> 4221 <p>The result is the value at the position in the aggregate specified by the 4222 index operands.</p> 4223 4224 <h5>Example:</h5> 4225 <pre> 4226 <result> = extractvalue {i32, float} %agg, 0 <i>; yields i32</i> 4227 </pre> 4228 4229 </div> 4230 4231 <!-- _______________________________________________________________________ --> 4232 <h4> 4233 <a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a> 4234 </h4> 4235 4236 <div> 4237 4238 <h5>Syntax:</h5> 4239 <pre> 4240 <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}* <i>; yields <aggregate type></i> 4241 </pre> 4242 4243 <h5>Overview:</h5> 4244 <p>The '<tt>insertvalue</tt>' instruction inserts a value into a member field 4245 in an <a href="#t_aggregate">aggregate</a> value.</p> 4246 4247 <h5>Arguments:</h5> 4248 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value 4249 of <a href="#t_struct">struct</a> or 4250 <a href="#t_array">array</a> type. The second operand is a first-class 4251 value to insert. The following operands are constant indices indicating 4252 the position at which to insert the value in a similar manner as indices in a 4253 '<tt><a href="#i_extractvalue">extractvalue</a></tt>' instruction. The 4254 value to insert must have the same type as the value identified by the 4255 indices.</p> 4256 4257 <h5>Semantics:</h5> 4258 <p>The result is an aggregate of the same type as <tt>val</tt>. Its value is 4259 that of <tt>val</tt> except that the value at the position specified by the 4260 indices is that of <tt>elt</tt>.</p> 4261 4262 <h5>Example:</h5> 4263 <pre> 4264 %agg1 = insertvalue {i32, float} undef, i32 1, 0 <i>; yields {i32 1, float undef}</i> 4265 %agg2 = insertvalue {i32, float} %agg1, float %val, 1 <i>; yields {i32 1, float %val}</i> 4266 %agg3 = insertvalue {i32, {float}} %agg1, float %val, 1, 0 <i>; yields {i32 1, float %val}</i> 4267 </pre> 4268 4269 </div> 4270 4271 </div> 4272 4273 <!-- ======================================================================= --> 4274 <h3> 4275 <a name="memoryops">Memory Access and Addressing Operations</a> 4276 </h3> 4277 4278 <div> 4279 4280 <p>A key design point of an SSA-based representation is how it represents 4281 memory. In LLVM, no memory locations are in SSA form, which makes things 4282 very simple. This section describes how to read, write, and allocate 4283 memory in LLVM.</p> 4284 4285 <!-- _______________________________________________________________________ --> 4286 <h4> 4287 <a name="i_alloca">'<tt>alloca</tt>' Instruction</a> 4288 </h4> 4289 4290 <div> 4291 4292 <h5>Syntax:</h5> 4293 <pre> 4294 <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>] <i>; yields {type*}:result</i> 4295 </pre> 4296 4297 <h5>Overview:</h5> 4298 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the 4299 currently executing function, to be automatically released when this function 4300 returns to its caller. The object is always allocated in the generic address 4301 space (address space zero).</p> 4302 4303 <h5>Arguments:</h5> 4304 <p>The '<tt>alloca</tt>' instruction 4305 allocates <tt>sizeof(<type>)*NumElements</tt> bytes of memory on the 4306 runtime stack, returning a pointer of the appropriate type to the program. 4307 If "NumElements" is specified, it is the number of elements allocated, 4308 otherwise "NumElements" is defaulted to be one. If a constant alignment is 4309 specified, the value result of the allocation is guaranteed to be aligned to 4310 at least that boundary. If not specified, or if zero, the target can choose 4311 to align the allocation on any convenient boundary compatible with the 4312 type.</p> 4313 4314 <p>'<tt>type</tt>' may be any sized type.</p> 4315 4316 <h5>Semantics:</h5> 4317 <p>Memory is allocated; a pointer is returned. The operation is undefined if 4318 there is insufficient stack space for the allocation. '<tt>alloca</tt>'d 4319 memory is automatically released when the function returns. The 4320 '<tt>alloca</tt>' instruction is commonly used to represent automatic 4321 variables that must have an address available. When the function returns 4322 (either with the <tt><a href="#i_ret">ret</a></tt> 4323 or <tt><a href="#i_unwind">unwind</a></tt> instructions), the memory is 4324 reclaimed. Allocating zero bytes is legal, but the result is undefined.</p> 4325 4326 <h5>Example:</h5> 4327 <pre> 4328 %ptr = alloca i32 <i>; yields {i32*}:ptr</i> 4329 %ptr = alloca i32, i32 4 <i>; yields {i32*}:ptr</i> 4330 %ptr = alloca i32, i32 4, align 1024 <i>; yields {i32*}:ptr</i> 4331 %ptr = alloca i32, align 1024 <i>; yields {i32*}:ptr</i> 4332 </pre> 4333 4334 </div> 4335 4336 <!-- _______________________________________________________________________ --> 4337 <h4> 4338 <a name="i_load">'<tt>load</tt>' Instruction</a> 4339 </h4> 4340 4341 <div> 4342 4343 <h5>Syntax:</h5> 4344 <pre> 4345 <result> = load <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] 4346 <result> = volatile load <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] 4347 !<index> = !{ i32 1 } 4348 </pre> 4349 4350 <h5>Overview:</h5> 4351 <p>The '<tt>load</tt>' instruction is used to read from memory.</p> 4352 4353 <h5>Arguments:</h5> 4354 <p>The argument to the '<tt>load</tt>' instruction specifies the memory address 4355 from which to load. The pointer must point to 4356 a <a href="#t_firstclass">first class</a> type. If the <tt>load</tt> is 4357 marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the 4358 number or order of execution of this <tt>load</tt> with other <a 4359 href="#volatile">volatile operations</a>.</p> 4360 4361 <p>The optional constant <tt>align</tt> argument specifies the alignment of the 4362 operation (that is, the alignment of the memory address). A value of 0 or an 4363 omitted <tt>align</tt> argument means that the operation has the preferential 4364 alignment for the target. It is the responsibility of the code emitter to 4365 ensure that the alignment information is correct. Overestimating the 4366 alignment results in undefined behavior. Underestimating the alignment may 4367 produce less efficient code. An alignment of 1 is always safe.</p> 4368 4369 <p>The optional <tt>!nontemporal</tt> metadata must reference a single 4370 metatadata name <index> corresponding to a metadata node with 4371 one <tt>i32</tt> entry of value 1. The existence of 4372 the <tt>!nontemporal</tt> metatadata on the instruction tells the optimizer 4373 and code generator that this load is not expected to be reused in the cache. 4374 The code generator may select special instructions to save cache bandwidth, 4375 such as the <tt>MOVNT</tt> instruction on x86.</p> 4376 4377 <h5>Semantics:</h5> 4378 <p>The location of memory pointed to is loaded. If the value being loaded is of 4379 scalar type then the number of bytes read does not exceed the minimum number 4380 of bytes needed to hold all bits of the type. For example, loading an 4381 <tt>i24</tt> reads at most three bytes. When loading a value of a type like 4382 <tt>i20</tt> with a size that is not an integral number of bytes, the result 4383 is undefined if the value was not originally written using a store of the 4384 same type.</p> 4385 4386 <h5>Examples:</h5> 4387 <pre> 4388 %ptr = <a href="#i_alloca">alloca</a> i32 <i>; yields {i32*}:ptr</i> 4389 <a href="#i_store">store</a> i32 3, i32* %ptr <i>; yields {void}</i> 4390 %val = load i32* %ptr <i>; yields {i32}:val = i32 3</i> 4391 </pre> 4392 4393 </div> 4394 4395 <!-- _______________________________________________________________________ --> 4396 <h4> 4397 <a name="i_store">'<tt>store</tt>' Instruction</a> 4398 </h4> 4399 4400 <div> 4401 4402 <h5>Syntax:</h5> 4403 <pre> 4404 store <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] <i>; yields {void}</i> 4405 volatile store <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] <i>; yields {void}</i> 4406 </pre> 4407 4408 <h5>Overview:</h5> 4409 <p>The '<tt>store</tt>' instruction is used to write to memory.</p> 4410 4411 <h5>Arguments:</h5> 4412 <p>There are two arguments to the '<tt>store</tt>' instruction: a value to store 4413 and an address at which to store it. The type of the 4414 '<tt><pointer></tt>' operand must be a pointer to 4415 the <a href="#t_firstclass">first class</a> type of the 4416 '<tt><value></tt>' operand. If the <tt>store</tt> is marked as 4417 <tt>volatile</tt>, then the optimizer is not allowed to modify the number or 4418 order of execution of this <tt>store</tt> with other <a 4419 href="#volatile">volatile operations</a>.</p> 4420 4421 <p>The optional constant "align" argument specifies the alignment of the 4422 operation (that is, the alignment of the memory address). A value of 0 or an 4423 omitted "align" argument means that the operation has the preferential 4424 alignment for the target. It is the responsibility of the code emitter to 4425 ensure that the alignment information is correct. Overestimating the 4426 alignment results in an undefined behavior. Underestimating the alignment may 4427 produce less efficient code. An alignment of 1 is always safe.</p> 4428 4429 <p>The optional !nontemporal metadata must reference a single metatadata 4430 name <index> corresponding to a metadata node with one i32 entry of 4431 value 1. The existence of the !nontemporal metatadata on the 4432 instruction tells the optimizer and code generator that this load is 4433 not expected to be reused in the cache. The code generator may 4434 select special instructions to save cache bandwidth, such as the 4435 MOVNT instruction on x86.</p> 4436 4437 4438 <h5>Semantics:</h5> 4439 <p>The contents of memory are updated to contain '<tt><value></tt>' at the 4440 location specified by the '<tt><pointer></tt>' operand. If 4441 '<tt><value></tt>' is of scalar type then the number of bytes written 4442 does not exceed the minimum number of bytes needed to hold all bits of the 4443 type. For example, storing an <tt>i24</tt> writes at most three bytes. When 4444 writing a value of a type like <tt>i20</tt> with a size that is not an 4445 integral number of bytes, it is unspecified what happens to the extra bits 4446 that do not belong to the type, but they will typically be overwritten.</p> 4447 4448 <h5>Example:</h5> 4449 <pre> 4450 %ptr = <a href="#i_alloca">alloca</a> i32 <i>; yields {i32*}:ptr</i> 4451 store i32 3, i32* %ptr <i>; yields {void}</i> 4452 %val = <a href="#i_load">load</a> i32* %ptr <i>; yields {i32}:val = i32 3</i> 4453 </pre> 4454 4455 </div> 4456 4457 <!-- _______________________________________________________________________ --> 4458 <h4> 4459 <a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a> 4460 </h4> 4461 4462 <div> 4463 4464 <h5>Syntax:</h5> 4465 <pre> 4466 <result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}* 4467 <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}* 4468 </pre> 4469 4470 <h5>Overview:</h5> 4471 <p>The '<tt>getelementptr</tt>' instruction is used to get the address of a 4472 subelement of an <a href="#t_aggregate">aggregate</a> data structure. 4473 It performs address calculation only and does not access memory.</p> 4474 4475 <h5>Arguments:</h5> 4476 <p>The first argument is always a pointer, and forms the basis of the 4477 calculation. The remaining arguments are indices that indicate which of the 4478 elements of the aggregate object are indexed. The interpretation of each 4479 index is dependent on the type being indexed into. The first index always 4480 indexes the pointer value given as the first argument, the second index 4481 indexes a value of the type pointed to (not necessarily the value directly 4482 pointed to, since the first index can be non-zero), etc. The first type 4483 indexed into must be a pointer value, subsequent types can be arrays, 4484 vectors, and structs. Note that subsequent types being indexed into 4485 can never be pointers, since that would require loading the pointer before 4486 continuing calculation.</p> 4487 4488 <p>The type of each index argument depends on the type it is indexing into. 4489 When indexing into a (optionally packed) structure, only <tt>i32</tt> 4490 integer <b>constants</b> are allowed. When indexing into an array, pointer 4491 or vector, integers of any width are allowed, and they are not required to be 4492 constant.</p> 4493 4494 <p>For example, let's consider a C code fragment and how it gets compiled to 4495 LLVM:</p> 4496 4497 <pre class="doc_code"> 4498 struct RT { 4499 char A; 4500 int B[10][20]; 4501 char C; 4502 }; 4503 struct ST { 4504 int X; 4505 double Y; 4506 struct RT Z; 4507 }; 4508 4509 int *foo(struct ST *s) { 4510 return &s[1].Z.B[5][13]; 4511 } 4512 </pre> 4513 4514 <p>The LLVM code generated by the GCC frontend is:</p> 4515 4516 <pre class="doc_code"> 4517 %RT = <a href="#namedtypes">type</a> { i8 , [10 x [20 x i32]], i8 } 4518 %ST = <a href="#namedtypes">type</a> { i32, double, %RT } 4519 4520 define i32* @foo(%ST* %s) { 4521 entry: 4522 %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13 4523 ret i32* %reg 4524 } 4525 </pre> 4526 4527 <h5>Semantics:</h5> 4528 <p>In the example above, the first index is indexing into the '<tt>%ST*</tt>' 4529 type, which is a pointer, yielding a '<tt>%ST</tt>' = '<tt>{ i32, double, %RT 4530 }</tt>' type, a structure. The second index indexes into the third element 4531 of the structure, yielding a '<tt>%RT</tt>' = '<tt>{ i8 , [10 x [20 x i32]], 4532 i8 }</tt>' type, another structure. The third index indexes into the second 4533 element of the structure, yielding a '<tt>[10 x [20 x i32]]</tt>' type, an 4534 array. The two dimensions of the array are subscripted into, yielding an 4535 '<tt>i32</tt>' type. The '<tt>getelementptr</tt>' instruction returns a 4536 pointer to this element, thus computing a value of '<tt>i32*</tt>' type.</p> 4537 4538 <p>Note that it is perfectly legal to index partially through a structure, 4539 returning a pointer to an inner element. Because of this, the LLVM code for 4540 the given testcase is equivalent to:</p> 4541 4542 <pre> 4543 define i32* @foo(%ST* %s) { 4544 %t1 = getelementptr %ST* %s, i32 1 <i>; yields %ST*:%t1</i> 4545 %t2 = getelementptr %ST* %t1, i32 0, i32 2 <i>; yields %RT*:%t2</i> 4546 %t3 = getelementptr %RT* %t2, i32 0, i32 1 <i>; yields [10 x [20 x i32]]*:%t3</i> 4547 %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5 <i>; yields [20 x i32]*:%t4</i> 4548 %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13 <i>; yields i32*:%t5</i> 4549 ret i32* %t5 4550 } 4551 </pre> 4552 4553 <p>If the <tt>inbounds</tt> keyword is present, the result value of the 4554 <tt>getelementptr</tt> is a <a href="#trapvalues">trap value</a> if the 4555 base pointer is not an <i>in bounds</i> address of an allocated object, 4556 or if any of the addresses that would be formed by successive addition of 4557 the offsets implied by the indices to the base address with infinitely 4558 precise arithmetic are not an <i>in bounds</i> address of that allocated 4559 object. The <i>in bounds</i> addresses for an allocated object are all 4560 the addresses that point into the object, plus the address one byte past 4561 the end.</p> 4562 4563 <p>If the <tt>inbounds</tt> keyword is not present, the offsets are added to 4564 the base address with silently-wrapping two's complement arithmetic, and 4565 the result value of the <tt>getelementptr</tt> may be outside the object 4566 pointed to by the base pointer. The result value may not necessarily be 4567 used to access memory though, even if it happens to point into allocated 4568 storage. See the <a href="#pointeraliasing">Pointer Aliasing Rules</a> 4569 section for more information.</p> 4570 4571 <p>The getelementptr instruction is often confusing. For some more insight into 4572 how it works, see <a href="GetElementPtr.html">the getelementptr FAQ</a>.</p> 4573 4574 <h5>Example:</h5> 4575 <pre> 4576 <i>; yields [12 x i8]*:aptr</i> 4577 %aptr = getelementptr {i32, [12 x i8]}* %saptr, i64 0, i32 1 4578 <i>; yields i8*:vptr</i> 4579 %vptr = getelementptr {i32, <2 x i8>}* %svptr, i64 0, i32 1, i32 1 4580 <i>; yields i8*:eptr</i> 4581 %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1 4582 <i>; yields i32*:iptr</i> 4583 %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0 4584 </pre> 4585 4586 </div> 4587 4588 </div> 4589 4590 <!-- ======================================================================= --> 4591 <h3> 4592 <a name="convertops">Conversion Operations</a> 4593 </h3> 4594 4595 <div> 4596 4597 <p>The instructions in this category are the conversion instructions (casting) 4598 which all take a single operand and a type. They perform various bit 4599 conversions on the operand.</p> 4600 4601 <!-- _______________________________________________________________________ --> 4602 <h4> 4603 <a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a> 4604 </h4> 4605 4606 <div> 4607 4608 <h5>Syntax:</h5> 4609 <pre> 4610 <result> = trunc <ty> <value> to <ty2> <i>; yields ty2</i> 4611 </pre> 4612 4613 <h5>Overview:</h5> 4614 <p>The '<tt>trunc</tt>' instruction truncates its operand to the 4615 type <tt>ty2</tt>.</p> 4616 4617 <h5>Arguments:</h5> 4618 <p>The '<tt>trunc</tt>' instruction takes a value to trunc, and a type to trunc it to. 4619 Both types must be of <a href="#t_integer">integer</a> types, or vectors 4620 of the same number of integers. 4621 The bit size of the <tt>value</tt> must be larger than 4622 the bit size of the destination type, <tt>ty2</tt>. 4623 Equal sized types are not allowed.</p> 4624 4625 <h5>Semantics:</h5> 4626 <p>The '<tt>trunc</tt>' instruction truncates the high order bits 4627 in <tt>value</tt> and converts the remaining bits to <tt>ty2</tt>. Since the 4628 source size must be larger than the destination size, <tt>trunc</tt> cannot 4629 be a <i>no-op cast</i>. It will always truncate bits.</p> 4630 4631 <h5>Example:</h5> 4632 <pre> 4633 %X = trunc i32 257 to i8 <i>; yields i8:1</i> 4634 %Y = trunc i32 123 to i1 <i>; yields i1:true</i> 4635 %Z = trunc i32 122 to i1 <i>; yields i1:false</i> 4636 %W = trunc <2 x i16> <i16 8, i16 7> to <2 x i8> <i>; yields <i8 8, i8 7></i> 4637 </pre> 4638 4639 </div> 4640 4641 <!-- _______________________________________________________________________ --> 4642 <h4> 4643 <a name="i_zext">'<tt>zext .. to</tt>' Instruction</a> 4644 </h4> 4645 4646 <div> 4647 4648 <h5>Syntax:</h5> 4649 <pre> 4650 <result> = zext <ty> <value> to <ty2> <i>; yields ty2</i> 4651 </pre> 4652 4653 <h5>Overview:</h5> 4654 <p>The '<tt>zext</tt>' instruction zero extends its operand to type 4655 <tt>ty2</tt>.</p> 4656 4657 4658 <h5>Arguments:</h5> 4659 <p>The '<tt>zext</tt>' instruction takes a value to cast, and a type to cast it to. 4660 Both types must be of <a href="#t_integer">integer</a> types, or vectors 4661 of the same number of integers. 4662 The bit size of the <tt>value</tt> must be smaller than 4663 the bit size of the destination type, 4664 <tt>ty2</tt>.</p> 4665 4666 <h5>Semantics:</h5> 4667 <p>The <tt>zext</tt> fills the high order bits of the <tt>value</tt> with zero 4668 bits until it reaches the size of the destination type, <tt>ty2</tt>.</p> 4669 4670 <p>When zero extending from i1, the result will always be either 0 or 1.</p> 4671 4672 <h5>Example:</h5> 4673 <pre> 4674 %X = zext i32 257 to i64 <i>; yields i64:257</i> 4675 %Y = zext i1 true to i32 <i>; yields i32:1</i> 4676 %Z = zext <2 x i16> <i16 8, i16 7> to <2 x i32> <i>; yields <i32 8, i32 7></i> 4677 </pre> 4678 4679 </div> 4680 4681 <!-- _______________________________________________________________________ --> 4682 <h4> 4683 <a name="i_sext">'<tt>sext .. to</tt>' Instruction</a> 4684 </h4> 4685 4686 <div> 4687 4688 <h5>Syntax:</h5> 4689 <pre> 4690 <result> = sext <ty> <value> to <ty2> <i>; yields ty2</i> 4691 </pre> 4692 4693 <h5>Overview:</h5> 4694 <p>The '<tt>sext</tt>' sign extends <tt>value</tt> to the type <tt>ty2</tt>.</p> 4695 4696 <h5>Arguments:</h5> 4697 <p>The '<tt>sext</tt>' instruction takes a value to cast, and a type to cast it to. 4698 Both types must be of <a href="#t_integer">integer</a> types, or vectors 4699 of the same number of integers. 4700 The bit size of the <tt>value</tt> must be smaller than 4701 the bit size of the destination type, 4702 <tt>ty2</tt>.</p> 4703 4704 <h5>Semantics:</h5> 4705 <p>The '<tt>sext</tt>' instruction performs a sign extension by copying the sign 4706 bit (highest order bit) of the <tt>value</tt> until it reaches the bit size 4707 of the type <tt>ty2</tt>.</p> 4708 4709 <p>When sign extending from i1, the extension always results in -1 or 0.</p> 4710 4711 <h5>Example:</h5> 4712 <pre> 4713 %X = sext i8 -1 to i16 <i>; yields i16 :65535</i> 4714 %Y = sext i1 true to i32 <i>; yields i32:-1</i> 4715 %Z = sext <2 x i16> <i16 8, i16 7> to <2 x i32> <i>; yields <i32 8, i32 7></i> 4716 </pre> 4717 4718 </div> 4719 4720 <!-- _______________________________________________________________________ --> 4721 <h4> 4722 <a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a> 4723 </h4> 4724 4725 <div> 4726 4727 <h5>Syntax:</h5> 4728 <pre> 4729 <result> = fptrunc <ty> <value> to <ty2> <i>; yields ty2</i> 4730 </pre> 4731 4732 <h5>Overview:</h5> 4733 <p>The '<tt>fptrunc</tt>' instruction truncates <tt>value</tt> to type 4734 <tt>ty2</tt>.</p> 4735 4736 <h5>Arguments:</h5> 4737 <p>The '<tt>fptrunc</tt>' instruction takes a <a href="#t_floating">floating 4738 point</a> value to cast and a <a href="#t_floating">floating point</a> type 4739 to cast it to. The size of <tt>value</tt> must be larger than the size of 4740 <tt>ty2</tt>. This implies that <tt>fptrunc</tt> cannot be used to make a 4741 <i>no-op cast</i>.</p> 4742 4743 <h5>Semantics:</h5> 4744 <p>The '<tt>fptrunc</tt>' instruction truncates a <tt>value</tt> from a larger 4745 <a href="#t_floating">floating point</a> type to a smaller 4746 <a href="#t_floating">floating point</a> type. If the value cannot fit 4747 within the destination type, <tt>ty2</tt>, then the results are 4748 undefined.</p> 4749 4750 <h5>Example:</h5> 4751 <pre> 4752 %X = fptrunc double 123.0 to float <i>; yields float:123.0</i> 4753 %Y = fptrunc double 1.0E+300 to float <i>; yields undefined</i> 4754 </pre> 4755 4756 </div> 4757 4758 <!-- _______________________________________________________________________ --> 4759 <h4> 4760 <a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a> 4761 </h4> 4762 4763 <div> 4764 4765 <h5>Syntax:</h5> 4766 <pre> 4767 <result> = fpext <ty> <value> to <ty2> <i>; yields ty2</i> 4768 </pre> 4769 4770 <h5>Overview:</h5> 4771 <p>The '<tt>fpext</tt>' extends a floating point <tt>value</tt> to a larger 4772 floating point value.</p> 4773 4774 <h5>Arguments:</h5> 4775 <p>The '<tt>fpext</tt>' instruction takes a 4776 <a href="#t_floating">floating point</a> <tt>value</tt> to cast, and 4777 a <a href="#t_floating">floating point</a> type to cast it to. The source 4778 type must be smaller than the destination type.</p> 4779 4780 <h5>Semantics:</h5> 4781 <p>The '<tt>fpext</tt>' instruction extends the <tt>value</tt> from a smaller 4782 <a href="#t_floating">floating point</a> type to a larger 4783 <a href="#t_floating">floating point</a> type. The <tt>fpext</tt> cannot be 4784 used to make a <i>no-op cast</i> because it always changes bits. Use 4785 <tt>bitcast</tt> to make a <i>no-op cast</i> for a floating point cast.</p> 4786 4787 <h5>Example:</h5> 4788 <pre> 4789 %X = fpext float 3.125 to double <i>; yields double:3.125000e+00</i> 4790 %Y = fpext double %X to fp128 <i>; yields fp128:0xL00000000000000004000900000000000</i> 4791 </pre> 4792 4793 </div> 4794 4795 <!-- _______________________________________________________________________ --> 4796 <h4> 4797 <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a> 4798 </h4> 4799 4800 <div> 4801 4802 <h5>Syntax:</h5> 4803 <pre> 4804 <result> = fptoui <ty> <value> to <ty2> <i>; yields ty2</i> 4805 </pre> 4806 4807 <h5>Overview:</h5> 4808 <p>The '<tt>fptoui</tt>' converts a floating point <tt>value</tt> to its 4809 unsigned integer equivalent of type <tt>ty2</tt>.</p> 4810 4811 <h5>Arguments:</h5> 4812 <p>The '<tt>fptoui</tt>' instruction takes a value to cast, which must be a 4813 scalar or vector <a href="#t_floating">floating point</a> value, and a type 4814 to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> 4815 type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a 4816 vector integer type with the same number of elements as <tt>ty</tt></p> 4817 4818 <h5>Semantics:</h5> 4819 <p>The '<tt>fptoui</tt>' instruction converts its 4820 <a href="#t_floating">floating point</a> operand into the nearest (rounding 4821 towards zero) unsigned integer value. If the value cannot fit 4822 in <tt>ty2</tt>, the results are undefined.</p> 4823 4824 <h5>Example:</h5> 4825 <pre> 4826 %X = fptoui double 123.0 to i32 <i>; yields i32:123</i> 4827 %Y = fptoui float 1.0E+300 to i1 <i>; yields undefined:1</i> 4828 %Z = fptoui float 1.04E+17 to i8 <i>; yields undefined:1</i> 4829 </pre> 4830 4831 </div> 4832 4833 <!-- _______________________________________________________________________ --> 4834 <h4> 4835 <a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a> 4836 </h4> 4837 4838 <div> 4839 4840 <h5>Syntax:</h5> 4841 <pre> 4842 <result> = fptosi <ty> <value> to <ty2> <i>; yields ty2</i> 4843 </pre> 4844 4845 <h5>Overview:</h5> 4846 <p>The '<tt>fptosi</tt>' instruction converts 4847 <a href="#t_floating">floating point</a> <tt>value</tt> to 4848 type <tt>ty2</tt>.</p> 4849 4850 <h5>Arguments:</h5> 4851 <p>The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a 4852 scalar or vector <a href="#t_floating">floating point</a> value, and a type 4853 to cast it to <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> 4854 type. If <tt>ty</tt> is a vector floating point type, <tt>ty2</tt> must be a 4855 vector integer type with the same number of elements as <tt>ty</tt></p> 4856 4857 <h5>Semantics:</h5> 4858 <p>The '<tt>fptosi</tt>' instruction converts its 4859 <a href="#t_floating">floating point</a> operand into the nearest (rounding 4860 towards zero) signed integer value. If the value cannot fit in <tt>ty2</tt>, 4861 the results are undefined.</p> 4862 4863 <h5>Example:</h5> 4864 <pre> 4865 %X = fptosi double -123.0 to i32 <i>; yields i32:-123</i> 4866 %Y = fptosi float 1.0E-247 to i1 <i>; yields undefined:1</i> 4867 %Z = fptosi float 1.04E+17 to i8 <i>; yields undefined:1</i> 4868 </pre> 4869 4870 </div> 4871 4872 <!-- _______________________________________________________________________ --> 4873 <h4> 4874 <a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a> 4875 </h4> 4876 4877 <div> 4878 4879 <h5>Syntax:</h5> 4880 <pre> 4881 <result> = uitofp <ty> <value> to <ty2> <i>; yields ty2</i> 4882 </pre> 4883 4884 <h5>Overview:</h5> 4885 <p>The '<tt>uitofp</tt>' instruction regards <tt>value</tt> as an unsigned 4886 integer and converts that value to the <tt>ty2</tt> type.</p> 4887 4888 <h5>Arguments:</h5> 4889 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be a 4890 scalar or vector <a href="#t_integer">integer</a> value, and a type to cast 4891 it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a> 4892 type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector 4893 floating point type with the same number of elements as <tt>ty</tt></p> 4894 4895 <h5>Semantics:</h5> 4896 <p>The '<tt>uitofp</tt>' instruction interprets its operand as an unsigned 4897 integer quantity and converts it to the corresponding floating point 4898 value. If the value cannot fit in the floating point value, the results are 4899 undefined.</p> 4900 4901 <h5>Example:</h5> 4902 <pre> 4903 %X = uitofp i32 257 to float <i>; yields float:257.0</i> 4904 %Y = uitofp i8 -1 to double <i>; yields double:255.0</i> 4905 </pre> 4906 4907 </div> 4908 4909 <!-- _______________________________________________________________________ --> 4910 <h4> 4911 <a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a> 4912 </h4> 4913 4914 <div> 4915 4916 <h5>Syntax:</h5> 4917 <pre> 4918 <result> = sitofp <ty> <value> to <ty2> <i>; yields ty2</i> 4919 </pre> 4920 4921 <h5>Overview:</h5> 4922 <p>The '<tt>sitofp</tt>' instruction regards <tt>value</tt> as a signed integer 4923 and converts that value to the <tt>ty2</tt> type.</p> 4924 4925 <h5>Arguments:</h5> 4926 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be a 4927 scalar or vector <a href="#t_integer">integer</a> value, and a type to cast 4928 it to <tt>ty2</tt>, which must be an <a href="#t_floating">floating point</a> 4929 type. If <tt>ty</tt> is a vector integer type, <tt>ty2</tt> must be a vector 4930 floating point type with the same number of elements as <tt>ty</tt></p> 4931 4932 <h5>Semantics:</h5> 4933 <p>The '<tt>sitofp</tt>' instruction interprets its operand as a signed integer 4934 quantity and converts it to the corresponding floating point value. If the 4935 value cannot fit in the floating point value, the results are undefined.</p> 4936 4937 <h5>Example:</h5> 4938 <pre> 4939 %X = sitofp i32 257 to float <i>; yields float:257.0</i> 4940 %Y = sitofp i8 -1 to double <i>; yields double:-1.0</i> 4941 </pre> 4942 4943 </div> 4944 4945 <!-- _______________________________________________________________________ --> 4946 <h4> 4947 <a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a> 4948 </h4> 4949 4950 <div> 4951 4952 <h5>Syntax:</h5> 4953 <pre> 4954 <result> = ptrtoint <ty> <value> to <ty2> <i>; yields ty2</i> 4955 </pre> 4956 4957 <h5>Overview:</h5> 4958 <p>The '<tt>ptrtoint</tt>' instruction converts the pointer <tt>value</tt> to 4959 the integer type <tt>ty2</tt>.</p> 4960 4961 <h5>Arguments:</h5> 4962 <p>The '<tt>ptrtoint</tt>' instruction takes a <tt>value</tt> to cast, which 4963 must be a <a href="#t_pointer">pointer</a> value, and a type to cast it to 4964 <tt>ty2</tt>, which must be an <a href="#t_integer">integer</a> type.</p> 4965 4966 <h5>Semantics:</h5> 4967 <p>The '<tt>ptrtoint</tt>' instruction converts <tt>value</tt> to integer type 4968 <tt>ty2</tt> by interpreting the pointer value as an integer and either 4969 truncating or zero extending that value to the size of the integer type. If 4970 <tt>value</tt> is smaller than <tt>ty2</tt> then a zero extension is done. If 4971 <tt>value</tt> is larger than <tt>ty2</tt> then a truncation is done. If they 4972 are the same size, then nothing is done (<i>no-op cast</i>) other than a type 4973 change.</p> 4974 4975 <h5>Example:</h5> 4976 <pre> 4977 %X = ptrtoint i32* %X to i8 <i>; yields truncation on 32-bit architecture</i> 4978 %Y = ptrtoint i32* %x to i64 <i>; yields zero extension on 32-bit architecture</i> 4979 </pre> 4980 4981 </div> 4982 4983 <!-- _______________________________________________________________________ --> 4984 <h4> 4985 <a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a> 4986 </h4> 4987 4988 <div> 4989 4990 <h5>Syntax:</h5> 4991 <pre> 4992 <result> = inttoptr <ty> <value> to <ty2> <i>; yields ty2</i> 4993 </pre> 4994 4995 <h5>Overview:</h5> 4996 <p>The '<tt>inttoptr</tt>' instruction converts an integer <tt>value</tt> to a 4997 pointer type, <tt>ty2</tt>.</p> 4998 4999 <h5>Arguments:</h5> 5000 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="#t_integer">integer</a> 5001 value to cast, and a type to cast it to, which must be a 5002 <a href="#t_pointer">pointer</a> type.</p> 5003 5004 <h5>Semantics:</h5> 5005 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type 5006 <tt>ty2</tt> by applying either a zero extension or a truncation depending on 5007 the size of the integer <tt>value</tt>. If <tt>value</tt> is larger than the 5008 size of a pointer then a truncation is done. If <tt>value</tt> is smaller 5009 than the size of a pointer then a zero extension is done. If they are the 5010 same size, nothing is done (<i>no-op cast</i>).</p> 5011 5012 <h5>Example:</h5> 5013 <pre> 5014 %X = inttoptr i32 255 to i32* <i>; yields zero extension on 64-bit architecture</i> 5015 %Y = inttoptr i32 255 to i32* <i>; yields no-op on 32-bit architecture</i> 5016 %Z = inttoptr i64 0 to i32* <i>; yields truncation on 32-bit architecture</i> 5017 </pre> 5018 5019 </div> 5020 5021 <!-- _______________________________________________________________________ --> 5022 <h4> 5023 <a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a> 5024 </h4> 5025 5026 <div> 5027 5028 <h5>Syntax:</h5> 5029 <pre> 5030 <result> = bitcast <ty> <value> to <ty2> <i>; yields ty2</i> 5031 </pre> 5032 5033 <h5>Overview:</h5> 5034 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type 5035 <tt>ty2</tt> without changing any bits.</p> 5036 5037 <h5>Arguments:</h5> 5038 <p>The '<tt>bitcast</tt>' instruction takes a value to cast, which must be a 5039 non-aggregate first class value, and a type to cast it to, which must also be 5040 a non-aggregate <a href="#t_firstclass">first class</a> type. The bit sizes 5041 of <tt>value</tt> and the destination type, <tt>ty2</tt>, must be 5042 identical. If the source type is a pointer, the destination type must also be 5043 a pointer. This instruction supports bitwise conversion of vectors to 5044 integers and to vectors of other types (as long as they have the same 5045 size).</p> 5046 5047 <h5>Semantics:</h5> 5048 <p>The '<tt>bitcast</tt>' instruction converts <tt>value</tt> to type 5049 <tt>ty2</tt>. It is always a <i>no-op cast</i> because no bits change with 5050 this conversion. The conversion is done as if the <tt>value</tt> had been 5051 stored to memory and read back as type <tt>ty2</tt>. Pointer types may only 5052 be converted to other pointer types with this instruction. To convert 5053 pointers to other types, use the <a href="#i_inttoptr">inttoptr</a> or 5054 <a href="#i_ptrtoint">ptrtoint</a> instructions first.</p> 5055 5056 <h5>Example:</h5> 5057 <pre> 5058 %X = bitcast i8 255 to i8 <i>; yields i8 :-1</i> 5059 %Y = bitcast i32* %x to sint* <i>; yields sint*:%x</i> 5060 %Z = bitcast <2 x int> %V to i64; <i>; yields i64: %V</i> 5061 </pre> 5062 5063 </div> 5064 5065 </div> 5066 5067 <!-- ======================================================================= --> 5068 <h3> 5069 <a name="otherops">Other Operations</a> 5070 </h3> 5071 5072 <div> 5073 5074 <p>The instructions in this category are the "miscellaneous" instructions, which 5075 defy better classification.</p> 5076 5077 <!-- _______________________________________________________________________ --> 5078 <h4> 5079 <a name="i_icmp">'<tt>icmp</tt>' Instruction</a> 5080 </h4> 5081 5082 <div> 5083 5084 <h5>Syntax:</h5> 5085 <pre> 5086 <result> = icmp <cond> <ty> <op1>, <op2> <i>; yields {i1} or {<N x i1>}:result</i> 5087 </pre> 5088 5089 <h5>Overview:</h5> 5090 <p>The '<tt>icmp</tt>' instruction returns a boolean value or a vector of 5091 boolean values based on comparison of its two integer, integer vector, or 5092 pointer operands.</p> 5093 5094 <h5>Arguments:</h5> 5095 <p>The '<tt>icmp</tt>' instruction takes three operands. The first operand is 5096 the condition code indicating the kind of comparison to perform. It is not a 5097 value, just a keyword. The possible condition code are:</p> 5098 5099 <ol> 5100 <li><tt>eq</tt>: equal</li> 5101 <li><tt>ne</tt>: not equal </li> 5102 <li><tt>ugt</tt>: unsigned greater than</li> 5103 <li><tt>uge</tt>: unsigned greater or equal</li> 5104 <li><tt>ult</tt>: unsigned less than</li> 5105 <li><tt>ule</tt>: unsigned less or equal</li> 5106 <li><tt>sgt</tt>: signed greater than</li> 5107 <li><tt>sge</tt>: signed greater or equal</li> 5108 <li><tt>slt</tt>: signed less than</li> 5109 <li><tt>sle</tt>: signed less or equal</li> 5110 </ol> 5111 5112 <p>The remaining two arguments must be <a href="#t_integer">integer</a> or 5113 <a href="#t_pointer">pointer</a> or integer <a href="#t_vector">vector</a> 5114 typed. They must also be identical types.</p> 5115 5116 <h5>Semantics:</h5> 5117 <p>The '<tt>icmp</tt>' compares <tt>op1</tt> and <tt>op2</tt> according to the 5118 condition code given as <tt>cond</tt>. The comparison performed always yields 5119 either an <a href="#t_integer"><tt>i1</tt></a> or vector of <tt>i1</tt> 5120 result, as follows:</p> 5121 5122 <ol> 5123 <li><tt>eq</tt>: yields <tt>true</tt> if the operands are equal, 5124 <tt>false</tt> otherwise. No sign interpretation is necessary or 5125 performed.</li> 5126 5127 <li><tt>ne</tt>: yields <tt>true</tt> if the operands are unequal, 5128 <tt>false</tt> otherwise. No sign interpretation is necessary or 5129 performed.</li> 5130 5131 <li><tt>ugt</tt>: interprets the operands as unsigned values and yields 5132 <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li> 5133 5134 <li><tt>uge</tt>: interprets the operands as unsigned values and yields 5135 <tt>true</tt> if <tt>op1</tt> is greater than or equal 5136 to <tt>op2</tt>.</li> 5137 5138 <li><tt>ult</tt>: interprets the operands as unsigned values and yields 5139 <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li> 5140 5141 <li><tt>ule</tt>: interprets the operands as unsigned values and yields 5142 <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li> 5143 5144 <li><tt>sgt</tt>: interprets the operands as signed values and yields 5145 <tt>true</tt> if <tt>op1</tt> is greater than <tt>op2</tt>.</li> 5146 5147 <li><tt>sge</tt>: interprets the operands as signed values and yields 5148 <tt>true</tt> if <tt>op1</tt> is greater than or equal 5149 to <tt>op2</tt>.</li> 5150 5151 <li><tt>slt</tt>: interprets the operands as signed values and yields 5152 <tt>true</tt> if <tt>op1</tt> is less than <tt>op2</tt>.</li> 5153 5154 <li><tt>sle</tt>: interprets the operands as signed values and yields 5155 <tt>true</tt> if <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li> 5156 </ol> 5157 5158 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer 5159 values are compared as if they were integers.</p> 5160 5161 <p>If the operands are integer vectors, then they are compared element by 5162 element. The result is an <tt>i1</tt> vector with the same number of elements 5163 as the values being compared. Otherwise, the result is an <tt>i1</tt>.</p> 5164 5165 <h5>Example:</h5> 5166 <pre> 5167 <result> = icmp eq i32 4, 5 <i>; yields: result=false</i> 5168 <result> = icmp ne float* %X, %X <i>; yields: result=false</i> 5169 <result> = icmp ult i16 4, 5 <i>; yields: result=true</i> 5170 <result> = icmp sgt i16 4, 5 <i>; yields: result=false</i> 5171 <result> = icmp ule i16 -4, 5 <i>; yields: result=false</i> 5172 <result> = icmp sge i16 4, 5 <i>; yields: result=false</i> 5173 </pre> 5174 5175 <p>Note that the code generator does not yet support vector types with 5176 the <tt>icmp</tt> instruction.</p> 5177 5178 </div> 5179 5180 <!-- _______________________________________________________________________ --> 5181 <h4> 5182 <a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a> 5183 </h4> 5184 5185 <div> 5186 5187 <h5>Syntax:</h5> 5188 <pre> 5189 <result> = fcmp <cond> <ty> <op1>, <op2> <i>; yields {i1} or {<N x i1>}:result</i> 5190 </pre> 5191 5192 <h5>Overview:</h5> 5193 <p>The '<tt>fcmp</tt>' instruction returns a boolean value or vector of boolean 5194 values based on comparison of its operands.</p> 5195 5196 <p>If the operands are floating point scalars, then the result type is a boolean 5197 (<a href="#t_integer"><tt>i1</tt></a>).</p> 5198 5199 <p>If the operands are floating point vectors, then the result type is a vector 5200 of boolean with the same number of elements as the operands being 5201 compared.</p> 5202 5203 <h5>Arguments:</h5> 5204 <p>The '<tt>fcmp</tt>' instruction takes three operands. The first operand is 5205 the condition code indicating the kind of comparison to perform. It is not a 5206 value, just a keyword. The possible condition code are:</p> 5207 5208 <ol> 5209 <li><tt>false</tt>: no comparison, always returns false</li> 5210 <li><tt>oeq</tt>: ordered and equal</li> 5211 <li><tt>ogt</tt>: ordered and greater than </li> 5212 <li><tt>oge</tt>: ordered and greater than or equal</li> 5213 <li><tt>olt</tt>: ordered and less than </li> 5214 <li><tt>ole</tt>: ordered and less than or equal</li> 5215 <li><tt>one</tt>: ordered and not equal</li> 5216 <li><tt>ord</tt>: ordered (no nans)</li> 5217 <li><tt>ueq</tt>: unordered or equal</li> 5218 <li><tt>ugt</tt>: unordered or greater than </li> 5219 <li><tt>uge</tt>: unordered or greater than or equal</li> 5220 <li><tt>ult</tt>: unordered or less than </li> 5221 <li><tt>ule</tt>: unordered or less than or equal</li> 5222 <li><tt>une</tt>: unordered or not equal</li> 5223 <li><tt>uno</tt>: unordered (either nans)</li> 5224 <li><tt>true</tt>: no comparison, always returns true</li> 5225 </ol> 5226 5227 <p><i>Ordered</i> means that neither operand is a QNAN while 5228 <i>unordered</i> means that either operand may be a QNAN.</p> 5229 5230 <p>Each of <tt>val1</tt> and <tt>val2</tt> arguments must be either 5231 a <a href="#t_floating">floating point</a> type or 5232 a <a href="#t_vector">vector</a> of floating point type. They must have 5233 identical types.</p> 5234 5235 <h5>Semantics:</h5> 5236 <p>The '<tt>fcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt> 5237 according to the condition code given as <tt>cond</tt>. If the operands are 5238 vectors, then the vectors are compared element by element. Each comparison 5239 performed always yields an <a href="#t_integer">i1</a> result, as 5240 follows:</p> 5241 5242 <ol> 5243 <li><tt>false</tt>: always yields <tt>false</tt>, regardless of operands.</li> 5244 5245 <li><tt>oeq</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5246 <tt>op1</tt> is equal to <tt>op2</tt>.</li> 5247 5248 <li><tt>ogt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5249 <tt>op1</tt> is greater than <tt>op2</tt>.</li> 5250 5251 <li><tt>oge</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5252 <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li> 5253 5254 <li><tt>olt</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5255 <tt>op1</tt> is less than <tt>op2</tt>.</li> 5256 5257 <li><tt>ole</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5258 <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li> 5259 5260 <li><tt>one</tt>: yields <tt>true</tt> if both operands are not a QNAN and 5261 <tt>op1</tt> is not equal to <tt>op2</tt>.</li> 5262 5263 <li><tt>ord</tt>: yields <tt>true</tt> if both operands are not a QNAN.</li> 5264 5265 <li><tt>ueq</tt>: yields <tt>true</tt> if either operand is a QNAN or 5266 <tt>op1</tt> is equal to <tt>op2</tt>.</li> 5267 5268 <li><tt>ugt</tt>: yields <tt>true</tt> if either operand is a QNAN or 5269 <tt>op1</tt> is greater than <tt>op2</tt>.</li> 5270 5271 <li><tt>uge</tt>: yields <tt>true</tt> if either operand is a QNAN or 5272 <tt>op1</tt> is greater than or equal to <tt>op2</tt>.</li> 5273 5274 <li><tt>ult</tt>: yields <tt>true</tt> if either operand is a QNAN or 5275 <tt>op1</tt> is less than <tt>op2</tt>.</li> 5276 5277 <li><tt>ule</tt>: yields <tt>true</tt> if either operand is a QNAN or 5278 <tt>op1</tt> is less than or equal to <tt>op2</tt>.</li> 5279 5280 <li><tt>une</tt>: yields <tt>true</tt> if either operand is a QNAN or 5281 <tt>op1</tt> is not equal to <tt>op2</tt>.</li> 5282 5283 <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li> 5284 5285 <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li> 5286 </ol> 5287 5288 <h5>Example:</h5> 5289 <pre> 5290 <result> = fcmp oeq float 4.0, 5.0 <i>; yields: result=false</i> 5291 <result> = fcmp one float 4.0, 5.0 <i>; yields: result=true</i> 5292 <result> = fcmp olt float 4.0, 5.0 <i>; yields: result=true</i> 5293 <result> = fcmp ueq double 1.0, 2.0 <i>; yields: result=false</i> 5294 </pre> 5295 5296 <p>Note that the code generator does not yet support vector types with 5297 the <tt>fcmp</tt> instruction.</p> 5298 5299 </div> 5300 5301 <!-- _______________________________________________________________________ --> 5302 <h4> 5303 <a name="i_phi">'<tt>phi</tt>' Instruction</a> 5304 </h4> 5305 5306 <div> 5307 5308 <h5>Syntax:</h5> 5309 <pre> 5310 <result> = phi <ty> [ <val0>, <label0>], ... 5311 </pre> 5312 5313 <h5>Overview:</h5> 5314 <p>The '<tt>phi</tt>' instruction is used to implement the φ node in the 5315 SSA graph representing the function.</p> 5316 5317 <h5>Arguments:</h5> 5318 <p>The type of the incoming values is specified with the first type field. After 5319 this, the '<tt>phi</tt>' instruction takes a list of pairs as arguments, with 5320 one pair for each predecessor basic block of the current block. Only values 5321 of <a href="#t_firstclass">first class</a> type may be used as the value 5322 arguments to the PHI node. Only labels may be used as the label 5323 arguments.</p> 5324 5325 <p>There must be no non-phi instructions between the start of a basic block and 5326 the PHI instructions: i.e. PHI instructions must be first in a basic 5327 block.</p> 5328 5329 <p>For the purposes of the SSA form, the use of each incoming value is deemed to 5330 occur on the edge from the corresponding predecessor block to the current 5331 block (but after any definition of an '<tt>invoke</tt>' instruction's return 5332 value on the same edge).</p> 5333 5334 <h5>Semantics:</h5> 5335 <p>At runtime, the '<tt>phi</tt>' instruction logically takes on the value 5336 specified by the pair corresponding to the predecessor basic block that 5337 executed just prior to the current block.</p> 5338 5339 <h5>Example:</h5> 5340 <pre> 5341 Loop: ; Infinite loop that counts from 0 on up... 5342 %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ] 5343 %nextindvar = add i32 %indvar, 1 5344 br label %Loop 5345 </pre> 5346 5347 </div> 5348 5349 <!-- _______________________________________________________________________ --> 5350 <h4> 5351 <a name="i_select">'<tt>select</tt>' Instruction</a> 5352 </h4> 5353 5354 <div> 5355 5356 <h5>Syntax:</h5> 5357 <pre> 5358 <result> = select <i>selty</i> <cond>, <ty> <val1>, <ty> <val2> <i>; yields ty</i> 5359 5360 <i>selty</i> is either i1 or {<N x i1>} 5361 </pre> 5362 5363 <h5>Overview:</h5> 5364 <p>The '<tt>select</tt>' instruction is used to choose one value based on a 5365 condition, without branching.</p> 5366 5367 5368 <h5>Arguments:</h5> 5369 <p>The '<tt>select</tt>' instruction requires an 'i1' value or a vector of 'i1' 5370 values indicating the condition, and two values of the 5371 same <a href="#t_firstclass">first class</a> type. If the val1/val2 are 5372 vectors and the condition is a scalar, then entire vectors are selected, not 5373 individual elements.</p> 5374 5375 <h5>Semantics:</h5> 5376 <p>If the condition is an i1 and it evaluates to 1, the instruction returns the 5377 first value argument; otherwise, it returns the second value argument.</p> 5378 5379 <p>If the condition is a vector of i1, then the value arguments must be vectors 5380 of the same size, and the selection is done element by element.</p> 5381 5382 <h5>Example:</h5> 5383 <pre> 5384 %X = select i1 true, i8 17, i8 42 <i>; yields i8:17</i> 5385 </pre> 5386 5387 <p>Note that the code generator does not yet support conditions 5388 with vector type.</p> 5389 5390 </div> 5391 5392 <!-- _______________________________________________________________________ --> 5393 <h4> 5394 <a name="i_call">'<tt>call</tt>' Instruction</a> 5395 </h4> 5396 5397 <div> 5398 5399 <h5>Syntax:</h5> 5400 <pre> 5401 <result> = [tail] call [<a href="#callingconv">cconv</a>] [<a href="#paramattrs">ret attrs</a>] <ty> [<fnty>*] <fnptrval>(<function args>) [<a href="#fnattrs">fn attrs</a>] 5402 </pre> 5403 5404 <h5>Overview:</h5> 5405 <p>The '<tt>call</tt>' instruction represents a simple function call.</p> 5406 5407 <h5>Arguments:</h5> 5408 <p>This instruction requires several arguments:</p> 5409 5410 <ol> 5411 <li>The optional "tail" marker indicates that the callee function does not 5412 access any allocas or varargs in the caller. Note that calls may be 5413 marked "tail" even if they do not occur before 5414 a <a href="#i_ret"><tt>ret</tt></a> instruction. If the "tail" marker is 5415 present, the function call is eligible for tail call optimization, 5416 but <a href="CodeGenerator.html#tailcallopt">might not in fact be 5417 optimized into a jump</a>. The code generator may optimize calls marked 5418 "tail" with either 1) automatic <a href="CodeGenerator.html#sibcallopt"> 5419 sibling call optimization</a> when the caller and callee have 5420 matching signatures, or 2) forced tail call optimization when the 5421 following extra requirements are met: 5422 <ul> 5423 <li>Caller and callee both have the calling 5424 convention <tt>fastcc</tt>.</li> 5425 <li>The call is in tail position (ret immediately follows call and ret 5426 uses value of call or is void).</li> 5427 <li>Option <tt>-tailcallopt</tt> is enabled, 5428 or <code>llvm::GuaranteedTailCallOpt</code> is <code>true</code>.</li> 5429 <li><a href="CodeGenerator.html#tailcallopt">Platform specific 5430 constraints are met.</a></li> 5431 </ul> 5432 </li> 5433 5434 <li>The optional "cconv" marker indicates which <a href="#callingconv">calling 5435 convention</a> the call should use. If none is specified, the call 5436 defaults to using C calling conventions. The calling convention of the 5437 call must match the calling convention of the target function, or else the 5438 behavior is undefined.</li> 5439 5440 <li>The optional <a href="#paramattrs">Parameter Attributes</a> list for 5441 return values. Only '<tt>zeroext</tt>', '<tt>signext</tt>', and 5442 '<tt>inreg</tt>' attributes are valid here.</li> 5443 5444 <li>'<tt>ty</tt>': the type of the call instruction itself which is also the 5445 type of the return value. Functions that return no value are marked 5446 <tt><a href="#t_void">void</a></tt>.</li> 5447 5448 <li>'<tt>fnty</tt>': shall be the signature of the pointer to function value 5449 being invoked. The argument types must match the types implied by this 5450 signature. This type can be omitted if the function is not varargs and if 5451 the function type does not return a pointer to a function.</li> 5452 5453 <li>'<tt>fnptrval</tt>': An LLVM value containing a pointer to a function to 5454 be invoked. In most cases, this is a direct function invocation, but 5455 indirect <tt>call</tt>s are just as possible, calling an arbitrary pointer 5456 to function value.</li> 5457 5458 <li>'<tt>function args</tt>': argument list whose types match the function 5459 signature argument types and parameter attributes. All arguments must be 5460 of <a href="#t_firstclass">first class</a> type. If the function 5461 signature indicates the function accepts a variable number of arguments, 5462 the extra arguments can be specified.</li> 5463 5464 <li>The optional <a href="#fnattrs">function attributes</a> list. Only 5465 '<tt>noreturn</tt>', '<tt>nounwind</tt>', '<tt>readonly</tt>' and 5466 '<tt>readnone</tt>' attributes are valid here.</li> 5467 </ol> 5468 5469 <h5>Semantics:</h5> 5470 <p>The '<tt>call</tt>' instruction is used to cause control flow to transfer to 5471 a specified function, with its incoming arguments bound to the specified 5472 values. Upon a '<tt><a href="#i_ret">ret</a></tt>' instruction in the called 5473 function, control flow continues with the instruction after the function 5474 call, and the return value of the function is bound to the result 5475 argument.</p> 5476 5477 <h5>Example:</h5> 5478 <pre> 5479 %retval = call i32 @test(i32 %argc) 5480 call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42) <i>; yields i32</i> 5481 %X = tail call i32 @foo() <i>; yields i32</i> 5482 %Y = tail call <a href="#callingconv">fastcc</a> i32 @foo() <i>; yields i32</i> 5483 call void %foo(i8 97 signext) 5484 5485 %struct.A = type { i32, i8 } 5486 %r = call %struct.A @foo() <i>; yields { 32, i8 }</i> 5487 %gr = extractvalue %struct.A %r, 0 <i>; yields i32</i> 5488 %gr1 = extractvalue %struct.A %r, 1 <i>; yields i8</i> 5489 %Z = call void @foo() noreturn <i>; indicates that %foo never returns normally</i> 5490 %ZZ = call zeroext i32 @bar() <i>; Return value is %zero extended</i> 5491 </pre> 5492 5493 <p>llvm treats calls to some functions with names and arguments that match the 5494 standard C99 library as being the C99 library functions, and may perform 5495 optimizations or generate code for them under that assumption. This is 5496 something we'd like to change in the future to provide better support for 5497 freestanding environments and non-C-based languages.</p> 5498 5499 </div> 5500 5501 <!-- _______________________________________________________________________ --> 5502 <h4> 5503 <a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a> 5504 </h4> 5505 5506 <div> 5507 5508 <h5>Syntax:</h5> 5509 <pre> 5510 <resultval> = va_arg <va_list*> <arglist>, <argty> 5511 </pre> 5512 5513 <h5>Overview:</h5> 5514 <p>The '<tt>va_arg</tt>' instruction is used to access arguments passed through 5515 the "variable argument" area of a function call. It is used to implement the 5516 <tt>va_arg</tt> macro in C.</p> 5517 5518 <h5>Arguments:</h5> 5519 <p>This instruction takes a <tt>va_list*</tt> value and the type of the 5520 argument. It returns a value of the specified argument type and increments 5521 the <tt>va_list</tt> to point to the next argument. The actual type 5522 of <tt>va_list</tt> is target specific.</p> 5523 5524 <h5>Semantics:</h5> 5525 <p>The '<tt>va_arg</tt>' instruction loads an argument of the specified type 5526 from the specified <tt>va_list</tt> and causes the <tt>va_list</tt> to point 5527 to the next argument. For more information, see the variable argument 5528 handling <a href="#int_varargs">Intrinsic Functions</a>.</p> 5529 5530 <p>It is legal for this instruction to be called in a function which does not 5531 take a variable number of arguments, for example, the <tt>vfprintf</tt> 5532 function.</p> 5533 5534 <p><tt>va_arg</tt> is an LLVM instruction instead of 5535 an <a href="#intrinsics">intrinsic function</a> because it takes a type as an 5536 argument.</p> 5537 5538 <h5>Example:</h5> 5539 <p>See the <a href="#int_varargs">variable argument processing</a> section.</p> 5540 5541 <p>Note that the code generator does not yet fully support va_arg on many 5542 targets. Also, it does not currently support va_arg with aggregate types on 5543 any target.</p> 5544 5545 </div> 5546 5547 </div> 5548 5549 </div> 5550 5551 <!-- *********************************************************************** --> 5552 <h2><a name="intrinsics">Intrinsic Functions</a></h2> 5553 <!-- *********************************************************************** --> 5554 5555 <div> 5556 5557 <p>LLVM supports the notion of an "intrinsic function". These functions have 5558 well known names and semantics and are required to follow certain 5559 restrictions. Overall, these intrinsics represent an extension mechanism for 5560 the LLVM language that does not require changing all of the transformations 5561 in LLVM when adding to the language (or the bitcode reader/writer, the 5562 parser, etc...).</p> 5563 5564 <p>Intrinsic function names must all start with an "<tt>llvm.</tt>" prefix. This 5565 prefix is reserved in LLVM for intrinsic names; thus, function names may not 5566 begin with this prefix. Intrinsic functions must always be external 5567 functions: you cannot define the body of intrinsic functions. Intrinsic 5568 functions may only be used in call or invoke instructions: it is illegal to 5569 take the address of an intrinsic function. Additionally, because intrinsic 5570 functions are part of the LLVM language, it is required if any are added that 5571 they be documented here.</p> 5572 5573 <p>Some intrinsic functions can be overloaded, i.e., the intrinsic represents a 5574 family of functions that perform the same operation but on different data 5575 types. Because LLVM can represent over 8 million different integer types, 5576 overloading is used commonly to allow an intrinsic function to operate on any 5577 integer type. One or more of the argument types or the result type can be 5578 overloaded to accept any integer type. Argument types may also be defined as 5579 exactly matching a previous argument's type or the result type. This allows 5580 an intrinsic function which accepts multiple arguments, but needs all of them 5581 to be of the same type, to only be overloaded with respect to a single 5582 argument or the result.</p> 5583 5584 <p>Overloaded intrinsics will have the names of its overloaded argument types 5585 encoded into its function name, each preceded by a period. Only those types 5586 which are overloaded result in a name suffix. Arguments whose type is matched 5587 against another type do not. For example, the <tt>llvm.ctpop</tt> function 5588 can take an integer of any width and returns an integer of exactly the same 5589 integer width. This leads to a family of functions such as 5590 <tt>i8 @llvm.ctpop.i8(i8 %val)</tt> and <tt>i29 @llvm.ctpop.i29(i29 5591 %val)</tt>. Only one type, the return type, is overloaded, and only one type 5592 suffix is required. Because the argument's type is matched against the return 5593 type, it does not require its own name suffix.</p> 5594 5595 <p>To learn how to add an intrinsic function, please see the 5596 <a href="ExtendingLLVM.html">Extending LLVM Guide</a>.</p> 5597 5598 <!-- ======================================================================= --> 5599 <h3> 5600 <a name="int_varargs">Variable Argument Handling Intrinsics</a> 5601 </h3> 5602 5603 <div> 5604 5605 <p>Variable argument support is defined in LLVM with 5606 the <a href="#i_va_arg"><tt>va_arg</tt></a> instruction and these three 5607 intrinsic functions. These functions are related to the similarly named 5608 macros defined in the <tt><stdarg.h></tt> header file.</p> 5609 5610 <p>All of these functions operate on arguments that use a target-specific value 5611 type "<tt>va_list</tt>". The LLVM assembly language reference manual does 5612 not define what this type is, so all transformations should be prepared to 5613 handle these functions regardless of the type used.</p> 5614 5615 <p>This example shows how the <a href="#i_va_arg"><tt>va_arg</tt></a> 5616 instruction and the variable argument handling intrinsic functions are 5617 used.</p> 5618 5619 <pre class="doc_code"> 5620 define i32 @test(i32 %X, ...) { 5621 ; Initialize variable argument processing 5622 %ap = alloca i8* 5623 %ap2 = bitcast i8** %ap to i8* 5624 call void @llvm.va_start(i8* %ap2) 5625 5626 ; Read a single integer argument 5627 %tmp = va_arg i8** %ap, i32 5628 5629 ; Demonstrate usage of llvm.va_copy and llvm.va_end 5630 %aq = alloca i8* 5631 %aq2 = bitcast i8** %aq to i8* 5632 call void @llvm.va_copy(i8* %aq2, i8* %ap2) 5633 call void @llvm.va_end(i8* %aq2) 5634 5635 ; Stop processing of arguments. 5636 call void @llvm.va_end(i8* %ap2) 5637 ret i32 %tmp 5638 } 5639 5640 declare void @llvm.va_start(i8*) 5641 declare void @llvm.va_copy(i8*, i8*) 5642 declare void @llvm.va_end(i8*) 5643 </pre> 5644 5645 <!-- _______________________________________________________________________ --> 5646 <h4> 5647 <a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a> 5648 </h4> 5649 5650 5651 <div> 5652 5653 <h5>Syntax:</h5> 5654 <pre> 5655 declare void %llvm.va_start(i8* <arglist>) 5656 </pre> 5657 5658 <h5>Overview:</h5> 5659 <p>The '<tt>llvm.va_start</tt>' intrinsic initializes <tt>*<arglist></tt> 5660 for subsequent use by <tt><a href="#i_va_arg">va_arg</a></tt>.</p> 5661 5662 <h5>Arguments:</h5> 5663 <p>The argument is a pointer to a <tt>va_list</tt> element to initialize.</p> 5664 5665 <h5>Semantics:</h5> 5666 <p>The '<tt>llvm.va_start</tt>' intrinsic works just like the <tt>va_start</tt> 5667 macro available in C. In a target-dependent way, it initializes 5668 the <tt>va_list</tt> element to which the argument points, so that the next 5669 call to <tt>va_arg</tt> will produce the first variable argument passed to 5670 the function. Unlike the C <tt>va_start</tt> macro, this intrinsic does not 5671 need to know the last argument of the function as the compiler can figure 5672 that out.</p> 5673 5674 </div> 5675 5676 <!-- _______________________________________________________________________ --> 5677 <h4> 5678 <a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a> 5679 </h4> 5680 5681 <div> 5682 5683 <h5>Syntax:</h5> 5684 <pre> 5685 declare void @llvm.va_end(i8* <arglist>) 5686 </pre> 5687 5688 <h5>Overview:</h5> 5689 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>*<arglist></tt>, 5690 which has been initialized previously 5691 with <tt><a href="#int_va_start">llvm.va_start</a></tt> 5692 or <tt><a href="#i_va_copy">llvm.va_copy</a></tt>.</p> 5693 5694 <h5>Arguments:</h5> 5695 <p>The argument is a pointer to a <tt>va_list</tt> to destroy.</p> 5696 5697 <h5>Semantics:</h5> 5698 <p>The '<tt>llvm.va_end</tt>' intrinsic works just like the <tt>va_end</tt> 5699 macro available in C. In a target-dependent way, it destroys 5700 the <tt>va_list</tt> element to which the argument points. Calls 5701 to <a href="#int_va_start"><tt>llvm.va_start</tt></a> 5702 and <a href="#int_va_copy"> <tt>llvm.va_copy</tt></a> must be matched exactly 5703 with calls to <tt>llvm.va_end</tt>.</p> 5704 5705 </div> 5706 5707 <!-- _______________________________________________________________________ --> 5708 <h4> 5709 <a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a> 5710 </h4> 5711 5712 <div> 5713 5714 <h5>Syntax:</h5> 5715 <pre> 5716 declare void @llvm.va_copy(i8* <destarglist>, i8* <srcarglist>) 5717 </pre> 5718 5719 <h5>Overview:</h5> 5720 <p>The '<tt>llvm.va_copy</tt>' intrinsic copies the current argument position 5721 from the source argument list to the destination argument list.</p> 5722 5723 <h5>Arguments:</h5> 5724 <p>The first argument is a pointer to a <tt>va_list</tt> element to initialize. 5725 The second argument is a pointer to a <tt>va_list</tt> element to copy 5726 from.</p> 5727 5728 <h5>Semantics:</h5> 5729 <p>The '<tt>llvm.va_copy</tt>' intrinsic works just like the <tt>va_copy</tt> 5730 macro available in C. In a target-dependent way, it copies the 5731 source <tt>va_list</tt> element into the destination <tt>va_list</tt> 5732 element. This intrinsic is necessary because 5733 the <tt><a href="#int_va_start"> llvm.va_start</a></tt> intrinsic may be 5734 arbitrarily complex and require, for example, memory allocation.</p> 5735 5736 </div> 5737 5738 </div> 5739 5740 <!-- ======================================================================= --> 5741 <h3> 5742 <a name="int_gc">Accurate Garbage Collection Intrinsics</a> 5743 </h3> 5744 5745 <div> 5746 5747 <p>LLVM support for <a href="GarbageCollection.html">Accurate Garbage 5748 Collection</a> (GC) requires the implementation and generation of these 5749 intrinsics. These intrinsics allow identification of <a href="#int_gcroot">GC 5750 roots on the stack</a>, as well as garbage collector implementations that 5751 require <a href="#int_gcread">read</a> and <a href="#int_gcwrite">write</a> 5752 barriers. Front-ends for type-safe garbage collected languages should generate 5753 these intrinsics to make use of the LLVM garbage collectors. For more details, 5754 see <a href="GarbageCollection.html">Accurate Garbage Collection with 5755 LLVM</a>.</p> 5756 5757 <p>The garbage collection intrinsics only operate on objects in the generic 5758 address space (address space zero).</p> 5759 5760 <!-- _______________________________________________________________________ --> 5761 <h4> 5762 <a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a> 5763 </h4> 5764 5765 <div> 5766 5767 <h5>Syntax:</h5> 5768 <pre> 5769 declare void @llvm.gcroot(i8** %ptrloc, i8* %metadata) 5770 </pre> 5771 5772 <h5>Overview:</h5> 5773 <p>The '<tt>llvm.gcroot</tt>' intrinsic declares the existence of a GC root to 5774 the code generator, and allows some metadata to be associated with it.</p> 5775 5776 <h5>Arguments:</h5> 5777 <p>The first argument specifies the address of a stack object that contains the 5778 root pointer. The second pointer (which must be either a constant or a 5779 global value address) contains the meta-data to be associated with the 5780 root.</p> 5781 5782 <h5>Semantics:</h5> 5783 <p>At runtime, a call to this intrinsic stores a null pointer into the "ptrloc" 5784 location. At compile-time, the code generator generates information to allow 5785 the runtime to find the pointer at GC safe points. The '<tt>llvm.gcroot</tt>' 5786 intrinsic may only be used in a function which <a href="#gc">specifies a GC 5787 algorithm</a>.</p> 5788 5789 </div> 5790 5791 <!-- _______________________________________________________________________ --> 5792 <h4> 5793 <a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a> 5794 </h4> 5795 5796 <div> 5797 5798 <h5>Syntax:</h5> 5799 <pre> 5800 declare i8* @llvm.gcread(i8* %ObjPtr, i8** %Ptr) 5801 </pre> 5802 5803 <h5>Overview:</h5> 5804 <p>The '<tt>llvm.gcread</tt>' intrinsic identifies reads of references from heap 5805 locations, allowing garbage collector implementations that require read 5806 barriers.</p> 5807 5808 <h5>Arguments:</h5> 5809 <p>The second argument is the address to read from, which should be an address 5810 allocated from the garbage collector. The first object is a pointer to the 5811 start of the referenced object, if needed by the language runtime (otherwise 5812 null).</p> 5813 5814 <h5>Semantics:</h5> 5815 <p>The '<tt>llvm.gcread</tt>' intrinsic has the same semantics as a load 5816 instruction, but may be replaced with substantially more complex code by the 5817 garbage collector runtime, as needed. The '<tt>llvm.gcread</tt>' intrinsic 5818 may only be used in a function which <a href="#gc">specifies a GC 5819 algorithm</a>.</p> 5820 5821 </div> 5822 5823 <!-- _______________________________________________________________________ --> 5824 <h4> 5825 <a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a> 5826 </h4> 5827 5828 <div> 5829 5830 <h5>Syntax:</h5> 5831 <pre> 5832 declare void @llvm.gcwrite(i8* %P1, i8* %Obj, i8** %P2) 5833 </pre> 5834 5835 <h5>Overview:</h5> 5836 <p>The '<tt>llvm.gcwrite</tt>' intrinsic identifies writes of references to heap 5837 locations, allowing garbage collector implementations that require write 5838 barriers (such as generational or reference counting collectors).</p> 5839 5840 <h5>Arguments:</h5> 5841 <p>The first argument is the reference to store, the second is the start of the 5842 object to store it to, and the third is the address of the field of Obj to 5843 store to. If the runtime does not require a pointer to the object, Obj may 5844 be null.</p> 5845 5846 <h5>Semantics:</h5> 5847 <p>The '<tt>llvm.gcwrite</tt>' intrinsic has the same semantics as a store 5848 instruction, but may be replaced with substantially more complex code by the 5849 garbage collector runtime, as needed. The '<tt>llvm.gcwrite</tt>' intrinsic 5850 may only be used in a function which <a href="#gc">specifies a GC 5851 algorithm</a>.</p> 5852 5853 </div> 5854 5855 </div> 5856 5857 <!-- ======================================================================= --> 5858 <h3> 5859 <a name="int_codegen">Code Generator Intrinsics</a> 5860 </h3> 5861 5862 <div> 5863 5864 <p>These intrinsics are provided by LLVM to expose special features that may 5865 only be implemented with code generator support.</p> 5866 5867 <!-- _______________________________________________________________________ --> 5868 <h4> 5869 <a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a> 5870 </h4> 5871 5872 <div> 5873 5874 <h5>Syntax:</h5> 5875 <pre> 5876 declare i8 *@llvm.returnaddress(i32 <level>) 5877 </pre> 5878 5879 <h5>Overview:</h5> 5880 <p>The '<tt>llvm.returnaddress</tt>' intrinsic attempts to compute a 5881 target-specific value indicating the return address of the current function 5882 or one of its callers.</p> 5883 5884 <h5>Arguments:</h5> 5885 <p>The argument to this intrinsic indicates which function to return the address 5886 for. Zero indicates the calling function, one indicates its caller, etc. 5887 The argument is <b>required</b> to be a constant integer value.</p> 5888 5889 <h5>Semantics:</h5> 5890 <p>The '<tt>llvm.returnaddress</tt>' intrinsic either returns a pointer 5891 indicating the return address of the specified call frame, or zero if it 5892 cannot be identified. The value returned by this intrinsic is likely to be 5893 incorrect or 0 for arguments other than zero, so it should only be used for 5894 debugging purposes.</p> 5895 5896 <p>Note that calling this intrinsic does not prevent function inlining or other 5897 aggressive transformations, so the value returned may not be that of the 5898 obvious source-language caller.</p> 5899 5900 </div> 5901 5902 <!-- _______________________________________________________________________ --> 5903 <h4> 5904 <a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a> 5905 </h4> 5906 5907 <div> 5908 5909 <h5>Syntax:</h5> 5910 <pre> 5911 declare i8* @llvm.frameaddress(i32 <level>) 5912 </pre> 5913 5914 <h5>Overview:</h5> 5915 <p>The '<tt>llvm.frameaddress</tt>' intrinsic attempts to return the 5916 target-specific frame pointer value for the specified stack frame.</p> 5917 5918 <h5>Arguments:</h5> 5919 <p>The argument to this intrinsic indicates which function to return the frame 5920 pointer for. Zero indicates the calling function, one indicates its caller, 5921 etc. The argument is <b>required</b> to be a constant integer value.</p> 5922 5923 <h5>Semantics:</h5> 5924 <p>The '<tt>llvm.frameaddress</tt>' intrinsic either returns a pointer 5925 indicating the frame address of the specified call frame, or zero if it 5926 cannot be identified. The value returned by this intrinsic is likely to be 5927 incorrect or 0 for arguments other than zero, so it should only be used for 5928 debugging purposes.</p> 5929 5930 <p>Note that calling this intrinsic does not prevent function inlining or other 5931 aggressive transformations, so the value returned may not be that of the 5932 obvious source-language caller.</p> 5933 5934 </div> 5935 5936 <!-- _______________________________________________________________________ --> 5937 <h4> 5938 <a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a> 5939 </h4> 5940 5941 <div> 5942 5943 <h5>Syntax:</h5> 5944 <pre> 5945 declare i8* @llvm.stacksave() 5946 </pre> 5947 5948 <h5>Overview:</h5> 5949 <p>The '<tt>llvm.stacksave</tt>' intrinsic is used to remember the current state 5950 of the function stack, for use 5951 with <a href="#int_stackrestore"> <tt>llvm.stackrestore</tt></a>. This is 5952 useful for implementing language features like scoped automatic variable 5953 sized arrays in C99.</p> 5954 5955 <h5>Semantics:</h5> 5956 <p>This intrinsic returns a opaque pointer value that can be passed 5957 to <a href="#int_stackrestore"><tt>llvm.stackrestore</tt></a>. When 5958 an <tt>llvm.stackrestore</tt> intrinsic is executed with a value saved 5959 from <tt>llvm.stacksave</tt>, it effectively restores the state of the stack 5960 to the state it was in when the <tt>llvm.stacksave</tt> intrinsic executed. 5961 In practice, this pops any <a href="#i_alloca">alloca</a> blocks from the 5962 stack that were allocated after the <tt>llvm.stacksave</tt> was executed.</p> 5963 5964 </div> 5965 5966 <!-- _______________________________________________________________________ --> 5967 <h4> 5968 <a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a> 5969 </h4> 5970 5971 <div> 5972 5973 <h5>Syntax:</h5> 5974 <pre> 5975 declare void @llvm.stackrestore(i8* %ptr) 5976 </pre> 5977 5978 <h5>Overview:</h5> 5979 <p>The '<tt>llvm.stackrestore</tt>' intrinsic is used to restore the state of 5980 the function stack to the state it was in when the 5981 corresponding <a href="#int_stacksave"><tt>llvm.stacksave</tt></a> intrinsic 5982 executed. This is useful for implementing language features like scoped 5983 automatic variable sized arrays in C99.</p> 5984 5985 <h5>Semantics:</h5> 5986 <p>See the description 5987 for <a href="#int_stacksave"><tt>llvm.stacksave</tt></a>.</p> 5988 5989 </div> 5990 5991 <!-- _______________________________________________________________________ --> 5992 <h4> 5993 <a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a> 5994 </h4> 5995 5996 <div> 5997 5998 <h5>Syntax:</h5> 5999 <pre> 6000 declare void @llvm.prefetch(i8* <address>, i32 <rw>, i32 <locality>, i32 <cache type>) 6001 </pre> 6002 6003 <h5>Overview:</h5> 6004 <p>The '<tt>llvm.prefetch</tt>' intrinsic is a hint to the code generator to 6005 insert a prefetch instruction if supported; otherwise, it is a noop. 6006 Prefetches have no effect on the behavior of the program but can change its 6007 performance characteristics.</p> 6008 6009 <h5>Arguments:</h5> 6010 <p><tt>address</tt> is the address to be prefetched, <tt>rw</tt> is the 6011 specifier determining if the fetch should be for a read (0) or write (1), 6012 and <tt>locality</tt> is a temporal locality specifier ranging from (0) - no 6013 locality, to (3) - extremely local keep in cache. The <tt>cache type</tt> 6014 specifies whether the prefetch is performed on the data (1) or instruction (0) 6015 cache. The <tt>rw</tt>, <tt>locality</tt> and <tt>cache type</tt> arguments 6016 must be constant integers.</p> 6017 6018 <h5>Semantics:</h5> 6019 <p>This intrinsic does not modify the behavior of the program. In particular, 6020 prefetches cannot trap and do not produce a value. On targets that support 6021 this intrinsic, the prefetch can provide hints to the processor cache for 6022 better performance.</p> 6023 6024 </div> 6025 6026 <!-- _______________________________________________________________________ --> 6027 <h4> 6028 <a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a> 6029 </h4> 6030 6031 <div> 6032 6033 <h5>Syntax:</h5> 6034 <pre> 6035 declare void @llvm.pcmarker(i32 <id>) 6036 </pre> 6037 6038 <h5>Overview:</h5> 6039 <p>The '<tt>llvm.pcmarker</tt>' intrinsic is a method to export a Program 6040 Counter (PC) in a region of code to simulators and other tools. The method 6041 is target specific, but it is expected that the marker will use exported 6042 symbols to transmit the PC of the marker. The marker makes no guarantees 6043 that it will remain with any specific instruction after optimizations. It is 6044 possible that the presence of a marker will inhibit optimizations. The 6045 intended use is to be inserted after optimizations to allow correlations of 6046 simulation runs.</p> 6047 6048 <h5>Arguments:</h5> 6049 <p><tt>id</tt> is a numerical id identifying the marker.</p> 6050 6051 <h5>Semantics:</h5> 6052 <p>This intrinsic does not modify the behavior of the program. Backends that do 6053 not support this intrinsic may ignore it.</p> 6054 6055 </div> 6056 6057 <!-- _______________________________________________________________________ --> 6058 <h4> 6059 <a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a> 6060 </h4> 6061 6062 <div> 6063 6064 <h5>Syntax:</h5> 6065 <pre> 6066 declare i64 @llvm.readcyclecounter() 6067 </pre> 6068 6069 <h5>Overview:</h5> 6070 <p>The '<tt>llvm.readcyclecounter</tt>' intrinsic provides access to the cycle 6071 counter register (or similar low latency, high accuracy clocks) on those 6072 targets that support it. On X86, it should map to RDTSC. On Alpha, it 6073 should map to RPCC. As the backing counters overflow quickly (on the order 6074 of 9 seconds on alpha), this should only be used for small timings.</p> 6075 6076 <h5>Semantics:</h5> 6077 <p>When directly supported, reading the cycle counter should not modify any 6078 memory. Implementations are allowed to either return a application specific 6079 value or a system wide value. On backends without support, this is lowered 6080 to a constant 0.</p> 6081 6082 </div> 6083 6084 </div> 6085 6086 <!-- ======================================================================= --> 6087 <h3> 6088 <a name="int_libc">Standard C Library Intrinsics</a> 6089 </h3> 6090 6091 <div> 6092 6093 <p>LLVM provides intrinsics for a few important standard C library functions. 6094 These intrinsics allow source-language front-ends to pass information about 6095 the alignment of the pointer arguments to the code generator, providing 6096 opportunity for more efficient code generation.</p> 6097 6098 <!-- _______________________________________________________________________ --> 6099 <h4> 6100 <a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a> 6101 </h4> 6102 6103 <div> 6104 6105 <h5>Syntax:</h5> 6106 <p>This is an overloaded intrinsic. You can use <tt>llvm.memcpy</tt> on any 6107 integer bit width and for different address spaces. Not all targets support 6108 all bit widths however.</p> 6109 6110 <pre> 6111 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* <dest>, i8* <src>, 6112 i32 <len>, i32 <align>, i1 <isvolatile>) 6113 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* <dest>, i8* <src>, 6114 i64 <len>, i32 <align>, i1 <isvolatile>) 6115 </pre> 6116 6117 <h5>Overview:</h5> 6118 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the 6119 source location to the destination location.</p> 6120 6121 <p>Note that, unlike the standard libc function, the <tt>llvm.memcpy.*</tt> 6122 intrinsics do not return a value, takes extra alignment/isvolatile arguments 6123 and the pointers can be in specified address spaces.</p> 6124 6125 <h5>Arguments:</h5> 6126 6127 <p>The first argument is a pointer to the destination, the second is a pointer 6128 to the source. The third argument is an integer argument specifying the 6129 number of bytes to copy, the fourth argument is the alignment of the 6130 source and destination locations, and the fifth is a boolean indicating a 6131 volatile access.</p> 6132 6133 <p>If the call to this intrinsic has an alignment value that is not 0 or 1, 6134 then the caller guarantees that both the source and destination pointers are 6135 aligned to that boundary.</p> 6136 6137 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the 6138 <tt>llvm.memcpy</tt> call is a <a href="#volatile">volatile operation</a>. 6139 The detailed access behavior is not very cleanly specified and it is unwise 6140 to depend on it.</p> 6141 6142 <h5>Semantics:</h5> 6143 6144 <p>The '<tt>llvm.memcpy.*</tt>' intrinsics copy a block of memory from the 6145 source location to the destination location, which are not allowed to 6146 overlap. It copies "len" bytes of memory over. If the argument is known to 6147 be aligned to some boundary, this can be specified as the fourth argument, 6148 otherwise it should be set to 0 or 1.</p> 6149 6150 </div> 6151 6152 <!-- _______________________________________________________________________ --> 6153 <h4> 6154 <a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a> 6155 </h4> 6156 6157 <div> 6158 6159 <h5>Syntax:</h5> 6160 <p>This is an overloaded intrinsic. You can use llvm.memmove on any integer bit 6161 width and for different address space. Not all targets support all bit 6162 widths however.</p> 6163 6164 <pre> 6165 declare void @llvm.memmove.p0i8.p0i8.i32(i8* <dest>, i8* <src>, 6166 i32 <len>, i32 <align>, i1 <isvolatile>) 6167 declare void @llvm.memmove.p0i8.p0i8.i64(i8* <dest>, i8* <src>, 6168 i64 <len>, i32 <align>, i1 <isvolatile>) 6169 </pre> 6170 6171 <h5>Overview:</h5> 6172 <p>The '<tt>llvm.memmove.*</tt>' intrinsics move a block of memory from the 6173 source location to the destination location. It is similar to the 6174 '<tt>llvm.memcpy</tt>' intrinsic but allows the two memory locations to 6175 overlap.</p> 6176 6177 <p>Note that, unlike the standard libc function, the <tt>llvm.memmove.*</tt> 6178 intrinsics do not return a value, takes extra alignment/isvolatile arguments 6179 and the pointers can be in specified address spaces.</p> 6180 6181 <h5>Arguments:</h5> 6182 6183 <p>The first argument is a pointer to the destination, the second is a pointer 6184 to the source. The third argument is an integer argument specifying the 6185 number of bytes to copy, the fourth argument is the alignment of the 6186 source and destination locations, and the fifth is a boolean indicating a 6187 volatile access.</p> 6188 6189 <p>If the call to this intrinsic has an alignment value that is not 0 or 1, 6190 then the caller guarantees that the source and destination pointers are 6191 aligned to that boundary.</p> 6192 6193 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the 6194 <tt>llvm.memmove</tt> call is a <a href="#volatile">volatile operation</a>. 6195 The detailed access behavior is not very cleanly specified and it is unwise 6196 to depend on it.</p> 6197 6198 <h5>Semantics:</h5> 6199 6200 <p>The '<tt>llvm.memmove.*</tt>' intrinsics copy a block of memory from the 6201 source location to the destination location, which may overlap. It copies 6202 "len" bytes of memory over. If the argument is known to be aligned to some 6203 boundary, this can be specified as the fourth argument, otherwise it should 6204 be set to 0 or 1.</p> 6205 6206 </div> 6207 6208 <!-- _______________________________________________________________________ --> 6209 <h4> 6210 <a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a> 6211 </h4> 6212 6213 <div> 6214 6215 <h5>Syntax:</h5> 6216 <p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit 6217 width and for different address spaces. However, not all targets support all 6218 bit widths.</p> 6219 6220 <pre> 6221 declare void @llvm.memset.p0i8.i32(i8* <dest>, i8 <val>, 6222 i32 <len>, i32 <align>, i1 <isvolatile>) 6223 declare void @llvm.memset.p0i8.i64(i8* <dest>, i8 <val>, 6224 i64 <len>, i32 <align>, i1 <isvolatile>) 6225 </pre> 6226 6227 <h5>Overview:</h5> 6228 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill a block of memory with a 6229 particular byte value.</p> 6230 6231 <p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt> 6232 intrinsic does not return a value and takes extra alignment/volatile 6233 arguments. Also, the destination can be in an arbitrary address space.</p> 6234 6235 <h5>Arguments:</h5> 6236 <p>The first argument is a pointer to the destination to fill, the second is the 6237 byte value with which to fill it, the third argument is an integer argument 6238 specifying the number of bytes to fill, and the fourth argument is the known 6239 alignment of the destination location.</p> 6240 6241 <p>If the call to this intrinsic has an alignment value that is not 0 or 1, 6242 then the caller guarantees that the destination pointer is aligned to that 6243 boundary.</p> 6244 6245 <p>If the <tt>isvolatile</tt> parameter is <tt>true</tt>, the 6246 <tt>llvm.memset</tt> call is a <a href="#volatile">volatile operation</a>. 6247 The detailed access behavior is not very cleanly specified and it is unwise 6248 to depend on it.</p> 6249 6250 <h5>Semantics:</h5> 6251 <p>The '<tt>llvm.memset.*</tt>' intrinsics fill "len" bytes of memory starting 6252 at the destination location. If the argument is known to be aligned to some 6253 boundary, this can be specified as the fourth argument, otherwise it should 6254 be set to 0 or 1.</p> 6255 6256 </div> 6257 6258 <!-- _______________________________________________________________________ --> 6259 <h4> 6260 <a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a> 6261 </h4> 6262 6263 <div> 6264 6265 <h5>Syntax:</h5> 6266 <p>This is an overloaded intrinsic. You can use <tt>llvm.sqrt</tt> on any 6267 floating point or vector of floating point type. Not all targets support all 6268 types however.</p> 6269 6270 <pre> 6271 declare float @llvm.sqrt.f32(float %Val) 6272 declare double @llvm.sqrt.f64(double %Val) 6273 declare x86_fp80 @llvm.sqrt.f80(x86_fp80 %Val) 6274 declare fp128 @llvm.sqrt.f128(fp128 %Val) 6275 declare ppc_fp128 @llvm.sqrt.ppcf128(ppc_fp128 %Val) 6276 </pre> 6277 6278 <h5>Overview:</h5> 6279 <p>The '<tt>llvm.sqrt</tt>' intrinsics return the sqrt of the specified operand, 6280 returning the same value as the libm '<tt>sqrt</tt>' functions would. 6281 Unlike <tt>sqrt</tt> in libm, however, <tt>llvm.sqrt</tt> has undefined 6282 behavior for negative numbers other than -0.0 (which allows for better 6283 optimization, because there is no need to worry about errno being 6284 set). <tt>llvm.sqrt(-0.0)</tt> is defined to return -0.0 like IEEE sqrt.</p> 6285 6286 <h5>Arguments:</h5> 6287 <p>The argument and return value are floating point numbers of the same 6288 type.</p> 6289 6290 <h5>Semantics:</h5> 6291 <p>This function returns the sqrt of the specified operand if it is a 6292 nonnegative floating point number.</p> 6293 6294 </div> 6295 6296 <!-- _______________________________________________________________________ --> 6297 <h4> 6298 <a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a> 6299 </h4> 6300 6301 <div> 6302 6303 <h5>Syntax:</h5> 6304 <p>This is an overloaded intrinsic. You can use <tt>llvm.powi</tt> on any 6305 floating point or vector of floating point type. Not all targets support all 6306 types however.</p> 6307 6308 <pre> 6309 declare float @llvm.powi.f32(float %Val, i32 %power) 6310 declare double @llvm.powi.f64(double %Val, i32 %power) 6311 declare x86_fp80 @llvm.powi.f80(x86_fp80 %Val, i32 %power) 6312 declare fp128 @llvm.powi.f128(fp128 %Val, i32 %power) 6313 declare ppc_fp128 @llvm.powi.ppcf128(ppc_fp128 %Val, i32 %power) 6314 </pre> 6315 6316 <h5>Overview:</h5> 6317 <p>The '<tt>llvm.powi.*</tt>' intrinsics return the first operand raised to the 6318 specified (positive or negative) power. The order of evaluation of 6319 multiplications is not defined. When a vector of floating point type is 6320 used, the second argument remains a scalar integer value.</p> 6321 6322 <h5>Arguments:</h5> 6323 <p>The second argument is an integer power, and the first is a value to raise to 6324 that power.</p> 6325 6326 <h5>Semantics:</h5> 6327 <p>This function returns the first value raised to the second power with an 6328 unspecified sequence of rounding operations.</p> 6329 6330 </div> 6331 6332 <!-- _______________________________________________________________________ --> 6333 <h4> 6334 <a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a> 6335 </h4> 6336 6337 <div> 6338 6339 <h5>Syntax:</h5> 6340 <p>This is an overloaded intrinsic. You can use <tt>llvm.sin</tt> on any 6341 floating point or vector of floating point type. Not all targets support all 6342 types however.</p> 6343 6344 <pre> 6345 declare float @llvm.sin.f32(float %Val) 6346 declare double @llvm.sin.f64(double %Val) 6347 declare x86_fp80 @llvm.sin.f80(x86_fp80 %Val) 6348 declare fp128 @llvm.sin.f128(fp128 %Val) 6349 declare ppc_fp128 @llvm.sin.ppcf128(ppc_fp128 %Val) 6350 </pre> 6351 6352 <h5>Overview:</h5> 6353 <p>The '<tt>llvm.sin.*</tt>' intrinsics return the sine of the operand.</p> 6354 6355 <h5>Arguments:</h5> 6356 <p>The argument and return value are floating point numbers of the same 6357 type.</p> 6358 6359 <h5>Semantics:</h5> 6360 <p>This function returns the sine of the specified operand, returning the same 6361 values as the libm <tt>sin</tt> functions would, and handles error conditions 6362 in the same way.</p> 6363 6364 </div> 6365 6366 <!-- _______________________________________________________________________ --> 6367 <h4> 6368 <a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a> 6369 </h4> 6370 6371 <div> 6372 6373 <h5>Syntax:</h5> 6374 <p>This is an overloaded intrinsic. You can use <tt>llvm.cos</tt> on any 6375 floating point or vector of floating point type. Not all targets support all 6376 types however.</p> 6377 6378 <pre> 6379 declare float @llvm.cos.f32(float %Val) 6380 declare double @llvm.cos.f64(double %Val) 6381 declare x86_fp80 @llvm.cos.f80(x86_fp80 %Val) 6382 declare fp128 @llvm.cos.f128(fp128 %Val) 6383 declare ppc_fp128 @llvm.cos.ppcf128(ppc_fp128 %Val) 6384 </pre> 6385 6386 <h5>Overview:</h5> 6387 <p>The '<tt>llvm.cos.*</tt>' intrinsics return the cosine of the operand.</p> 6388 6389 <h5>Arguments:</h5> 6390 <p>The argument and return value are floating point numbers of the same 6391 type.</p> 6392 6393 <h5>Semantics:</h5> 6394 <p>This function returns the cosine of the specified operand, returning the same 6395 values as the libm <tt>cos</tt> functions would, and handles error conditions 6396 in the same way.</p> 6397 6398 </div> 6399 6400 <!-- _______________________________________________________________________ --> 6401 <h4> 6402 <a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a> 6403 </h4> 6404 6405 <div> 6406 6407 <h5>Syntax:</h5> 6408 <p>This is an overloaded intrinsic. You can use <tt>llvm.pow</tt> on any 6409 floating point or vector of floating point type. Not all targets support all 6410 types however.</p> 6411 6412 <pre> 6413 declare float @llvm.pow.f32(float %Val, float %Power) 6414 declare double @llvm.pow.f64(double %Val, double %Power) 6415 declare x86_fp80 @llvm.pow.f80(x86_fp80 %Val, x86_fp80 %Power) 6416 declare fp128 @llvm.pow.f128(fp128 %Val, fp128 %Power) 6417 declare ppc_fp128 @llvm.pow.ppcf128(ppc_fp128 %Val, ppc_fp128 Power) 6418 </pre> 6419 6420 <h5>Overview:</h5> 6421 <p>The '<tt>llvm.pow.*</tt>' intrinsics return the first operand raised to the 6422 specified (positive or negative) power.</p> 6423 6424 <h5>Arguments:</h5> 6425 <p>The second argument is a floating point power, and the first is a value to 6426 raise to that power.</p> 6427 6428 <h5>Semantics:</h5> 6429 <p>This function returns the first value raised to the second power, returning 6430 the same values as the libm <tt>pow</tt> functions would, and handles error 6431 conditions in the same way.</p> 6432 6433 </div> 6434 6435 </div> 6436 6437 <!-- _______________________________________________________________________ --> 6438 <h4> 6439 <a name="int_exp">'<tt>llvm.exp.*</tt>' Intrinsic</a> 6440 </h4> 6441 6442 <div> 6443 6444 <h5>Syntax:</h5> 6445 <p>This is an overloaded intrinsic. You can use <tt>llvm.exp</tt> on any 6446 floating point or vector of floating point type. Not all targets support all 6447 types however.</p> 6448 6449 <pre> 6450 declare float @llvm.exp.f32(float %Val) 6451 declare double @llvm.exp.f64(double %Val) 6452 declare x86_fp80 @llvm.exp.f80(x86_fp80 %Val) 6453 declare fp128 @llvm.exp.f128(fp128 %Val) 6454 declare ppc_fp128 @llvm.exp.ppcf128(ppc_fp128 %Val) 6455 </pre> 6456 6457 <h5>Overview:</h5> 6458 <p>The '<tt>llvm.exp.*</tt>' intrinsics perform the exp function.</p> 6459 6460 <h5>Arguments:</h5> 6461 <p>The argument and return value are floating point numbers of the same 6462 type.</p> 6463 6464 <h5>Semantics:</h5> 6465 <p>This function returns the same values as the libm <tt>exp</tt> functions 6466 would, and handles error conditions in the same way.</p> 6467 6468 </div> 6469 6470 <!-- _______________________________________________________________________ --> 6471 <h4> 6472 <a name="int_log">'<tt>llvm.log.*</tt>' Intrinsic</a> 6473 </h4> 6474 6475 <div> 6476 6477 <h5>Syntax:</h5> 6478 <p>This is an overloaded intrinsic. You can use <tt>llvm.log</tt> on any 6479 floating point or vector of floating point type. Not all targets support all 6480 types however.</p> 6481 6482 <pre> 6483 declare float @llvm.log.f32(float %Val) 6484 declare double @llvm.log.f64(double %Val) 6485 declare x86_fp80 @llvm.log.f80(x86_fp80 %Val) 6486 declare fp128 @llvm.log.f128(fp128 %Val) 6487 declare ppc_fp128 @llvm.log.ppcf128(ppc_fp128 %Val) 6488 </pre> 6489 6490 <h5>Overview:</h5> 6491 <p>The '<tt>llvm.log.*</tt>' intrinsics perform the log function.</p> 6492 6493 <h5>Arguments:</h5> 6494 <p>The argument and return value are floating point numbers of the same 6495 type.</p> 6496 6497 <h5>Semantics:</h5> 6498 <p>This function returns the same values as the libm <tt>log</tt> functions 6499 would, and handles error conditions in the same way.</p> 6500 6501 <h4> 6502 <a name="int_fma">'<tt>llvm.fma.*</tt>' Intrinsic</a> 6503 </h4> 6504 6505 <div> 6506 6507 <h5>Syntax:</h5> 6508 <p>This is an overloaded intrinsic. You can use <tt>llvm.fma</tt> on any 6509 floating point or vector of floating point type. Not all targets support all 6510 types however.</p> 6511 6512 <pre> 6513 declare float @llvm.fma.f32(float %a, float %b, float %c) 6514 declare double @llvm.fma.f64(double %a, double %b, double %c) 6515 declare x86_fp80 @llvm.fma.f80(x86_fp80 %a, x86_fp80 %b, x86_fp80 %c) 6516 declare fp128 @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c) 6517 declare ppc_fp128 @llvm.fma.ppcf128(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c) 6518 </pre> 6519 6520 <h5>Overview:</h5> 6521 <p>The '<tt>llvm.fma.*</tt>' intrinsics perform the fused multiply-add 6522 operation.</p> 6523 6524 <h5>Arguments:</h5> 6525 <p>The argument and return value are floating point numbers of the same 6526 type.</p> 6527 6528 <h5>Semantics:</h5> 6529 <p>This function returns the same values as the libm <tt>fma</tt> functions 6530 would.</p> 6531 6532 </div> 6533 6534 <!-- ======================================================================= --> 6535 <h3> 6536 <a name="int_manip">Bit Manipulation Intrinsics</a> 6537 </h3> 6538 6539 <div> 6540 6541 <p>LLVM provides intrinsics for a few important bit manipulation operations. 6542 These allow efficient code generation for some algorithms.</p> 6543 6544 <!-- _______________________________________________________________________ --> 6545 <h4> 6546 <a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a> 6547 </h4> 6548 6549 <div> 6550 6551 <h5>Syntax:</h5> 6552 <p>This is an overloaded intrinsic function. You can use bswap on any integer 6553 type that is an even number of bytes (i.e. BitWidth % 16 == 0).</p> 6554 6555 <pre> 6556 declare i16 @llvm.bswap.i16(i16 <id>) 6557 declare i32 @llvm.bswap.i32(i32 <id>) 6558 declare i64 @llvm.bswap.i64(i64 <id>) 6559 </pre> 6560 6561 <h5>Overview:</h5> 6562 <p>The '<tt>llvm.bswap</tt>' family of intrinsics is used to byte swap integer 6563 values with an even number of bytes (positive multiple of 16 bits). These 6564 are useful for performing operations on data that is not in the target's 6565 native byte order.</p> 6566 6567 <h5>Semantics:</h5> 6568 <p>The <tt>llvm.bswap.i16</tt> intrinsic returns an i16 value that has the high 6569 and low byte of the input i16 swapped. Similarly, 6570 the <tt>llvm.bswap.i32</tt> intrinsic returns an i32 value that has the four 6571 bytes of the input i32 swapped, so that if the input bytes are numbered 0, 1, 6572 2, 3 then the returned i32 will have its bytes in 3, 2, 1, 0 order. 6573 The <tt>llvm.bswap.i48</tt>, <tt>llvm.bswap.i64</tt> and other intrinsics 6574 extend this concept to additional even-byte lengths (6 bytes, 8 bytes and 6575 more, respectively).</p> 6576 6577 </div> 6578 6579 <!-- _______________________________________________________________________ --> 6580 <h4> 6581 <a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a> 6582 </h4> 6583 6584 <div> 6585 6586 <h5>Syntax:</h5> 6587 <p>This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit 6588 width, or on any vector with integer elements. Not all targets support all 6589 bit widths or vector types, however.</p> 6590 6591 <pre> 6592 declare i8 @llvm.ctpop.i8(i8 <src>) 6593 declare i16 @llvm.ctpop.i16(i16 <src>) 6594 declare i32 @llvm.ctpop.i32(i32 <src>) 6595 declare i64 @llvm.ctpop.i64(i64 <src>) 6596 declare i256 @llvm.ctpop.i256(i256 <src>) 6597 declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32> <src>) 6598 </pre> 6599 6600 <h5>Overview:</h5> 6601 <p>The '<tt>llvm.ctpop</tt>' family of intrinsics counts the number of bits set 6602 in a value.</p> 6603 6604 <h5>Arguments:</h5> 6605 <p>The only argument is the value to be counted. The argument may be of any 6606 integer type, or a vector with integer elements. 6607 The return type must match the argument type.</p> 6608 6609 <h5>Semantics:</h5> 6610 <p>The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable, or within each 6611 element of a vector.</p> 6612 6613 </div> 6614 6615 <!-- _______________________________________________________________________ --> 6616 <h4> 6617 <a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a> 6618 </h4> 6619 6620 <div> 6621 6622 <h5>Syntax:</h5> 6623 <p>This is an overloaded intrinsic. You can use <tt>llvm.ctlz</tt> on any 6624 integer bit width, or any vector whose elements are integers. Not all 6625 targets support all bit widths or vector types, however.</p> 6626 6627 <pre> 6628 declare i8 @llvm.ctlz.i8 (i8 <src>) 6629 declare i16 @llvm.ctlz.i16(i16 <src>) 6630 declare i32 @llvm.ctlz.i32(i32 <src>) 6631 declare i64 @llvm.ctlz.i64(i64 <src>) 6632 declare i256 @llvm.ctlz.i256(i256 <src>) 6633 declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32> <src;gt) 6634 </pre> 6635 6636 <h5>Overview:</h5> 6637 <p>The '<tt>llvm.ctlz</tt>' family of intrinsic functions counts the number of 6638 leading zeros in a variable.</p> 6639 6640 <h5>Arguments:</h5> 6641 <p>The only argument is the value to be counted. The argument may be of any 6642 integer type, or any vector type with integer element type. 6643 The return type must match the argument type.</p> 6644 6645 <h5>Semantics:</h5> 6646 <p>The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant) 6647 zeros in a variable, or within each element of the vector if the operation 6648 is of vector type. If the src == 0 then the result is the size in bits of 6649 the type of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.</p> 6650 6651 </div> 6652 6653 <!-- _______________________________________________________________________ --> 6654 <h4> 6655 <a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a> 6656 </h4> 6657 6658 <div> 6659 6660 <h5>Syntax:</h5> 6661 <p>This is an overloaded intrinsic. You can use <tt>llvm.cttz</tt> on any 6662 integer bit width, or any vector of integer elements. Not all targets 6663 support all bit widths or vector types, however.</p> 6664 6665 <pre> 6666 declare i8 @llvm.cttz.i8 (i8 <src>) 6667 declare i16 @llvm.cttz.i16(i16 <src>) 6668 declare i32 @llvm.cttz.i32(i32 <src>) 6669 declare i64 @llvm.cttz.i64(i64 <src>) 6670 declare i256 @llvm.cttz.i256(i256 <src>) 6671 declase <2 x i32> @llvm.cttz.v2i32(<2 x i32> <src>) 6672 </pre> 6673 6674 <h5>Overview:</h5> 6675 <p>The '<tt>llvm.cttz</tt>' family of intrinsic functions counts the number of 6676 trailing zeros.</p> 6677 6678 <h5>Arguments:</h5> 6679 <p>The only argument is the value to be counted. The argument may be of any 6680 integer type, or a vectory with integer element type.. The return type 6681 must match the argument type.</p> 6682 6683 <h5>Semantics:</h5> 6684 <p>The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant) 6685 zeros in a variable, or within each element of a vector. 6686 If the src == 0 then the result is the size in bits of 6687 the type of src. For example, <tt>llvm.cttz(2) = 1</tt>.</p> 6688 6689 </div> 6690 6691 </div> 6692 6693 <!-- ======================================================================= --> 6694 <h3> 6695 <a name="int_overflow">Arithmetic with Overflow Intrinsics</a> 6696 </h3> 6697 6698 <div> 6699 6700 <p>LLVM provides intrinsics for some arithmetic with overflow operations.</p> 6701 6702 <!-- _______________________________________________________________________ --> 6703 <h4> 6704 <a name="int_sadd_overflow"> 6705 '<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics 6706 </a> 6707 </h4> 6708 6709 <div> 6710 6711 <h5>Syntax:</h5> 6712 <p>This is an overloaded intrinsic. You can use <tt>llvm.sadd.with.overflow</tt> 6713 on any integer bit width.</p> 6714 6715 <pre> 6716 declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b) 6717 declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) 6718 declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b) 6719 </pre> 6720 6721 <h5>Overview:</h5> 6722 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform 6723 a signed addition of the two arguments, and indicate whether an overflow 6724 occurred during the signed summation.</p> 6725 6726 <h5>Arguments:</h5> 6727 <p>The arguments (%a and %b) and the first element of the result structure may 6728 be of integer types of any bit width, but they must have the same bit 6729 width. The second element of the result structure must be of 6730 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6731 undergo signed addition.</p> 6732 6733 <h5>Semantics:</h5> 6734 <p>The '<tt>llvm.sadd.with.overflow</tt>' family of intrinsic functions perform 6735 a signed addition of the two variables. They return a structure — the 6736 first element of which is the signed summation, and the second element of 6737 which is a bit specifying if the signed summation resulted in an 6738 overflow.</p> 6739 6740 <h5>Examples:</h5> 6741 <pre> 6742 %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) 6743 %sum = extractvalue {i32, i1} %res, 0 6744 %obit = extractvalue {i32, i1} %res, 1 6745 br i1 %obit, label %overflow, label %normal 6746 </pre> 6747 6748 </div> 6749 6750 <!-- _______________________________________________________________________ --> 6751 <h4> 6752 <a name="int_uadd_overflow"> 6753 '<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics 6754 </a> 6755 </h4> 6756 6757 <div> 6758 6759 <h5>Syntax:</h5> 6760 <p>This is an overloaded intrinsic. You can use <tt>llvm.uadd.with.overflow</tt> 6761 on any integer bit width.</p> 6762 6763 <pre> 6764 declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b) 6765 declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) 6766 declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b) 6767 </pre> 6768 6769 <h5>Overview:</h5> 6770 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform 6771 an unsigned addition of the two arguments, and indicate whether a carry 6772 occurred during the unsigned summation.</p> 6773 6774 <h5>Arguments:</h5> 6775 <p>The arguments (%a and %b) and the first element of the result structure may 6776 be of integer types of any bit width, but they must have the same bit 6777 width. The second element of the result structure must be of 6778 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6779 undergo unsigned addition.</p> 6780 6781 <h5>Semantics:</h5> 6782 <p>The '<tt>llvm.uadd.with.overflow</tt>' family of intrinsic functions perform 6783 an unsigned addition of the two arguments. They return a structure — 6784 the first element of which is the sum, and the second element of which is a 6785 bit specifying if the unsigned summation resulted in a carry.</p> 6786 6787 <h5>Examples:</h5> 6788 <pre> 6789 %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) 6790 %sum = extractvalue {i32, i1} %res, 0 6791 %obit = extractvalue {i32, i1} %res, 1 6792 br i1 %obit, label %carry, label %normal 6793 </pre> 6794 6795 </div> 6796 6797 <!-- _______________________________________________________________________ --> 6798 <h4> 6799 <a name="int_ssub_overflow"> 6800 '<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics 6801 </a> 6802 </h4> 6803 6804 <div> 6805 6806 <h5>Syntax:</h5> 6807 <p>This is an overloaded intrinsic. You can use <tt>llvm.ssub.with.overflow</tt> 6808 on any integer bit width.</p> 6809 6810 <pre> 6811 declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b) 6812 declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) 6813 declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) 6814 </pre> 6815 6816 <h5>Overview:</h5> 6817 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform 6818 a signed subtraction of the two arguments, and indicate whether an overflow 6819 occurred during the signed subtraction.</p> 6820 6821 <h5>Arguments:</h5> 6822 <p>The arguments (%a and %b) and the first element of the result structure may 6823 be of integer types of any bit width, but they must have the same bit 6824 width. The second element of the result structure must be of 6825 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6826 undergo signed subtraction.</p> 6827 6828 <h5>Semantics:</h5> 6829 <p>The '<tt>llvm.ssub.with.overflow</tt>' family of intrinsic functions perform 6830 a signed subtraction of the two arguments. They return a structure — 6831 the first element of which is the subtraction, and the second element of 6832 which is a bit specifying if the signed subtraction resulted in an 6833 overflow.</p> 6834 6835 <h5>Examples:</h5> 6836 <pre> 6837 %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) 6838 %sum = extractvalue {i32, i1} %res, 0 6839 %obit = extractvalue {i32, i1} %res, 1 6840 br i1 %obit, label %overflow, label %normal 6841 </pre> 6842 6843 </div> 6844 6845 <!-- _______________________________________________________________________ --> 6846 <h4> 6847 <a name="int_usub_overflow"> 6848 '<tt>llvm.usub.with.overflow.*</tt>' Intrinsics 6849 </a> 6850 </h4> 6851 6852 <div> 6853 6854 <h5>Syntax:</h5> 6855 <p>This is an overloaded intrinsic. You can use <tt>llvm.usub.with.overflow</tt> 6856 on any integer bit width.</p> 6857 6858 <pre> 6859 declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b) 6860 declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) 6861 declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b) 6862 </pre> 6863 6864 <h5>Overview:</h5> 6865 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform 6866 an unsigned subtraction of the two arguments, and indicate whether an 6867 overflow occurred during the unsigned subtraction.</p> 6868 6869 <h5>Arguments:</h5> 6870 <p>The arguments (%a and %b) and the first element of the result structure may 6871 be of integer types of any bit width, but they must have the same bit 6872 width. The second element of the result structure must be of 6873 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6874 undergo unsigned subtraction.</p> 6875 6876 <h5>Semantics:</h5> 6877 <p>The '<tt>llvm.usub.with.overflow</tt>' family of intrinsic functions perform 6878 an unsigned subtraction of the two arguments. They return a structure — 6879 the first element of which is the subtraction, and the second element of 6880 which is a bit specifying if the unsigned subtraction resulted in an 6881 overflow.</p> 6882 6883 <h5>Examples:</h5> 6884 <pre> 6885 %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) 6886 %sum = extractvalue {i32, i1} %res, 0 6887 %obit = extractvalue {i32, i1} %res, 1 6888 br i1 %obit, label %overflow, label %normal 6889 </pre> 6890 6891 </div> 6892 6893 <!-- _______________________________________________________________________ --> 6894 <h4> 6895 <a name="int_smul_overflow"> 6896 '<tt>llvm.smul.with.overflow.*</tt>' Intrinsics 6897 </a> 6898 </h4> 6899 6900 <div> 6901 6902 <h5>Syntax:</h5> 6903 <p>This is an overloaded intrinsic. You can use <tt>llvm.smul.with.overflow</tt> 6904 on any integer bit width.</p> 6905 6906 <pre> 6907 declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b) 6908 declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) 6909 declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b) 6910 </pre> 6911 6912 <h5>Overview:</h5> 6913 6914 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform 6915 a signed multiplication of the two arguments, and indicate whether an 6916 overflow occurred during the signed multiplication.</p> 6917 6918 <h5>Arguments:</h5> 6919 <p>The arguments (%a and %b) and the first element of the result structure may 6920 be of integer types of any bit width, but they must have the same bit 6921 width. The second element of the result structure must be of 6922 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6923 undergo signed multiplication.</p> 6924 6925 <h5>Semantics:</h5> 6926 <p>The '<tt>llvm.smul.with.overflow</tt>' family of intrinsic functions perform 6927 a signed multiplication of the two arguments. They return a structure — 6928 the first element of which is the multiplication, and the second element of 6929 which is a bit specifying if the signed multiplication resulted in an 6930 overflow.</p> 6931 6932 <h5>Examples:</h5> 6933 <pre> 6934 %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) 6935 %sum = extractvalue {i32, i1} %res, 0 6936 %obit = extractvalue {i32, i1} %res, 1 6937 br i1 %obit, label %overflow, label %normal 6938 </pre> 6939 6940 </div> 6941 6942 <!-- _______________________________________________________________________ --> 6943 <h4> 6944 <a name="int_umul_overflow"> 6945 '<tt>llvm.umul.with.overflow.*</tt>' Intrinsics 6946 </a> 6947 </h4> 6948 6949 <div> 6950 6951 <h5>Syntax:</h5> 6952 <p>This is an overloaded intrinsic. You can use <tt>llvm.umul.with.overflow</tt> 6953 on any integer bit width.</p> 6954 6955 <pre> 6956 declare {i16, i1} @llvm.umul.with.overflow.i16(i16 %a, i16 %b) 6957 declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b) 6958 declare {i64, i1} @llvm.umul.with.overflow.i64(i64 %a, i64 %b) 6959 </pre> 6960 6961 <h5>Overview:</h5> 6962 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform 6963 a unsigned multiplication of the two arguments, and indicate whether an 6964 overflow occurred during the unsigned multiplication.</p> 6965 6966 <h5>Arguments:</h5> 6967 <p>The arguments (%a and %b) and the first element of the result structure may 6968 be of integer types of any bit width, but they must have the same bit 6969 width. The second element of the result structure must be of 6970 type <tt>i1</tt>. <tt>%a</tt> and <tt>%b</tt> are the two values that will 6971 undergo unsigned multiplication.</p> 6972 6973 <h5>Semantics:</h5> 6974 <p>The '<tt>llvm.umul.with.overflow</tt>' family of intrinsic functions perform 6975 an unsigned multiplication of the two arguments. They return a structure 6976 — the first element of which is the multiplication, and the second 6977 element of which is a bit specifying if the unsigned multiplication resulted 6978 in an overflow.</p> 6979 6980 <h5>Examples:</h5> 6981 <pre> 6982 %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b) 6983 %sum = extractvalue {i32, i1} %res, 0 6984 %obit = extractvalue {i32, i1} %res, 1 6985 br i1 %obit, label %overflow, label %normal 6986 </pre> 6987 6988 </div> 6989 6990 </div> 6991 6992 <!-- ======================================================================= --> 6993 <h3> 6994 <a name="int_fp16">Half Precision Floating Point Intrinsics</a> 6995 </h3> 6996 6997 <div> 6998 6999 <p>Half precision floating point is a storage-only format. This means that it is 7000 a dense encoding (in memory) but does not support computation in the 7001 format.</p> 7002 7003 <p>This means that code must first load the half-precision floating point 7004 value as an i16, then convert it to float with <a 7005 href="#int_convert_from_fp16"><tt>llvm.convert.from.fp16</tt></a>. 7006 Computation can then be performed on the float value (including extending to 7007 double etc). To store the value back to memory, it is first converted to 7008 float if needed, then converted to i16 with 7009 <a href="#int_convert_to_fp16"><tt>llvm.convert.to.fp16</tt></a>, then 7010 storing as an i16 value.</p> 7011 7012 <!-- _______________________________________________________________________ --> 7013 <h4> 7014 <a name="int_convert_to_fp16"> 7015 '<tt>llvm.convert.to.fp16</tt>' Intrinsic 7016 </a> 7017 </h4> 7018 7019 <div> 7020 7021 <h5>Syntax:</h5> 7022 <pre> 7023 declare i16 @llvm.convert.to.fp16(f32 %a) 7024 </pre> 7025 7026 <h5>Overview:</h5> 7027 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs 7028 a conversion from single precision floating point format to half precision 7029 floating point format.</p> 7030 7031 <h5>Arguments:</h5> 7032 <p>The intrinsic function contains single argument - the value to be 7033 converted.</p> 7034 7035 <h5>Semantics:</h5> 7036 <p>The '<tt>llvm.convert.to.fp16</tt>' intrinsic function performs 7037 a conversion from single precision floating point format to half precision 7038 floating point format. The return value is an <tt>i16</tt> which 7039 contains the converted number.</p> 7040 7041 <h5>Examples:</h5> 7042 <pre> 7043 %res = call i16 @llvm.convert.to.fp16(f32 %a) 7044 store i16 %res, i16* @x, align 2 7045 </pre> 7046 7047 </div> 7048 7049 <!-- _______________________________________________________________________ --> 7050 <h4> 7051 <a name="int_convert_from_fp16"> 7052 '<tt>llvm.convert.from.fp16</tt>' Intrinsic 7053 </a> 7054 </h4> 7055 7056 <div> 7057 7058 <h5>Syntax:</h5> 7059 <pre> 7060 declare f32 @llvm.convert.from.fp16(i16 %a) 7061 </pre> 7062 7063 <h5>Overview:</h5> 7064 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs 7065 a conversion from half precision floating point format to single precision 7066 floating point format.</p> 7067 7068 <h5>Arguments:</h5> 7069 <p>The intrinsic function contains single argument - the value to be 7070 converted.</p> 7071 7072 <h5>Semantics:</h5> 7073 <p>The '<tt>llvm.convert.from.fp16</tt>' intrinsic function performs a 7074 conversion from half single precision floating point format to single 7075 precision floating point format. The input half-float value is represented by 7076 an <tt>i16</tt> value.</p> 7077 7078 <h5>Examples:</h5> 7079 <pre> 7080 %a = load i16* @x, align 2 7081 %res = call f32 @llvm.convert.from.fp16(i16 %a) 7082 </pre> 7083 7084 </div> 7085 7086 </div> 7087 7088 <!-- ======================================================================= --> 7089 <h3> 7090 <a name="int_debugger">Debugger Intrinsics</a> 7091 </h3> 7092 7093 <div> 7094 7095 <p>The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt> 7096 prefix), are described in 7097 the <a href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source 7098 Level Debugging</a> document.</p> 7099 7100 </div> 7101 7102 <!-- ======================================================================= --> 7103 <h3> 7104 <a name="int_eh">Exception Handling Intrinsics</a> 7105 </h3> 7106 7107 <div> 7108 7109 <p>The LLVM exception handling intrinsics (which all start with 7110 <tt>llvm.eh.</tt> prefix), are described in 7111 the <a href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception 7112 Handling</a> document.</p> 7113 7114 </div> 7115 7116 <!-- ======================================================================= --> 7117 <h3> 7118 <a name="int_trampoline">Trampoline Intrinsic</a> 7119 </h3> 7120 7121 <div> 7122 7123 <p>This intrinsic makes it possible to excise one parameter, marked with 7124 the <a href="#nest"><tt>nest</tt></a> attribute, from a function. 7125 The result is a callable 7126 function pointer lacking the nest parameter - the caller does not need to 7127 provide a value for it. Instead, the value to use is stored in advance in a 7128 "trampoline", a block of memory usually allocated on the stack, which also 7129 contains code to splice the nest value into the argument list. This is used 7130 to implement the GCC nested function address extension.</p> 7131 7132 <p>For example, if the function is 7133 <tt>i32 f(i8* nest %c, i32 %x, i32 %y)</tt> then the resulting function 7134 pointer has signature <tt>i32 (i32, i32)*</tt>. It can be created as 7135 follows:</p> 7136 7137 <pre class="doc_code"> 7138 %tramp = alloca [10 x i8], align 4 ; size and alignment only correct for X86 7139 %tramp1 = getelementptr [10 x i8]* %tramp, i32 0, i32 0 7140 %p = call i8* @llvm.init.trampoline(i8* %tramp1, i8* bitcast (i32 (i8* nest , i32, i32)* @f to i8*), i8* %nval) 7141 %fp = bitcast i8* %p to i32 (i32, i32)* 7142 </pre> 7143 7144 <p>The call <tt>%val = call i32 %fp(i32 %x, i32 %y)</tt> is then equivalent 7145 to <tt>%val = call i32 %f(i8* %nval, i32 %x, i32 %y)</tt>.</p> 7146 7147 <!-- _______________________________________________________________________ --> 7148 <h4> 7149 <a name="int_it"> 7150 '<tt>llvm.init.trampoline</tt>' Intrinsic 7151 </a> 7152 </h4> 7153 7154 <div> 7155 7156 <h5>Syntax:</h5> 7157 <pre> 7158 declare i8* @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <nval>) 7159 </pre> 7160 7161 <h5>Overview:</h5> 7162 <p>This fills the memory pointed to by <tt>tramp</tt> with code and returns a 7163 function pointer suitable for executing it.</p> 7164 7165 <h5>Arguments:</h5> 7166 <p>The <tt>llvm.init.trampoline</tt> intrinsic takes three arguments, all 7167 pointers. The <tt>tramp</tt> argument must point to a sufficiently large and 7168 sufficiently aligned block of memory; this memory is written to by the 7169 intrinsic. Note that the size and the alignment are target-specific - LLVM 7170 currently provides no portable way of determining them, so a front-end that 7171 generates this intrinsic needs to have some target-specific knowledge. 7172 The <tt>func</tt> argument must hold a function bitcast to 7173 an <tt>i8*</tt>.</p> 7174 7175 <h5>Semantics:</h5> 7176 <p>The block of memory pointed to by <tt>tramp</tt> is filled with target 7177 dependent code, turning it into a function. A pointer to this function is 7178 returned, but needs to be bitcast to an <a href="#int_trampoline">appropriate 7179 function pointer type</a> before being called. The new function's signature 7180 is the same as that of <tt>func</tt> with any arguments marked with 7181 the <tt>nest</tt> attribute removed. At most one such <tt>nest</tt> argument 7182 is allowed, and it must be of pointer type. Calling the new function is 7183 equivalent to calling <tt>func</tt> with the same argument list, but 7184 with <tt>nval</tt> used for the missing <tt>nest</tt> argument. If, after 7185 calling <tt>llvm.init.trampoline</tt>, the memory pointed to 7186 by <tt>tramp</tt> is modified, then the effect of any later call to the 7187 returned function pointer is undefined.</p> 7188 7189 </div> 7190 7191 </div> 7192 7193 <!-- ======================================================================= --> 7194 <h3> 7195 <a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a> 7196 </h3> 7197 7198 <div> 7199 7200 <p>These intrinsic functions expand the "universal IR" of LLVM to represent 7201 hardware constructs for atomic operations and memory synchronization. This 7202 provides an interface to the hardware, not an interface to the programmer. It 7203 is aimed at a low enough level to allow any programming models or APIs 7204 (Application Programming Interfaces) which need atomic behaviors to map 7205 cleanly onto it. It is also modeled primarily on hardware behavior. Just as 7206 hardware provides a "universal IR" for source languages, it also provides a 7207 starting point for developing a "universal" atomic operation and 7208 synchronization IR.</p> 7209 7210 <p>These do <em>not</em> form an API such as high-level threading libraries, 7211 software transaction memory systems, atomic primitives, and intrinsic 7212 functions as found in BSD, GNU libc, atomic_ops, APR, and other system and 7213 application libraries. The hardware interface provided by LLVM should allow 7214 a clean implementation of all of these APIs and parallel programming models. 7215 No one model or paradigm should be selected above others unless the hardware 7216 itself ubiquitously does so.</p> 7217 7218 <!-- _______________________________________________________________________ --> 7219 <h4> 7220 <a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a> 7221 </h4> 7222 7223 <div> 7224 <h5>Syntax:</h5> 7225 <pre> 7226 declare void @llvm.memory.barrier(i1 <ll>, i1 <ls>, i1 <sl>, i1 <ss>, i1 <device>) 7227 </pre> 7228 7229 <h5>Overview:</h5> 7230 <p>The <tt>llvm.memory.barrier</tt> intrinsic guarantees ordering between 7231 specific pairs of memory access types.</p> 7232 7233 <h5>Arguments:</h5> 7234 <p>The <tt>llvm.memory.barrier</tt> intrinsic requires five boolean arguments. 7235 The first four arguments enables a specific barrier as listed below. The 7236 fifth argument specifies that the barrier applies to io or device or uncached 7237 memory.</p> 7238 7239 <ul> 7240 <li><tt>ll</tt>: load-load barrier</li> 7241 <li><tt>ls</tt>: load-store barrier</li> 7242 <li><tt>sl</tt>: store-load barrier</li> 7243 <li><tt>ss</tt>: store-store barrier</li> 7244 <li><tt>device</tt>: barrier applies to device and uncached memory also.</li> 7245 </ul> 7246 7247 <h5>Semantics:</h5> 7248 <p>This intrinsic causes the system to enforce some ordering constraints upon 7249 the loads and stores of the program. This barrier does not 7250 indicate <em>when</em> any events will occur, it only enforces 7251 an <em>order</em> in which they occur. For any of the specified pairs of load 7252 and store operations (f.ex. load-load, or store-load), all of the first 7253 operations preceding the barrier will complete before any of the second 7254 operations succeeding the barrier begin. Specifically the semantics for each 7255 pairing is as follows:</p> 7256 7257 <ul> 7258 <li><tt>ll</tt>: All loads before the barrier must complete before any load 7259 after the barrier begins.</li> 7260 <li><tt>ls</tt>: All loads before the barrier must complete before any 7261 store after the barrier begins.</li> 7262 <li><tt>ss</tt>: All stores before the barrier must complete before any 7263 store after the barrier begins.</li> 7264 <li><tt>sl</tt>: All stores before the barrier must complete before any 7265 load after the barrier begins.</li> 7266 </ul> 7267 7268 <p>These semantics are applied with a logical "and" behavior when more than one 7269 is enabled in a single memory barrier intrinsic.</p> 7270 7271 <p>Backends may implement stronger barriers than those requested when they do 7272 not support as fine grained a barrier as requested. Some architectures do 7273 not need all types of barriers and on such architectures, these become 7274 noops.</p> 7275 7276 <h5>Example:</h5> 7277 <pre> 7278 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7279 %ptr = bitcast i8* %mallocP to i32* 7280 store i32 4, %ptr 7281 7282 %result1 = load i32* %ptr <i>; yields {i32}:result1 = 4</i> 7283 call void @llvm.memory.barrier(i1 false, i1 true, i1 false, i1 false, i1 true) 7284 <i>; guarantee the above finishes</i> 7285 store i32 8, %ptr <i>; before this begins</i> 7286 </pre> 7287 7288 </div> 7289 7290 <!-- _______________________________________________________________________ --> 7291 <h4> 7292 <a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a> 7293 </h4> 7294 7295 <div> 7296 7297 <h5>Syntax:</h5> 7298 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.cmp.swap</tt> on 7299 any integer bit width and for different address spaces. Not all targets 7300 support all bit widths however.</p> 7301 7302 <pre> 7303 declare i8 @llvm.atomic.cmp.swap.i8.p0i8(i8* <ptr>, i8 <cmp>, i8 <val>) 7304 declare i16 @llvm.atomic.cmp.swap.i16.p0i16(i16* <ptr>, i16 <cmp>, i16 <val>) 7305 declare i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* <ptr>, i32 <cmp>, i32 <val>) 7306 declare i64 @llvm.atomic.cmp.swap.i64.p0i64(i64* <ptr>, i64 <cmp>, i64 <val>) 7307 </pre> 7308 7309 <h5>Overview:</h5> 7310 <p>This loads a value in memory and compares it to a given value. If they are 7311 equal, it stores a new value into the memory.</p> 7312 7313 <h5>Arguments:</h5> 7314 <p>The <tt>llvm.atomic.cmp.swap</tt> intrinsic takes three arguments. The result 7315 as well as both <tt>cmp</tt> and <tt>val</tt> must be integer values with the 7316 same bit width. The <tt>ptr</tt> argument must be a pointer to a value of 7317 this integer type. While any bit width integer may be used, targets may only 7318 lower representations they support in hardware.</p> 7319 7320 <h5>Semantics:</h5> 7321 <p>This entire intrinsic must be executed atomically. It first loads the value 7322 in memory pointed to by <tt>ptr</tt> and compares it with the 7323 value <tt>cmp</tt>. If they are equal, <tt>val</tt> is stored into the 7324 memory. The loaded value is yielded in all cases. This provides the 7325 equivalent of an atomic compare-and-swap operation within the SSA 7326 framework.</p> 7327 7328 <h5>Examples:</h5> 7329 <pre> 7330 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7331 %ptr = bitcast i8* %mallocP to i32* 7332 store i32 4, %ptr 7333 7334 %val1 = add i32 4, 4 7335 %result1 = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 4, %val1) 7336 <i>; yields {i32}:result1 = 4</i> 7337 %stored1 = icmp eq i32 %result1, 4 <i>; yields {i1}:stored1 = true</i> 7338 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = 8</i> 7339 7340 %val2 = add i32 1, 1 7341 %result2 = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %ptr, i32 5, %val2) 7342 <i>; yields {i32}:result2 = 8</i> 7343 %stored2 = icmp eq i32 %result2, 5 <i>; yields {i1}:stored2 = false</i> 7344 7345 %memval2 = load i32* %ptr <i>; yields {i32}:memval2 = 8</i> 7346 </pre> 7347 7348 </div> 7349 7350 <!-- _______________________________________________________________________ --> 7351 <h4> 7352 <a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a> 7353 </h4> 7354 7355 <div> 7356 <h5>Syntax:</h5> 7357 7358 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.swap</tt> on any 7359 integer bit width. Not all targets support all bit widths however.</p> 7360 7361 <pre> 7362 declare i8 @llvm.atomic.swap.i8.p0i8(i8* <ptr>, i8 <val>) 7363 declare i16 @llvm.atomic.swap.i16.p0i16(i16* <ptr>, i16 <val>) 7364 declare i32 @llvm.atomic.swap.i32.p0i32(i32* <ptr>, i32 <val>) 7365 declare i64 @llvm.atomic.swap.i64.p0i64(i64* <ptr>, i64 <val>) 7366 </pre> 7367 7368 <h5>Overview:</h5> 7369 <p>This intrinsic loads the value stored in memory at <tt>ptr</tt> and yields 7370 the value from memory. It then stores the value in <tt>val</tt> in the memory 7371 at <tt>ptr</tt>.</p> 7372 7373 <h5>Arguments:</h5> 7374 <p>The <tt>llvm.atomic.swap</tt> intrinsic takes two arguments. Both 7375 the <tt>val</tt> argument and the result must be integers of the same bit 7376 width. The first argument, <tt>ptr</tt>, must be a pointer to a value of this 7377 integer type. The targets may only lower integer representations they 7378 support.</p> 7379 7380 <h5>Semantics:</h5> 7381 <p>This intrinsic loads the value pointed to by <tt>ptr</tt>, yields it, and 7382 stores <tt>val</tt> back into <tt>ptr</tt> atomically. This provides the 7383 equivalent of an atomic swap operation within the SSA framework.</p> 7384 7385 <h5>Examples:</h5> 7386 <pre> 7387 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7388 %ptr = bitcast i8* %mallocP to i32* 7389 store i32 4, %ptr 7390 7391 %val1 = add i32 4, 4 7392 %result1 = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val1) 7393 <i>; yields {i32}:result1 = 4</i> 7394 %stored1 = icmp eq i32 %result1, 4 <i>; yields {i1}:stored1 = true</i> 7395 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = 8</i> 7396 7397 %val2 = add i32 1, 1 7398 %result2 = call i32 @llvm.atomic.swap.i32.p0i32(i32* %ptr, i32 %val2) 7399 <i>; yields {i32}:result2 = 8</i> 7400 7401 %stored2 = icmp eq i32 %result2, 8 <i>; yields {i1}:stored2 = true</i> 7402 %memval2 = load i32* %ptr <i>; yields {i32}:memval2 = 2</i> 7403 </pre> 7404 7405 </div> 7406 7407 <!-- _______________________________________________________________________ --> 7408 <h4> 7409 <a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a> 7410 </h4> 7411 7412 <div> 7413 7414 <h5>Syntax:</h5> 7415 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.add</tt> on 7416 any integer bit width. Not all targets support all bit widths however.</p> 7417 7418 <pre> 7419 declare i8 @llvm.atomic.load.add.i8.p0i8(i8* <ptr>, i8 <delta>) 7420 declare i16 @llvm.atomic.load.add.i16.p0i16(i16* <ptr>, i16 <delta>) 7421 declare i32 @llvm.atomic.load.add.i32.p0i32(i32* <ptr>, i32 <delta>) 7422 declare i64 @llvm.atomic.load.add.i64.p0i64(i64* <ptr>, i64 <delta>) 7423 </pre> 7424 7425 <h5>Overview:</h5> 7426 <p>This intrinsic adds <tt>delta</tt> to the value stored in memory 7427 at <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p> 7428 7429 <h5>Arguments:</h5> 7430 <p>The intrinsic takes two arguments, the first a pointer to an integer value 7431 and the second an integer value. The result is also an integer value. These 7432 integer types can have any bit width, but they must all have the same bit 7433 width. The targets may only lower integer representations they support.</p> 7434 7435 <h5>Semantics:</h5> 7436 <p>This intrinsic does a series of operations atomically. It first loads the 7437 value stored at <tt>ptr</tt>. It then adds <tt>delta</tt>, stores the result 7438 to <tt>ptr</tt>. It yields the original value stored at <tt>ptr</tt>.</p> 7439 7440 <h5>Examples:</h5> 7441 <pre> 7442 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7443 %ptr = bitcast i8* %mallocP to i32* 7444 store i32 4, %ptr 7445 %result1 = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 4) 7446 <i>; yields {i32}:result1 = 4</i> 7447 %result2 = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 2) 7448 <i>; yields {i32}:result2 = 8</i> 7449 %result3 = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %ptr, i32 5) 7450 <i>; yields {i32}:result3 = 10</i> 7451 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = 15</i> 7452 </pre> 7453 7454 </div> 7455 7456 <!-- _______________________________________________________________________ --> 7457 <h4> 7458 <a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a> 7459 </h4> 7460 7461 <div> 7462 7463 <h5>Syntax:</h5> 7464 <p>This is an overloaded intrinsic. You can use <tt>llvm.atomic.load.sub</tt> on 7465 any integer bit width and for different address spaces. Not all targets 7466 support all bit widths however.</p> 7467 7468 <pre> 7469 declare i8 @llvm.atomic.load.sub.i8.p0i32(i8* <ptr>, i8 <delta>) 7470 declare i16 @llvm.atomic.load.sub.i16.p0i32(i16* <ptr>, i16 <delta>) 7471 declare i32 @llvm.atomic.load.sub.i32.p0i32(i32* <ptr>, i32 <delta>) 7472 declare i64 @llvm.atomic.load.sub.i64.p0i32(i64* <ptr>, i64 <delta>) 7473 </pre> 7474 7475 <h5>Overview:</h5> 7476 <p>This intrinsic subtracts <tt>delta</tt> to the value stored in memory at 7477 <tt>ptr</tt>. It yields the original value at <tt>ptr</tt>.</p> 7478 7479 <h5>Arguments:</h5> 7480 <p>The intrinsic takes two arguments, the first a pointer to an integer value 7481 and the second an integer value. The result is also an integer value. These 7482 integer types can have any bit width, but they must all have the same bit 7483 width. The targets may only lower integer representations they support.</p> 7484 7485 <h5>Semantics:</h5> 7486 <p>This intrinsic does a series of operations atomically. It first loads the 7487 value stored at <tt>ptr</tt>. It then subtracts <tt>delta</tt>, stores the 7488 result to <tt>ptr</tt>. It yields the original value stored 7489 at <tt>ptr</tt>.</p> 7490 7491 <h5>Examples:</h5> 7492 <pre> 7493 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7494 %ptr = bitcast i8* %mallocP to i32* 7495 store i32 8, %ptr 7496 %result1 = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 4) 7497 <i>; yields {i32}:result1 = 8</i> 7498 %result2 = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 2) 7499 <i>; yields {i32}:result2 = 4</i> 7500 %result3 = call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %ptr, i32 5) 7501 <i>; yields {i32}:result3 = 2</i> 7502 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = -3</i> 7503 </pre> 7504 7505 </div> 7506 7507 <!-- _______________________________________________________________________ --> 7508 <h4> 7509 <a name="int_atomic_load_and"> 7510 '<tt>llvm.atomic.load.and.*</tt>' Intrinsic 7511 </a> 7512 <br> 7513 <a name="int_atomic_load_nand"> 7514 '<tt>llvm.atomic.load.nand.*</tt>' Intrinsic 7515 </a> 7516 <br> 7517 <a name="int_atomic_load_or"> 7518 '<tt>llvm.atomic.load.or.*</tt>' Intrinsic 7519 </a> 7520 <br> 7521 <a name="int_atomic_load_xor"> 7522 '<tt>llvm.atomic.load.xor.*</tt>' Intrinsic 7523 </a> 7524 </h4> 7525 7526 <div> 7527 7528 <h5>Syntax:</h5> 7529 <p>These are overloaded intrinsics. You can 7530 use <tt>llvm.atomic.load_and</tt>, <tt>llvm.atomic.load_nand</tt>, 7531 <tt>llvm.atomic.load_or</tt>, and <tt>llvm.atomic.load_xor</tt> on any integer 7532 bit width and for different address spaces. Not all targets support all bit 7533 widths however.</p> 7534 7535 <pre> 7536 declare i8 @llvm.atomic.load.and.i8.p0i8(i8* <ptr>, i8 <delta>) 7537 declare i16 @llvm.atomic.load.and.i16.p0i16(i16* <ptr>, i16 <delta>) 7538 declare i32 @llvm.atomic.load.and.i32.p0i32(i32* <ptr>, i32 <delta>) 7539 declare i64 @llvm.atomic.load.and.i64.p0i64(i64* <ptr>, i64 <delta>) 7540 </pre> 7541 7542 <pre> 7543 declare i8 @llvm.atomic.load.or.i8.p0i8(i8* <ptr>, i8 <delta>) 7544 declare i16 @llvm.atomic.load.or.i16.p0i16(i16* <ptr>, i16 <delta>) 7545 declare i32 @llvm.atomic.load.or.i32.p0i32(i32* <ptr>, i32 <delta>) 7546 declare i64 @llvm.atomic.load.or.i64.p0i64(i64* <ptr>, i64 <delta>) 7547 </pre> 7548 7549 <pre> 7550 declare i8 @llvm.atomic.load.nand.i8.p0i32(i8* <ptr>, i8 <delta>) 7551 declare i16 @llvm.atomic.load.nand.i16.p0i32(i16* <ptr>, i16 <delta>) 7552 declare i32 @llvm.atomic.load.nand.i32.p0i32(i32* <ptr>, i32 <delta>) 7553 declare i64 @llvm.atomic.load.nand.i64.p0i32(i64* <ptr>, i64 <delta>) 7554 </pre> 7555 7556 <pre> 7557 declare i8 @llvm.atomic.load.xor.i8.p0i32(i8* <ptr>, i8 <delta>) 7558 declare i16 @llvm.atomic.load.xor.i16.p0i32(i16* <ptr>, i16 <delta>) 7559 declare i32 @llvm.atomic.load.xor.i32.p0i32(i32* <ptr>, i32 <delta>) 7560 declare i64 @llvm.atomic.load.xor.i64.p0i32(i64* <ptr>, i64 <delta>) 7561 </pre> 7562 7563 <h5>Overview:</h5> 7564 <p>These intrinsics bitwise the operation (and, nand, or, xor) <tt>delta</tt> to 7565 the value stored in memory at <tt>ptr</tt>. It yields the original value 7566 at <tt>ptr</tt>.</p> 7567 7568 <h5>Arguments:</h5> 7569 <p>These intrinsics take two arguments, the first a pointer to an integer value 7570 and the second an integer value. The result is also an integer value. These 7571 integer types can have any bit width, but they must all have the same bit 7572 width. The targets may only lower integer representations they support.</p> 7573 7574 <h5>Semantics:</h5> 7575 <p>These intrinsics does a series of operations atomically. They first load the 7576 value stored at <tt>ptr</tt>. They then do the bitwise 7577 operation <tt>delta</tt>, store the result to <tt>ptr</tt>. They yield the 7578 original value stored at <tt>ptr</tt>.</p> 7579 7580 <h5>Examples:</h5> 7581 <pre> 7582 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7583 %ptr = bitcast i8* %mallocP to i32* 7584 store i32 0x0F0F, %ptr 7585 %result0 = call i32 @llvm.atomic.load.nand.i32.p0i32(i32* %ptr, i32 0xFF) 7586 <i>; yields {i32}:result0 = 0x0F0F</i> 7587 %result1 = call i32 @llvm.atomic.load.and.i32.p0i32(i32* %ptr, i32 0xFF) 7588 <i>; yields {i32}:result1 = 0xFFFFFFF0</i> 7589 %result2 = call i32 @llvm.atomic.load.or.i32.p0i32(i32* %ptr, i32 0F) 7590 <i>; yields {i32}:result2 = 0xF0</i> 7591 %result3 = call i32 @llvm.atomic.load.xor.i32.p0i32(i32* %ptr, i32 0F) 7592 <i>; yields {i32}:result3 = FF</i> 7593 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = F0</i> 7594 </pre> 7595 7596 </div> 7597 7598 <!-- _______________________________________________________________________ --> 7599 <h4> 7600 <a name="int_atomic_load_max"> 7601 '<tt>llvm.atomic.load.max.*</tt>' Intrinsic 7602 </a> 7603 <br> 7604 <a name="int_atomic_load_min"> 7605 '<tt>llvm.atomic.load.min.*</tt>' Intrinsic 7606 </a> 7607 <br> 7608 <a name="int_atomic_load_umax"> 7609 '<tt>llvm.atomic.load.umax.*</tt>' Intrinsic 7610 </a> 7611 <br> 7612 <a name="int_atomic_load_umin"> 7613 '<tt>llvm.atomic.load.umin.*</tt>' Intrinsic 7614 </a> 7615 </h4> 7616 7617 <div> 7618 7619 <h5>Syntax:</h5> 7620 <p>These are overloaded intrinsics. You can use <tt>llvm.atomic.load_max</tt>, 7621 <tt>llvm.atomic.load_min</tt>, <tt>llvm.atomic.load_umax</tt>, and 7622 <tt>llvm.atomic.load_umin</tt> on any integer bit width and for different 7623 address spaces. Not all targets support all bit widths however.</p> 7624 7625 <pre> 7626 declare i8 @llvm.atomic.load.max.i8.p0i8(i8* <ptr>, i8 <delta>) 7627 declare i16 @llvm.atomic.load.max.i16.p0i16(i16* <ptr>, i16 <delta>) 7628 declare i32 @llvm.atomic.load.max.i32.p0i32(i32* <ptr>, i32 <delta>) 7629 declare i64 @llvm.atomic.load.max.i64.p0i64(i64* <ptr>, i64 <delta>) 7630 </pre> 7631 7632 <pre> 7633 declare i8 @llvm.atomic.load.min.i8.p0i8(i8* <ptr>, i8 <delta>) 7634 declare i16 @llvm.atomic.load.min.i16.p0i16(i16* <ptr>, i16 <delta>) 7635 declare i32 @llvm.atomic.load.min.i32.p0i32(i32* <ptr>, i32 <delta>) 7636 declare i64 @llvm.atomic.load.min.i64.p0i64(i64* <ptr>, i64 <delta>) 7637 </pre> 7638 7639 <pre> 7640 declare i8 @llvm.atomic.load.umax.i8.p0i8(i8* <ptr>, i8 <delta>) 7641 declare i16 @llvm.atomic.load.umax.i16.p0i16(i16* <ptr>, i16 <delta>) 7642 declare i32 @llvm.atomic.load.umax.i32.p0i32(i32* <ptr>, i32 <delta>) 7643 declare i64 @llvm.atomic.load.umax.i64.p0i64(i64* <ptr>, i64 <delta>) 7644 </pre> 7645 7646 <pre> 7647 declare i8 @llvm.atomic.load.umin.i8.p0i8(i8* <ptr>, i8 <delta>) 7648 declare i16 @llvm.atomic.load.umin.i16.p0i16(i16* <ptr>, i16 <delta>) 7649 declare i32 @llvm.atomic.load.umin.i32.p0i32(i32* <ptr>, i32 <delta>) 7650 declare i64 @llvm.atomic.load.umin.i64.p0i64(i64* <ptr>, i64 <delta>) 7651 </pre> 7652 7653 <h5>Overview:</h5> 7654 <p>These intrinsics takes the signed or unsigned minimum or maximum of 7655 <tt>delta</tt> and the value stored in memory at <tt>ptr</tt>. It yields the 7656 original value at <tt>ptr</tt>.</p> 7657 7658 <h5>Arguments:</h5> 7659 <p>These intrinsics take two arguments, the first a pointer to an integer value 7660 and the second an integer value. The result is also an integer value. These 7661 integer types can have any bit width, but they must all have the same bit 7662 width. The targets may only lower integer representations they support.</p> 7663 7664 <h5>Semantics:</h5> 7665 <p>These intrinsics does a series of operations atomically. They first load the 7666 value stored at <tt>ptr</tt>. They then do the signed or unsigned min or 7667 max <tt>delta</tt> and the value, store the result to <tt>ptr</tt>. They 7668 yield the original value stored at <tt>ptr</tt>.</p> 7669 7670 <h5>Examples:</h5> 7671 <pre> 7672 %mallocP = tail call i8* @malloc(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32)) 7673 %ptr = bitcast i8* %mallocP to i32* 7674 store i32 7, %ptr 7675 %result0 = call i32 @llvm.atomic.load.min.i32.p0i32(i32* %ptr, i32 -2) 7676 <i>; yields {i32}:result0 = 7</i> 7677 %result1 = call i32 @llvm.atomic.load.max.i32.p0i32(i32* %ptr, i32 8) 7678 <i>; yields {i32}:result1 = -2</i> 7679 %result2 = call i32 @llvm.atomic.load.umin.i32.p0i32(i32* %ptr, i32 10) 7680 <i>; yields {i32}:result2 = 8</i> 7681 %result3 = call i32 @llvm.atomic.load.umax.i32.p0i32(i32* %ptr, i32 30) 7682 <i>; yields {i32}:result3 = 8</i> 7683 %memval1 = load i32* %ptr <i>; yields {i32}:memval1 = 30</i> 7684 </pre> 7685 7686 </div> 7687 7688 </div> 7689 7690 <!-- ======================================================================= --> 7691 <h3> 7692 <a name="int_memorymarkers">Memory Use Markers</a> 7693 </h3> 7694 7695 <div> 7696 7697 <p>This class of intrinsics exists to information about the lifetime of memory 7698 objects and ranges where variables are immutable.</p> 7699 7700 <!-- _______________________________________________________________________ --> 7701 <h4> 7702 <a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a> 7703 </h4> 7704 7705 <div> 7706 7707 <h5>Syntax:</h5> 7708 <pre> 7709 declare void @llvm.lifetime.start(i64 <size>, i8* nocapture <ptr>) 7710 </pre> 7711 7712 <h5>Overview:</h5> 7713 <p>The '<tt>llvm.lifetime.start</tt>' intrinsic specifies the start of a memory 7714 object's lifetime.</p> 7715 7716 <h5>Arguments:</h5> 7717 <p>The first argument is a constant integer representing the size of the 7718 object, or -1 if it is variable sized. The second argument is a pointer to 7719 the object.</p> 7720 7721 <h5>Semantics:</h5> 7722 <p>This intrinsic indicates that before this point in the code, the value of the 7723 memory pointed to by <tt>ptr</tt> is dead. This means that it is known to 7724 never be used and has an undefined value. A load from the pointer that 7725 precedes this intrinsic can be replaced with 7726 <tt>'<a href="#undefvalues">undef</a>'</tt>.</p> 7727 7728 </div> 7729 7730 <!-- _______________________________________________________________________ --> 7731 <h4> 7732 <a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a> 7733 </h4> 7734 7735 <div> 7736 7737 <h5>Syntax:</h5> 7738 <pre> 7739 declare void @llvm.lifetime.end(i64 <size>, i8* nocapture <ptr>) 7740 </pre> 7741 7742 <h5>Overview:</h5> 7743 <p>The '<tt>llvm.lifetime.end</tt>' intrinsic specifies the end of a memory 7744 object's lifetime.</p> 7745 7746 <h5>Arguments:</h5> 7747 <p>The first argument is a constant integer representing the size of the 7748 object, or -1 if it is variable sized. The second argument is a pointer to 7749 the object.</p> 7750 7751 <h5>Semantics:</h5> 7752 <p>This intrinsic indicates that after this point in the code, the value of the 7753 memory pointed to by <tt>ptr</tt> is dead. This means that it is known to 7754 never be used and has an undefined value. Any stores into the memory object 7755 following this intrinsic may be removed as dead. 7756 7757 </div> 7758 7759 <!-- _______________________________________________________________________ --> 7760 <h4> 7761 <a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a> 7762 </h4> 7763 7764 <div> 7765 7766 <h5>Syntax:</h5> 7767 <pre> 7768 declare {}* @llvm.invariant.start(i64 <size>, i8* nocapture <ptr>) 7769 </pre> 7770 7771 <h5>Overview:</h5> 7772 <p>The '<tt>llvm.invariant.start</tt>' intrinsic specifies that the contents of 7773 a memory object will not change.</p> 7774 7775 <h5>Arguments:</h5> 7776 <p>The first argument is a constant integer representing the size of the 7777 object, or -1 if it is variable sized. The second argument is a pointer to 7778 the object.</p> 7779 7780 <h5>Semantics:</h5> 7781 <p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses 7782 the return value, the referenced memory location is constant and 7783 unchanging.</p> 7784 7785 </div> 7786 7787 <!-- _______________________________________________________________________ --> 7788 <h4> 7789 <a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a> 7790 </h4> 7791 7792 <div> 7793 7794 <h5>Syntax:</h5> 7795 <pre> 7796 declare void @llvm.invariant.end({}* <start>, i64 <size>, i8* nocapture <ptr>) 7797 </pre> 7798 7799 <h5>Overview:</h5> 7800 <p>The '<tt>llvm.invariant.end</tt>' intrinsic specifies that the contents of 7801 a memory object are mutable.</p> 7802 7803 <h5>Arguments:</h5> 7804 <p>The first argument is the matching <tt>llvm.invariant.start</tt> intrinsic. 7805 The second argument is a constant integer representing the size of the 7806 object, or -1 if it is variable sized and the third argument is a pointer 7807 to the object.</p> 7808 7809 <h5>Semantics:</h5> 7810 <p>This intrinsic indicates that the memory is mutable again.</p> 7811 7812 </div> 7813 7814 </div> 7815 7816 <!-- ======================================================================= --> 7817 <h3> 7818 <a name="int_general">General Intrinsics</a> 7819 </h3> 7820 7821 <div> 7822 7823 <p>This class of intrinsics is designed to be generic and has no specific 7824 purpose.</p> 7825 7826 <!-- _______________________________________________________________________ --> 7827 <h4> 7828 <a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a> 7829 </h4> 7830 7831 <div> 7832 7833 <h5>Syntax:</h5> 7834 <pre> 7835 declare void @llvm.var.annotation(i8* <val>, i8* <str>, i8* <str>, i32 <int>) 7836 </pre> 7837 7838 <h5>Overview:</h5> 7839 <p>The '<tt>llvm.var.annotation</tt>' intrinsic.</p> 7840 7841 <h5>Arguments:</h5> 7842 <p>The first argument is a pointer to a value, the second is a pointer to a 7843 global string, the third is a pointer to a global string which is the source 7844 file name, and the last argument is the line number.</p> 7845 7846 <h5>Semantics:</h5> 7847 <p>This intrinsic allows annotation of local variables with arbitrary strings. 7848 This can be useful for special purpose optimizations that want to look for 7849 these annotations. These have no other defined use, they are ignored by code 7850 generation and optimization.</p> 7851 7852 </div> 7853 7854 <!-- _______________________________________________________________________ --> 7855 <h4> 7856 <a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a> 7857 </h4> 7858 7859 <div> 7860 7861 <h5>Syntax:</h5> 7862 <p>This is an overloaded intrinsic. You can use '<tt>llvm.annotation</tt>' on 7863 any integer bit width.</p> 7864 7865 <pre> 7866 declare i8 @llvm.annotation.i8(i8 <val>, i8* <str>, i8* <str>, i32 <int>) 7867 declare i16 @llvm.annotation.i16(i16 <val>, i8* <str>, i8* <str>, i32 <int>) 7868 declare i32 @llvm.annotation.i32(i32 <val>, i8* <str>, i8* <str>, i32 <int>) 7869 declare i64 @llvm.annotation.i64(i64 <val>, i8* <str>, i8* <str>, i32 <int>) 7870 declare i256 @llvm.annotation.i256(i256 <val>, i8* <str>, i8* <str>, i32 <int>) 7871 </pre> 7872 7873 <h5>Overview:</h5> 7874 <p>The '<tt>llvm.annotation</tt>' intrinsic.</p> 7875 7876 <h5>Arguments:</h5> 7877 <p>The first argument is an integer value (result of some expression), the 7878 second is a pointer to a global string, the third is a pointer to a global 7879 string which is the source file name, and the last argument is the line 7880 number. It returns the value of the first argument.</p> 7881 7882 <h5>Semantics:</h5> 7883 <p>This intrinsic allows annotations to be put on arbitrary expressions with 7884 arbitrary strings. This can be useful for special purpose optimizations that 7885 want to look for these annotations. These have no other defined use, they 7886 are ignored by code generation and optimization.</p> 7887 7888 </div> 7889 7890 <!-- _______________________________________________________________________ --> 7891 <h4> 7892 <a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a> 7893 </h4> 7894 7895 <div> 7896 7897 <h5>Syntax:</h5> 7898 <pre> 7899 declare void @llvm.trap() 7900 </pre> 7901 7902 <h5>Overview:</h5> 7903 <p>The '<tt>llvm.trap</tt>' intrinsic.</p> 7904 7905 <h5>Arguments:</h5> 7906 <p>None.</p> 7907 7908 <h5>Semantics:</h5> 7909 <p>This intrinsics is lowered to the target dependent trap instruction. If the 7910 target does not have a trap instruction, this intrinsic will be lowered to 7911 the call of the <tt>abort()</tt> function.</p> 7912 7913 </div> 7914 7915 <!-- _______________________________________________________________________ --> 7916 <h4> 7917 <a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a> 7918 </h4> 7919 7920 <div> 7921 7922 <h5>Syntax:</h5> 7923 <pre> 7924 declare void @llvm.stackprotector(i8* <guard>, i8** <slot>) 7925 </pre> 7926 7927 <h5>Overview:</h5> 7928 <p>The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and 7929 stores it onto the stack at <tt>slot</tt>. The stack slot is adjusted to 7930 ensure that it is placed on the stack before local variables.</p> 7931 7932 <h5>Arguments:</h5> 7933 <p>The <tt>llvm.stackprotector</tt> intrinsic requires two pointer 7934 arguments. The first argument is the value loaded from the stack 7935 guard <tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt> 7936 that has enough space to hold the value of the guard.</p> 7937 7938 <h5>Semantics:</h5> 7939 <p>This intrinsic causes the prologue/epilogue inserter to force the position of 7940 the <tt>AllocaInst</tt> stack slot to be before local variables on the 7941 stack. This is to ensure that if a local variable on the stack is 7942 overwritten, it will destroy the value of the guard. When the function exits, 7943 the guard on the stack is checked against the original guard. If they are 7944 different, then the program aborts by calling the <tt>__stack_chk_fail()</tt> 7945 function.</p> 7946 7947 </div> 7948 7949 <!-- _______________________________________________________________________ --> 7950 <h4> 7951 <a name="int_objectsize">'<tt>llvm.objectsize</tt>' Intrinsic</a> 7952 </h4> 7953 7954 <div> 7955 7956 <h5>Syntax:</h5> 7957 <pre> 7958 declare i32 @llvm.objectsize.i32(i8* <object>, i1 <type>) 7959 declare i64 @llvm.objectsize.i64(i8* <object>, i1 <type>) 7960 </pre> 7961 7962 <h5>Overview:</h5> 7963 <p>The <tt>llvm.objectsize</tt> intrinsic is designed to provide information to 7964 the optimizers to determine at compile time whether a) an operation (like 7965 memcpy) will overflow a buffer that corresponds to an object, or b) that a 7966 runtime check for overflow isn't necessary. An object in this context means 7967 an allocation of a specific class, structure, array, or other object.</p> 7968 7969 <h5>Arguments:</h5> 7970 <p>The <tt>llvm.objectsize</tt> intrinsic takes two arguments. The first 7971 argument is a pointer to or into the <tt>object</tt>. The second argument 7972 is a boolean 0 or 1. This argument determines whether you want the 7973 maximum (0) or minimum (1) bytes remaining. This needs to be a literal 0 or 7974 1, variables are not allowed.</p> 7975 7976 <h5>Semantics:</h5> 7977 <p>The <tt>llvm.objectsize</tt> intrinsic is lowered to either a constant 7978 representing the size of the object concerned, or <tt>i32/i64 -1 or 0</tt>, 7979 depending on the <tt>type</tt> argument, if the size cannot be determined at 7980 compile time.</p> 7981 7982 </div> 7983 7984 </div> 7985 7986 </div> 7987 7988 <!-- *********************************************************************** --> 7989 <hr> 7990 <address> 7991 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img 7992 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> 7993 <a href="http://validator.w3.org/check/referer"><img 7994 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> 7995 7996 <a href="mailto:sabre (a] nondot.org">Chris Lattner</a><br> 7997 <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> 7998 Last modified: $Date$ 7999 </address> 8000 8001 </body> 8002 </html> 8003