1======================== 2LLVM Programmer's Manual 3======================== 4 5.. contents:: 6 :local: 7 8.. warning:: 9 This is always a work in progress. 10 11.. _introduction: 12 13Introduction 14============ 15 16This document is meant to highlight some of the important classes and interfaces 17available in the LLVM source-base. This manual is not intended to explain what 18LLVM is, how it works, and what LLVM code looks like. It assumes that you know 19the basics of LLVM and are interested in writing transformations or otherwise 20analyzing or manipulating the code. 21 22This document should get you oriented so that you can find your way in the 23continuously growing source code that makes up the LLVM infrastructure. Note 24that this manual is not intended to serve as a replacement for reading the 25source code, so if you think there should be a method in one of these classes to 26do something, but it's not listed, check the source. Links to the `doxygen 27<http://llvm.org/doxygen/>`__ sources are provided to make this as easy as 28possible. 29 30The first section of this document describes general information that is useful 31to know when working in the LLVM infrastructure, and the second describes the 32Core LLVM classes. In the future this manual will be extended with information 33describing how to use extension libraries, such as dominator information, CFG 34traversal routines, and useful utilities like the ``InstVisitor`` (`doxygen 35<http://llvm.org/doxygen/InstVisitor_8h-source.html>`__) template. 36 37.. _general: 38 39General Information 40=================== 41 42This section contains general information that is useful if you are working in 43the LLVM source-base, but that isn't specific to any particular API. 44 45.. _stl: 46 47The C++ Standard Template Library 48--------------------------------- 49 50LLVM makes heavy use of the C++ Standard Template Library (STL), perhaps much 51more than you are used to, or have seen before. Because of this, you might want 52to do a little background reading in the techniques used and capabilities of the 53library. There are many good pages that discuss the STL, and several books on 54the subject that you can get, so it will not be discussed in this document. 55 56Here are some useful links: 57 58#. `cppreference.com 59 <http://en.cppreference.com/w/>`_ - an excellent 60 reference for the STL and other parts of the standard C++ library. 61 62#. `C++ In a Nutshell <http://www.tempest-sw.com/cpp/>`_ - This is an O'Reilly 63 book in the making. It has a decent Standard Library Reference that rivals 64 Dinkumware's, and is unfortunately no longer free since the book has been 65 published. 66 67#. `C++ Frequently Asked Questions <http://www.parashift.com/c++-faq-lite/>`_. 68 69#. `SGI's STL Programmer's Guide <http://www.sgi.com/tech/stl/>`_ - Contains a 70 useful `Introduction to the STL 71 <http://www.sgi.com/tech/stl/stl_introduction.html>`_. 72 73#. `Bjarne Stroustrup's C++ Page 74 <http://www.research.att.com/%7Ebs/C++.html>`_. 75 76#. `Bruce Eckel's Thinking in C++, 2nd ed. Volume 2 Revision 4.0 77 (even better, get the book) 78 <http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html>`_. 79 80You are also encouraged to take a look at the :doc:`LLVM Coding Standards 81<CodingStandards>` guide which focuses on how to write maintainable code more 82than where to put your curly braces. 83 84.. _resources: 85 86Other useful references 87----------------------- 88 89#. `Using static and shared libraries across platforms 90 <http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html>`_ 91 92.. _apis: 93 94Important and useful LLVM APIs 95============================== 96 97Here we highlight some LLVM APIs that are generally useful and good to know 98about when writing transformations. 99 100.. _isa: 101 102The ``isa<>``, ``cast<>`` and ``dyn_cast<>`` templates 103------------------------------------------------------ 104 105The LLVM source-base makes extensive use of a custom form of RTTI. These 106templates have many similarities to the C++ ``dynamic_cast<>`` operator, but 107they don't have some drawbacks (primarily stemming from the fact that 108``dynamic_cast<>`` only works on classes that have a v-table). Because they are 109used so often, you must know what they do and how they work. All of these 110templates are defined in the ``llvm/Support/Casting.h`` (`doxygen 111<http://llvm.org/doxygen/Casting_8h-source.html>`__) file (note that you very 112rarely have to include this file directly). 113 114``isa<>``: 115 The ``isa<>`` operator works exactly like the Java "``instanceof``" operator. 116 It returns true or false depending on whether a reference or pointer points to 117 an instance of the specified class. This can be very useful for constraint 118 checking of various sorts (example below). 119 120``cast<>``: 121 The ``cast<>`` operator is a "checked cast" operation. It converts a pointer 122 or reference from a base class to a derived class, causing an assertion 123 failure if it is not really an instance of the right type. This should be 124 used in cases where you have some information that makes you believe that 125 something is of the right type. An example of the ``isa<>`` and ``cast<>`` 126 template is: 127 128 .. code-block:: c++ 129 130 static bool isLoopInvariant(const Value *V, const Loop *L) { 131 if (isa<Constant>(V) || isa<Argument>(V) || isa<GlobalValue>(V)) 132 return true; 133 134 // Otherwise, it must be an instruction... 135 return !L->contains(cast<Instruction>(V)->getParent()); 136 } 137 138 Note that you should **not** use an ``isa<>`` test followed by a ``cast<>``, 139 for that use the ``dyn_cast<>`` operator. 140 141``dyn_cast<>``: 142 The ``dyn_cast<>`` operator is a "checking cast" operation. It checks to see 143 if the operand is of the specified type, and if so, returns a pointer to it 144 (this operator does not work with references). If the operand is not of the 145 correct type, a null pointer is returned. Thus, this works very much like 146 the ``dynamic_cast<>`` operator in C++, and should be used in the same 147 circumstances. Typically, the ``dyn_cast<>`` operator is used in an ``if`` 148 statement or some other flow control statement like this: 149 150 .. code-block:: c++ 151 152 if (auto *AI = dyn_cast<AllocationInst>(Val)) { 153 // ... 154 } 155 156 This form of the ``if`` statement effectively combines together a call to 157 ``isa<>`` and a call to ``cast<>`` into one statement, which is very 158 convenient. 159 160 Note that the ``dyn_cast<>`` operator, like C++'s ``dynamic_cast<>`` or Java's 161 ``instanceof`` operator, can be abused. In particular, you should not use big 162 chained ``if/then/else`` blocks to check for lots of different variants of 163 classes. If you find yourself wanting to do this, it is much cleaner and more 164 efficient to use the ``InstVisitor`` class to dispatch over the instruction 165 type directly. 166 167``cast_or_null<>``: 168 The ``cast_or_null<>`` operator works just like the ``cast<>`` operator, 169 except that it allows for a null pointer as an argument (which it then 170 propagates). This can sometimes be useful, allowing you to combine several 171 null checks into one. 172 173``dyn_cast_or_null<>``: 174 The ``dyn_cast_or_null<>`` operator works just like the ``dyn_cast<>`` 175 operator, except that it allows for a null pointer as an argument (which it 176 then propagates). This can sometimes be useful, allowing you to combine 177 several null checks into one. 178 179These five templates can be used with any classes, whether they have a v-table 180or not. If you want to add support for these templates, see the document 181:doc:`How to set up LLVM-style RTTI for your class hierarchy 182<HowToSetUpLLVMStyleRTTI>` 183 184.. _string_apis: 185 186Passing strings (the ``StringRef`` and ``Twine`` classes) 187--------------------------------------------------------- 188 189Although LLVM generally does not do much string manipulation, we do have several 190important APIs which take strings. Two important examples are the Value class 191-- which has names for instructions, functions, etc. -- and the ``StringMap`` 192class which is used extensively in LLVM and Clang. 193 194These are generic classes, and they need to be able to accept strings which may 195have embedded null characters. Therefore, they cannot simply take a ``const 196char *``, and taking a ``const std::string&`` requires clients to perform a heap 197allocation which is usually unnecessary. Instead, many LLVM APIs use a 198``StringRef`` or a ``const Twine&`` for passing strings efficiently. 199 200.. _StringRef: 201 202The ``StringRef`` class 203^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 204 205The ``StringRef`` data type represents a reference to a constant string (a 206character array and a length) and supports the common operations available on 207``std::string``, but does not require heap allocation. 208 209It can be implicitly constructed using a C style null-terminated string, an 210``std::string``, or explicitly with a character pointer and length. For 211example, the ``StringRef`` find function is declared as: 212 213.. code-block:: c++ 214 215 iterator find(StringRef Key); 216 217and clients can call it using any one of: 218 219.. code-block:: c++ 220 221 Map.find("foo"); // Lookup "foo" 222 Map.find(std::string("bar")); // Lookup "bar" 223 Map.find(StringRef("\0baz", 4)); // Lookup "\0baz" 224 225Similarly, APIs which need to return a string may return a ``StringRef`` 226instance, which can be used directly or converted to an ``std::string`` using 227the ``str`` member function. See ``llvm/ADT/StringRef.h`` (`doxygen 228<http://llvm.org/doxygen/classllvm_1_1StringRef_8h-source.html>`__) for more 229information. 230 231You should rarely use the ``StringRef`` class directly, because it contains 232pointers to external memory it is not generally safe to store an instance of the 233class (unless you know that the external storage will not be freed). 234``StringRef`` is small and pervasive enough in LLVM that it should always be 235passed by value. 236 237The ``Twine`` class 238^^^^^^^^^^^^^^^^^^^ 239 240The ``Twine`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1Twine.html>`__) 241class is an efficient way for APIs to accept concatenated strings. For example, 242a common LLVM paradigm is to name one instruction based on the name of another 243instruction with a suffix, for example: 244 245.. code-block:: c++ 246 247 New = CmpInst::Create(..., SO->getName() + ".cmp"); 248 249The ``Twine`` class is effectively a lightweight `rope 250<http://en.wikipedia.org/wiki/Rope_(computer_science)>`_ which points to 251temporary (stack allocated) objects. Twines can be implicitly constructed as 252the result of the plus operator applied to strings (i.e., a C strings, an 253``std::string``, or a ``StringRef``). The twine delays the actual concatenation 254of strings until it is actually required, at which point it can be efficiently 255rendered directly into a character array. This avoids unnecessary heap 256allocation involved in constructing the temporary results of string 257concatenation. See ``llvm/ADT/Twine.h`` (`doxygen 258<http://llvm.org/doxygen/Twine_8h_source.html>`__) and :ref:`here <dss_twine>` 259for more information. 260 261As with a ``StringRef``, ``Twine`` objects point to external memory and should 262almost never be stored or mentioned directly. They are intended solely for use 263when defining a function which should be able to efficiently accept concatenated 264strings. 265 266.. _formatting_strings: 267 268Formatting strings (the ``formatv`` function) 269--------------------------------------------- 270While LLVM doesn't necessarily do a lot of string manipulation and parsing, it 271does do a lot of string formatting. From diagnostic messages, to llvm tool 272outputs such as ``llvm-readobj`` to printing verbose disassembly listings and 273LLDB runtime logging, the need for string formatting is pervasive. 274 275The ``formatv`` is similar in spirit to ``printf``, but uses a different syntax 276which borrows heavily from Python and C#. Unlike ``printf`` it deduces the type 277to be formatted at compile time, so it does not need a format specifier such as 278``%d``. This reduces the mental overhead of trying to construct portable format 279strings, especially for platform-specific types like ``size_t`` or pointer types. 280Unlike both ``printf`` and Python, it additionally fails to compile if LLVM does 281not know how to format the type. These two properties ensure that the function 282is both safer and simpler to use than traditional formatting methods such as 283the ``printf`` family of functions. 284 285Simple formatting 286^^^^^^^^^^^^^^^^^ 287 288A call to ``formatv`` involves a single **format string** consisting of 0 or more 289**replacement sequences**, followed by a variable length list of **replacement values**. 290A replacement sequence is a string of the form ``{N[[,align]:style]}``. 291 292``N`` refers to the 0-based index of the argument from the list of replacement 293values. Note that this means it is possible to reference the same parameter 294multiple times, possibly with different style and/or alignment options, in any order. 295 296``align`` is an optional string specifying the width of the field to format 297the value into, and the alignment of the value within the field. It is specified as 298an optional **alignment style** followed by a positive integral **field width**. The 299alignment style can be one of the characters ``-`` (left align), ``=`` (center align), 300or ``+`` (right align). The default is right aligned. 301 302``style`` is an optional string consisting of a type specific that controls the 303formatting of the value. For example, to format a floating point value as a percentage, 304you can use the style option ``P``. 305 306Custom formatting 307^^^^^^^^^^^^^^^^^ 308 309There are two ways to customize the formatting behavior for a type. 310 3111. Provide a template specialization of ``llvm::format_provider<T>`` for your 312 type ``T`` with the appropriate static format method. 313 314 .. code-block:: c++ 315 316 namespace llvm { 317 template<> 318 struct format_provider<MyFooBar> { 319 static void format(const MyFooBar &V, raw_ostream &Stream, StringRef Style) { 320 // Do whatever is necessary to format `V` into `Stream` 321 } 322 }; 323 void foo() { 324 MyFooBar X; 325 std::string S = formatv("{0}", X); 326 } 327 } 328 329 This is a useful extensibility mechanism for adding support for formatting your own 330 custom types with your own custom Style options. But it does not help when you want 331 to extend the mechanism for formatting a type that the library already knows how to 332 format. For that, we need something else. 333 3342. Provide a **format adapter** with a non-static format method. 335 336 .. code-block:: c++ 337 338 namespace anything { 339 struct format_int_custom { 340 int N; 341 explicit format_int_custom(int N) : N(N) {} 342 void format(llvm::raw_ostream &Stream, StringRef Style) { 343 // Do whatever is necessary to format ``N`` into ``Stream`` 344 } 345 }; 346 } 347 namespace llvm { 348 void foo() { 349 std::string S = formatv("{0}", anything::format_int_custom(42)); 350 } 351 } 352 353 If the search for a specialization of ``format_provider<T>`` for the given type 354 fails, ``formatv`` will subsequently check the argument for an instance method 355 named ``format`` with the signature described above. If so, it will call the 356 ``format`` method on the argument passing in the specified style. This allows 357 one to provide custom formatting of any type, including one which already has 358 a builtin format provider. 359 360``formatv`` Examples 361^^^^^^^^^^^^^^^^^^^^ 362Below is intended to provide an incomplete set of examples demonstrating 363the usage of ``formatv``. More information can be found by reading the 364doxygen documentation or by looking at the unit test suite. 365 366 367.. code-block:: c++ 368 369 std::string S; 370 // Simple formatting of basic types and implicit string conversion. 371 S = formatv("{0} ({1:P})", 7, 0.35); // S == "7 (35.00%)" 372 373 // Out-of-order referencing and multi-referencing 374 outs() << formatv("{0} {2} {1} {0}", 1, "test", 3); // prints "1 3 test 1" 375 376 // Left, right, and center alignment 377 S = formatv("{0,7}", 'a'); // S == " a"; 378 S = formatv("{0,-7}", 'a'); // S == "a "; 379 S = formatv("{0,=7}", 'a'); // S == " a "; 380 S = formatv("{0,+7}", 'a'); // S == " a"; 381 382 // Custom styles 383 S = formatv("{0:N} - {0:x} - {1:E}", 12345, 123908342); // S == "12,345 - 0x3039 - 1.24E8" 384 385 // Adapters 386 S = formatv("{0}", fmt_align(42, AlignStyle::Center, 7)); // S == " 42 " 387 S = formatv("{0}", fmt_repeat("hi", 3)); // S == "hihihi" 388 S = formatv("{0}", fmt_pad("hi", 2, 6)); // S == " hi " 389 390 // Ranges 391 std::vector<int> V = {8, 9, 10}; 392 S = formatv("{0}", make_range(V.begin(), V.end())); // S == "8, 9, 10" 393 S = formatv("{0:$[+]}", make_range(V.begin(), V.end())); // S == "8+9+10" 394 S = formatv("{0:$[ + ]@[x]}", make_range(V.begin(), V.end())); // S == "0x8 + 0x9 + 0xA" 395 396.. _error_apis: 397 398Error handling 399-------------- 400 401Proper error handling helps us identify bugs in our code, and helps end-users 402understand errors in their tool usage. Errors fall into two broad categories: 403*programmatic* and *recoverable*, with different strategies for handling and 404reporting. 405 406Programmatic Errors 407^^^^^^^^^^^^^^^^^^^ 408 409Programmatic errors are violations of program invariants or API contracts, and 410represent bugs within the program itself. Our aim is to document invariants, and 411to abort quickly at the point of failure (providing some basic diagnostic) when 412invariants are broken at runtime. 413 414The fundamental tools for handling programmatic errors are assertions and the 415llvm_unreachable function. Assertions are used to express invariant conditions, 416and should include a message describing the invariant: 417 418.. code-block:: c++ 419 420 assert(isPhysReg(R) && "All virt regs should have been allocated already."); 421 422The llvm_unreachable function can be used to document areas of control flow 423that should never be entered if the program invariants hold: 424 425.. code-block:: c++ 426 427 enum { Foo, Bar, Baz } X = foo(); 428 429 switch (X) { 430 case Foo: /* Handle Foo */; break; 431 case Bar: /* Handle Bar */; break; 432 default: 433 llvm_unreachable("X should be Foo or Bar here"); 434 } 435 436Recoverable Errors 437^^^^^^^^^^^^^^^^^^ 438 439Recoverable errors represent an error in the program's environment, for example 440a resource failure (a missing file, a dropped network connection, etc.), or 441malformed input. These errors should be detected and communicated to a level of 442the program where they can be handled appropriately. Handling the error may be 443as simple as reporting the issue to the user, or it may involve attempts at 444recovery. 445 446Recoverable errors are modeled using LLVM's ``Error`` scheme. This scheme 447represents errors using function return values, similar to classic C integer 448error codes, or C++'s ``std::error_code``. However, the ``Error`` class is 449actually a lightweight wrapper for user-defined error types, allowing arbitrary 450information to be attached to describe the error. This is similar to the way C++ 451exceptions allow throwing of user-defined types. 452 453Success values are created by calling ``Error::success()``, E.g.: 454 455.. code-block:: c++ 456 457 Error foo() { 458 // Do something. 459 // Return success. 460 return Error::success(); 461 } 462 463Success values are very cheap to construct and return - they have minimal 464impact on program performance. 465 466Failure values are constructed using ``make_error<T>``, where ``T`` is any class 467that inherits from the ErrorInfo utility, E.g.: 468 469.. code-block:: c++ 470 471 class BadFileFormat : public ErrorInfo<BadFileFormat> { 472 public: 473 static char ID; 474 std::string Path; 475 476 BadFileFormat(StringRef Path) : Path(Path.str()) {} 477 478 void log(raw_ostream &OS) const override { 479 OS << Path << " is malformed"; 480 } 481 482 std::error_code convertToErrorCode() const override { 483 return make_error_code(object_error::parse_failed); 484 } 485 }; 486 487 char FileExists::ID; // This should be declared in the C++ file. 488 489 Error printFormattedFile(StringRef Path) { 490 if (<check for valid format>) 491 return make_error<InvalidObjectFile>(Path); 492 // print file contents. 493 return Error::success(); 494 } 495 496Error values can be implicitly converted to bool: true for error, false for 497success, enabling the following idiom: 498 499.. code-block:: c++ 500 501 Error mayFail(); 502 503 Error foo() { 504 if (auto Err = mayFail()) 505 return Err; 506 // Success! We can proceed. 507 ... 508 509For functions that can fail but need to return a value the ``Expected<T>`` 510utility can be used. Values of this type can be constructed with either a 511``T``, or an ``Error``. Expected<T> values are also implicitly convertible to 512boolean, but with the opposite convention to ``Error``: true for success, false 513for error. If success, the ``T`` value can be accessed via the dereference 514operator. If failure, the ``Error`` value can be extracted using the 515``takeError()`` method. Idiomatic usage looks like: 516 517.. code-block:: c++ 518 519 Expected<FormattedFile> openFormattedFile(StringRef Path) { 520 // If badly formatted, return an error. 521 if (auto Err = checkFormat(Path)) 522 return std::move(Err); 523 // Otherwise return a FormattedFile instance. 524 return FormattedFile(Path); 525 } 526 527 Error processFormattedFile(StringRef Path) { 528 // Try to open a formatted file 529 if (auto FileOrErr = openFormattedFile(Path)) { 530 // On success, grab a reference to the file and continue. 531 auto &File = *FileOrErr; 532 ... 533 } else 534 // On error, extract the Error value and return it. 535 return FileOrErr.takeError(); 536 } 537 538If an ``Expected<T>`` value is in success mode then the ``takeError()`` method 539will return a success value. Using this fact, the above function can be 540rewritten as: 541 542.. code-block:: c++ 543 544 Error processFormattedFile(StringRef Path) { 545 // Try to open a formatted file 546 auto FileOrErr = openFormattedFile(Path); 547 if (auto Err = FileOrErr.takeError()) 548 // On error, extract the Error value and return it. 549 return Err; 550 // On success, grab a reference to the file and continue. 551 auto &File = *FileOrErr; 552 ... 553 } 554 555This second form is often more readable for functions that involve multiple 556``Expected<T>`` values as it limits the indentation required. 557 558All ``Error`` instances, whether success or failure, must be either checked or 559moved from (via ``std::move`` or a return) before they are destructed. 560Accidentally discarding an unchecked error will cause a program abort at the 561point where the unchecked value's destructor is run, making it easy to identify 562and fix violations of this rule. 563 564Success values are considered checked once they have been tested (by invoking 565the boolean conversion operator): 566 567.. code-block:: c++ 568 569 if (auto Err = canFail(...)) 570 return Err; // Failure value - move error to caller. 571 572 // Safe to continue: Err was checked. 573 574In contrast, the following code will always cause an abort, even if ``canFail`` 575returns a success value: 576 577.. code-block:: c++ 578 579 canFail(); 580 // Program will always abort here, even if canFail() returns Success, since 581 // the value is not checked. 582 583Failure values are considered checked once a handler for the error type has 584been activated: 585 586.. code-block:: c++ 587 588 handleErrors( 589 processFormattedFile(...), 590 [](const BadFileFormat &BFF) { 591 report("Unable to process " + BFF.Path + ": bad format"); 592 }, 593 [](const FileNotFound &FNF) { 594 report("File not found " + FNF.Path); 595 }); 596 597The ``handleErrors`` function takes an error as its first argument, followed by 598a variadic list of "handlers", each of which must be a callable type (a 599function, lambda, or class with a call operator) with one argument. The 600``handleErrors`` function will visit each handler in the sequence and check its 601argument type against the dynamic type of the error, running the first handler 602that matches. This is the same decision process that is used decide which catch 603clause to run for a C++ exception. 604 605Since the list of handlers passed to ``handleErrors`` may not cover every error 606type that can occur, the ``handleErrors`` function also returns an Error value 607that must be checked or propagated. If the error value that is passed to 608``handleErrors`` does not match any of the handlers it will be returned from 609handleErrors. Idiomatic use of ``handleErrors`` thus looks like: 610 611.. code-block:: c++ 612 613 if (auto Err = 614 handleErrors( 615 processFormattedFile(...), 616 [](const BadFileFormat &BFF) { 617 report("Unable to process " + BFF.Path + ": bad format"); 618 }, 619 [](const FileNotFound &FNF) { 620 report("File not found " + FNF.Path); 621 })) 622 return Err; 623 624In cases where you truly know that the handler list is exhaustive the 625``handleAllErrors`` function can be used instead. This is identical to 626``handleErrors`` except that it will terminate the program if an unhandled 627error is passed in, and can therefore return void. The ``handleAllErrors`` 628function should generally be avoided: the introduction of a new error type 629elsewhere in the program can easily turn a formerly exhaustive list of errors 630into a non-exhaustive list, risking unexpected program termination. Where 631possible, use handleErrors and propagate unknown errors up the stack instead. 632 633For tool code, where errors can be handled by printing an error message then 634exiting with an error code, the :ref:`ExitOnError <err_exitonerr>` utility 635may be a better choice than handleErrors, as it simplifies control flow when 636calling fallible functions. 637 638StringError 639""""""""""" 640 641Many kinds of errors have no recovery strategy, the only action that can be 642taken is to report them to the user so that the user can attempt to fix the 643environment. In this case representing the error as a string makes perfect 644sense. LLVM provides the ``StringError`` class for this purpose. It takes two 645arguments: A string error message, and an equivalent ``std::error_code`` for 646interoperability: 647 648.. code-block:: c++ 649 650 make_error<StringError>("Bad executable", 651 make_error_code(errc::executable_format_error")); 652 653If you're certain that the error you're building will never need to be converted 654to a ``std::error_code`` you can use the ``inconvertibleErrorCode()`` function: 655 656.. code-block:: c++ 657 658 make_error<StringError>("Bad executable", inconvertibleErrorCode()); 659 660This should be done only after careful consideration. If any attempt is made to 661convert this error to a ``std::error_code`` it will trigger immediate program 662termination. Unless you are certain that your errors will not need 663interoperability you should look for an existing ``std::error_code`` that you 664can convert to, and even (as painful as it is) consider introducing a new one as 665a stopgap measure. 666 667Interoperability with std::error_code and ErrorOr 668""""""""""""""""""""""""""""""""""""""""""""""""" 669 670Many existing LLVM APIs use ``std::error_code`` and its partner ``ErrorOr<T>`` 671(which plays the same role as ``Expected<T>``, but wraps a ``std::error_code`` 672rather than an ``Error``). The infectious nature of error types means that an 673attempt to change one of these functions to return ``Error`` or ``Expected<T>`` 674instead often results in an avalanche of changes to callers, callers of callers, 675and so on. (The first such attempt, returning an ``Error`` from 676MachOObjectFile's constructor, was abandoned after the diff reached 3000 lines, 677impacted half a dozen libraries, and was still growing). 678 679To solve this problem, the ``Error``/``std::error_code`` interoperability requirement was 680introduced. Two pairs of functions allow any ``Error`` value to be converted to a 681``std::error_code``, any ``Expected<T>`` to be converted to an ``ErrorOr<T>``, and vice 682versa: 683 684.. code-block:: c++ 685 686 std::error_code errorToErrorCode(Error Err); 687 Error errorCodeToError(std::error_code EC); 688 689 template <typename T> ErrorOr<T> expectedToErrorOr(Expected<T> TOrErr); 690 template <typename T> Expected<T> errorOrToExpected(ErrorOr<T> TOrEC); 691 692 693Using these APIs it is easy to make surgical patches that update individual 694functions from ``std::error_code`` to ``Error``, and from ``ErrorOr<T>`` to 695``Expected<T>``. 696 697Returning Errors from error handlers 698"""""""""""""""""""""""""""""""""""" 699 700Error recovery attempts may themselves fail. For that reason, ``handleErrors`` 701actually recognises three different forms of handler signature: 702 703.. code-block:: c++ 704 705 // Error must be handled, no new errors produced: 706 void(UserDefinedError &E); 707 708 // Error must be handled, new errors can be produced: 709 Error(UserDefinedError &E); 710 711 // Original error can be inspected, then re-wrapped and returned (or a new 712 // error can be produced): 713 Error(std::unique_ptr<UserDefinedError> E); 714 715Any error returned from a handler will be returned from the ``handleErrors`` 716function so that it can be handled itself, or propagated up the stack. 717 718.. _err_exitonerr: 719 720Using ExitOnError to simplify tool code 721""""""""""""""""""""""""""""""""""""""" 722 723Library code should never call ``exit`` for a recoverable error, however in tool 724code (especially command line tools) this can be a reasonable approach. Calling 725``exit`` upon encountering an error dramatically simplifies control flow as the 726error no longer needs to be propagated up the stack. This allows code to be 727written in straight-line style, as long as each fallible call is wrapped in a 728check and call to exit. The ``ExitOnError`` class supports this pattern by 729providing call operators that inspect ``Error`` values, stripping the error away 730in the success case and logging to ``stderr`` then exiting in the failure case. 731 732To use this class, declare a global ``ExitOnError`` variable in your program: 733 734.. code-block:: c++ 735 736 ExitOnError ExitOnErr; 737 738Calls to fallible functions can then be wrapped with a call to ``ExitOnErr``, 739turning them into non-failing calls: 740 741.. code-block:: c++ 742 743 Error mayFail(); 744 Expected<int> mayFail2(); 745 746 void foo() { 747 ExitOnErr(mayFail()); 748 int X = ExitOnErr(mayFail2()); 749 } 750 751On failure, the error's log message will be written to ``stderr``, optionally 752preceded by a string "banner" that can be set by calling the setBanner method. A 753mapping can also be supplied from ``Error`` values to exit codes using the 754``setExitCodeMapper`` method: 755 756.. code-block:: c++ 757 758 int main(int argc, char *argv[]) { 759 ExitOnErr.setBanner(std::string(argv[0]) + " error:"); 760 ExitOnErr.setExitCodeMapper( 761 [](const Error &Err) { 762 if (Err.isA<BadFileFormat>()) 763 return 2; 764 return 1; 765 }); 766 767Use ``ExitOnError`` in your tool code where possible as it can greatly improve 768readability. 769 770Fallible constructors 771""""""""""""""""""""" 772 773Some classes require resource acquisition or other complex initialization that 774can fail during construction. Unfortunately constructors can't return errors, 775and having clients test objects after they're constructed to ensure that they're 776valid is error prone as it's all too easy to forget the test. To work around 777this, use the named constructor idiom and return an ``Expected<T>``: 778 779.. code-block:: c++ 780 781 class Foo { 782 public: 783 784 static Expected<Foo> Create(Resource R1, Resource R2) { 785 Error Err; 786 Foo F(R1, R2, Err); 787 if (Err) 788 return std::move(Err); 789 return std::move(F); 790 } 791 792 private: 793 794 Foo(Resource R1, Resource R2, Error &Err) { 795 ErrorAsOutParameter EAO(&Err); 796 if (auto Err2 = R1.acquire()) { 797 Err = std::move(Err2); 798 return; 799 } 800 Err = R2.acquire(); 801 } 802 }; 803 804 805Here, the named constructor passes an ``Error`` by reference into the actual 806constructor, which the constructor can then use to return errors. The 807``ErrorAsOutParameter`` utility sets the ``Error`` value's checked flag on entry 808to the constructor so that the error can be assigned to, then resets it on exit 809to force the client (the named constructor) to check the error. 810 811By using this idiom, clients attempting to construct a Foo receive either a 812well-formed Foo or an Error, never an object in an invalid state. 813 814Propagating and consuming errors based on types 815""""""""""""""""""""""""""""""""""""""""""""""" 816 817In some contexts, certain types of error are known to be benign. For example, 818when walking an archive, some clients may be happy to skip over badly formatted 819object files rather than terminating the walk immediately. Skipping badly 820formatted objects could be achieved using an elaborate handler method, but the 821Error.h header provides two utilities that make this idiom much cleaner: the 822type inspection method, ``isA``, and the ``consumeError`` function: 823 824.. code-block:: c++ 825 826 Error walkArchive(Archive A) { 827 for (unsigned I = 0; I != A.numMembers(); ++I) { 828 auto ChildOrErr = A.getMember(I); 829 if (auto Err = ChildOrErr.takeError()) { 830 if (Err.isA<BadFileFormat>()) 831 consumeError(std::move(Err)) 832 else 833 return Err; 834 } 835 auto &Child = *ChildOrErr; 836 // Use Child 837 ... 838 } 839 return Error::success(); 840 } 841 842Concatenating Errors with joinErrors 843"""""""""""""""""""""""""""""""""""" 844 845In the archive walking example above ``BadFileFormat`` errors are simply 846consumed and ignored. If the client had wanted report these errors after 847completing the walk over the archive they could use the ``joinErrors`` utility: 848 849.. code-block:: c++ 850 851 Error walkArchive(Archive A) { 852 Error DeferredErrs = Error::success(); 853 for (unsigned I = 0; I != A.numMembers(); ++I) { 854 auto ChildOrErr = A.getMember(I); 855 if (auto Err = ChildOrErr.takeError()) 856 if (Err.isA<BadFileFormat>()) 857 DeferredErrs = joinErrors(std::move(DeferredErrs), std::move(Err)); 858 else 859 return Err; 860 auto &Child = *ChildOrErr; 861 // Use Child 862 ... 863 } 864 return DeferredErrs; 865 } 866 867The ``joinErrors`` routine builds a special error type called ``ErrorList``, 868which holds a list of user defined errors. The ``handleErrors`` routine 869recognizes this type and will attempt to handle each of the contained erorrs in 870order. If all contained errors can be handled, ``handleErrors`` will return 871``Error::success()``, otherwise ``handleErrors`` will concatenate the remaining 872errors and return the resulting ``ErrorList``. 873 874Building fallible iterators and iterator ranges 875""""""""""""""""""""""""""""""""""""""""""""""" 876 877The archive walking examples above retrieve archive members by index, however 878this requires considerable boiler-plate for iteration and error checking. We can 879clean this up by using ``Error`` with the "fallible iterator" pattern. The usual 880C++ iterator patterns do not allow for failure on increment, but we can 881incorporate support for it by having iterators hold an Error reference through 882which they can report failure. In this pattern, if an increment operation fails 883the failure is recorded via the Error reference and the iterator value is set to 884the end of the range in order to terminate the loop. This ensures that the 885dereference operation is safe anywhere that an ordinary iterator dereference 886would be safe (i.e. when the iterator is not equal to end). Where this pattern 887is followed (as in the ``llvm::object::Archive`` class) the result is much 888cleaner iteration idiom: 889 890.. code-block:: c++ 891 892 Error Err; 893 for (auto &Child : Ar->children(Err)) { 894 // Use Child - we only enter the loop when it's valid 895 ... 896 } 897 // Check Err after the loop to ensure it didn't break due to an error. 898 if (Err) 899 return Err; 900 901.. _function_apis: 902 903More information on Error and its related utilities can be found in the 904Error.h header file. 905 906Passing functions and other callable objects 907-------------------------------------------- 908 909Sometimes you may want a function to be passed a callback object. In order to 910support lambda expressions and other function objects, you should not use the 911traditional C approach of taking a function pointer and an opaque cookie: 912 913.. code-block:: c++ 914 915 void takeCallback(bool (*Callback)(Function *, void *), void *Cookie); 916 917Instead, use one of the following approaches: 918 919Function template 920^^^^^^^^^^^^^^^^^ 921 922If you don't mind putting the definition of your function into a header file, 923make it a function template that is templated on the callable type. 924 925.. code-block:: c++ 926 927 template<typename Callable> 928 void takeCallback(Callable Callback) { 929 Callback(1, 2, 3); 930 } 931 932The ``function_ref`` class template 933^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 934 935The ``function_ref`` 936(`doxygen <http://llvm.org/docs/doxygen/html/classllvm_1_1function__ref_3_01Ret_07Params_8_8_8_08_4.html>`__) class 937template represents a reference to a callable object, templated over the type 938of the callable. This is a good choice for passing a callback to a function, 939if you don't need to hold onto the callback after the function returns. In this 940way, ``function_ref`` is to ``std::function`` as ``StringRef`` is to 941``std::string``. 942 943``function_ref<Ret(Param1, Param2, ...)>`` can be implicitly constructed from 944any callable object that can be called with arguments of type ``Param1``, 945``Param2``, ..., and returns a value that can be converted to type ``Ret``. 946For example: 947 948.. code-block:: c++ 949 950 void visitBasicBlocks(Function *F, function_ref<bool (BasicBlock*)> Callback) { 951 for (BasicBlock &BB : *F) 952 if (Callback(&BB)) 953 return; 954 } 955 956can be called using: 957 958.. code-block:: c++ 959 960 visitBasicBlocks(F, [&](BasicBlock *BB) { 961 if (process(BB)) 962 return isEmpty(BB); 963 return false; 964 }); 965 966Note that a ``function_ref`` object contains pointers to external memory, so it 967is not generally safe to store an instance of the class (unless you know that 968the external storage will not be freed). If you need this ability, consider 969using ``std::function``. ``function_ref`` is small enough that it should always 970be passed by value. 971 972.. _DEBUG: 973 974The ``DEBUG()`` macro and ``-debug`` option 975------------------------------------------- 976 977Often when working on your pass you will put a bunch of debugging printouts and 978other code into your pass. After you get it working, you want to remove it, but 979you may need it again in the future (to work out new bugs that you run across). 980 981Naturally, because of this, you don't want to delete the debug printouts, but 982you don't want them to always be noisy. A standard compromise is to comment 983them out, allowing you to enable them if you need them in the future. 984 985The ``llvm/Support/Debug.h`` (`doxygen 986<http://llvm.org/doxygen/Debug_8h-source.html>`__) file provides a macro named 987``DEBUG()`` that is a much nicer solution to this problem. Basically, you can 988put arbitrary code into the argument of the ``DEBUG`` macro, and it is only 989executed if '``opt``' (or any other tool) is run with the '``-debug``' command 990line argument: 991 992.. code-block:: c++ 993 994 DEBUG(errs() << "I am here!\n"); 995 996Then you can run your pass like this: 997 998.. code-block:: none 999 1000 $ opt < a.bc > /dev/null -mypass 1001 <no output> 1002 $ opt < a.bc > /dev/null -mypass -debug 1003 I am here! 1004 1005Using the ``DEBUG()`` macro instead of a home-brewed solution allows you to not 1006have to create "yet another" command line option for the debug output for your 1007pass. Note that ``DEBUG()`` macros are disabled for non-asserts builds, so they 1008do not cause a performance impact at all (for the same reason, they should also 1009not contain side-effects!). 1010 1011One additional nice thing about the ``DEBUG()`` macro is that you can enable or 1012disable it directly in gdb. Just use "``set DebugFlag=0``" or "``set 1013DebugFlag=1``" from the gdb if the program is running. If the program hasn't 1014been started yet, you can always just run it with ``-debug``. 1015 1016.. _DEBUG_TYPE: 1017 1018Fine grained debug info with ``DEBUG_TYPE`` and the ``-debug-only`` option 1019^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1020 1021Sometimes you may find yourself in a situation where enabling ``-debug`` just 1022turns on **too much** information (such as when working on the code generator). 1023If you want to enable debug information with more fine-grained control, you 1024should define the ``DEBUG_TYPE`` macro and use the ``-debug-only`` option as 1025follows: 1026 1027.. code-block:: c++ 1028 1029 #define DEBUG_TYPE "foo" 1030 DEBUG(errs() << "'foo' debug type\n"); 1031 #undef DEBUG_TYPE 1032 #define DEBUG_TYPE "bar" 1033 DEBUG(errs() << "'bar' debug type\n")); 1034 #undef DEBUG_TYPE 1035 1036Then you can run your pass like this: 1037 1038.. code-block:: none 1039 1040 $ opt < a.bc > /dev/null -mypass 1041 <no output> 1042 $ opt < a.bc > /dev/null -mypass -debug 1043 'foo' debug type 1044 'bar' debug type 1045 $ opt < a.bc > /dev/null -mypass -debug-only=foo 1046 'foo' debug type 1047 $ opt < a.bc > /dev/null -mypass -debug-only=bar 1048 'bar' debug type 1049 $ opt < a.bc > /dev/null -mypass -debug-only=foo,bar 1050 'foo' debug type 1051 'bar' debug type 1052 1053Of course, in practice, you should only set ``DEBUG_TYPE`` at the top of a file, 1054to specify the debug type for the entire module. Be careful that you only do 1055this after including Debug.h and not around any #include of headers. Also, you 1056should use names more meaningful than "foo" and "bar", because there is no 1057system in place to ensure that names do not conflict. If two different modules 1058use the same string, they will all be turned on when the name is specified. 1059This allows, for example, all debug information for instruction scheduling to be 1060enabled with ``-debug-only=InstrSched``, even if the source lives in multiple 1061files. The name must not include a comma (,) as that is used to separate the 1062arguments of the ``-debug-only`` option. 1063 1064For performance reasons, -debug-only is not available in optimized build 1065(``--enable-optimized``) of LLVM. 1066 1067The ``DEBUG_WITH_TYPE`` macro is also available for situations where you would 1068like to set ``DEBUG_TYPE``, but only for one specific ``DEBUG`` statement. It 1069takes an additional first parameter, which is the type to use. For example, the 1070preceding example could be written as: 1071 1072.. code-block:: c++ 1073 1074 DEBUG_WITH_TYPE("foo", errs() << "'foo' debug type\n"); 1075 DEBUG_WITH_TYPE("bar", errs() << "'bar' debug type\n")); 1076 1077.. _Statistic: 1078 1079The ``Statistic`` class & ``-stats`` option 1080------------------------------------------- 1081 1082The ``llvm/ADT/Statistic.h`` (`doxygen 1083<http://llvm.org/doxygen/Statistic_8h-source.html>`__) file provides a class 1084named ``Statistic`` that is used as a unified way to keep track of what the LLVM 1085compiler is doing and how effective various optimizations are. It is useful to 1086see what optimizations are contributing to making a particular program run 1087faster. 1088 1089Often you may run your pass on some big program, and you're interested to see 1090how many times it makes a certain transformation. Although you can do this with 1091hand inspection, or some ad-hoc method, this is a real pain and not very useful 1092for big programs. Using the ``Statistic`` class makes it very easy to keep 1093track of this information, and the calculated information is presented in a 1094uniform manner with the rest of the passes being executed. 1095 1096There are many examples of ``Statistic`` uses, but the basics of using it are as 1097follows: 1098 1099#. Define your statistic like this: 1100 1101 .. code-block:: c++ 1102 1103 #define DEBUG_TYPE "mypassname" // This goes before any #includes. 1104 STATISTIC(NumXForms, "The # of times I did stuff"); 1105 1106 The ``STATISTIC`` macro defines a static variable, whose name is specified by 1107 the first argument. The pass name is taken from the ``DEBUG_TYPE`` macro, and 1108 the description is taken from the second argument. The variable defined 1109 ("NumXForms" in this case) acts like an unsigned integer. 1110 1111#. Whenever you make a transformation, bump the counter: 1112 1113 .. code-block:: c++ 1114 1115 ++NumXForms; // I did stuff! 1116 1117That's all you have to do. To get '``opt``' to print out the statistics 1118gathered, use the '``-stats``' option: 1119 1120.. code-block:: none 1121 1122 $ opt -stats -mypassname < program.bc > /dev/null 1123 ... statistics output ... 1124 1125Note that in order to use the '``-stats``' option, LLVM must be 1126compiled with assertions enabled. 1127 1128When running ``opt`` on a C file from the SPEC benchmark suite, it gives a 1129report that looks like this: 1130 1131.. code-block:: none 1132 1133 7646 bitcodewriter - Number of normal instructions 1134 725 bitcodewriter - Number of oversized instructions 1135 129996 bitcodewriter - Number of bitcode bytes written 1136 2817 raise - Number of insts DCEd or constprop'd 1137 3213 raise - Number of cast-of-self removed 1138 5046 raise - Number of expression trees converted 1139 75 raise - Number of other getelementptr's formed 1140 138 raise - Number of load/store peepholes 1141 42 deadtypeelim - Number of unused typenames removed from symtab 1142 392 funcresolve - Number of varargs functions resolved 1143 27 globaldce - Number of global variables removed 1144 2 adce - Number of basic blocks removed 1145 134 cee - Number of branches revectored 1146 49 cee - Number of setcc instruction eliminated 1147 532 gcse - Number of loads removed 1148 2919 gcse - Number of instructions removed 1149 86 indvars - Number of canonical indvars added 1150 87 indvars - Number of aux indvars removed 1151 25 instcombine - Number of dead inst eliminate 1152 434 instcombine - Number of insts combined 1153 248 licm - Number of load insts hoisted 1154 1298 licm - Number of insts hoisted to a loop pre-header 1155 3 licm - Number of insts hoisted to multiple loop preds (bad, no loop pre-header) 1156 75 mem2reg - Number of alloca's promoted 1157 1444 cfgsimplify - Number of blocks simplified 1158 1159Obviously, with so many optimizations, having a unified framework for this stuff 1160is very nice. Making your pass fit well into the framework makes it more 1161maintainable and useful. 1162 1163.. _ViewGraph: 1164 1165Viewing graphs while debugging code 1166----------------------------------- 1167 1168Several of the important data structures in LLVM are graphs: for example CFGs 1169made out of LLVM :ref:`BasicBlocks <BasicBlock>`, CFGs made out of LLVM 1170:ref:`MachineBasicBlocks <MachineBasicBlock>`, and :ref:`Instruction Selection 1171DAGs <SelectionDAG>`. In many cases, while debugging various parts of the 1172compiler, it is nice to instantly visualize these graphs. 1173 1174LLVM provides several callbacks that are available in a debug build to do 1175exactly that. If you call the ``Function::viewCFG()`` method, for example, the 1176current LLVM tool will pop up a window containing the CFG for the function where 1177each basic block is a node in the graph, and each node contains the instructions 1178in the block. Similarly, there also exists ``Function::viewCFGOnly()`` (does 1179not include the instructions), the ``MachineFunction::viewCFG()`` and 1180``MachineFunction::viewCFGOnly()``, and the ``SelectionDAG::viewGraph()`` 1181methods. Within GDB, for example, you can usually use something like ``call 1182DAG.viewGraph()`` to pop up a window. Alternatively, you can sprinkle calls to 1183these functions in your code in places you want to debug. 1184 1185Getting this to work requires a small amount of setup. On Unix systems 1186with X11, install the `graphviz <http://www.graphviz.org>`_ toolkit, and make 1187sure 'dot' and 'gv' are in your path. If you are running on Mac OS X, download 1188and install the Mac OS X `Graphviz program 1189<http://www.pixelglow.com/graphviz/>`_ and add 1190``/Applications/Graphviz.app/Contents/MacOS/`` (or wherever you install it) to 1191your path. The programs need not be present when configuring, building or 1192running LLVM and can simply be installed when needed during an active debug 1193session. 1194 1195``SelectionDAG`` has been extended to make it easier to locate *interesting* 1196nodes in large complex graphs. From gdb, if you ``call DAG.setGraphColor(node, 1197"color")``, then the next ``call DAG.viewGraph()`` would highlight the node in 1198the specified color (choices of colors can be found at `colors 1199<http://www.graphviz.org/doc/info/colors.html>`_.) More complex node attributes 1200can be provided with ``call DAG.setGraphAttrs(node, "attributes")`` (choices can 1201be found at `Graph attributes <http://www.graphviz.org/doc/info/attrs.html>`_.) 1202If you want to restart and clear all the current graph attributes, then you can 1203``call DAG.clearGraphAttrs()``. 1204 1205Note that graph visualization features are compiled out of Release builds to 1206reduce file size. This means that you need a Debug+Asserts or Release+Asserts 1207build to use these features. 1208 1209.. _datastructure: 1210 1211Picking the Right Data Structure for a Task 1212=========================================== 1213 1214LLVM has a plethora of data structures in the ``llvm/ADT/`` directory, and we 1215commonly use STL data structures. This section describes the trade-offs you 1216should consider when you pick one. 1217 1218The first step is a choose your own adventure: do you want a sequential 1219container, a set-like container, or a map-like container? The most important 1220thing when choosing a container is the algorithmic properties of how you plan to 1221access the container. Based on that, you should use: 1222 1223 1224* a :ref:`map-like <ds_map>` container if you need efficient look-up of a 1225 value based on another value. Map-like containers also support efficient 1226 queries for containment (whether a key is in the map). Map-like containers 1227 generally do not support efficient reverse mapping (values to keys). If you 1228 need that, use two maps. Some map-like containers also support efficient 1229 iteration through the keys in sorted order. Map-like containers are the most 1230 expensive sort, only use them if you need one of these capabilities. 1231 1232* a :ref:`set-like <ds_set>` container if you need to put a bunch of stuff into 1233 a container that automatically eliminates duplicates. Some set-like 1234 containers support efficient iteration through the elements in sorted order. 1235 Set-like containers are more expensive than sequential containers. 1236 1237* a :ref:`sequential <ds_sequential>` container provides the most efficient way 1238 to add elements and keeps track of the order they are added to the collection. 1239 They permit duplicates and support efficient iteration, but do not support 1240 efficient look-up based on a key. 1241 1242* a :ref:`string <ds_string>` container is a specialized sequential container or 1243 reference structure that is used for character or byte arrays. 1244 1245* a :ref:`bit <ds_bit>` container provides an efficient way to store and 1246 perform set operations on sets of numeric id's, while automatically 1247 eliminating duplicates. Bit containers require a maximum of 1 bit for each 1248 identifier you want to store. 1249 1250Once the proper category of container is determined, you can fine tune the 1251memory use, constant factors, and cache behaviors of access by intelligently 1252picking a member of the category. Note that constant factors and cache behavior 1253can be a big deal. If you have a vector that usually only contains a few 1254elements (but could contain many), for example, it's much better to use 1255:ref:`SmallVector <dss_smallvector>` than :ref:`vector <dss_vector>`. Doing so 1256avoids (relatively) expensive malloc/free calls, which dwarf the cost of adding 1257the elements to the container. 1258 1259.. _ds_sequential: 1260 1261Sequential Containers (std::vector, std::list, etc) 1262--------------------------------------------------- 1263 1264There are a variety of sequential containers available for you, based on your 1265needs. Pick the first in this section that will do what you want. 1266 1267.. _dss_arrayref: 1268 1269llvm/ADT/ArrayRef.h 1270^^^^^^^^^^^^^^^^^^^ 1271 1272The ``llvm::ArrayRef`` class is the preferred class to use in an interface that 1273accepts a sequential list of elements in memory and just reads from them. By 1274taking an ``ArrayRef``, the API can be passed a fixed size array, an 1275``std::vector``, an ``llvm::SmallVector`` and anything else that is contiguous 1276in memory. 1277 1278.. _dss_fixedarrays: 1279 1280Fixed Size Arrays 1281^^^^^^^^^^^^^^^^^ 1282 1283Fixed size arrays are very simple and very fast. They are good if you know 1284exactly how many elements you have, or you have a (low) upper bound on how many 1285you have. 1286 1287.. _dss_heaparrays: 1288 1289Heap Allocated Arrays 1290^^^^^^^^^^^^^^^^^^^^^ 1291 1292Heap allocated arrays (``new[]`` + ``delete[]``) are also simple. They are good 1293if the number of elements is variable, if you know how many elements you will 1294need before the array is allocated, and if the array is usually large (if not, 1295consider a :ref:`SmallVector <dss_smallvector>`). The cost of a heap allocated 1296array is the cost of the new/delete (aka malloc/free). Also note that if you 1297are allocating an array of a type with a constructor, the constructor and 1298destructors will be run for every element in the array (re-sizable vectors only 1299construct those elements actually used). 1300 1301.. _dss_tinyptrvector: 1302 1303llvm/ADT/TinyPtrVector.h 1304^^^^^^^^^^^^^^^^^^^^^^^^ 1305 1306``TinyPtrVector<Type>`` is a highly specialized collection class that is 1307optimized to avoid allocation in the case when a vector has zero or one 1308elements. It has two major restrictions: 1) it can only hold values of pointer 1309type, and 2) it cannot hold a null pointer. 1310 1311Since this container is highly specialized, it is rarely used. 1312 1313.. _dss_smallvector: 1314 1315llvm/ADT/SmallVector.h 1316^^^^^^^^^^^^^^^^^^^^^^ 1317 1318``SmallVector<Type, N>`` is a simple class that looks and smells just like 1319``vector<Type>``: it supports efficient iteration, lays out elements in memory 1320order (so you can do pointer arithmetic between elements), supports efficient 1321push_back/pop_back operations, supports efficient random access to its elements, 1322etc. 1323 1324The advantage of SmallVector is that it allocates space for some number of 1325elements (N) **in the object itself**. Because of this, if the SmallVector is 1326dynamically smaller than N, no malloc is performed. This can be a big win in 1327cases where the malloc/free call is far more expensive than the code that 1328fiddles around with the elements. 1329 1330This is good for vectors that are "usually small" (e.g. the number of 1331predecessors/successors of a block is usually less than 8). On the other hand, 1332this makes the size of the SmallVector itself large, so you don't want to 1333allocate lots of them (doing so will waste a lot of space). As such, 1334SmallVectors are most useful when on the stack. 1335 1336SmallVector also provides a nice portable and efficient replacement for 1337``alloca``. 1338 1339.. note:: 1340 1341 Prefer to use ``SmallVectorImpl<T>`` as a parameter type. 1342 1343 In APIs that don't care about the "small size" (most?), prefer to use 1344 the ``SmallVectorImpl<T>`` class, which is basically just the "vector 1345 header" (and methods) without the elements allocated after it. Note that 1346 ``SmallVector<T, N>`` inherits from ``SmallVectorImpl<T>`` so the 1347 conversion is implicit and costs nothing. E.g. 1348 1349 .. code-block:: c++ 1350 1351 // BAD: Clients cannot pass e.g. SmallVector<Foo, 4>. 1352 hardcodedSmallSize(SmallVector<Foo, 2> &Out); 1353 // GOOD: Clients can pass any SmallVector<Foo, N>. 1354 allowsAnySmallSize(SmallVectorImpl<Foo> &Out); 1355 1356 void someFunc() { 1357 SmallVector<Foo, 8> Vec; 1358 hardcodedSmallSize(Vec); // Error. 1359 allowsAnySmallSize(Vec); // Works. 1360 } 1361 1362 Even though it has "``Impl``" in the name, this is so widely used that 1363 it really isn't "private to the implementation" anymore. A name like 1364 ``SmallVectorHeader`` would be more appropriate. 1365 1366.. _dss_vector: 1367 1368<vector> 1369^^^^^^^^ 1370 1371``std::vector`` is well loved and respected. It is useful when SmallVector 1372isn't: when the size of the vector is often large (thus the small optimization 1373will rarely be a benefit) or if you will be allocating many instances of the 1374vector itself (which would waste space for elements that aren't in the 1375container). vector is also useful when interfacing with code that expects 1376vectors :). 1377 1378One worthwhile note about std::vector: avoid code like this: 1379 1380.. code-block:: c++ 1381 1382 for ( ... ) { 1383 std::vector<foo> V; 1384 // make use of V. 1385 } 1386 1387Instead, write this as: 1388 1389.. code-block:: c++ 1390 1391 std::vector<foo> V; 1392 for ( ... ) { 1393 // make use of V. 1394 V.clear(); 1395 } 1396 1397Doing so will save (at least) one heap allocation and free per iteration of the 1398loop. 1399 1400.. _dss_deque: 1401 1402<deque> 1403^^^^^^^ 1404 1405``std::deque`` is, in some senses, a generalized version of ``std::vector``. 1406Like ``std::vector``, it provides constant time random access and other similar 1407properties, but it also provides efficient access to the front of the list. It 1408does not guarantee continuity of elements within memory. 1409 1410In exchange for this extra flexibility, ``std::deque`` has significantly higher 1411constant factor costs than ``std::vector``. If possible, use ``std::vector`` or 1412something cheaper. 1413 1414.. _dss_list: 1415 1416<list> 1417^^^^^^ 1418 1419``std::list`` is an extremely inefficient class that is rarely useful. It 1420performs a heap allocation for every element inserted into it, thus having an 1421extremely high constant factor, particularly for small data types. 1422``std::list`` also only supports bidirectional iteration, not random access 1423iteration. 1424 1425In exchange for this high cost, std::list supports efficient access to both ends 1426of the list (like ``std::deque``, but unlike ``std::vector`` or 1427``SmallVector``). In addition, the iterator invalidation characteristics of 1428std::list are stronger than that of a vector class: inserting or removing an 1429element into the list does not invalidate iterator or pointers to other elements 1430in the list. 1431 1432.. _dss_ilist: 1433 1434llvm/ADT/ilist.h 1435^^^^^^^^^^^^^^^^ 1436 1437``ilist<T>`` implements an 'intrusive' doubly-linked list. It is intrusive, 1438because it requires the element to store and provide access to the prev/next 1439pointers for the list. 1440 1441``ilist`` has the same drawbacks as ``std::list``, and additionally requires an 1442``ilist_traits`` implementation for the element type, but it provides some novel 1443characteristics. In particular, it can efficiently store polymorphic objects, 1444the traits class is informed when an element is inserted or removed from the 1445list, and ``ilist``\ s are guaranteed to support a constant-time splice 1446operation. 1447 1448These properties are exactly what we want for things like ``Instruction``\ s and 1449basic blocks, which is why these are implemented with ``ilist``\ s. 1450 1451Related classes of interest are explained in the following subsections: 1452 1453* :ref:`ilist_traits <dss_ilist_traits>` 1454 1455* :ref:`iplist <dss_iplist>` 1456 1457* :ref:`llvm/ADT/ilist_node.h <dss_ilist_node>` 1458 1459* :ref:`Sentinels <dss_ilist_sentinel>` 1460 1461.. _dss_packedvector: 1462 1463llvm/ADT/PackedVector.h 1464^^^^^^^^^^^^^^^^^^^^^^^ 1465 1466Useful for storing a vector of values using only a few number of bits for each 1467value. Apart from the standard operations of a vector-like container, it can 1468also perform an 'or' set operation. 1469 1470For example: 1471 1472.. code-block:: c++ 1473 1474 enum State { 1475 None = 0x0, 1476 FirstCondition = 0x1, 1477 SecondCondition = 0x2, 1478 Both = 0x3 1479 }; 1480 1481 State get() { 1482 PackedVector<State, 2> Vec1; 1483 Vec1.push_back(FirstCondition); 1484 1485 PackedVector<State, 2> Vec2; 1486 Vec2.push_back(SecondCondition); 1487 1488 Vec1 |= Vec2; 1489 return Vec1[0]; // returns 'Both'. 1490 } 1491 1492.. _dss_ilist_traits: 1493 1494ilist_traits 1495^^^^^^^^^^^^ 1496 1497``ilist_traits<T>`` is ``ilist<T>``'s customization mechanism. ``iplist<T>`` 1498(and consequently ``ilist<T>``) publicly derive from this traits class. 1499 1500.. _dss_iplist: 1501 1502iplist 1503^^^^^^ 1504 1505``iplist<T>`` is ``ilist<T>``'s base and as such supports a slightly narrower 1506interface. Notably, inserters from ``T&`` are absent. 1507 1508``ilist_traits<T>`` is a public base of this class and can be used for a wide 1509variety of customizations. 1510 1511.. _dss_ilist_node: 1512 1513llvm/ADT/ilist_node.h 1514^^^^^^^^^^^^^^^^^^^^^ 1515 1516``ilist_node<T>`` implements the forward and backward links that are expected 1517by the ``ilist<T>`` (and analogous containers) in the default manner. 1518 1519``ilist_node<T>``\ s are meant to be embedded in the node type ``T``, usually 1520``T`` publicly derives from ``ilist_node<T>``. 1521 1522.. _dss_ilist_sentinel: 1523 1524Sentinels 1525^^^^^^^^^ 1526 1527``ilist``\ s have another specialty that must be considered. To be a good 1528citizen in the C++ ecosystem, it needs to support the standard container 1529operations, such as ``begin`` and ``end`` iterators, etc. Also, the 1530``operator--`` must work correctly on the ``end`` iterator in the case of 1531non-empty ``ilist``\ s. 1532 1533The only sensible solution to this problem is to allocate a so-called *sentinel* 1534along with the intrusive list, which serves as the ``end`` iterator, providing 1535the back-link to the last element. However conforming to the C++ convention it 1536is illegal to ``operator++`` beyond the sentinel and it also must not be 1537dereferenced. 1538 1539These constraints allow for some implementation freedom to the ``ilist`` how to 1540allocate and store the sentinel. The corresponding policy is dictated by 1541``ilist_traits<T>``. By default a ``T`` gets heap-allocated whenever the need 1542for a sentinel arises. 1543 1544While the default policy is sufficient in most cases, it may break down when 1545``T`` does not provide a default constructor. Also, in the case of many 1546instances of ``ilist``\ s, the memory overhead of the associated sentinels is 1547wasted. To alleviate the situation with numerous and voluminous 1548``T``-sentinels, sometimes a trick is employed, leading to *ghostly sentinels*. 1549 1550Ghostly sentinels are obtained by specially-crafted ``ilist_traits<T>`` which 1551superpose the sentinel with the ``ilist`` instance in memory. Pointer 1552arithmetic is used to obtain the sentinel, which is relative to the ``ilist``'s 1553``this`` pointer. The ``ilist`` is augmented by an extra pointer, which serves 1554as the back-link of the sentinel. This is the only field in the ghostly 1555sentinel which can be legally accessed. 1556 1557.. _dss_other: 1558 1559Other Sequential Container options 1560^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1561 1562Other STL containers are available, such as ``std::string``. 1563 1564There are also various STL adapter classes such as ``std::queue``, 1565``std::priority_queue``, ``std::stack``, etc. These provide simplified access 1566to an underlying container but don't affect the cost of the container itself. 1567 1568.. _ds_string: 1569 1570String-like containers 1571---------------------- 1572 1573There are a variety of ways to pass around and use strings in C and C++, and 1574LLVM adds a few new options to choose from. Pick the first option on this list 1575that will do what you need, they are ordered according to their relative cost. 1576 1577Note that it is generally preferred to *not* pass strings around as ``const 1578char*``'s. These have a number of problems, including the fact that they 1579cannot represent embedded nul ("\0") characters, and do not have a length 1580available efficiently. The general replacement for '``const char*``' is 1581StringRef. 1582 1583For more information on choosing string containers for APIs, please see 1584:ref:`Passing Strings <string_apis>`. 1585 1586.. _dss_stringref: 1587 1588llvm/ADT/StringRef.h 1589^^^^^^^^^^^^^^^^^^^^ 1590 1591The StringRef class is a simple value class that contains a pointer to a 1592character and a length, and is quite related to the :ref:`ArrayRef 1593<dss_arrayref>` class (but specialized for arrays of characters). Because 1594StringRef carries a length with it, it safely handles strings with embedded nul 1595characters in it, getting the length does not require a strlen call, and it even 1596has very convenient APIs for slicing and dicing the character range that it 1597represents. 1598 1599StringRef is ideal for passing simple strings around that are known to be live, 1600either because they are C string literals, std::string, a C array, or a 1601SmallVector. Each of these cases has an efficient implicit conversion to 1602StringRef, which doesn't result in a dynamic strlen being executed. 1603 1604StringRef has a few major limitations which make more powerful string containers 1605useful: 1606 1607#. You cannot directly convert a StringRef to a 'const char*' because there is 1608 no way to add a trailing nul (unlike the .c_str() method on various stronger 1609 classes). 1610 1611#. StringRef doesn't own or keep alive the underlying string bytes. 1612 As such it can easily lead to dangling pointers, and is not suitable for 1613 embedding in datastructures in most cases (instead, use an std::string or 1614 something like that). 1615 1616#. For the same reason, StringRef cannot be used as the return value of a 1617 method if the method "computes" the result string. Instead, use std::string. 1618 1619#. StringRef's do not allow you to mutate the pointed-to string bytes and it 1620 doesn't allow you to insert or remove bytes from the range. For editing 1621 operations like this, it interoperates with the :ref:`Twine <dss_twine>` 1622 class. 1623 1624Because of its strengths and limitations, it is very common for a function to 1625take a StringRef and for a method on an object to return a StringRef that points 1626into some string that it owns. 1627 1628.. _dss_twine: 1629 1630llvm/ADT/Twine.h 1631^^^^^^^^^^^^^^^^ 1632 1633The Twine class is used as an intermediary datatype for APIs that want to take a 1634string that can be constructed inline with a series of concatenations. Twine 1635works by forming recursive instances of the Twine datatype (a simple value 1636object) on the stack as temporary objects, linking them together into a tree 1637which is then linearized when the Twine is consumed. Twine is only safe to use 1638as the argument to a function, and should always be a const reference, e.g.: 1639 1640.. code-block:: c++ 1641 1642 void foo(const Twine &T); 1643 ... 1644 StringRef X = ... 1645 unsigned i = ... 1646 foo(X + "." + Twine(i)); 1647 1648This example forms a string like "blarg.42" by concatenating the values 1649together, and does not form intermediate strings containing "blarg" or "blarg.". 1650 1651Because Twine is constructed with temporary objects on the stack, and because 1652these instances are destroyed at the end of the current statement, it is an 1653inherently dangerous API. For example, this simple variant contains undefined 1654behavior and will probably crash: 1655 1656.. code-block:: c++ 1657 1658 void foo(const Twine &T); 1659 ... 1660 StringRef X = ... 1661 unsigned i = ... 1662 const Twine &Tmp = X + "." + Twine(i); 1663 foo(Tmp); 1664 1665... because the temporaries are destroyed before the call. That said, Twine's 1666are much more efficient than intermediate std::string temporaries, and they work 1667really well with StringRef. Just be aware of their limitations. 1668 1669.. _dss_smallstring: 1670 1671llvm/ADT/SmallString.h 1672^^^^^^^^^^^^^^^^^^^^^^ 1673 1674SmallString is a subclass of :ref:`SmallVector <dss_smallvector>` that adds some 1675convenience APIs like += that takes StringRef's. SmallString avoids allocating 1676memory in the case when the preallocated space is enough to hold its data, and 1677it calls back to general heap allocation when required. Since it owns its data, 1678it is very safe to use and supports full mutation of the string. 1679 1680Like SmallVector's, the big downside to SmallString is their sizeof. While they 1681are optimized for small strings, they themselves are not particularly small. 1682This means that they work great for temporary scratch buffers on the stack, but 1683should not generally be put into the heap: it is very rare to see a SmallString 1684as the member of a frequently-allocated heap data structure or returned 1685by-value. 1686 1687.. _dss_stdstring: 1688 1689std::string 1690^^^^^^^^^^^ 1691 1692The standard C++ std::string class is a very general class that (like 1693SmallString) owns its underlying data. sizeof(std::string) is very reasonable 1694so it can be embedded into heap data structures and returned by-value. On the 1695other hand, std::string is highly inefficient for inline editing (e.g. 1696concatenating a bunch of stuff together) and because it is provided by the 1697standard library, its performance characteristics depend a lot of the host 1698standard library (e.g. libc++ and MSVC provide a highly optimized string class, 1699GCC contains a really slow implementation). 1700 1701The major disadvantage of std::string is that almost every operation that makes 1702them larger can allocate memory, which is slow. As such, it is better to use 1703SmallVector or Twine as a scratch buffer, but then use std::string to persist 1704the result. 1705 1706.. _ds_set: 1707 1708Set-Like Containers (std::set, SmallSet, SetVector, etc) 1709-------------------------------------------------------- 1710 1711Set-like containers are useful when you need to canonicalize multiple values 1712into a single representation. There are several different choices for how to do 1713this, providing various trade-offs. 1714 1715.. _dss_sortedvectorset: 1716 1717A sorted 'vector' 1718^^^^^^^^^^^^^^^^^ 1719 1720If you intend to insert a lot of elements, then do a lot of queries, a great 1721approach is to use a vector (or other sequential container) with 1722std::sort+std::unique to remove duplicates. This approach works really well if 1723your usage pattern has these two distinct phases (insert then query), and can be 1724coupled with a good choice of :ref:`sequential container <ds_sequential>`. 1725 1726This combination provides the several nice properties: the result data is 1727contiguous in memory (good for cache locality), has few allocations, is easy to 1728address (iterators in the final vector are just indices or pointers), and can be 1729efficiently queried with a standard binary search (e.g. 1730``std::lower_bound``; if you want the whole range of elements comparing 1731equal, use ``std::equal_range``). 1732 1733.. _dss_smallset: 1734 1735llvm/ADT/SmallSet.h 1736^^^^^^^^^^^^^^^^^^^ 1737 1738If you have a set-like data structure that is usually small and whose elements 1739are reasonably small, a ``SmallSet<Type, N>`` is a good choice. This set has 1740space for N elements in place (thus, if the set is dynamically smaller than N, 1741no malloc traffic is required) and accesses them with a simple linear search. 1742When the set grows beyond N elements, it allocates a more expensive 1743representation that guarantees efficient access (for most types, it falls back 1744to :ref:`std::set <dss_set>`, but for pointers it uses something far better, 1745:ref:`SmallPtrSet <dss_smallptrset>`. 1746 1747The magic of this class is that it handles small sets extremely efficiently, but 1748gracefully handles extremely large sets without loss of efficiency. The 1749drawback is that the interface is quite small: it supports insertion, queries 1750and erasing, but does not support iteration. 1751 1752.. _dss_smallptrset: 1753 1754llvm/ADT/SmallPtrSet.h 1755^^^^^^^^^^^^^^^^^^^^^^ 1756 1757``SmallPtrSet`` has all the advantages of ``SmallSet`` (and a ``SmallSet`` of 1758pointers is transparently implemented with a ``SmallPtrSet``), but also supports 1759iterators. If more than N insertions are performed, a single quadratically 1760probed hash table is allocated and grows as needed, providing extremely 1761efficient access (constant time insertion/deleting/queries with low constant 1762factors) and is very stingy with malloc traffic. 1763 1764Note that, unlike :ref:`std::set <dss_set>`, the iterators of ``SmallPtrSet`` 1765are invalidated whenever an insertion occurs. Also, the values visited by the 1766iterators are not visited in sorted order. 1767 1768.. _dss_stringset: 1769 1770llvm/ADT/StringSet.h 1771^^^^^^^^^^^^^^^^^^^^ 1772 1773``StringSet`` is a thin wrapper around :ref:`StringMap\<char\> <dss_stringmap>`, 1774and it allows efficient storage and retrieval of unique strings. 1775 1776Functionally analogous to ``SmallSet<StringRef>``, ``StringSet`` also supports 1777iteration. (The iterator dereferences to a ``StringMapEntry<char>``, so you 1778need to call ``i->getKey()`` to access the item of the StringSet.) On the 1779other hand, ``StringSet`` doesn't support range-insertion and 1780copy-construction, which :ref:`SmallSet <dss_smallset>` and :ref:`SmallPtrSet 1781<dss_smallptrset>` do support. 1782 1783.. _dss_denseset: 1784 1785llvm/ADT/DenseSet.h 1786^^^^^^^^^^^^^^^^^^^ 1787 1788DenseSet is a simple quadratically probed hash table. It excels at supporting 1789small values: it uses a single allocation to hold all of the pairs that are 1790currently inserted in the set. DenseSet is a great way to unique small values 1791that are not simple pointers (use :ref:`SmallPtrSet <dss_smallptrset>` for 1792pointers). Note that DenseSet has the same requirements for the value type that 1793:ref:`DenseMap <dss_densemap>` has. 1794 1795.. _dss_sparseset: 1796 1797llvm/ADT/SparseSet.h 1798^^^^^^^^^^^^^^^^^^^^ 1799 1800SparseSet holds a small number of objects identified by unsigned keys of 1801moderate size. It uses a lot of memory, but provides operations that are almost 1802as fast as a vector. Typical keys are physical registers, virtual registers, or 1803numbered basic blocks. 1804 1805SparseSet is useful for algorithms that need very fast clear/find/insert/erase 1806and fast iteration over small sets. It is not intended for building composite 1807data structures. 1808 1809.. _dss_sparsemultiset: 1810 1811llvm/ADT/SparseMultiSet.h 1812^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1813 1814SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's 1815desirable attributes. Like SparseSet, it typically uses a lot of memory, but 1816provides operations that are almost as fast as a vector. Typical keys are 1817physical registers, virtual registers, or numbered basic blocks. 1818 1819SparseMultiSet is useful for algorithms that need very fast 1820clear/find/insert/erase of the entire collection, and iteration over sets of 1821elements sharing a key. It is often a more efficient choice than using composite 1822data structures (e.g. vector-of-vectors, map-of-vectors). It is not intended for 1823building composite data structures. 1824 1825.. _dss_FoldingSet: 1826 1827llvm/ADT/FoldingSet.h 1828^^^^^^^^^^^^^^^^^^^^^ 1829 1830FoldingSet is an aggregate class that is really good at uniquing 1831expensive-to-create or polymorphic objects. It is a combination of a chained 1832hash table with intrusive links (uniqued objects are required to inherit from 1833FoldingSetNode) that uses :ref:`SmallVector <dss_smallvector>` as part of its ID 1834process. 1835 1836Consider a case where you want to implement a "getOrCreateFoo" method for a 1837complex object (for example, a node in the code generator). The client has a 1838description of **what** it wants to generate (it knows the opcode and all the 1839operands), but we don't want to 'new' a node, then try inserting it into a set 1840only to find out it already exists, at which point we would have to delete it 1841and return the node that already exists. 1842 1843To support this style of client, FoldingSet perform a query with a 1844FoldingSetNodeID (which wraps SmallVector) that can be used to describe the 1845element that we want to query for. The query either returns the element 1846matching the ID or it returns an opaque ID that indicates where insertion should 1847take place. Construction of the ID usually does not require heap traffic. 1848 1849Because FoldingSet uses intrusive links, it can support polymorphic objects in 1850the set (for example, you can have SDNode instances mixed with LoadSDNodes). 1851Because the elements are individually allocated, pointers to the elements are 1852stable: inserting or removing elements does not invalidate any pointers to other 1853elements. 1854 1855.. _dss_set: 1856 1857<set> 1858^^^^^ 1859 1860``std::set`` is a reasonable all-around set class, which is decent at many 1861things but great at nothing. std::set allocates memory for each element 1862inserted (thus it is very malloc intensive) and typically stores three pointers 1863per element in the set (thus adding a large amount of per-element space 1864overhead). It offers guaranteed log(n) performance, which is not particularly 1865fast from a complexity standpoint (particularly if the elements of the set are 1866expensive to compare, like strings), and has extremely high constant factors for 1867lookup, insertion and removal. 1868 1869The advantages of std::set are that its iterators are stable (deleting or 1870inserting an element from the set does not affect iterators or pointers to other 1871elements) and that iteration over the set is guaranteed to be in sorted order. 1872If the elements in the set are large, then the relative overhead of the pointers 1873and malloc traffic is not a big deal, but if the elements of the set are small, 1874std::set is almost never a good choice. 1875 1876.. _dss_setvector: 1877 1878llvm/ADT/SetVector.h 1879^^^^^^^^^^^^^^^^^^^^ 1880 1881LLVM's ``SetVector<Type>`` is an adapter class that combines your choice of a 1882set-like container along with a :ref:`Sequential Container <ds_sequential>` The 1883important property that this provides is efficient insertion with uniquing 1884(duplicate elements are ignored) with iteration support. It implements this by 1885inserting elements into both a set-like container and the sequential container, 1886using the set-like container for uniquing and the sequential container for 1887iteration. 1888 1889The difference between SetVector and other sets is that the order of iteration 1890is guaranteed to match the order of insertion into the SetVector. This property 1891is really important for things like sets of pointers. Because pointer values 1892are non-deterministic (e.g. vary across runs of the program on different 1893machines), iterating over the pointers in the set will not be in a well-defined 1894order. 1895 1896The drawback of SetVector is that it requires twice as much space as a normal 1897set and has the sum of constant factors from the set-like container and the 1898sequential container that it uses. Use it **only** if you need to iterate over 1899the elements in a deterministic order. SetVector is also expensive to delete 1900elements out of (linear time), unless you use its "pop_back" method, which is 1901faster. 1902 1903``SetVector`` is an adapter class that defaults to using ``std::vector`` and a 1904size 16 ``SmallSet`` for the underlying containers, so it is quite expensive. 1905However, ``"llvm/ADT/SetVector.h"`` also provides a ``SmallSetVector`` class, 1906which defaults to using a ``SmallVector`` and ``SmallSet`` of a specified size. 1907If you use this, and if your sets are dynamically smaller than ``N``, you will 1908save a lot of heap traffic. 1909 1910.. _dss_uniquevector: 1911 1912llvm/ADT/UniqueVector.h 1913^^^^^^^^^^^^^^^^^^^^^^^ 1914 1915UniqueVector is similar to :ref:`SetVector <dss_setvector>` but it retains a 1916unique ID for each element inserted into the set. It internally contains a map 1917and a vector, and it assigns a unique ID for each value inserted into the set. 1918 1919UniqueVector is very expensive: its cost is the sum of the cost of maintaining 1920both the map and vector, it has high complexity, high constant factors, and 1921produces a lot of malloc traffic. It should be avoided. 1922 1923.. _dss_immutableset: 1924 1925llvm/ADT/ImmutableSet.h 1926^^^^^^^^^^^^^^^^^^^^^^^ 1927 1928ImmutableSet is an immutable (functional) set implementation based on an AVL 1929tree. Adding or removing elements is done through a Factory object and results 1930in the creation of a new ImmutableSet object. If an ImmutableSet already exists 1931with the given contents, then the existing one is returned; equality is compared 1932with a FoldingSetNodeID. The time and space complexity of add or remove 1933operations is logarithmic in the size of the original set. 1934 1935There is no method for returning an element of the set, you can only check for 1936membership. 1937 1938.. _dss_otherset: 1939 1940Other Set-Like Container Options 1941^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1942 1943The STL provides several other options, such as std::multiset and the various 1944"hash_set" like containers (whether from C++ TR1 or from the SGI library). We 1945never use hash_set and unordered_set because they are generally very expensive 1946(each insertion requires a malloc) and very non-portable. 1947 1948std::multiset is useful if you're not interested in elimination of duplicates, 1949but has all the drawbacks of :ref:`std::set <dss_set>`. A sorted vector 1950(where you don't delete duplicate entries) or some other approach is almost 1951always better. 1952 1953.. _ds_map: 1954 1955Map-Like Containers (std::map, DenseMap, etc) 1956--------------------------------------------- 1957 1958Map-like containers are useful when you want to associate data to a key. As 1959usual, there are a lot of different ways to do this. :) 1960 1961.. _dss_sortedvectormap: 1962 1963A sorted 'vector' 1964^^^^^^^^^^^^^^^^^ 1965 1966If your usage pattern follows a strict insert-then-query approach, you can 1967trivially use the same approach as :ref:`sorted vectors for set-like containers 1968<dss_sortedvectorset>`. The only difference is that your query function (which 1969uses std::lower_bound to get efficient log(n) lookup) should only compare the 1970key, not both the key and value. This yields the same advantages as sorted 1971vectors for sets. 1972 1973.. _dss_stringmap: 1974 1975llvm/ADT/StringMap.h 1976^^^^^^^^^^^^^^^^^^^^ 1977 1978Strings are commonly used as keys in maps, and they are difficult to support 1979efficiently: they are variable length, inefficient to hash and compare when 1980long, expensive to copy, etc. StringMap is a specialized container designed to 1981cope with these issues. It supports mapping an arbitrary range of bytes to an 1982arbitrary other object. 1983 1984The StringMap implementation uses a quadratically-probed hash table, where the 1985buckets store a pointer to the heap allocated entries (and some other stuff). 1986The entries in the map must be heap allocated because the strings are variable 1987length. The string data (key) and the element object (value) are stored in the 1988same allocation with the string data immediately after the element object. 1989This container guarantees the "``(char*)(&Value+1)``" points to the key string 1990for a value. 1991 1992The StringMap is very fast for several reasons: quadratic probing is very cache 1993efficient for lookups, the hash value of strings in buckets is not recomputed 1994when looking up an element, StringMap rarely has to touch the memory for 1995unrelated objects when looking up a value (even when hash collisions happen), 1996hash table growth does not recompute the hash values for strings already in the 1997table, and each pair in the map is store in a single allocation (the string data 1998is stored in the same allocation as the Value of a pair). 1999 2000StringMap also provides query methods that take byte ranges, so it only ever 2001copies a string if a value is inserted into the table. 2002 2003StringMap iteratation order, however, is not guaranteed to be deterministic, so 2004any uses which require that should instead use a std::map. 2005 2006.. _dss_indexmap: 2007 2008llvm/ADT/IndexedMap.h 2009^^^^^^^^^^^^^^^^^^^^^ 2010 2011IndexedMap is a specialized container for mapping small dense integers (or 2012values that can be mapped to small dense integers) to some other type. It is 2013internally implemented as a vector with a mapping function that maps the keys 2014to the dense integer range. 2015 2016This is useful for cases like virtual registers in the LLVM code generator: they 2017have a dense mapping that is offset by a compile-time constant (the first 2018virtual register ID). 2019 2020.. _dss_densemap: 2021 2022llvm/ADT/DenseMap.h 2023^^^^^^^^^^^^^^^^^^^ 2024 2025DenseMap is a simple quadratically probed hash table. It excels at supporting 2026small keys and values: it uses a single allocation to hold all of the pairs 2027that are currently inserted in the map. DenseMap is a great way to map 2028pointers to pointers, or map other small types to each other. 2029 2030There are several aspects of DenseMap that you should be aware of, however. 2031The iterators in a DenseMap are invalidated whenever an insertion occurs, 2032unlike map. Also, because DenseMap allocates space for a large number of 2033key/value pairs (it starts with 64 by default), it will waste a lot of space if 2034your keys or values are large. Finally, you must implement a partial 2035specialization of DenseMapInfo for the key that you want, if it isn't already 2036supported. This is required to tell DenseMap about two special marker values 2037(which can never be inserted into the map) that it needs internally. 2038 2039DenseMap's find_as() method supports lookup operations using an alternate key 2040type. This is useful in cases where the normal key type is expensive to 2041construct, but cheap to compare against. The DenseMapInfo is responsible for 2042defining the appropriate comparison and hashing methods for each alternate key 2043type used. 2044 2045.. _dss_valuemap: 2046 2047llvm/IR/ValueMap.h 2048^^^^^^^^^^^^^^^^^^^ 2049 2050ValueMap is a wrapper around a :ref:`DenseMap <dss_densemap>` mapping 2051``Value*``\ s (or subclasses) to another type. When a Value is deleted or 2052RAUW'ed, ValueMap will update itself so the new version of the key is mapped to 2053the same value, just as if the key were a WeakVH. You can configure exactly how 2054this happens, and what else happens on these two events, by passing a ``Config`` 2055parameter to the ValueMap template. 2056 2057.. _dss_intervalmap: 2058 2059llvm/ADT/IntervalMap.h 2060^^^^^^^^^^^^^^^^^^^^^^ 2061 2062IntervalMap is a compact map for small keys and values. It maps key intervals 2063instead of single keys, and it will automatically coalesce adjacent intervals. 2064When the map only contains a few intervals, they are stored in the map object 2065itself to avoid allocations. 2066 2067The IntervalMap iterators are quite big, so they should not be passed around as 2068STL iterators. The heavyweight iterators allow a smaller data structure. 2069 2070.. _dss_map: 2071 2072<map> 2073^^^^^ 2074 2075std::map has similar characteristics to :ref:`std::set <dss_set>`: it uses a 2076single allocation per pair inserted into the map, it offers log(n) lookup with 2077an extremely large constant factor, imposes a space penalty of 3 pointers per 2078pair in the map, etc. 2079 2080std::map is most useful when your keys or values are very large, if you need to 2081iterate over the collection in sorted order, or if you need stable iterators 2082into the map (i.e. they don't get invalidated if an insertion or deletion of 2083another element takes place). 2084 2085.. _dss_mapvector: 2086 2087llvm/ADT/MapVector.h 2088^^^^^^^^^^^^^^^^^^^^ 2089 2090``MapVector<KeyT,ValueT>`` provides a subset of the DenseMap interface. The 2091main difference is that the iteration order is guaranteed to be the insertion 2092order, making it an easy (but somewhat expensive) solution for non-deterministic 2093iteration over maps of pointers. 2094 2095It is implemented by mapping from key to an index in a vector of key,value 2096pairs. This provides fast lookup and iteration, but has two main drawbacks: 2097the key is stored twice and removing elements takes linear time. If it is 2098necessary to remove elements, it's best to remove them in bulk using 2099``remove_if()``. 2100 2101.. _dss_inteqclasses: 2102 2103llvm/ADT/IntEqClasses.h 2104^^^^^^^^^^^^^^^^^^^^^^^ 2105 2106IntEqClasses provides a compact representation of equivalence classes of small 2107integers. Initially, each integer in the range 0..n-1 has its own equivalence 2108class. Classes can be joined by passing two class representatives to the 2109join(a, b) method. Two integers are in the same class when findLeader() returns 2110the same representative. 2111 2112Once all equivalence classes are formed, the map can be compressed so each 2113integer 0..n-1 maps to an equivalence class number in the range 0..m-1, where m 2114is the total number of equivalence classes. The map must be uncompressed before 2115it can be edited again. 2116 2117.. _dss_immutablemap: 2118 2119llvm/ADT/ImmutableMap.h 2120^^^^^^^^^^^^^^^^^^^^^^^ 2121 2122ImmutableMap is an immutable (functional) map implementation based on an AVL 2123tree. Adding or removing elements is done through a Factory object and results 2124in the creation of a new ImmutableMap object. If an ImmutableMap already exists 2125with the given key set, then the existing one is returned; equality is compared 2126with a FoldingSetNodeID. The time and space complexity of add or remove 2127operations is logarithmic in the size of the original map. 2128 2129.. _dss_othermap: 2130 2131Other Map-Like Container Options 2132^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2133 2134The STL provides several other options, such as std::multimap and the various 2135"hash_map" like containers (whether from C++ TR1 or from the SGI library). We 2136never use hash_set and unordered_set because they are generally very expensive 2137(each insertion requires a malloc) and very non-portable. 2138 2139std::multimap is useful if you want to map a key to multiple values, but has all 2140the drawbacks of std::map. A sorted vector or some other approach is almost 2141always better. 2142 2143.. _ds_bit: 2144 2145Bit storage containers (BitVector, SparseBitVector) 2146--------------------------------------------------- 2147 2148Unlike the other containers, there are only two bit storage containers, and 2149choosing when to use each is relatively straightforward. 2150 2151One additional option is ``std::vector<bool>``: we discourage its use for two 2152reasons 1) the implementation in many common compilers (e.g. commonly 2153available versions of GCC) is extremely inefficient and 2) the C++ standards 2154committee is likely to deprecate this container and/or change it significantly 2155somehow. In any case, please don't use it. 2156 2157.. _dss_bitvector: 2158 2159BitVector 2160^^^^^^^^^ 2161 2162The BitVector container provides a dynamic size set of bits for manipulation. 2163It supports individual bit setting/testing, as well as set operations. The set 2164operations take time O(size of bitvector), but operations are performed one word 2165at a time, instead of one bit at a time. This makes the BitVector very fast for 2166set operations compared to other containers. Use the BitVector when you expect 2167the number of set bits to be high (i.e. a dense set). 2168 2169.. _dss_smallbitvector: 2170 2171SmallBitVector 2172^^^^^^^^^^^^^^ 2173 2174The SmallBitVector container provides the same interface as BitVector, but it is 2175optimized for the case where only a small number of bits, less than 25 or so, 2176are needed. It also transparently supports larger bit counts, but slightly less 2177efficiently than a plain BitVector, so SmallBitVector should only be used when 2178larger counts are rare. 2179 2180At this time, SmallBitVector does not support set operations (and, or, xor), and 2181its operator[] does not provide an assignable lvalue. 2182 2183.. _dss_sparsebitvector: 2184 2185SparseBitVector 2186^^^^^^^^^^^^^^^ 2187 2188The SparseBitVector container is much like BitVector, with one major difference: 2189Only the bits that are set, are stored. This makes the SparseBitVector much 2190more space efficient than BitVector when the set is sparse, as well as making 2191set operations O(number of set bits) instead of O(size of universe). The 2192downside to the SparseBitVector is that setting and testing of random bits is 2193O(N), and on large SparseBitVectors, this can be slower than BitVector. In our 2194implementation, setting or testing bits in sorted order (either forwards or 2195reverse) is O(1) worst case. Testing and setting bits within 128 bits (depends 2196on size) of the current bit is also O(1). As a general statement, 2197testing/setting bits in a SparseBitVector is O(distance away from last set bit). 2198 2199.. _common: 2200 2201Helpful Hints for Common Operations 2202=================================== 2203 2204This section describes how to perform some very simple transformations of LLVM 2205code. This is meant to give examples of common idioms used, showing the 2206practical side of LLVM transformations. 2207 2208Because this is a "how-to" section, you should also read about the main classes 2209that you will be working with. The :ref:`Core LLVM Class Hierarchy Reference 2210<coreclasses>` contains details and descriptions of the main classes that you 2211should know about. 2212 2213.. _inspection: 2214 2215Basic Inspection and Traversal Routines 2216--------------------------------------- 2217 2218The LLVM compiler infrastructure have many different data structures that may be 2219traversed. Following the example of the C++ standard template library, the 2220techniques used to traverse these various data structures are all basically the 2221same. For a enumerable sequence of values, the ``XXXbegin()`` function (or 2222method) returns an iterator to the start of the sequence, the ``XXXend()`` 2223function returns an iterator pointing to one past the last valid element of the 2224sequence, and there is some ``XXXiterator`` data type that is common between the 2225two operations. 2226 2227Because the pattern for iteration is common across many different aspects of the 2228program representation, the standard template library algorithms may be used on 2229them, and it is easier to remember how to iterate. First we show a few common 2230examples of the data structures that need to be traversed. Other data 2231structures are traversed in very similar ways. 2232 2233.. _iterate_function: 2234 2235Iterating over the ``BasicBlock`` in a ``Function`` 2236^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2237 2238It's quite common to have a ``Function`` instance that you'd like to transform 2239in some way; in particular, you'd like to manipulate its ``BasicBlock``\ s. To 2240facilitate this, you'll need to iterate over all of the ``BasicBlock``\ s that 2241constitute the ``Function``. The following is an example that prints the name 2242of a ``BasicBlock`` and the number of ``Instruction``\ s it contains: 2243 2244.. code-block:: c++ 2245 2246 // func is a pointer to a Function instance 2247 for (Function::iterator i = func->begin(), e = func->end(); i != e; ++i) 2248 // Print out the name of the basic block if it has one, and then the 2249 // number of instructions that it contains 2250 errs() << "Basic block (name=" << i->getName() << ") has " 2251 << i->size() << " instructions.\n"; 2252 2253Note that i can be used as if it were a pointer for the purposes of invoking 2254member functions of the ``Instruction`` class. This is because the indirection 2255operator is overloaded for the iterator classes. In the above code, the 2256expression ``i->size()`` is exactly equivalent to ``(*i).size()`` just like 2257you'd expect. 2258 2259.. _iterate_basicblock: 2260 2261Iterating over the ``Instruction`` in a ``BasicBlock`` 2262^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2263 2264Just like when dealing with ``BasicBlock``\ s in ``Function``\ s, it's easy to 2265iterate over the individual instructions that make up ``BasicBlock``\ s. Here's 2266a code snippet that prints out each instruction in a ``BasicBlock``: 2267 2268.. code-block:: c++ 2269 2270 // blk is a pointer to a BasicBlock instance 2271 for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i) 2272 // The next statement works since operator<<(ostream&,...) 2273 // is overloaded for Instruction& 2274 errs() << *i << "\n"; 2275 2276 2277However, this isn't really the best way to print out the contents of a 2278``BasicBlock``! Since the ostream operators are overloaded for virtually 2279anything you'll care about, you could have just invoked the print routine on the 2280basic block itself: ``errs() << *blk << "\n";``. 2281 2282.. _iterate_insiter: 2283 2284Iterating over the ``Instruction`` in a ``Function`` 2285^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2286 2287If you're finding that you commonly iterate over a ``Function``'s 2288``BasicBlock``\ s and then that ``BasicBlock``'s ``Instruction``\ s, 2289``InstIterator`` should be used instead. You'll need to include 2290``llvm/IR/InstIterator.h`` (`doxygen 2291<http://llvm.org/doxygen/InstIterator_8h.html>`__) and then instantiate 2292``InstIterator``\ s explicitly in your code. Here's a small example that shows 2293how to dump all instructions in a function to the standard error stream: 2294 2295.. code-block:: c++ 2296 2297 #include "llvm/IR/InstIterator.h" 2298 2299 // F is a pointer to a Function instance 2300 for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) 2301 errs() << *I << "\n"; 2302 2303Easy, isn't it? You can also use ``InstIterator``\ s to fill a work list with 2304its initial contents. For example, if you wanted to initialize a work list to 2305contain all instructions in a ``Function`` F, all you would need to do is 2306something like: 2307 2308.. code-block:: c++ 2309 2310 std::set<Instruction*> worklist; 2311 // or better yet, SmallPtrSet<Instruction*, 64> worklist; 2312 2313 for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) 2314 worklist.insert(&*I); 2315 2316The STL set ``worklist`` would now contain all instructions in the ``Function`` 2317pointed to by F. 2318 2319.. _iterate_convert: 2320 2321Turning an iterator into a class pointer (and vice-versa) 2322^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2323 2324Sometimes, it'll be useful to grab a reference (or pointer) to a class instance 2325when all you've got at hand is an iterator. Well, extracting a reference or a 2326pointer from an iterator is very straight-forward. Assuming that ``i`` is a 2327``BasicBlock::iterator`` and ``j`` is a ``BasicBlock::const_iterator``: 2328 2329.. code-block:: c++ 2330 2331 Instruction& inst = *i; // Grab reference to instruction reference 2332 Instruction* pinst = &*i; // Grab pointer to instruction reference 2333 const Instruction& inst = *j; 2334 2335However, the iterators you'll be working with in the LLVM framework are special: 2336they will automatically convert to a ptr-to-instance type whenever they need to. 2337Instead of dereferencing the iterator and then taking the address of the result, 2338you can simply assign the iterator to the proper pointer type and you get the 2339dereference and address-of operation as a result of the assignment (behind the 2340scenes, this is a result of overloading casting mechanisms). Thus the second 2341line of the last example, 2342 2343.. code-block:: c++ 2344 2345 Instruction *pinst = &*i; 2346 2347is semantically equivalent to 2348 2349.. code-block:: c++ 2350 2351 Instruction *pinst = i; 2352 2353It's also possible to turn a class pointer into the corresponding iterator, and 2354this is a constant time operation (very efficient). The following code snippet 2355illustrates use of the conversion constructors provided by LLVM iterators. By 2356using these, you can explicitly grab the iterator of something without actually 2357obtaining it via iteration over some structure: 2358 2359.. code-block:: c++ 2360 2361 void printNextInstruction(Instruction* inst) { 2362 BasicBlock::iterator it(inst); 2363 ++it; // After this line, it refers to the instruction after *inst 2364 if (it != inst->getParent()->end()) errs() << *it << "\n"; 2365 } 2366 2367Unfortunately, these implicit conversions come at a cost; they prevent these 2368iterators from conforming to standard iterator conventions, and thus from being 2369usable with standard algorithms and containers. For example, they prevent the 2370following code, where ``B`` is a ``BasicBlock``, from compiling: 2371 2372.. code-block:: c++ 2373 2374 llvm::SmallVector<llvm::Instruction *, 16>(B->begin(), B->end()); 2375 2376Because of this, these implicit conversions may be removed some day, and 2377``operator*`` changed to return a pointer instead of a reference. 2378 2379.. _iterate_complex: 2380 2381Finding call sites: a slightly more complex example 2382^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2383 2384Say that you're writing a FunctionPass and would like to count all the locations 2385in the entire module (that is, across every ``Function``) where a certain 2386function (i.e., some ``Function *``) is already in scope. As you'll learn 2387later, you may want to use an ``InstVisitor`` to accomplish this in a much more 2388straight-forward manner, but this example will allow us to explore how you'd do 2389it if you didn't have ``InstVisitor`` around. In pseudo-code, this is what we 2390want to do: 2391 2392.. code-block:: none 2393 2394 initialize callCounter to zero 2395 for each Function f in the Module 2396 for each BasicBlock b in f 2397 for each Instruction i in b 2398 if (i is a CallInst and calls the given function) 2399 increment callCounter 2400 2401And the actual code is (remember, because we're writing a ``FunctionPass``, our 2402``FunctionPass``-derived class simply has to override the ``runOnFunction`` 2403method): 2404 2405.. code-block:: c++ 2406 2407 Function* targetFunc = ...; 2408 2409 class OurFunctionPass : public FunctionPass { 2410 public: 2411 OurFunctionPass(): callCounter(0) { } 2412 2413 virtual runOnFunction(Function& F) { 2414 for (Function::iterator b = F.begin(), be = F.end(); b != be; ++b) { 2415 for (BasicBlock::iterator i = b->begin(), ie = b->end(); i != ie; ++i) { 2416 if (CallInst* callInst = dyn_cast<CallInst>(&*i)) { 2417 // We know we've encountered a call instruction, so we 2418 // need to determine if it's a call to the 2419 // function pointed to by m_func or not. 2420 if (callInst->getCalledFunction() == targetFunc) 2421 ++callCounter; 2422 } 2423 } 2424 } 2425 } 2426 2427 private: 2428 unsigned callCounter; 2429 }; 2430 2431.. _calls_and_invokes: 2432 2433Treating calls and invokes the same way 2434^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2435 2436You may have noticed that the previous example was a bit oversimplified in that 2437it did not deal with call sites generated by 'invoke' instructions. In this, 2438and in other situations, you may find that you want to treat ``CallInst``\ s and 2439``InvokeInst``\ s the same way, even though their most-specific common base 2440class is ``Instruction``, which includes lots of less closely-related things. 2441For these cases, LLVM provides a handy wrapper class called ``CallSite`` 2442(`doxygen <http://llvm.org/doxygen/classllvm_1_1CallSite.html>`__) It is 2443essentially a wrapper around an ``Instruction`` pointer, with some methods that 2444provide functionality common to ``CallInst``\ s and ``InvokeInst``\ s. 2445 2446This class has "value semantics": it should be passed by value, not by reference 2447and it should not be dynamically allocated or deallocated using ``operator new`` 2448or ``operator delete``. It is efficiently copyable, assignable and 2449constructable, with costs equivalents to that of a bare pointer. If you look at 2450its definition, it has only a single pointer member. 2451 2452.. _iterate_chains: 2453 2454Iterating over def-use & use-def chains 2455^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2456 2457Frequently, we might have an instance of the ``Value`` class (`doxygen 2458<http://llvm.org/doxygen/classllvm_1_1Value.html>`__) and we want to determine 2459which ``User`` s use the ``Value``. The list of all ``User``\ s of a particular 2460``Value`` is called a *def-use* chain. For example, let's say we have a 2461``Function*`` named ``F`` to a particular function ``foo``. Finding all of the 2462instructions that *use* ``foo`` is as simple as iterating over the *def-use* 2463chain of ``F``: 2464 2465.. code-block:: c++ 2466 2467 Function *F = ...; 2468 2469 for (User *U : F->users()) { 2470 if (Instruction *Inst = dyn_cast<Instruction>(U)) { 2471 errs() << "F is used in instruction:\n"; 2472 errs() << *Inst << "\n"; 2473 } 2474 2475Alternatively, it's common to have an instance of the ``User`` Class (`doxygen 2476<http://llvm.org/doxygen/classllvm_1_1User.html>`__) and need to know what 2477``Value``\ s are used by it. The list of all ``Value``\ s used by a ``User`` is 2478known as a *use-def* chain. Instances of class ``Instruction`` are common 2479``User`` s, so we might want to iterate over all of the values that a particular 2480instruction uses (that is, the operands of the particular ``Instruction``): 2481 2482.. code-block:: c++ 2483 2484 Instruction *pi = ...; 2485 2486 for (Use &U : pi->operands()) { 2487 Value *v = U.get(); 2488 // ... 2489 } 2490 2491Declaring objects as ``const`` is an important tool of enforcing mutation free 2492algorithms (such as analyses, etc.). For this purpose above iterators come in 2493constant flavors as ``Value::const_use_iterator`` and 2494``Value::const_op_iterator``. They automatically arise when calling 2495``use/op_begin()`` on ``const Value*``\ s or ``const User*``\ s respectively. 2496Upon dereferencing, they return ``const Use*``\ s. Otherwise the above patterns 2497remain unchanged. 2498 2499.. _iterate_preds: 2500 2501Iterating over predecessors & successors of blocks 2502^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2503 2504Iterating over the predecessors and successors of a block is quite easy with the 2505routines defined in ``"llvm/IR/CFG.h"``. Just use code like this to 2506iterate over all predecessors of BB: 2507 2508.. code-block:: c++ 2509 2510 #include "llvm/IR/CFG.h" 2511 BasicBlock *BB = ...; 2512 2513 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 2514 BasicBlock *Pred = *PI; 2515 // ... 2516 } 2517 2518Similarly, to iterate over successors use ``succ_iterator/succ_begin/succ_end``. 2519 2520.. _simplechanges: 2521 2522Making simple changes 2523--------------------- 2524 2525There are some primitive transformation operations present in the LLVM 2526infrastructure that are worth knowing about. When performing transformations, 2527it's fairly common to manipulate the contents of basic blocks. This section 2528describes some of the common methods for doing so and gives example code. 2529 2530.. _schanges_creating: 2531 2532Creating and inserting new ``Instruction``\ s 2533^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2534 2535*Instantiating Instructions* 2536 2537Creation of ``Instruction``\ s is straight-forward: simply call the constructor 2538for the kind of instruction to instantiate and provide the necessary parameters. 2539For example, an ``AllocaInst`` only *requires* a (const-ptr-to) ``Type``. Thus: 2540 2541.. code-block:: c++ 2542 2543 AllocaInst* ai = new AllocaInst(Type::Int32Ty); 2544 2545will create an ``AllocaInst`` instance that represents the allocation of one 2546integer in the current stack frame, at run time. Each ``Instruction`` subclass 2547is likely to have varying default parameters which change the semantics of the 2548instruction, so refer to the `doxygen documentation for the subclass of 2549Instruction <http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_ that 2550you're interested in instantiating. 2551 2552*Naming values* 2553 2554It is very useful to name the values of instructions when you're able to, as 2555this facilitates the debugging of your transformations. If you end up looking 2556at generated LLVM machine code, you definitely want to have logical names 2557associated with the results of instructions! By supplying a value for the 2558``Name`` (default) parameter of the ``Instruction`` constructor, you associate a 2559logical name with the result of the instruction's execution at run time. For 2560example, say that I'm writing a transformation that dynamically allocates space 2561for an integer on the stack, and that integer is going to be used as some kind 2562of index by some other code. To accomplish this, I place an ``AllocaInst`` at 2563the first point in the first ``BasicBlock`` of some ``Function``, and I'm 2564intending to use it within the same ``Function``. I might do: 2565 2566.. code-block:: c++ 2567 2568 AllocaInst* pa = new AllocaInst(Type::Int32Ty, 0, "indexLoc"); 2569 2570where ``indexLoc`` is now the logical name of the instruction's execution value, 2571which is a pointer to an integer on the run time stack. 2572 2573*Inserting instructions* 2574 2575There are essentially three ways to insert an ``Instruction`` into an existing 2576sequence of instructions that form a ``BasicBlock``: 2577 2578* Insertion into an explicit instruction list 2579 2580 Given a ``BasicBlock* pb``, an ``Instruction* pi`` within that ``BasicBlock``, 2581 and a newly-created instruction we wish to insert before ``*pi``, we do the 2582 following: 2583 2584 .. code-block:: c++ 2585 2586 BasicBlock *pb = ...; 2587 Instruction *pi = ...; 2588 Instruction *newInst = new Instruction(...); 2589 2590 pb->getInstList().insert(pi, newInst); // Inserts newInst before pi in pb 2591 2592 Appending to the end of a ``BasicBlock`` is so common that the ``Instruction`` 2593 class and ``Instruction``-derived classes provide constructors which take a 2594 pointer to a ``BasicBlock`` to be appended to. For example code that looked 2595 like: 2596 2597 .. code-block:: c++ 2598 2599 BasicBlock *pb = ...; 2600 Instruction *newInst = new Instruction(...); 2601 2602 pb->getInstList().push_back(newInst); // Appends newInst to pb 2603 2604 becomes: 2605 2606 .. code-block:: c++ 2607 2608 BasicBlock *pb = ...; 2609 Instruction *newInst = new Instruction(..., pb); 2610 2611 which is much cleaner, especially if you are creating long instruction 2612 streams. 2613 2614* Insertion into an implicit instruction list 2615 2616 ``Instruction`` instances that are already in ``BasicBlock``\ s are implicitly 2617 associated with an existing instruction list: the instruction list of the 2618 enclosing basic block. Thus, we could have accomplished the same thing as the 2619 above code without being given a ``BasicBlock`` by doing: 2620 2621 .. code-block:: c++ 2622 2623 Instruction *pi = ...; 2624 Instruction *newInst = new Instruction(...); 2625 2626 pi->getParent()->getInstList().insert(pi, newInst); 2627 2628 In fact, this sequence of steps occurs so frequently that the ``Instruction`` 2629 class and ``Instruction``-derived classes provide constructors which take (as 2630 a default parameter) a pointer to an ``Instruction`` which the newly-created 2631 ``Instruction`` should precede. That is, ``Instruction`` constructors are 2632 capable of inserting the newly-created instance into the ``BasicBlock`` of a 2633 provided instruction, immediately before that instruction. Using an 2634 ``Instruction`` constructor with a ``insertBefore`` (default) parameter, the 2635 above code becomes: 2636 2637 .. code-block:: c++ 2638 2639 Instruction* pi = ...; 2640 Instruction* newInst = new Instruction(..., pi); 2641 2642 which is much cleaner, especially if you're creating a lot of instructions and 2643 adding them to ``BasicBlock``\ s. 2644 2645* Insertion using an instance of ``IRBuilder`` 2646 2647 Inserting several ``Instruction``\ s can be quite laborious using the previous 2648 methods. The ``IRBuilder`` is a convenience class that can be used to add 2649 several instructions to the end of a ``BasicBlock`` or before a particular 2650 ``Instruction``. It also supports constant folding and renaming named 2651 registers (see ``IRBuilder``'s template arguments). 2652 2653 The example below demonstrates a very simple use of the ``IRBuilder`` where 2654 three instructions are inserted before the instruction ``pi``. The first two 2655 instructions are Call instructions and third instruction multiplies the return 2656 value of the two calls. 2657 2658 .. code-block:: c++ 2659 2660 Instruction *pi = ...; 2661 IRBuilder<> Builder(pi); 2662 CallInst* callOne = Builder.CreateCall(...); 2663 CallInst* callTwo = Builder.CreateCall(...); 2664 Value* result = Builder.CreateMul(callOne, callTwo); 2665 2666 The example below is similar to the above example except that the created 2667 ``IRBuilder`` inserts instructions at the end of the ``BasicBlock`` ``pb``. 2668 2669 .. code-block:: c++ 2670 2671 BasicBlock *pb = ...; 2672 IRBuilder<> Builder(pb); 2673 CallInst* callOne = Builder.CreateCall(...); 2674 CallInst* callTwo = Builder.CreateCall(...); 2675 Value* result = Builder.CreateMul(callOne, callTwo); 2676 2677 See :doc:`tutorial/LangImpl03` for a practical use of the ``IRBuilder``. 2678 2679 2680.. _schanges_deleting: 2681 2682Deleting Instructions 2683^^^^^^^^^^^^^^^^^^^^^ 2684 2685Deleting an instruction from an existing sequence of instructions that form a 2686BasicBlock_ is very straight-forward: just call the instruction's 2687``eraseFromParent()`` method. For example: 2688 2689.. code-block:: c++ 2690 2691 Instruction *I = .. ; 2692 I->eraseFromParent(); 2693 2694This unlinks the instruction from its containing basic block and deletes it. If 2695you'd just like to unlink the instruction from its containing basic block but 2696not delete it, you can use the ``removeFromParent()`` method. 2697 2698.. _schanges_replacing: 2699 2700Replacing an Instruction with another Value 2701^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2702 2703Replacing individual instructions 2704""""""""""""""""""""""""""""""""" 2705 2706Including "`llvm/Transforms/Utils/BasicBlockUtils.h 2707<http://llvm.org/doxygen/BasicBlockUtils_8h-source.html>`_" permits use of two 2708very useful replace functions: ``ReplaceInstWithValue`` and 2709``ReplaceInstWithInst``. 2710 2711.. _schanges_deleting_sub: 2712 2713Deleting Instructions 2714""""""""""""""""""""" 2715 2716* ``ReplaceInstWithValue`` 2717 2718 This function replaces all uses of a given instruction with a value, and then 2719 removes the original instruction. The following example illustrates the 2720 replacement of the result of a particular ``AllocaInst`` that allocates memory 2721 for a single integer with a null pointer to an integer. 2722 2723 .. code-block:: c++ 2724 2725 AllocaInst* instToReplace = ...; 2726 BasicBlock::iterator ii(instToReplace); 2727 2728 ReplaceInstWithValue(instToReplace->getParent()->getInstList(), ii, 2729 Constant::getNullValue(PointerType::getUnqual(Type::Int32Ty))); 2730 2731* ``ReplaceInstWithInst`` 2732 2733 This function replaces a particular instruction with another instruction, 2734 inserting the new instruction into the basic block at the location where the 2735 old instruction was, and replacing any uses of the old instruction with the 2736 new instruction. The following example illustrates the replacement of one 2737 ``AllocaInst`` with another. 2738 2739 .. code-block:: c++ 2740 2741 AllocaInst* instToReplace = ...; 2742 BasicBlock::iterator ii(instToReplace); 2743 2744 ReplaceInstWithInst(instToReplace->getParent()->getInstList(), ii, 2745 new AllocaInst(Type::Int32Ty, 0, "ptrToReplacedInt")); 2746 2747 2748Replacing multiple uses of Users and Values 2749""""""""""""""""""""""""""""""""""""""""""" 2750 2751You can use ``Value::replaceAllUsesWith`` and ``User::replaceUsesOfWith`` to 2752change more than one use at a time. See the doxygen documentation for the 2753`Value Class <http://llvm.org/doxygen/classllvm_1_1Value.html>`_ and `User Class 2754<http://llvm.org/doxygen/classllvm_1_1User.html>`_, respectively, for more 2755information. 2756 2757.. _schanges_deletingGV: 2758 2759Deleting GlobalVariables 2760^^^^^^^^^^^^^^^^^^^^^^^^ 2761 2762Deleting a global variable from a module is just as easy as deleting an 2763Instruction. First, you must have a pointer to the global variable that you 2764wish to delete. You use this pointer to erase it from its parent, the module. 2765For example: 2766 2767.. code-block:: c++ 2768 2769 GlobalVariable *GV = .. ; 2770 2771 GV->eraseFromParent(); 2772 2773 2774.. _create_types: 2775 2776How to Create Types 2777------------------- 2778 2779In generating IR, you may need some complex types. If you know these types 2780statically, you can use ``TypeBuilder<...>::get()``, defined in 2781``llvm/Support/TypeBuilder.h``, to retrieve them. ``TypeBuilder`` has two forms 2782depending on whether you're building types for cross-compilation or native 2783library use. ``TypeBuilder<T, true>`` requires that ``T`` be independent of the 2784host environment, meaning that it's built out of types from the ``llvm::types`` 2785(`doxygen <http://llvm.org/doxygen/namespacellvm_1_1types.html>`__) namespace 2786and pointers, functions, arrays, etc. built of those. ``TypeBuilder<T, false>`` 2787additionally allows native C types whose size may depend on the host compiler. 2788For example, 2789 2790.. code-block:: c++ 2791 2792 FunctionType *ft = TypeBuilder<types::i<8>(types::i<32>*), true>::get(); 2793 2794is easier to read and write than the equivalent 2795 2796.. code-block:: c++ 2797 2798 std::vector<const Type*> params; 2799 params.push_back(PointerType::getUnqual(Type::Int32Ty)); 2800 FunctionType *ft = FunctionType::get(Type::Int8Ty, params, false); 2801 2802See the `class comment 2803<http://llvm.org/doxygen/TypeBuilder_8h-source.html#l00001>`_ for more details. 2804 2805.. _threading: 2806 2807Threads and LLVM 2808================ 2809 2810This section describes the interaction of the LLVM APIs with multithreading, 2811both on the part of client applications, and in the JIT, in the hosted 2812application. 2813 2814Note that LLVM's support for multithreading is still relatively young. Up 2815through version 2.5, the execution of threaded hosted applications was 2816supported, but not threaded client access to the APIs. While this use case is 2817now supported, clients *must* adhere to the guidelines specified below to ensure 2818proper operation in multithreaded mode. 2819 2820Note that, on Unix-like platforms, LLVM requires the presence of GCC's atomic 2821intrinsics in order to support threaded operation. If you need a 2822multhreading-capable LLVM on a platform without a suitably modern system 2823compiler, consider compiling LLVM and LLVM-GCC in single-threaded mode, and 2824using the resultant compiler to build a copy of LLVM with multithreading 2825support. 2826 2827.. _shutdown: 2828 2829Ending Execution with ``llvm_shutdown()`` 2830----------------------------------------- 2831 2832When you are done using the LLVM APIs, you should call ``llvm_shutdown()`` to 2833deallocate memory used for internal structures. 2834 2835.. _managedstatic: 2836 2837Lazy Initialization with ``ManagedStatic`` 2838------------------------------------------ 2839 2840``ManagedStatic`` is a utility class in LLVM used to implement static 2841initialization of static resources, such as the global type tables. In a 2842single-threaded environment, it implements a simple lazy initialization scheme. 2843When LLVM is compiled with support for multi-threading, however, it uses 2844double-checked locking to implement thread-safe lazy initialization. 2845 2846.. _llvmcontext: 2847 2848Achieving Isolation with ``LLVMContext`` 2849---------------------------------------- 2850 2851``LLVMContext`` is an opaque class in the LLVM API which clients can use to 2852operate multiple, isolated instances of LLVM concurrently within the same 2853address space. For instance, in a hypothetical compile-server, the compilation 2854of an individual translation unit is conceptually independent from all the 2855others, and it would be desirable to be able to compile incoming translation 2856units concurrently on independent server threads. Fortunately, ``LLVMContext`` 2857exists to enable just this kind of scenario! 2858 2859Conceptually, ``LLVMContext`` provides isolation. Every LLVM entity 2860(``Module``\ s, ``Value``\ s, ``Type``\ s, ``Constant``\ s, etc.) in LLVM's 2861in-memory IR belongs to an ``LLVMContext``. Entities in different contexts 2862*cannot* interact with each other: ``Module``\ s in different contexts cannot be 2863linked together, ``Function``\ s cannot be added to ``Module``\ s in different 2864contexts, etc. What this means is that is is safe to compile on multiple 2865threads simultaneously, as long as no two threads operate on entities within the 2866same context. 2867 2868In practice, very few places in the API require the explicit specification of a 2869``LLVMContext``, other than the ``Type`` creation/lookup APIs. Because every 2870``Type`` carries a reference to its owning context, most other entities can 2871determine what context they belong to by looking at their own ``Type``. If you 2872are adding new entities to LLVM IR, please try to maintain this interface 2873design. 2874 2875.. _jitthreading: 2876 2877Threads and the JIT 2878------------------- 2879 2880LLVM's "eager" JIT compiler is safe to use in threaded programs. Multiple 2881threads can call ``ExecutionEngine::getPointerToFunction()`` or 2882``ExecutionEngine::runFunction()`` concurrently, and multiple threads can run 2883code output by the JIT concurrently. The user must still ensure that only one 2884thread accesses IR in a given ``LLVMContext`` while another thread might be 2885modifying it. One way to do that is to always hold the JIT lock while accessing 2886IR outside the JIT (the JIT *modifies* the IR by adding ``CallbackVH``\ s). 2887Another way is to only call ``getPointerToFunction()`` from the 2888``LLVMContext``'s thread. 2889 2890When the JIT is configured to compile lazily (using 2891``ExecutionEngine::DisableLazyCompilation(false)``), there is currently a `race 2892condition <http://llvm.org/bugs/show_bug.cgi?id=5184>`_ in updating call sites 2893after a function is lazily-jitted. It's still possible to use the lazy JIT in a 2894threaded program if you ensure that only one thread at a time can call any 2895particular lazy stub and that the JIT lock guards any IR access, but we suggest 2896using only the eager JIT in threaded programs. 2897 2898.. _advanced: 2899 2900Advanced Topics 2901=============== 2902 2903This section describes some of the advanced or obscure API's that most clients 2904do not need to be aware of. These API's tend manage the inner workings of the 2905LLVM system, and only need to be accessed in unusual circumstances. 2906 2907.. _SymbolTable: 2908 2909The ``ValueSymbolTable`` class 2910------------------------------ 2911 2912The ``ValueSymbolTable`` (`doxygen 2913<http://llvm.org/doxygen/classllvm_1_1ValueSymbolTable.html>`__) class provides 2914a symbol table that the :ref:`Function <c_Function>` and Module_ classes use for 2915naming value definitions. The symbol table can provide a name for any Value_. 2916 2917Note that the ``SymbolTable`` class should not be directly accessed by most 2918clients. It should only be used when iteration over the symbol table names 2919themselves are required, which is very special purpose. Note that not all LLVM 2920Value_\ s have names, and those without names (i.e. they have an empty name) do 2921not exist in the symbol table. 2922 2923Symbol tables support iteration over the values in the symbol table with 2924``begin/end/iterator`` and supports querying to see if a specific name is in the 2925symbol table (with ``lookup``). The ``ValueSymbolTable`` class exposes no 2926public mutator methods, instead, simply call ``setName`` on a value, which will 2927autoinsert it into the appropriate symbol table. 2928 2929.. _UserLayout: 2930 2931The ``User`` and owned ``Use`` classes' memory layout 2932----------------------------------------------------- 2933 2934The ``User`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1User.html>`__) 2935class provides a basis for expressing the ownership of ``User`` towards other 2936`Value instance <http://llvm.org/doxygen/classllvm_1_1Value.html>`_\ s. The 2937``Use`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1Use.html>`__) helper 2938class is employed to do the bookkeeping and to facilitate *O(1)* addition and 2939removal. 2940 2941.. _Use2User: 2942 2943Interaction and relationship between ``User`` and ``Use`` objects 2944^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2945 2946A subclass of ``User`` can choose between incorporating its ``Use`` objects or 2947refer to them out-of-line by means of a pointer. A mixed variant (some ``Use`` 2948s inline others hung off) is impractical and breaks the invariant that the 2949``Use`` objects belonging to the same ``User`` form a contiguous array. 2950 2951We have 2 different layouts in the ``User`` (sub)classes: 2952 2953* Layout a) 2954 2955 The ``Use`` object(s) are inside (resp. at fixed offset) of the ``User`` 2956 object and there are a fixed number of them. 2957 2958* Layout b) 2959 2960 The ``Use`` object(s) are referenced by a pointer to an array from the 2961 ``User`` object and there may be a variable number of them. 2962 2963As of v2.4 each layout still possesses a direct pointer to the start of the 2964array of ``Use``\ s. Though not mandatory for layout a), we stick to this 2965redundancy for the sake of simplicity. The ``User`` object also stores the 2966number of ``Use`` objects it has. (Theoretically this information can also be 2967calculated given the scheme presented below.) 2968 2969Special forms of allocation operators (``operator new``) enforce the following 2970memory layouts: 2971 2972* Layout a) is modelled by prepending the ``User`` object by the ``Use[]`` 2973 array. 2974 2975 .. code-block:: none 2976 2977 ...---.---.---.---.-------... 2978 | P | P | P | P | User 2979 '''---'---'---'---'-------''' 2980 2981* Layout b) is modelled by pointing at the ``Use[]`` array. 2982 2983 .. code-block:: none 2984 2985 .-------... 2986 | User 2987 '-------''' 2988 | 2989 v 2990 .---.---.---.---... 2991 | P | P | P | P | 2992 '---'---'---'---''' 2993 2994*(In the above figures* '``P``' *stands for the* ``Use**`` *that is stored in 2995each* ``Use`` *object in the member* ``Use::Prev`` *)* 2996 2997.. _Waymarking: 2998 2999The waymarking algorithm 3000^^^^^^^^^^^^^^^^^^^^^^^^ 3001 3002Since the ``Use`` objects are deprived of the direct (back)pointer to their 3003``User`` objects, there must be a fast and exact method to recover it. This is 3004accomplished by the following scheme: 3005 3006A bit-encoding in the 2 LSBits (least significant bits) of the ``Use::Prev`` 3007allows to find the start of the ``User`` object: 3008 3009* ``00`` --- binary digit 0 3010 3011* ``01`` --- binary digit 1 3012 3013* ``10`` --- stop and calculate (``s``) 3014 3015* ``11`` --- full stop (``S``) 3016 3017Given a ``Use*``, all we have to do is to walk till we get a stop and we either 3018have a ``User`` immediately behind or we have to walk to the next stop picking 3019up digits and calculating the offset: 3020 3021.. code-block:: none 3022 3023 .---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---------------- 3024 | 1 | s | 1 | 0 | 1 | 0 | s | 1 | 1 | 0 | s | 1 | 1 | s | 1 | S | User (or User*) 3025 '---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---------------- 3026 |+15 |+10 |+6 |+3 |+1 3027 | | | | | __> 3028 | | | | __________> 3029 | | | ______________________> 3030 | | ______________________________________> 3031 | __________________________________________________________> 3032 3033Only the significant number of bits need to be stored between the stops, so that 3034the *worst case is 20 memory accesses* when there are 1000 ``Use`` objects 3035associated with a ``User``. 3036 3037.. _ReferenceImpl: 3038 3039Reference implementation 3040^^^^^^^^^^^^^^^^^^^^^^^^ 3041 3042The following literate Haskell fragment demonstrates the concept: 3043 3044.. code-block:: haskell 3045 3046 > import Test.QuickCheck 3047 > 3048 > digits :: Int -> [Char] -> [Char] 3049 > digits 0 acc = '0' : acc 3050 > digits 1 acc = '1' : acc 3051 > digits n acc = digits (n `div` 2) $ digits (n `mod` 2) acc 3052 > 3053 > dist :: Int -> [Char] -> [Char] 3054 > dist 0 [] = ['S'] 3055 > dist 0 acc = acc 3056 > dist 1 acc = let r = dist 0 acc in 's' : digits (length r) r 3057 > dist n acc = dist (n - 1) $ dist 1 acc 3058 > 3059 > takeLast n ss = reverse $ take n $ reverse ss 3060 > 3061 > test = takeLast 40 $ dist 20 [] 3062 > 3063 3064Printing <test> gives: ``"1s100000s11010s10100s1111s1010s110s11s1S"`` 3065 3066The reverse algorithm computes the length of the string just by examining a 3067certain prefix: 3068 3069.. code-block:: haskell 3070 3071 > pref :: [Char] -> Int 3072 > pref "S" = 1 3073 > pref ('s':'1':rest) = decode 2 1 rest 3074 > pref (_:rest) = 1 + pref rest 3075 > 3076 > decode walk acc ('0':rest) = decode (walk + 1) (acc * 2) rest 3077 > decode walk acc ('1':rest) = decode (walk + 1) (acc * 2 + 1) rest 3078 > decode walk acc _ = walk + acc 3079 > 3080 3081Now, as expected, printing <pref test> gives ``40``. 3082 3083We can *quickCheck* this with following property: 3084 3085.. code-block:: haskell 3086 3087 > testcase = dist 2000 [] 3088 > testcaseLength = length testcase 3089 > 3090 > identityProp n = n > 0 && n <= testcaseLength ==> length arr == pref arr 3091 > where arr = takeLast n testcase 3092 > 3093 3094As expected <quickCheck identityProp> gives: 3095 3096:: 3097 3098 *Main> quickCheck identityProp 3099 OK, passed 100 tests. 3100 3101Let's be a bit more exhaustive: 3102 3103.. code-block:: haskell 3104 3105 > 3106 > deepCheck p = check (defaultConfig { configMaxTest = 500 }) p 3107 > 3108 3109And here is the result of <deepCheck identityProp>: 3110 3111:: 3112 3113 *Main> deepCheck identityProp 3114 OK, passed 500 tests. 3115 3116.. _Tagging: 3117 3118Tagging considerations 3119^^^^^^^^^^^^^^^^^^^^^^ 3120 3121To maintain the invariant that the 2 LSBits of each ``Use**`` in ``Use`` never 3122change after being set up, setters of ``Use::Prev`` must re-tag the new 3123``Use**`` on every modification. Accordingly getters must strip the tag bits. 3124 3125For layout b) instead of the ``User`` we find a pointer (``User*`` with LSBit 3126set). Following this pointer brings us to the ``User``. A portable trick 3127ensures that the first bytes of ``User`` (if interpreted as a pointer) never has 3128the LSBit set. (Portability is relying on the fact that all known compilers 3129place the ``vptr`` in the first word of the instances.) 3130 3131.. _polymorphism: 3132 3133Designing Type Hiercharies and Polymorphic Interfaces 3134----------------------------------------------------- 3135 3136There are two different design patterns that tend to result in the use of 3137virtual dispatch for methods in a type hierarchy in C++ programs. The first is 3138a genuine type hierarchy where different types in the hierarchy model 3139a specific subset of the functionality and semantics, and these types nest 3140strictly within each other. Good examples of this can be seen in the ``Value`` 3141or ``Type`` type hierarchies. 3142 3143A second is the desire to dispatch dynamically across a collection of 3144polymorphic interface implementations. This latter use case can be modeled with 3145virtual dispatch and inheritance by defining an abstract interface base class 3146which all implementations derive from and override. However, this 3147implementation strategy forces an **"is-a"** relationship to exist that is not 3148actually meaningful. There is often not some nested hierarchy of useful 3149generalizations which code might interact with and move up and down. Instead, 3150there is a singular interface which is dispatched across a range of 3151implementations. 3152 3153The preferred implementation strategy for the second use case is that of 3154generic programming (sometimes called "compile-time duck typing" or "static 3155polymorphism"). For example, a template over some type parameter ``T`` can be 3156instantiated across any particular implementation that conforms to the 3157interface or *concept*. A good example here is the highly generic properties of 3158any type which models a node in a directed graph. LLVM models these primarily 3159through templates and generic programming. Such templates include the 3160``LoopInfoBase`` and ``DominatorTreeBase``. When this type of polymorphism 3161truly needs **dynamic** dispatch you can generalize it using a technique 3162called *concept-based polymorphism*. This pattern emulates the interfaces and 3163behaviors of templates using a very limited form of virtual dispatch for type 3164erasure inside its implementation. You can find examples of this technique in 3165the ``PassManager.h`` system, and there is a more detailed introduction to it 3166by Sean Parent in several of his talks and papers: 3167 3168#. `Inheritance Is The Base Class of Evil 3169 <http://channel9.msdn.com/Events/GoingNative/2013/Inheritance-Is-The-Base-Class-of-Evil>`_ 3170 - The GoingNative 2013 talk describing this technique, and probably the best 3171 place to start. 3172#. `Value Semantics and Concepts-based Polymorphism 3173 <http://www.youtube.com/watch?v=_BpMYeUFXv8>`_ - The C++Now! 2012 talk 3174 describing this technique in more detail. 3175#. `Sean Parent's Papers and Presentations 3176 <http://github.com/sean-parent/sean-parent.github.com/wiki/Papers-and-Presentations>`_ 3177 - A Github project full of links to slides, video, and sometimes code. 3178 3179When deciding between creating a type hierarchy (with either tagged or virtual 3180dispatch) and using templates or concepts-based polymorphism, consider whether 3181there is some refinement of an abstract base class which is a semantically 3182meaningful type on an interface boundary. If anything more refined than the 3183root abstract interface is meaningless to talk about as a partial extension of 3184the semantic model, then your use case likely fits better with polymorphism and 3185you should avoid using virtual dispatch. However, there may be some exigent 3186circumstances that require one technique or the other to be used. 3187 3188If you do need to introduce a type hierarchy, we prefer to use explicitly 3189closed type hierarchies with manual tagged dispatch and/or RTTI rather than the 3190open inheritance model and virtual dispatch that is more common in C++ code. 3191This is because LLVM rarely encourages library consumers to extend its core 3192types, and leverages the closed and tag-dispatched nature of its hierarchies to 3193generate significantly more efficient code. We have also found that a large 3194amount of our usage of type hierarchies fits better with tag-based pattern 3195matching rather than dynamic dispatch across a common interface. Within LLVM we 3196have built custom helpers to facilitate this design. See this document's 3197section on :ref:`isa and dyn_cast <isa>` and our :doc:`detailed document 3198<HowToSetUpLLVMStyleRTTI>` which describes how you can implement this 3199pattern for use with the LLVM helpers. 3200 3201.. _abi_breaking_checks: 3202 3203ABI Breaking Checks 3204------------------- 3205 3206Checks and asserts that alter the LLVM C++ ABI are predicated on the 3207preprocessor symbol `LLVM_ENABLE_ABI_BREAKING_CHECKS` -- LLVM 3208libraries built with `LLVM_ENABLE_ABI_BREAKING_CHECKS` are not ABI 3209compatible LLVM libraries built without it defined. By default, 3210turning on assertions also turns on `LLVM_ENABLE_ABI_BREAKING_CHECKS` 3211so a default +Asserts build is not ABI compatible with a 3212default -Asserts build. Clients that want ABI compatibility 3213between +Asserts and -Asserts builds should use the CMake or autoconf 3214build systems to set `LLVM_ENABLE_ABI_BREAKING_CHECKS` independently 3215of `LLVM_ENABLE_ASSERTIONS`. 3216 3217.. _coreclasses: 3218 3219The Core LLVM Class Hierarchy Reference 3220======================================= 3221 3222``#include "llvm/IR/Type.h"`` 3223 3224header source: `Type.h <http://llvm.org/doxygen/Type_8h-source.html>`_ 3225 3226doxygen info: `Type Clases <http://llvm.org/doxygen/classllvm_1_1Type.html>`_ 3227 3228The Core LLVM classes are the primary means of representing the program being 3229inspected or transformed. The core LLVM classes are defined in header files in 3230the ``include/llvm/IR`` directory, and implemented in the ``lib/IR`` 3231directory. It's worth noting that, for historical reasons, this library is 3232called ``libLLVMCore.so``, not ``libLLVMIR.so`` as you might expect. 3233 3234.. _Type: 3235 3236The Type class and Derived Types 3237-------------------------------- 3238 3239``Type`` is a superclass of all type classes. Every ``Value`` has a ``Type``. 3240``Type`` cannot be instantiated directly but only through its subclasses. 3241Certain primitive types (``VoidType``, ``LabelType``, ``FloatType`` and 3242``DoubleType``) have hidden subclasses. They are hidden because they offer no 3243useful functionality beyond what the ``Type`` class offers except to distinguish 3244themselves from other subclasses of ``Type``. 3245 3246All other types are subclasses of ``DerivedType``. Types can be named, but this 3247is not a requirement. There exists exactly one instance of a given shape at any 3248one time. This allows type equality to be performed with address equality of 3249the Type Instance. That is, given two ``Type*`` values, the types are identical 3250if the pointers are identical. 3251 3252.. _m_Type: 3253 3254Important Public Methods 3255^^^^^^^^^^^^^^^^^^^^^^^^ 3256 3257* ``bool isIntegerTy() const``: Returns true for any integer type. 3258 3259* ``bool isFloatingPointTy()``: Return true if this is one of the five 3260 floating point types. 3261 3262* ``bool isSized()``: Return true if the type has known size. Things 3263 that don't have a size are abstract types, labels and void. 3264 3265.. _derivedtypes: 3266 3267Important Derived Types 3268^^^^^^^^^^^^^^^^^^^^^^^ 3269 3270``IntegerType`` 3271 Subclass of DerivedType that represents integer types of any bit width. Any 3272 bit width between ``IntegerType::MIN_INT_BITS`` (1) and 3273 ``IntegerType::MAX_INT_BITS`` (~8 million) can be represented. 3274 3275 * ``static const IntegerType* get(unsigned NumBits)``: get an integer 3276 type of a specific bit width. 3277 3278 * ``unsigned getBitWidth() const``: Get the bit width of an integer type. 3279 3280``SequentialType`` 3281 This is subclassed by ArrayType and VectorType. 3282 3283 * ``const Type * getElementType() const``: Returns the type of each 3284 of the elements in the sequential type. 3285 3286 * ``uint64_t getNumElements() const``: Returns the number of elements 3287 in the sequential type. 3288 3289``ArrayType`` 3290 This is a subclass of SequentialType and defines the interface for array 3291 types. 3292 3293``PointerType`` 3294 Subclass of Type for pointer types. 3295 3296``VectorType`` 3297 Subclass of SequentialType for vector types. A vector type is similar to an 3298 ArrayType but is distinguished because it is a first class type whereas 3299 ArrayType is not. Vector types are used for vector operations and are usually 3300 small vectors of an integer or floating point type. 3301 3302``StructType`` 3303 Subclass of DerivedTypes for struct types. 3304 3305.. _FunctionType: 3306 3307``FunctionType`` 3308 Subclass of DerivedTypes for function types. 3309 3310 * ``bool isVarArg() const``: Returns true if it's a vararg function. 3311 3312 * ``const Type * getReturnType() const``: Returns the return type of the 3313 function. 3314 3315 * ``const Type * getParamType (unsigned i)``: Returns the type of the ith 3316 parameter. 3317 3318 * ``const unsigned getNumParams() const``: Returns the number of formal 3319 parameters. 3320 3321.. _Module: 3322 3323The ``Module`` class 3324-------------------- 3325 3326``#include "llvm/IR/Module.h"`` 3327 3328header source: `Module.h <http://llvm.org/doxygen/Module_8h-source.html>`_ 3329 3330doxygen info: `Module Class <http://llvm.org/doxygen/classllvm_1_1Module.html>`_ 3331 3332The ``Module`` class represents the top level structure present in LLVM 3333programs. An LLVM module is effectively either a translation unit of the 3334original program or a combination of several translation units merged by the 3335linker. The ``Module`` class keeps track of a list of :ref:`Function 3336<c_Function>`\ s, a list of GlobalVariable_\ s, and a SymbolTable_. 3337Additionally, it contains a few helpful member functions that try to make common 3338operations easy. 3339 3340.. _m_Module: 3341 3342Important Public Members of the ``Module`` class 3343^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3344 3345* ``Module::Module(std::string name = "")`` 3346 3347 Constructing a Module_ is easy. You can optionally provide a name for it 3348 (probably based on the name of the translation unit). 3349 3350* | ``Module::iterator`` - Typedef for function list iterator 3351 | ``Module::const_iterator`` - Typedef for const_iterator. 3352 | ``begin()``, ``end()``, ``size()``, ``empty()`` 3353 3354 These are forwarding methods that make it easy to access the contents of a 3355 ``Module`` object's :ref:`Function <c_Function>` list. 3356 3357* ``Module::FunctionListType &getFunctionList()`` 3358 3359 Returns the list of :ref:`Function <c_Function>`\ s. This is necessary to use 3360 when you need to update the list or perform a complex action that doesn't have 3361 a forwarding method. 3362 3363---------------- 3364 3365* | ``Module::global_iterator`` - Typedef for global variable list iterator 3366 | ``Module::const_global_iterator`` - Typedef for const_iterator. 3367 | ``global_begin()``, ``global_end()``, ``global_size()``, ``global_empty()`` 3368 3369 These are forwarding methods that make it easy to access the contents of a 3370 ``Module`` object's GlobalVariable_ list. 3371 3372* ``Module::GlobalListType &getGlobalList()`` 3373 3374 Returns the list of GlobalVariable_\ s. This is necessary to use when you 3375 need to update the list or perform a complex action that doesn't have a 3376 forwarding method. 3377 3378---------------- 3379 3380* ``SymbolTable *getSymbolTable()`` 3381 3382 Return a reference to the SymbolTable_ for this ``Module``. 3383 3384---------------- 3385 3386* ``Function *getFunction(StringRef Name) const`` 3387 3388 Look up the specified function in the ``Module`` SymbolTable_. If it does not 3389 exist, return ``null``. 3390 3391* ``Function *getOrInsertFunction(const std::string &Name, const FunctionType 3392 *T)`` 3393 3394 Look up the specified function in the ``Module`` SymbolTable_. If it does not 3395 exist, add an external declaration for the function and return it. 3396 3397* ``std::string getTypeName(const Type *Ty)`` 3398 3399 If there is at least one entry in the SymbolTable_ for the specified Type_, 3400 return it. Otherwise return the empty string. 3401 3402* ``bool addTypeName(const std::string &Name, const Type *Ty)`` 3403 3404 Insert an entry in the SymbolTable_ mapping ``Name`` to ``Ty``. If there is 3405 already an entry for this name, true is returned and the SymbolTable_ is not 3406 modified. 3407 3408.. _Value: 3409 3410The ``Value`` class 3411------------------- 3412 3413``#include "llvm/IR/Value.h"`` 3414 3415header source: `Value.h <http://llvm.org/doxygen/Value_8h-source.html>`_ 3416 3417doxygen info: `Value Class <http://llvm.org/doxygen/classllvm_1_1Value.html>`_ 3418 3419The ``Value`` class is the most important class in the LLVM Source base. It 3420represents a typed value that may be used (among other things) as an operand to 3421an instruction. There are many different types of ``Value``\ s, such as 3422Constant_\ s, Argument_\ s. Even Instruction_\ s and :ref:`Function 3423<c_Function>`\ s are ``Value``\ s. 3424 3425A particular ``Value`` may be used many times in the LLVM representation for a 3426program. For example, an incoming argument to a function (represented with an 3427instance of the Argument_ class) is "used" by every instruction in the function 3428that references the argument. To keep track of this relationship, the ``Value`` 3429class keeps a list of all of the ``User``\ s that is using it (the User_ class 3430is a base class for all nodes in the LLVM graph that can refer to ``Value``\ s). 3431This use list is how LLVM represents def-use information in the program, and is 3432accessible through the ``use_*`` methods, shown below. 3433 3434Because LLVM is a typed representation, every LLVM ``Value`` is typed, and this 3435Type_ is available through the ``getType()`` method. In addition, all LLVM 3436values can be named. The "name" of the ``Value`` is a symbolic string printed 3437in the LLVM code: 3438 3439.. code-block:: llvm 3440 3441 %foo = add i32 1, 2 3442 3443.. _nameWarning: 3444 3445The name of this instruction is "foo". **NOTE** that the name of any value may 3446be missing (an empty string), so names should **ONLY** be used for debugging 3447(making the source code easier to read, debugging printouts), they should not be 3448used to keep track of values or map between them. For this purpose, use a 3449``std::map`` of pointers to the ``Value`` itself instead. 3450 3451One important aspect of LLVM is that there is no distinction between an SSA 3452variable and the operation that produces it. Because of this, any reference to 3453the value produced by an instruction (or the value available as an incoming 3454argument, for example) is represented as a direct pointer to the instance of the 3455class that represents this value. Although this may take some getting used to, 3456it simplifies the representation and makes it easier to manipulate. 3457 3458.. _m_Value: 3459 3460Important Public Members of the ``Value`` class 3461^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3462 3463* | ``Value::use_iterator`` - Typedef for iterator over the use-list 3464 | ``Value::const_use_iterator`` - Typedef for const_iterator over the 3465 use-list 3466 | ``unsigned use_size()`` - Returns the number of users of the value. 3467 | ``bool use_empty()`` - Returns true if there are no users. 3468 | ``use_iterator use_begin()`` - Get an iterator to the start of the 3469 use-list. 3470 | ``use_iterator use_end()`` - Get an iterator to the end of the use-list. 3471 | ``User *use_back()`` - Returns the last element in the list. 3472 3473 These methods are the interface to access the def-use information in LLVM. 3474 As with all other iterators in LLVM, the naming conventions follow the 3475 conventions defined by the STL_. 3476 3477* ``Type *getType() const`` 3478 This method returns the Type of the Value. 3479 3480* | ``bool hasName() const`` 3481 | ``std::string getName() const`` 3482 | ``void setName(const std::string &Name)`` 3483 3484 This family of methods is used to access and assign a name to a ``Value``, be 3485 aware of the :ref:`precaution above <nameWarning>`. 3486 3487* ``void replaceAllUsesWith(Value *V)`` 3488 3489 This method traverses the use list of a ``Value`` changing all User_\ s of the 3490 current value to refer to "``V``" instead. For example, if you detect that an 3491 instruction always produces a constant value (for example through constant 3492 folding), you can replace all uses of the instruction with the constant like 3493 this: 3494 3495 .. code-block:: c++ 3496 3497 Inst->replaceAllUsesWith(ConstVal); 3498 3499.. _User: 3500 3501The ``User`` class 3502------------------ 3503 3504``#include "llvm/IR/User.h"`` 3505 3506header source: `User.h <http://llvm.org/doxygen/User_8h-source.html>`_ 3507 3508doxygen info: `User Class <http://llvm.org/doxygen/classllvm_1_1User.html>`_ 3509 3510Superclass: Value_ 3511 3512The ``User`` class is the common base class of all LLVM nodes that may refer to 3513``Value``\ s. It exposes a list of "Operands" that are all of the ``Value``\ s 3514that the User is referring to. The ``User`` class itself is a subclass of 3515``Value``. 3516 3517The operands of a ``User`` point directly to the LLVM ``Value`` that it refers 3518to. Because LLVM uses Static Single Assignment (SSA) form, there can only be 3519one definition referred to, allowing this direct connection. This connection 3520provides the use-def information in LLVM. 3521 3522.. _m_User: 3523 3524Important Public Members of the ``User`` class 3525^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3526 3527The ``User`` class exposes the operand list in two ways: through an index access 3528interface and through an iterator based interface. 3529 3530* | ``Value *getOperand(unsigned i)`` 3531 | ``unsigned getNumOperands()`` 3532 3533 These two methods expose the operands of the ``User`` in a convenient form for 3534 direct access. 3535 3536* | ``User::op_iterator`` - Typedef for iterator over the operand list 3537 | ``op_iterator op_begin()`` - Get an iterator to the start of the operand 3538 list. 3539 | ``op_iterator op_end()`` - Get an iterator to the end of the operand list. 3540 3541 Together, these methods make up the iterator based interface to the operands 3542 of a ``User``. 3543 3544 3545.. _Instruction: 3546 3547The ``Instruction`` class 3548------------------------- 3549 3550``#include "llvm/IR/Instruction.h"`` 3551 3552header source: `Instruction.h 3553<http://llvm.org/doxygen/Instruction_8h-source.html>`_ 3554 3555doxygen info: `Instruction Class 3556<http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_ 3557 3558Superclasses: User_, Value_ 3559 3560The ``Instruction`` class is the common base class for all LLVM instructions. 3561It provides only a few methods, but is a very commonly used class. The primary 3562data tracked by the ``Instruction`` class itself is the opcode (instruction 3563type) and the parent BasicBlock_ the ``Instruction`` is embedded into. To 3564represent a specific type of instruction, one of many subclasses of 3565``Instruction`` are used. 3566 3567Because the ``Instruction`` class subclasses the User_ class, its operands can 3568be accessed in the same way as for other ``User``\ s (with the 3569``getOperand()``/``getNumOperands()`` and ``op_begin()``/``op_end()`` methods). 3570An important file for the ``Instruction`` class is the ``llvm/Instruction.def`` 3571file. This file contains some meta-data about the various different types of 3572instructions in LLVM. It describes the enum values that are used as opcodes 3573(for example ``Instruction::Add`` and ``Instruction::ICmp``), as well as the 3574concrete sub-classes of ``Instruction`` that implement the instruction (for 3575example BinaryOperator_ and CmpInst_). Unfortunately, the use of macros in this 3576file confuses doxygen, so these enum values don't show up correctly in the 3577`doxygen output <http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_. 3578 3579.. _s_Instruction: 3580 3581Important Subclasses of the ``Instruction`` class 3582^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3583 3584.. _BinaryOperator: 3585 3586* ``BinaryOperator`` 3587 3588 This subclasses represents all two operand instructions whose operands must be 3589 the same type, except for the comparison instructions. 3590 3591.. _CastInst: 3592 3593* ``CastInst`` 3594 This subclass is the parent of the 12 casting instructions. It provides 3595 common operations on cast instructions. 3596 3597.. _CmpInst: 3598 3599* ``CmpInst`` 3600 3601 This subclass respresents the two comparison instructions, 3602 `ICmpInst <LangRef.html#i_icmp>`_ (integer opreands), and 3603 `FCmpInst <LangRef.html#i_fcmp>`_ (floating point operands). 3604 3605.. _TerminatorInst: 3606 3607* ``TerminatorInst`` 3608 3609 This subclass is the parent of all terminator instructions (those which can 3610 terminate a block). 3611 3612.. _m_Instruction: 3613 3614Important Public Members of the ``Instruction`` class 3615^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3616 3617* ``BasicBlock *getParent()`` 3618 3619 Returns the BasicBlock_ that this 3620 ``Instruction`` is embedded into. 3621 3622* ``bool mayWriteToMemory()`` 3623 3624 Returns true if the instruction writes to memory, i.e. it is a ``call``, 3625 ``free``, ``invoke``, or ``store``. 3626 3627* ``unsigned getOpcode()`` 3628 3629 Returns the opcode for the ``Instruction``. 3630 3631* ``Instruction *clone() const`` 3632 3633 Returns another instance of the specified instruction, identical in all ways 3634 to the original except that the instruction has no parent (i.e. it's not 3635 embedded into a BasicBlock_), and it has no name. 3636 3637.. _Constant: 3638 3639The ``Constant`` class and subclasses 3640------------------------------------- 3641 3642Constant represents a base class for different types of constants. It is 3643subclassed by ConstantInt, ConstantArray, etc. for representing the various 3644types of Constants. GlobalValue_ is also a subclass, which represents the 3645address of a global variable or function. 3646 3647.. _s_Constant: 3648 3649Important Subclasses of Constant 3650^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3651 3652* ConstantInt : This subclass of Constant represents an integer constant of 3653 any width. 3654 3655 * ``const APInt& getValue() const``: Returns the underlying 3656 value of this constant, an APInt value. 3657 3658 * ``int64_t getSExtValue() const``: Converts the underlying APInt value to an 3659 int64_t via sign extension. If the value (not the bit width) of the APInt 3660 is too large to fit in an int64_t, an assertion will result. For this 3661 reason, use of this method is discouraged. 3662 3663 * ``uint64_t getZExtValue() const``: Converts the underlying APInt value 3664 to a uint64_t via zero extension. IF the value (not the bit width) of the 3665 APInt is too large to fit in a uint64_t, an assertion will result. For this 3666 reason, use of this method is discouraged. 3667 3668 * ``static ConstantInt* get(const APInt& Val)``: Returns the ConstantInt 3669 object that represents the value provided by ``Val``. The type is implied 3670 as the IntegerType that corresponds to the bit width of ``Val``. 3671 3672 * ``static ConstantInt* get(const Type *Ty, uint64_t Val)``: Returns the 3673 ConstantInt object that represents the value provided by ``Val`` for integer 3674 type ``Ty``. 3675 3676* ConstantFP : This class represents a floating point constant. 3677 3678 * ``double getValue() const``: Returns the underlying value of this constant. 3679 3680* ConstantArray : This represents a constant array. 3681 3682 * ``const std::vector<Use> &getValues() const``: Returns a vector of 3683 component constants that makeup this array. 3684 3685* ConstantStruct : This represents a constant struct. 3686 3687 * ``const std::vector<Use> &getValues() const``: Returns a vector of 3688 component constants that makeup this array. 3689 3690* GlobalValue : This represents either a global variable or a function. In 3691 either case, the value is a constant fixed address (after linking). 3692 3693.. _GlobalValue: 3694 3695The ``GlobalValue`` class 3696------------------------- 3697 3698``#include "llvm/IR/GlobalValue.h"`` 3699 3700header source: `GlobalValue.h 3701<http://llvm.org/doxygen/GlobalValue_8h-source.html>`_ 3702 3703doxygen info: `GlobalValue Class 3704<http://llvm.org/doxygen/classllvm_1_1GlobalValue.html>`_ 3705 3706Superclasses: Constant_, User_, Value_ 3707 3708Global values ( GlobalVariable_\ s or :ref:`Function <c_Function>`\ s) are the 3709only LLVM values that are visible in the bodies of all :ref:`Function 3710<c_Function>`\ s. Because they are visible at global scope, they are also 3711subject to linking with other globals defined in different translation units. 3712To control the linking process, ``GlobalValue``\ s know their linkage rules. 3713Specifically, ``GlobalValue``\ s know whether they have internal or external 3714linkage, as defined by the ``LinkageTypes`` enumeration. 3715 3716If a ``GlobalValue`` has internal linkage (equivalent to being ``static`` in C), 3717it is not visible to code outside the current translation unit, and does not 3718participate in linking. If it has external linkage, it is visible to external 3719code, and does participate in linking. In addition to linkage information, 3720``GlobalValue``\ s keep track of which Module_ they are currently part of. 3721 3722Because ``GlobalValue``\ s are memory objects, they are always referred to by 3723their **address**. As such, the Type_ of a global is always a pointer to its 3724contents. It is important to remember this when using the ``GetElementPtrInst`` 3725instruction because this pointer must be dereferenced first. For example, if 3726you have a ``GlobalVariable`` (a subclass of ``GlobalValue)`` that is an array 3727of 24 ints, type ``[24 x i32]``, then the ``GlobalVariable`` is a pointer to 3728that array. Although the address of the first element of this array and the 3729value of the ``GlobalVariable`` are the same, they have different types. The 3730``GlobalVariable``'s type is ``[24 x i32]``. The first element's type is 3731``i32.`` Because of this, accessing a global value requires you to dereference 3732the pointer with ``GetElementPtrInst`` first, then its elements can be accessed. 3733This is explained in the `LLVM Language Reference Manual 3734<LangRef.html#globalvars>`_. 3735 3736.. _m_GlobalValue: 3737 3738Important Public Members of the ``GlobalValue`` class 3739^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3740 3741* | ``bool hasInternalLinkage() const`` 3742 | ``bool hasExternalLinkage() const`` 3743 | ``void setInternalLinkage(bool HasInternalLinkage)`` 3744 3745 These methods manipulate the linkage characteristics of the ``GlobalValue``. 3746 3747* ``Module *getParent()`` 3748 3749 This returns the Module_ that the 3750 GlobalValue is currently embedded into. 3751 3752.. _c_Function: 3753 3754The ``Function`` class 3755---------------------- 3756 3757``#include "llvm/IR/Function.h"`` 3758 3759header source: `Function.h <http://llvm.org/doxygen/Function_8h-source.html>`_ 3760 3761doxygen info: `Function Class 3762<http://llvm.org/doxygen/classllvm_1_1Function.html>`_ 3763 3764Superclasses: GlobalValue_, Constant_, User_, Value_ 3765 3766The ``Function`` class represents a single procedure in LLVM. It is actually 3767one of the more complex classes in the LLVM hierarchy because it must keep track 3768of a large amount of data. The ``Function`` class keeps track of a list of 3769BasicBlock_\ s, a list of formal Argument_\ s, and a SymbolTable_. 3770 3771The list of BasicBlock_\ s is the most commonly used part of ``Function`` 3772objects. The list imposes an implicit ordering of the blocks in the function, 3773which indicate how the code will be laid out by the backend. Additionally, the 3774first BasicBlock_ is the implicit entry node for the ``Function``. It is not 3775legal in LLVM to explicitly branch to this initial block. There are no implicit 3776exit nodes, and in fact there may be multiple exit nodes from a single 3777``Function``. If the BasicBlock_ list is empty, this indicates that the 3778``Function`` is actually a function declaration: the actual body of the function 3779hasn't been linked in yet. 3780 3781In addition to a list of BasicBlock_\ s, the ``Function`` class also keeps track 3782of the list of formal Argument_\ s that the function receives. This container 3783manages the lifetime of the Argument_ nodes, just like the BasicBlock_ list does 3784for the BasicBlock_\ s. 3785 3786The SymbolTable_ is a very rarely used LLVM feature that is only used when you 3787have to look up a value by name. Aside from that, the SymbolTable_ is used 3788internally to make sure that there are not conflicts between the names of 3789Instruction_\ s, BasicBlock_\ s, or Argument_\ s in the function body. 3790 3791Note that ``Function`` is a GlobalValue_ and therefore also a Constant_. The 3792value of the function is its address (after linking) which is guaranteed to be 3793constant. 3794 3795.. _m_Function: 3796 3797Important Public Members of the ``Function`` 3798^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3799 3800* ``Function(const FunctionType *Ty, LinkageTypes Linkage, 3801 const std::string &N = "", Module* Parent = 0)`` 3802 3803 Constructor used when you need to create new ``Function``\ s to add the 3804 program. The constructor must specify the type of the function to create and 3805 what type of linkage the function should have. The FunctionType_ argument 3806 specifies the formal arguments and return value for the function. The same 3807 FunctionType_ value can be used to create multiple functions. The ``Parent`` 3808 argument specifies the Module in which the function is defined. If this 3809 argument is provided, the function will automatically be inserted into that 3810 module's list of functions. 3811 3812* ``bool isDeclaration()`` 3813 3814 Return whether or not the ``Function`` has a body defined. If the function is 3815 "external", it does not have a body, and thus must be resolved by linking with 3816 a function defined in a different translation unit. 3817 3818* | ``Function::iterator`` - Typedef for basic block list iterator 3819 | ``Function::const_iterator`` - Typedef for const_iterator. 3820 | ``begin()``, ``end()``, ``size()``, ``empty()`` 3821 3822 These are forwarding methods that make it easy to access the contents of a 3823 ``Function`` object's BasicBlock_ list. 3824 3825* ``Function::BasicBlockListType &getBasicBlockList()`` 3826 3827 Returns the list of BasicBlock_\ s. This is necessary to use when you need to 3828 update the list or perform a complex action that doesn't have a forwarding 3829 method. 3830 3831* | ``Function::arg_iterator`` - Typedef for the argument list iterator 3832 | ``Function::const_arg_iterator`` - Typedef for const_iterator. 3833 | ``arg_begin()``, ``arg_end()``, ``arg_size()``, ``arg_empty()`` 3834 3835 These are forwarding methods that make it easy to access the contents of a 3836 ``Function`` object's Argument_ list. 3837 3838* ``Function::ArgumentListType &getArgumentList()`` 3839 3840 Returns the list of Argument_. This is necessary to use when you need to 3841 update the list or perform a complex action that doesn't have a forwarding 3842 method. 3843 3844* ``BasicBlock &getEntryBlock()`` 3845 3846 Returns the entry ``BasicBlock`` for the function. Because the entry block 3847 for the function is always the first block, this returns the first block of 3848 the ``Function``. 3849 3850* | ``Type *getReturnType()`` 3851 | ``FunctionType *getFunctionType()`` 3852 3853 This traverses the Type_ of the ``Function`` and returns the return type of 3854 the function, or the FunctionType_ of the actual function. 3855 3856* ``SymbolTable *getSymbolTable()`` 3857 3858 Return a pointer to the SymbolTable_ for this ``Function``. 3859 3860.. _GlobalVariable: 3861 3862The ``GlobalVariable`` class 3863---------------------------- 3864 3865``#include "llvm/IR/GlobalVariable.h"`` 3866 3867header source: `GlobalVariable.h 3868<http://llvm.org/doxygen/GlobalVariable_8h-source.html>`_ 3869 3870doxygen info: `GlobalVariable Class 3871<http://llvm.org/doxygen/classllvm_1_1GlobalVariable.html>`_ 3872 3873Superclasses: GlobalValue_, Constant_, User_, Value_ 3874 3875Global variables are represented with the (surprise surprise) ``GlobalVariable`` 3876class. Like functions, ``GlobalVariable``\ s are also subclasses of 3877GlobalValue_, and as such are always referenced by their address (global values 3878must live in memory, so their "name" refers to their constant address). See 3879GlobalValue_ for more on this. Global variables may have an initial value 3880(which must be a Constant_), and if they have an initializer, they may be marked 3881as "constant" themselves (indicating that their contents never change at 3882runtime). 3883 3884.. _m_GlobalVariable: 3885 3886Important Public Members of the ``GlobalVariable`` class 3887^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3888 3889* ``GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes &Linkage, 3890 Constant *Initializer = 0, const std::string &Name = "", Module* Parent = 0)`` 3891 3892 Create a new global variable of the specified type. If ``isConstant`` is true 3893 then the global variable will be marked as unchanging for the program. The 3894 Linkage parameter specifies the type of linkage (internal, external, weak, 3895 linkonce, appending) for the variable. If the linkage is InternalLinkage, 3896 WeakAnyLinkage, WeakODRLinkage, LinkOnceAnyLinkage or LinkOnceODRLinkage, then 3897 the resultant global variable will have internal linkage. AppendingLinkage 3898 concatenates together all instances (in different translation units) of the 3899 variable into a single variable but is only applicable to arrays. See the 3900 `LLVM Language Reference <LangRef.html#modulestructure>`_ for further details 3901 on linkage types. Optionally an initializer, a name, and the module to put 3902 the variable into may be specified for the global variable as well. 3903 3904* ``bool isConstant() const`` 3905 3906 Returns true if this is a global variable that is known not to be modified at 3907 runtime. 3908 3909* ``bool hasInitializer()`` 3910 3911 Returns true if this ``GlobalVariable`` has an intializer. 3912 3913* ``Constant *getInitializer()`` 3914 3915 Returns the initial value for a ``GlobalVariable``. It is not legal to call 3916 this method if there is no initializer. 3917 3918.. _BasicBlock: 3919 3920The ``BasicBlock`` class 3921------------------------ 3922 3923``#include "llvm/IR/BasicBlock.h"`` 3924 3925header source: `BasicBlock.h 3926<http://llvm.org/doxygen/BasicBlock_8h-source.html>`_ 3927 3928doxygen info: `BasicBlock Class 3929<http://llvm.org/doxygen/classllvm_1_1BasicBlock.html>`_ 3930 3931Superclass: Value_ 3932 3933This class represents a single entry single exit section of the code, commonly 3934known as a basic block by the compiler community. The ``BasicBlock`` class 3935maintains a list of Instruction_\ s, which form the body of the block. Matching 3936the language definition, the last element of this list of instructions is always 3937a terminator instruction (a subclass of the TerminatorInst_ class). 3938 3939In addition to tracking the list of instructions that make up the block, the 3940``BasicBlock`` class also keeps track of the :ref:`Function <c_Function>` that 3941it is embedded into. 3942 3943Note that ``BasicBlock``\ s themselves are Value_\ s, because they are 3944referenced by instructions like branches and can go in the switch tables. 3945``BasicBlock``\ s have type ``label``. 3946 3947.. _m_BasicBlock: 3948 3949Important Public Members of the ``BasicBlock`` class 3950^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3951 3952* ``BasicBlock(const std::string &Name = "", Function *Parent = 0)`` 3953 3954 The ``BasicBlock`` constructor is used to create new basic blocks for 3955 insertion into a function. The constructor optionally takes a name for the 3956 new block, and a :ref:`Function <c_Function>` to insert it into. If the 3957 ``Parent`` parameter is specified, the new ``BasicBlock`` is automatically 3958 inserted at the end of the specified :ref:`Function <c_Function>`, if not 3959 specified, the BasicBlock must be manually inserted into the :ref:`Function 3960 <c_Function>`. 3961 3962* | ``BasicBlock::iterator`` - Typedef for instruction list iterator 3963 | ``BasicBlock::const_iterator`` - Typedef for const_iterator. 3964 | ``begin()``, ``end()``, ``front()``, ``back()``, 3965 ``size()``, ``empty()`` 3966 STL-style functions for accessing the instruction list. 3967 3968 These methods and typedefs are forwarding functions that have the same 3969 semantics as the standard library methods of the same names. These methods 3970 expose the underlying instruction list of a basic block in a way that is easy 3971 to manipulate. To get the full complement of container operations (including 3972 operations to update the list), you must use the ``getInstList()`` method. 3973 3974* ``BasicBlock::InstListType &getInstList()`` 3975 3976 This method is used to get access to the underlying container that actually 3977 holds the Instructions. This method must be used when there isn't a 3978 forwarding function in the ``BasicBlock`` class for the operation that you 3979 would like to perform. Because there are no forwarding functions for 3980 "updating" operations, you need to use this if you want to update the contents 3981 of a ``BasicBlock``. 3982 3983* ``Function *getParent()`` 3984 3985 Returns a pointer to :ref:`Function <c_Function>` the block is embedded into, 3986 or a null pointer if it is homeless. 3987 3988* ``TerminatorInst *getTerminator()`` 3989 3990 Returns a pointer to the terminator instruction that appears at the end of the 3991 ``BasicBlock``. If there is no terminator instruction, or if the last 3992 instruction in the block is not a terminator, then a null pointer is returned. 3993 3994.. _Argument: 3995 3996The ``Argument`` class 3997---------------------- 3998 3999This subclass of Value defines the interface for incoming formal arguments to a 4000function. A Function maintains a list of its formal arguments. An argument has 4001a pointer to the parent Function. 4002 4003 4004