Home | History | Annotate | Download | only in docs
      1 ========================
      2 LLVM Programmer's Manual
      3 ========================
      4 
      5 .. contents::
      6    :local:
      7 
      8 .. warning::
      9    This is always a work in progress.
     10 
     11 .. _introduction:
     12 
     13 Introduction
     14 ============
     15 
     16 This document is meant to highlight some of the important classes and interfaces
     17 available in the LLVM source-base.  This manual is not intended to explain what
     18 LLVM is, how it works, and what LLVM code looks like.  It assumes that you know
     19 the basics of LLVM and are interested in writing transformations or otherwise
     20 analyzing or manipulating the code.
     21 
     22 This document should get you oriented so that you can find your way in the
     23 continuously growing source code that makes up the LLVM infrastructure.  Note
     24 that this manual is not intended to serve as a replacement for reading the
     25 source code, so if you think there should be a method in one of these classes to
     26 do 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
     28 possible.
     29 
     30 The first section of this document describes general information that is useful
     31 to know when working in the LLVM infrastructure, and the second describes the
     32 Core LLVM classes.  In the future this manual will be extended with information
     33 describing how to use extension libraries, such as dominator information, CFG
     34 traversal routines, and useful utilities like the ``InstVisitor`` (`doxygen
     35 <http://llvm.org/doxygen/InstVisitor_8h-source.html>`__) template.
     36 
     37 .. _general:
     38 
     39 General Information
     40 ===================
     41 
     42 This section contains general information that is useful if you are working in
     43 the LLVM source-base, but that isn't specific to any particular API.
     44 
     45 .. _stl:
     46 
     47 The C++ Standard Template Library
     48 ---------------------------------
     49 
     50 LLVM makes heavy use of the C++ Standard Template Library (STL), perhaps much
     51 more than you are used to, or have seen before.  Because of this, you might want
     52 to do a little background reading in the techniques used and capabilities of the
     53 library.  There are many good pages that discuss the STL, and several books on
     54 the subject that you can get, so it will not be discussed in this document.
     55 
     56 Here 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 
     80 You 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
     82 than where to put your curly braces.
     83 
     84 .. _resources:
     85 
     86 Other 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 
     94 Important and useful LLVM APIs
     95 ==============================
     96 
     97 Here we highlight some LLVM APIs that are generally useful and good to know
     98 about when writing transformations.
     99 
    100 .. _isa:
    101 
    102 The ``isa<>``, ``cast<>`` and ``dyn_cast<>`` templates
    103 ------------------------------------------------------
    104 
    105 The LLVM source-base makes extensive use of a custom form of RTTI.  These
    106 templates have many similarities to the C++ ``dynamic_cast<>`` operator, but
    107 they 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
    109 used so often, you must know what they do and how they work.  All of these
    110 templates are defined in the ``llvm/Support/Casting.h`` (`doxygen
    111 <http://llvm.org/doxygen/Casting_8h-source.html>`__) file (note that you very
    112 rarely 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 (AllocationInst *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 
    179 These five templates can be used with any classes, whether they have a v-table
    180 or 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 
    186 Passing strings (the ``StringRef`` and ``Twine`` classes)
    187 ---------------------------------------------------------
    188 
    189 Although LLVM generally does not do much string manipulation, we do have several
    190 important APIs which take strings.  Two important examples are the Value class
    191 -- which has names for instructions, functions, etc. -- and the ``StringMap``
    192 class which is used extensively in LLVM and Clang.
    193 
    194 These are generic classes, and they need to be able to accept strings which may
    195 have embedded null characters.  Therefore, they cannot simply take a ``const
    196 char *``, and taking a ``const std::string&`` requires clients to perform a heap
    197 allocation which is usually unnecessary.  Instead, many LLVM APIs use a
    198 ``StringRef`` or a ``const Twine&`` for passing strings efficiently.
    199 
    200 .. _StringRef:
    201 
    202 The ``StringRef`` class
    203 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    204 
    205 The ``StringRef`` data type represents a reference to a constant string (a
    206 character array and a length) and supports the common operations available on
    207 ``std::string``, but does not require heap allocation.
    208 
    209 It can be implicitly constructed using a C style null-terminated string, an
    210 ``std::string``, or explicitly with a character pointer and length.  For
    211 example, the ``StringRef`` find function is declared as:
    212 
    213 .. code-block:: c++
    214 
    215   iterator find(StringRef Key);
    216 
    217 and 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 
    225 Similarly, APIs which need to return a string may return a ``StringRef``
    226 instance, which can be used directly or converted to an ``std::string`` using
    227 the ``str`` member function.  See ``llvm/ADT/StringRef.h`` (`doxygen
    228 <http://llvm.org/doxygen/classllvm_1_1StringRef_8h-source.html>`__) for more
    229 information.
    230 
    231 You should rarely use the ``StringRef`` class directly, because it contains
    232 pointers to external memory it is not generally safe to store an instance of the
    233 class (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
    235 passed by value.
    236 
    237 The ``Twine`` class
    238 ^^^^^^^^^^^^^^^^^^^
    239 
    240 The ``Twine`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1Twine.html>`__)
    241 class is an efficient way for APIs to accept concatenated strings.  For example,
    242 a common LLVM paradigm is to name one instruction based on the name of another
    243 instruction with a suffix, for example:
    244 
    245 .. code-block:: c++
    246 
    247     New = CmpInst::Create(..., SO->getName() + ".cmp");
    248 
    249 The ``Twine`` class is effectively a lightweight `rope
    250 <http://en.wikipedia.org/wiki/Rope_(computer_science)>`_ which points to
    251 temporary (stack allocated) objects.  Twines can be implicitly constructed as
    252 the 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
    254 of strings until it is actually required, at which point it can be efficiently
    255 rendered directly into a character array.  This avoids unnecessary heap
    256 allocation involved in constructing the temporary results of string
    257 concatenation.  See ``llvm/ADT/Twine.h`` (`doxygen
    258 <http://llvm.org/doxygen/Twine_8h_source.html>`__) and :ref:`here <dss_twine>`
    259 for more information.
    260 
    261 As with a ``StringRef``, ``Twine`` objects point to external memory and should
    262 almost never be stored or mentioned directly.  They are intended solely for use
    263 when defining a function which should be able to efficiently accept concatenated
    264 strings.
    265 
    266 .. _DEBUG:
    267 
    268 The ``DEBUG()`` macro and ``-debug`` option
    269 -------------------------------------------
    270 
    271 Often when working on your pass you will put a bunch of debugging printouts and
    272 other code into your pass.  After you get it working, you want to remove it, but
    273 you may need it again in the future (to work out new bugs that you run across).
    274 
    275 Naturally, because of this, you don't want to delete the debug printouts, but
    276 you don't want them to always be noisy.  A standard compromise is to comment
    277 them out, allowing you to enable them if you need them in the future.
    278 
    279 The ``llvm/Support/Debug.h`` (`doxygen
    280 <http://llvm.org/doxygen/Debug_8h-source.html>`__) file provides a macro named
    281 ``DEBUG()`` that is a much nicer solution to this problem.  Basically, you can
    282 put arbitrary code into the argument of the ``DEBUG`` macro, and it is only
    283 executed if '``opt``' (or any other tool) is run with the '``-debug``' command
    284 line argument:
    285 
    286 .. code-block:: c++
    287 
    288   DEBUG(errs() << "I am here!\n");
    289 
    290 Then you can run your pass like this:
    291 
    292 .. code-block:: none
    293 
    294   $ opt < a.bc > /dev/null -mypass
    295   <no output>
    296   $ opt < a.bc > /dev/null -mypass -debug
    297   I am here!
    298 
    299 Using the ``DEBUG()`` macro instead of a home-brewed solution allows you to not
    300 have to create "yet another" command line option for the debug output for your
    301 pass.  Note that ``DEBUG()`` macros are disabled for optimized builds, so they
    302 do not cause a performance impact at all (for the same reason, they should also
    303 not contain side-effects!).
    304 
    305 One additional nice thing about the ``DEBUG()`` macro is that you can enable or
    306 disable it directly in gdb.  Just use "``set DebugFlag=0``" or "``set
    307 DebugFlag=1``" from the gdb if the program is running.  If the program hasn't
    308 been started yet, you can always just run it with ``-debug``.
    309 
    310 .. _DEBUG_TYPE:
    311 
    312 Fine grained debug info with ``DEBUG_TYPE`` and the ``-debug-only`` option
    313 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    314 
    315 Sometimes you may find yourself in a situation where enabling ``-debug`` just
    316 turns on **too much** information (such as when working on the code generator).
    317 If you want to enable debug information with more fine-grained control, you
    318 define the ``DEBUG_TYPE`` macro and the ``-debug`` only option as follows:
    319 
    320 .. code-block:: c++
    321 
    322   #undef  DEBUG_TYPE
    323   DEBUG(errs() << "No debug type\n");
    324   #define DEBUG_TYPE "foo"
    325   DEBUG(errs() << "'foo' debug type\n");
    326   #undef  DEBUG_TYPE
    327   #define DEBUG_TYPE "bar"
    328   DEBUG(errs() << "'bar' debug type\n"));
    329   #undef  DEBUG_TYPE
    330   #define DEBUG_TYPE ""
    331   DEBUG(errs() << "No debug type (2)\n");
    332 
    333 Then you can run your pass like this:
    334 
    335 .. code-block:: none
    336 
    337   $ opt < a.bc > /dev/null -mypass
    338   <no output>
    339   $ opt < a.bc > /dev/null -mypass -debug
    340   No debug type
    341   'foo' debug type
    342   'bar' debug type
    343   No debug type (2)
    344   $ opt < a.bc > /dev/null -mypass -debug-only=foo
    345   'foo' debug type
    346   $ opt < a.bc > /dev/null -mypass -debug-only=bar
    347   'bar' debug type
    348 
    349 Of course, in practice, you should only set ``DEBUG_TYPE`` at the top of a file,
    350 to specify the debug type for the entire module (if you do this before you
    351 ``#include "llvm/Support/Debug.h"``, you don't have to insert the ugly
    352 ``#undef``'s).  Also, you should use names more meaningful than "foo" and "bar",
    353 because there is no system in place to ensure that names do not conflict.  If
    354 two different modules use the same string, they will all be turned on when the
    355 name is specified.  This allows, for example, all debug information for
    356 instruction scheduling to be enabled with ``-debug-type=InstrSched``, even if
    357 the source lives in multiple files.
    358 
    359 The ``DEBUG_WITH_TYPE`` macro is also available for situations where you would
    360 like to set ``DEBUG_TYPE``, but only for one specific ``DEBUG`` statement.  It
    361 takes an additional first parameter, which is the type to use.  For example, the
    362 preceding example could be written as:
    363 
    364 .. code-block:: c++
    365 
    366   DEBUG_WITH_TYPE("", errs() << "No debug type\n");
    367   DEBUG_WITH_TYPE("foo", errs() << "'foo' debug type\n");
    368   DEBUG_WITH_TYPE("bar", errs() << "'bar' debug type\n"));
    369   DEBUG_WITH_TYPE("", errs() << "No debug type (2)\n");
    370 
    371 .. _Statistic:
    372 
    373 The ``Statistic`` class & ``-stats`` option
    374 -------------------------------------------
    375 
    376 The ``llvm/ADT/Statistic.h`` (`doxygen
    377 <http://llvm.org/doxygen/Statistic_8h-source.html>`__) file provides a class
    378 named ``Statistic`` that is used as a unified way to keep track of what the LLVM
    379 compiler is doing and how effective various optimizations are.  It is useful to
    380 see what optimizations are contributing to making a particular program run
    381 faster.
    382 
    383 Often you may run your pass on some big program, and you're interested to see
    384 how many times it makes a certain transformation.  Although you can do this with
    385 hand inspection, or some ad-hoc method, this is a real pain and not very useful
    386 for big programs.  Using the ``Statistic`` class makes it very easy to keep
    387 track of this information, and the calculated information is presented in a
    388 uniform manner with the rest of the passes being executed.
    389 
    390 There are many examples of ``Statistic`` uses, but the basics of using it are as
    391 follows:
    392 
    393 #. Define your statistic like this:
    394 
    395   .. code-block:: c++
    396 
    397     #define DEBUG_TYPE "mypassname"   // This goes before any #includes.
    398     STATISTIC(NumXForms, "The # of times I did stuff");
    399 
    400   The ``STATISTIC`` macro defines a static variable, whose name is specified by
    401   the first argument.  The pass name is taken from the ``DEBUG_TYPE`` macro, and
    402   the description is taken from the second argument.  The variable defined
    403   ("NumXForms" in this case) acts like an unsigned integer.
    404 
    405 #. Whenever you make a transformation, bump the counter:
    406 
    407   .. code-block:: c++
    408 
    409     ++NumXForms;   // I did stuff!
    410 
    411 That's all you have to do.  To get '``opt``' to print out the statistics
    412 gathered, use the '``-stats``' option:
    413 
    414 .. code-block:: none
    415 
    416   $ opt -stats -mypassname < program.bc > /dev/null
    417   ... statistics output ...
    418 
    419 When running ``opt`` on a C file from the SPEC benchmark suite, it gives a
    420 report that looks like this:
    421 
    422 .. code-block:: none
    423 
    424    7646 bitcodewriter   - Number of normal instructions
    425     725 bitcodewriter   - Number of oversized instructions
    426  129996 bitcodewriter   - Number of bitcode bytes written
    427    2817 raise           - Number of insts DCEd or constprop'd
    428    3213 raise           - Number of cast-of-self removed
    429    5046 raise           - Number of expression trees converted
    430      75 raise           - Number of other getelementptr's formed
    431     138 raise           - Number of load/store peepholes
    432      42 deadtypeelim    - Number of unused typenames removed from symtab
    433     392 funcresolve     - Number of varargs functions resolved
    434      27 globaldce       - Number of global variables removed
    435       2 adce            - Number of basic blocks removed
    436     134 cee             - Number of branches revectored
    437      49 cee             - Number of setcc instruction eliminated
    438     532 gcse            - Number of loads removed
    439    2919 gcse            - Number of instructions removed
    440      86 indvars         - Number of canonical indvars added
    441      87 indvars         - Number of aux indvars removed
    442      25 instcombine     - Number of dead inst eliminate
    443     434 instcombine     - Number of insts combined
    444     248 licm            - Number of load insts hoisted
    445    1298 licm            - Number of insts hoisted to a loop pre-header
    446       3 licm            - Number of insts hoisted to multiple loop preds (bad, no loop pre-header)
    447      75 mem2reg         - Number of alloca's promoted
    448    1444 cfgsimplify     - Number of blocks simplified
    449 
    450 Obviously, with so many optimizations, having a unified framework for this stuff
    451 is very nice.  Making your pass fit well into the framework makes it more
    452 maintainable and useful.
    453 
    454 .. _ViewGraph:
    455 
    456 Viewing graphs while debugging code
    457 -----------------------------------
    458 
    459 Several of the important data structures in LLVM are graphs: for example CFGs
    460 made out of LLVM :ref:`BasicBlocks <BasicBlock>`, CFGs made out of LLVM
    461 :ref:`MachineBasicBlocks <MachineBasicBlock>`, and :ref:`Instruction Selection
    462 DAGs <SelectionDAG>`.  In many cases, while debugging various parts of the
    463 compiler, it is nice to instantly visualize these graphs.
    464 
    465 LLVM provides several callbacks that are available in a debug build to do
    466 exactly that.  If you call the ``Function::viewCFG()`` method, for example, the
    467 current LLVM tool will pop up a window containing the CFG for the function where
    468 each basic block is a node in the graph, and each node contains the instructions
    469 in the block.  Similarly, there also exists ``Function::viewCFGOnly()`` (does
    470 not include the instructions), the ``MachineFunction::viewCFG()`` and
    471 ``MachineFunction::viewCFGOnly()``, and the ``SelectionDAG::viewGraph()``
    472 methods.  Within GDB, for example, you can usually use something like ``call
    473 DAG.viewGraph()`` to pop up a window.  Alternatively, you can sprinkle calls to
    474 these functions in your code in places you want to debug.
    475 
    476 Getting this to work requires a small amount of configuration.  On Unix systems
    477 with X11, install the `graphviz <http://www.graphviz.org>`_ toolkit, and make
    478 sure 'dot' and 'gv' are in your path.  If you are running on Mac OS/X, download
    479 and install the Mac OS/X `Graphviz program
    480 <http://www.pixelglow.com/graphviz/>`_ and add
    481 ``/Applications/Graphviz.app/Contents/MacOS/`` (or wherever you install it) to
    482 your path.  Once in your system and path are set up, rerun the LLVM configure
    483 script and rebuild LLVM to enable this functionality.
    484 
    485 ``SelectionDAG`` has been extended to make it easier to locate *interesting*
    486 nodes in large complex graphs.  From gdb, if you ``call DAG.setGraphColor(node,
    487 "color")``, then the next ``call DAG.viewGraph()`` would highlight the node in
    488 the specified color (choices of colors can be found at `colors
    489 <http://www.graphviz.org/doc/info/colors.html>`_.) More complex node attributes
    490 can be provided with ``call DAG.setGraphAttrs(node, "attributes")`` (choices can
    491 be found at `Graph attributes <http://www.graphviz.org/doc/info/attrs.html>`_.)
    492 If you want to restart and clear all the current graph attributes, then you can
    493 ``call DAG.clearGraphAttrs()``.
    494 
    495 Note that graph visualization features are compiled out of Release builds to
    496 reduce file size.  This means that you need a Debug+Asserts or Release+Asserts
    497 build to use these features.
    498 
    499 .. _datastructure:
    500 
    501 Picking the Right Data Structure for a Task
    502 ===========================================
    503 
    504 LLVM has a plethora of data structures in the ``llvm/ADT/`` directory, and we
    505 commonly use STL data structures.  This section describes the trade-offs you
    506 should consider when you pick one.
    507 
    508 The first step is a choose your own adventure: do you want a sequential
    509 container, a set-like container, or a map-like container?  The most important
    510 thing when choosing a container is the algorithmic properties of how you plan to
    511 access the container.  Based on that, you should use:
    512 
    513 
    514 * a :ref:`map-like <ds_map>` container if you need efficient look-up of a
    515   value based on another value.  Map-like containers also support efficient
    516   queries for containment (whether a key is in the map).  Map-like containers
    517   generally do not support efficient reverse mapping (values to keys).  If you
    518   need that, use two maps.  Some map-like containers also support efficient
    519   iteration through the keys in sorted order.  Map-like containers are the most
    520   expensive sort, only use them if you need one of these capabilities.
    521 
    522 * a :ref:`set-like <ds_set>` container if you need to put a bunch of stuff into
    523   a container that automatically eliminates duplicates.  Some set-like
    524   containers support efficient iteration through the elements in sorted order.
    525   Set-like containers are more expensive than sequential containers.
    526 
    527 * a :ref:`sequential <ds_sequential>` container provides the most efficient way
    528   to add elements and keeps track of the order they are added to the collection.
    529   They permit duplicates and support efficient iteration, but do not support
    530   efficient look-up based on a key.
    531 
    532 * a :ref:`string <ds_string>` container is a specialized sequential container or
    533   reference structure that is used for character or byte arrays.
    534 
    535 * a :ref:`bit <ds_bit>` container provides an efficient way to store and
    536   perform set operations on sets of numeric id's, while automatically
    537   eliminating duplicates.  Bit containers require a maximum of 1 bit for each
    538   identifier you want to store.
    539 
    540 Once the proper category of container is determined, you can fine tune the
    541 memory use, constant factors, and cache behaviors of access by intelligently
    542 picking a member of the category.  Note that constant factors and cache behavior
    543 can be a big deal.  If you have a vector that usually only contains a few
    544 elements (but could contain many), for example, it's much better to use
    545 :ref:`SmallVector <dss_smallvector>` than :ref:`vector <dss_vector>`.  Doing so
    546 avoids (relatively) expensive malloc/free calls, which dwarf the cost of adding
    547 the elements to the container.
    548 
    549 .. _ds_sequential:
    550 
    551 Sequential Containers (std::vector, std::list, etc)
    552 ---------------------------------------------------
    553 
    554 There are a variety of sequential containers available for you, based on your
    555 needs.  Pick the first in this section that will do what you want.
    556 
    557 .. _dss_arrayref:
    558 
    559 llvm/ADT/ArrayRef.h
    560 ^^^^^^^^^^^^^^^^^^^
    561 
    562 The ``llvm::ArrayRef`` class is the preferred class to use in an interface that
    563 accepts a sequential list of elements in memory and just reads from them.  By
    564 taking an ``ArrayRef``, the API can be passed a fixed size array, an
    565 ``std::vector``, an ``llvm::SmallVector`` and anything else that is contiguous
    566 in memory.
    567 
    568 .. _dss_fixedarrays:
    569 
    570 Fixed Size Arrays
    571 ^^^^^^^^^^^^^^^^^
    572 
    573 Fixed size arrays are very simple and very fast.  They are good if you know
    574 exactly how many elements you have, or you have a (low) upper bound on how many
    575 you have.
    576 
    577 .. _dss_heaparrays:
    578 
    579 Heap Allocated Arrays
    580 ^^^^^^^^^^^^^^^^^^^^^
    581 
    582 Heap allocated arrays (``new[]`` + ``delete[]``) are also simple.  They are good
    583 if the number of elements is variable, if you know how many elements you will
    584 need before the array is allocated, and if the array is usually large (if not,
    585 consider a :ref:`SmallVector <dss_smallvector>`).  The cost of a heap allocated
    586 array is the cost of the new/delete (aka malloc/free).  Also note that if you
    587 are allocating an array of a type with a constructor, the constructor and
    588 destructors will be run for every element in the array (re-sizable vectors only
    589 construct those elements actually used).
    590 
    591 .. _dss_tinyptrvector:
    592 
    593 llvm/ADT/TinyPtrVector.h
    594 ^^^^^^^^^^^^^^^^^^^^^^^^
    595 
    596 ``TinyPtrVector<Type>`` is a highly specialized collection class that is
    597 optimized to avoid allocation in the case when a vector has zero or one
    598 elements.  It has two major restrictions: 1) it can only hold values of pointer
    599 type, and 2) it cannot hold a null pointer.
    600 
    601 Since this container is highly specialized, it is rarely used.
    602 
    603 .. _dss_smallvector:
    604 
    605 llvm/ADT/SmallVector.h
    606 ^^^^^^^^^^^^^^^^^^^^^^
    607 
    608 ``SmallVector<Type, N>`` is a simple class that looks and smells just like
    609 ``vector<Type>``: it supports efficient iteration, lays out elements in memory
    610 order (so you can do pointer arithmetic between elements), supports efficient
    611 push_back/pop_back operations, supports efficient random access to its elements,
    612 etc.
    613 
    614 The advantage of SmallVector is that it allocates space for some number of
    615 elements (N) **in the object itself**.  Because of this, if the SmallVector is
    616 dynamically smaller than N, no malloc is performed.  This can be a big win in
    617 cases where the malloc/free call is far more expensive than the code that
    618 fiddles around with the elements.
    619 
    620 This is good for vectors that are "usually small" (e.g. the number of
    621 predecessors/successors of a block is usually less than 8).  On the other hand,
    622 this makes the size of the SmallVector itself large, so you don't want to
    623 allocate lots of them (doing so will waste a lot of space).  As such,
    624 SmallVectors are most useful when on the stack.
    625 
    626 SmallVector also provides a nice portable and efficient replacement for
    627 ``alloca``.
    628 
    629 .. note::
    630 
    631    Prefer to use ``SmallVectorImpl<T>`` as a parameter type.
    632 
    633    In APIs that don't care about the "small size" (most?), prefer to use
    634    the ``SmallVectorImpl<T>`` class, which is basically just the "vector
    635    header" (and methods) without the elements allocated after it. Note that
    636    ``SmallVector<T, N>`` inherits from ``SmallVectorImpl<T>`` so the
    637    conversion is implicit and costs nothing. E.g.
    638 
    639    .. code-block:: c++
    640 
    641       // BAD: Clients cannot pass e.g. SmallVector<Foo, 4>.
    642       hardcodedSmallSize(SmallVector<Foo, 2> &Out);
    643       // GOOD: Clients can pass any SmallVector<Foo, N>.
    644       allowsAnySmallSize(SmallVectorImpl<Foo> &Out);
    645 
    646       void someFunc() {
    647         SmallVector<Foo, 8> Vec;
    648         hardcodedSmallSize(Vec); // Error.
    649         allowsAnySmallSize(Vec); // Works.
    650       }
    651 
    652    Even though it has "``Impl``" in the name, this is so widely used that
    653    it really isn't "private to the implementation" anymore. A name like
    654    ``SmallVectorHeader`` would be more appropriate.
    655 
    656 .. _dss_vector:
    657 
    658 <vector>
    659 ^^^^^^^^
    660 
    661 ``std::vector`` is well loved and respected.  It is useful when SmallVector
    662 isn't: when the size of the vector is often large (thus the small optimization
    663 will rarely be a benefit) or if you will be allocating many instances of the
    664 vector itself (which would waste space for elements that aren't in the
    665 container).  vector is also useful when interfacing with code that expects
    666 vectors :).
    667 
    668 One worthwhile note about std::vector: avoid code like this:
    669 
    670 .. code-block:: c++
    671 
    672   for ( ... ) {
    673      std::vector<foo> V;
    674      // make use of V.
    675   }
    676 
    677 Instead, write this as:
    678 
    679 .. code-block:: c++
    680 
    681   std::vector<foo> V;
    682   for ( ... ) {
    683      // make use of V.
    684      V.clear();
    685   }
    686 
    687 Doing so will save (at least) one heap allocation and free per iteration of the
    688 loop.
    689 
    690 .. _dss_deque:
    691 
    692 <deque>
    693 ^^^^^^^
    694 
    695 ``std::deque`` is, in some senses, a generalized version of ``std::vector``.
    696 Like ``std::vector``, it provides constant time random access and other similar
    697 properties, but it also provides efficient access to the front of the list.  It
    698 does not guarantee continuity of elements within memory.
    699 
    700 In exchange for this extra flexibility, ``std::deque`` has significantly higher
    701 constant factor costs than ``std::vector``.  If possible, use ``std::vector`` or
    702 something cheaper.
    703 
    704 .. _dss_list:
    705 
    706 <list>
    707 ^^^^^^
    708 
    709 ``std::list`` is an extremely inefficient class that is rarely useful.  It
    710 performs a heap allocation for every element inserted into it, thus having an
    711 extremely high constant factor, particularly for small data types.
    712 ``std::list`` also only supports bidirectional iteration, not random access
    713 iteration.
    714 
    715 In exchange for this high cost, std::list supports efficient access to both ends
    716 of the list (like ``std::deque``, but unlike ``std::vector`` or
    717 ``SmallVector``).  In addition, the iterator invalidation characteristics of
    718 std::list are stronger than that of a vector class: inserting or removing an
    719 element into the list does not invalidate iterator or pointers to other elements
    720 in the list.
    721 
    722 .. _dss_ilist:
    723 
    724 llvm/ADT/ilist.h
    725 ^^^^^^^^^^^^^^^^
    726 
    727 ``ilist<T>`` implements an 'intrusive' doubly-linked list.  It is intrusive,
    728 because it requires the element to store and provide access to the prev/next
    729 pointers for the list.
    730 
    731 ``ilist`` has the same drawbacks as ``std::list``, and additionally requires an
    732 ``ilist_traits`` implementation for the element type, but it provides some novel
    733 characteristics.  In particular, it can efficiently store polymorphic objects,
    734 the traits class is informed when an element is inserted or removed from the
    735 list, and ``ilist``\ s are guaranteed to support a constant-time splice
    736 operation.
    737 
    738 These properties are exactly what we want for things like ``Instruction``\ s and
    739 basic blocks, which is why these are implemented with ``ilist``\ s.
    740 
    741 Related classes of interest are explained in the following subsections:
    742 
    743 * :ref:`ilist_traits <dss_ilist_traits>`
    744 
    745 * :ref:`iplist <dss_iplist>`
    746 
    747 * :ref:`llvm/ADT/ilist_node.h <dss_ilist_node>`
    748 
    749 * :ref:`Sentinels <dss_ilist_sentinel>`
    750 
    751 .. _dss_packedvector:
    752 
    753 llvm/ADT/PackedVector.h
    754 ^^^^^^^^^^^^^^^^^^^^^^^
    755 
    756 Useful for storing a vector of values using only a few number of bits for each
    757 value.  Apart from the standard operations of a vector-like container, it can
    758 also perform an 'or' set operation.
    759 
    760 For example:
    761 
    762 .. code-block:: c++
    763 
    764   enum State {
    765       None = 0x0,
    766       FirstCondition = 0x1,
    767       SecondCondition = 0x2,
    768       Both = 0x3
    769   };
    770 
    771   State get() {
    772       PackedVector<State, 2> Vec1;
    773       Vec1.push_back(FirstCondition);
    774 
    775       PackedVector<State, 2> Vec2;
    776       Vec2.push_back(SecondCondition);
    777 
    778       Vec1 |= Vec2;
    779       return Vec1[0]; // returns 'Both'.
    780   }
    781 
    782 .. _dss_ilist_traits:
    783 
    784 ilist_traits
    785 ^^^^^^^^^^^^
    786 
    787 ``ilist_traits<T>`` is ``ilist<T>``'s customization mechanism. ``iplist<T>``
    788 (and consequently ``ilist<T>``) publicly derive from this traits class.
    789 
    790 .. _dss_iplist:
    791 
    792 iplist
    793 ^^^^^^
    794 
    795 ``iplist<T>`` is ``ilist<T>``'s base and as such supports a slightly narrower
    796 interface.  Notably, inserters from ``T&`` are absent.
    797 
    798 ``ilist_traits<T>`` is a public base of this class and can be used for a wide
    799 variety of customizations.
    800 
    801 .. _dss_ilist_node:
    802 
    803 llvm/ADT/ilist_node.h
    804 ^^^^^^^^^^^^^^^^^^^^^
    805 
    806 ``ilist_node<T>`` implements a the forward and backward links that are expected
    807 by the ``ilist<T>`` (and analogous containers) in the default manner.
    808 
    809 ``ilist_node<T>``\ s are meant to be embedded in the node type ``T``, usually
    810 ``T`` publicly derives from ``ilist_node<T>``.
    811 
    812 .. _dss_ilist_sentinel:
    813 
    814 Sentinels
    815 ^^^^^^^^^
    816 
    817 ``ilist``\ s have another specialty that must be considered.  To be a good
    818 citizen in the C++ ecosystem, it needs to support the standard container
    819 operations, such as ``begin`` and ``end`` iterators, etc.  Also, the
    820 ``operator--`` must work correctly on the ``end`` iterator in the case of
    821 non-empty ``ilist``\ s.
    822 
    823 The only sensible solution to this problem is to allocate a so-called *sentinel*
    824 along with the intrusive list, which serves as the ``end`` iterator, providing
    825 the back-link to the last element.  However conforming to the C++ convention it
    826 is illegal to ``operator++`` beyond the sentinel and it also must not be
    827 dereferenced.
    828 
    829 These constraints allow for some implementation freedom to the ``ilist`` how to
    830 allocate and store the sentinel.  The corresponding policy is dictated by
    831 ``ilist_traits<T>``.  By default a ``T`` gets heap-allocated whenever the need
    832 for a sentinel arises.
    833 
    834 While the default policy is sufficient in most cases, it may break down when
    835 ``T`` does not provide a default constructor.  Also, in the case of many
    836 instances of ``ilist``\ s, the memory overhead of the associated sentinels is
    837 wasted.  To alleviate the situation with numerous and voluminous
    838 ``T``-sentinels, sometimes a trick is employed, leading to *ghostly sentinels*.
    839 
    840 Ghostly sentinels are obtained by specially-crafted ``ilist_traits<T>`` which
    841 superpose the sentinel with the ``ilist`` instance in memory.  Pointer
    842 arithmetic is used to obtain the sentinel, which is relative to the ``ilist``'s
    843 ``this`` pointer.  The ``ilist`` is augmented by an extra pointer, which serves
    844 as the back-link of the sentinel.  This is the only field in the ghostly
    845 sentinel which can be legally accessed.
    846 
    847 .. _dss_other:
    848 
    849 Other Sequential Container options
    850 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    851 
    852 Other STL containers are available, such as ``std::string``.
    853 
    854 There are also various STL adapter classes such as ``std::queue``,
    855 ``std::priority_queue``, ``std::stack``, etc.  These provide simplified access
    856 to an underlying container but don't affect the cost of the container itself.
    857 
    858 .. _ds_string:
    859 
    860 String-like containers
    861 ----------------------
    862 
    863 There are a variety of ways to pass around and use strings in C and C++, and
    864 LLVM adds a few new options to choose from.  Pick the first option on this list
    865 that will do what you need, they are ordered according to their relative cost.
    866 
    867 Note that is is generally preferred to *not* pass strings around as ``const
    868 char*``'s.  These have a number of problems, including the fact that they
    869 cannot represent embedded nul ("\0") characters, and do not have a length
    870 available efficiently.  The general replacement for '``const char*``' is
    871 StringRef.
    872 
    873 For more information on choosing string containers for APIs, please see
    874 :ref:`Passing Strings <string_apis>`.
    875 
    876 .. _dss_stringref:
    877 
    878 llvm/ADT/StringRef.h
    879 ^^^^^^^^^^^^^^^^^^^^
    880 
    881 The StringRef class is a simple value class that contains a pointer to a
    882 character and a length, and is quite related to the :ref:`ArrayRef
    883 <dss_arrayref>` class (but specialized for arrays of characters).  Because
    884 StringRef carries a length with it, it safely handles strings with embedded nul
    885 characters in it, getting the length does not require a strlen call, and it even
    886 has very convenient APIs for slicing and dicing the character range that it
    887 represents.
    888 
    889 StringRef is ideal for passing simple strings around that are known to be live,
    890 either because they are C string literals, std::string, a C array, or a
    891 SmallVector.  Each of these cases has an efficient implicit conversion to
    892 StringRef, which doesn't result in a dynamic strlen being executed.
    893 
    894 StringRef has a few major limitations which make more powerful string containers
    895 useful:
    896 
    897 #. You cannot directly convert a StringRef to a 'const char*' because there is
    898    no way to add a trailing nul (unlike the .c_str() method on various stronger
    899    classes).
    900 
    901 #. StringRef doesn't own or keep alive the underlying string bytes.
    902    As such it can easily lead to dangling pointers, and is not suitable for
    903    embedding in datastructures in most cases (instead, use an std::string or
    904    something like that).
    905 
    906 #. For the same reason, StringRef cannot be used as the return value of a
    907    method if the method "computes" the result string.  Instead, use std::string.
    908 
    909 #. StringRef's do not allow you to mutate the pointed-to string bytes and it
    910    doesn't allow you to insert or remove bytes from the range.  For editing
    911    operations like this, it interoperates with the :ref:`Twine <dss_twine>`
    912    class.
    913 
    914 Because of its strengths and limitations, it is very common for a function to
    915 take a StringRef and for a method on an object to return a StringRef that points
    916 into some string that it owns.
    917 
    918 .. _dss_twine:
    919 
    920 llvm/ADT/Twine.h
    921 ^^^^^^^^^^^^^^^^
    922 
    923 The Twine class is used as an intermediary datatype for APIs that want to take a
    924 string that can be constructed inline with a series of concatenations.  Twine
    925 works by forming recursive instances of the Twine datatype (a simple value
    926 object) on the stack as temporary objects, linking them together into a tree
    927 which is then linearized when the Twine is consumed.  Twine is only safe to use
    928 as the argument to a function, and should always be a const reference, e.g.:
    929 
    930 .. code-block:: c++
    931 
    932   void foo(const Twine &T);
    933   ...
    934   StringRef X = ...
    935   unsigned i = ...
    936   foo(X + "." + Twine(i));
    937 
    938 This example forms a string like "blarg.42" by concatenating the values
    939 together, and does not form intermediate strings containing "blarg" or "blarg.".
    940 
    941 Because Twine is constructed with temporary objects on the stack, and because
    942 these instances are destroyed at the end of the current statement, it is an
    943 inherently dangerous API.  For example, this simple variant contains undefined
    944 behavior and will probably crash:
    945 
    946 .. code-block:: c++
    947 
    948   void foo(const Twine &T);
    949   ...
    950   StringRef X = ...
    951   unsigned i = ...
    952   const Twine &Tmp = X + "." + Twine(i);
    953   foo(Tmp);
    954 
    955 ... because the temporaries are destroyed before the call.  That said, Twine's
    956 are much more efficient than intermediate std::string temporaries, and they work
    957 really well with StringRef.  Just be aware of their limitations.
    958 
    959 .. _dss_smallstring:
    960 
    961 llvm/ADT/SmallString.h
    962 ^^^^^^^^^^^^^^^^^^^^^^
    963 
    964 SmallString is a subclass of :ref:`SmallVector <dss_smallvector>` that adds some
    965 convenience APIs like += that takes StringRef's.  SmallString avoids allocating
    966 memory in the case when the preallocated space is enough to hold its data, and
    967 it calls back to general heap allocation when required.  Since it owns its data,
    968 it is very safe to use and supports full mutation of the string.
    969 
    970 Like SmallVector's, the big downside to SmallString is their sizeof.  While they
    971 are optimized for small strings, they themselves are not particularly small.
    972 This means that they work great for temporary scratch buffers on the stack, but
    973 should not generally be put into the heap: it is very rare to see a SmallString
    974 as the member of a frequently-allocated heap data structure or returned
    975 by-value.
    976 
    977 .. _dss_stdstring:
    978 
    979 std::string
    980 ^^^^^^^^^^^
    981 
    982 The standard C++ std::string class is a very general class that (like
    983 SmallString) owns its underlying data.  sizeof(std::string) is very reasonable
    984 so it can be embedded into heap data structures and returned by-value.  On the
    985 other hand, std::string is highly inefficient for inline editing (e.g.
    986 concatenating a bunch of stuff together) and because it is provided by the
    987 standard library, its performance characteristics depend a lot of the host
    988 standard library (e.g. libc++ and MSVC provide a highly optimized string class,
    989 GCC contains a really slow implementation).
    990 
    991 The major disadvantage of std::string is that almost every operation that makes
    992 them larger can allocate memory, which is slow.  As such, it is better to use
    993 SmallVector or Twine as a scratch buffer, but then use std::string to persist
    994 the result.
    995 
    996 .. _ds_set:
    997 
    998 Set-Like Containers (std::set, SmallSet, SetVector, etc)
    999 --------------------------------------------------------
   1000 
   1001 Set-like containers are useful when you need to canonicalize multiple values
   1002 into a single representation.  There are several different choices for how to do
   1003 this, providing various trade-offs.
   1004 
   1005 .. _dss_sortedvectorset:
   1006 
   1007 A sorted 'vector'
   1008 ^^^^^^^^^^^^^^^^^
   1009 
   1010 If you intend to insert a lot of elements, then do a lot of queries, a great
   1011 approach is to use a vector (or other sequential container) with
   1012 std::sort+std::unique to remove duplicates.  This approach works really well if
   1013 your usage pattern has these two distinct phases (insert then query), and can be
   1014 coupled with a good choice of :ref:`sequential container <ds_sequential>`.
   1015 
   1016 This combination provides the several nice properties: the result data is
   1017 contiguous in memory (good for cache locality), has few allocations, is easy to
   1018 address (iterators in the final vector are just indices or pointers), and can be
   1019 efficiently queried with a standard binary search (e.g.
   1020 ``std::lower_bound``; if you want the whole range of elements comparing
   1021 equal, use ``std::equal_range``).
   1022 
   1023 .. _dss_smallset:
   1024 
   1025 llvm/ADT/SmallSet.h
   1026 ^^^^^^^^^^^^^^^^^^^
   1027 
   1028 If you have a set-like data structure that is usually small and whose elements
   1029 are reasonably small, a ``SmallSet<Type, N>`` is a good choice.  This set has
   1030 space for N elements in place (thus, if the set is dynamically smaller than N,
   1031 no malloc traffic is required) and accesses them with a simple linear search.
   1032 When the set grows beyond 'N' elements, it allocates a more expensive
   1033 representation that guarantees efficient access (for most types, it falls back
   1034 to std::set, but for pointers it uses something far better, :ref:`SmallPtrSet
   1035 <dss_smallptrset>`.
   1036 
   1037 The magic of this class is that it handles small sets extremely efficiently, but
   1038 gracefully handles extremely large sets without loss of efficiency.  The
   1039 drawback is that the interface is quite small: it supports insertion, queries
   1040 and erasing, but does not support iteration.
   1041 
   1042 .. _dss_smallptrset:
   1043 
   1044 llvm/ADT/SmallPtrSet.h
   1045 ^^^^^^^^^^^^^^^^^^^^^^
   1046 
   1047 SmallPtrSet has all the advantages of ``SmallSet`` (and a ``SmallSet`` of
   1048 pointers is transparently implemented with a ``SmallPtrSet``), but also supports
   1049 iterators.  If more than 'N' insertions are performed, a single quadratically
   1050 probed hash table is allocated and grows as needed, providing extremely
   1051 efficient access (constant time insertion/deleting/queries with low constant
   1052 factors) and is very stingy with malloc traffic.
   1053 
   1054 Note that, unlike ``std::set``, the iterators of ``SmallPtrSet`` are invalidated
   1055 whenever an insertion occurs.  Also, the values visited by the iterators are not
   1056 visited in sorted order.
   1057 
   1058 .. _dss_denseset:
   1059 
   1060 llvm/ADT/DenseSet.h
   1061 ^^^^^^^^^^^^^^^^^^^
   1062 
   1063 DenseSet is a simple quadratically probed hash table.  It excels at supporting
   1064 small values: it uses a single allocation to hold all of the pairs that are
   1065 currently inserted in the set.  DenseSet is a great way to unique small values
   1066 that are not simple pointers (use :ref:`SmallPtrSet <dss_smallptrset>` for
   1067 pointers).  Note that DenseSet has the same requirements for the value type that
   1068 :ref:`DenseMap <dss_densemap>` has.
   1069 
   1070 .. _dss_sparseset:
   1071 
   1072 llvm/ADT/SparseSet.h
   1073 ^^^^^^^^^^^^^^^^^^^^
   1074 
   1075 SparseSet holds a small number of objects identified by unsigned keys of
   1076 moderate size.  It uses a lot of memory, but provides operations that are almost
   1077 as fast as a vector.  Typical keys are physical registers, virtual registers, or
   1078 numbered basic blocks.
   1079 
   1080 SparseSet is useful for algorithms that need very fast clear/find/insert/erase
   1081 and fast iteration over small sets.  It is not intended for building composite
   1082 data structures.
   1083 
   1084 .. _dss_sparsemultiset:
   1085 
   1086 llvm/ADT/SparseMultiSet.h
   1087 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1088 
   1089 SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's
   1090 desirable attributes. Like SparseSet, it typically uses a lot of memory, but
   1091 provides operations that are almost as fast as a vector.  Typical keys are
   1092 physical registers, virtual registers, or numbered basic blocks.
   1093 
   1094 SparseMultiSet is useful for algorithms that need very fast
   1095 clear/find/insert/erase of the entire collection, and iteration over sets of
   1096 elements sharing a key. It is often a more efficient choice than using composite
   1097 data structures (e.g. vector-of-vectors, map-of-vectors). It is not intended for
   1098 building composite data structures.
   1099 
   1100 .. _dss_FoldingSet:
   1101 
   1102 llvm/ADT/FoldingSet.h
   1103 ^^^^^^^^^^^^^^^^^^^^^
   1104 
   1105 FoldingSet is an aggregate class that is really good at uniquing
   1106 expensive-to-create or polymorphic objects.  It is a combination of a chained
   1107 hash table with intrusive links (uniqued objects are required to inherit from
   1108 FoldingSetNode) that uses :ref:`SmallVector <dss_smallvector>` as part of its ID
   1109 process.
   1110 
   1111 Consider a case where you want to implement a "getOrCreateFoo" method for a
   1112 complex object (for example, a node in the code generator).  The client has a
   1113 description of **what** it wants to generate (it knows the opcode and all the
   1114 operands), but we don't want to 'new' a node, then try inserting it into a set
   1115 only to find out it already exists, at which point we would have to delete it
   1116 and return the node that already exists.
   1117 
   1118 To support this style of client, FoldingSet perform a query with a
   1119 FoldingSetNodeID (which wraps SmallVector) that can be used to describe the
   1120 element that we want to query for.  The query either returns the element
   1121 matching the ID or it returns an opaque ID that indicates where insertion should
   1122 take place.  Construction of the ID usually does not require heap traffic.
   1123 
   1124 Because FoldingSet uses intrusive links, it can support polymorphic objects in
   1125 the set (for example, you can have SDNode instances mixed with LoadSDNodes).
   1126 Because the elements are individually allocated, pointers to the elements are
   1127 stable: inserting or removing elements does not invalidate any pointers to other
   1128 elements.
   1129 
   1130 .. _dss_set:
   1131 
   1132 <set>
   1133 ^^^^^
   1134 
   1135 ``std::set`` is a reasonable all-around set class, which is decent at many
   1136 things but great at nothing.  std::set allocates memory for each element
   1137 inserted (thus it is very malloc intensive) and typically stores three pointers
   1138 per element in the set (thus adding a large amount of per-element space
   1139 overhead).  It offers guaranteed log(n) performance, which is not particularly
   1140 fast from a complexity standpoint (particularly if the elements of the set are
   1141 expensive to compare, like strings), and has extremely high constant factors for
   1142 lookup, insertion and removal.
   1143 
   1144 The advantages of std::set are that its iterators are stable (deleting or
   1145 inserting an element from the set does not affect iterators or pointers to other
   1146 elements) and that iteration over the set is guaranteed to be in sorted order.
   1147 If the elements in the set are large, then the relative overhead of the pointers
   1148 and malloc traffic is not a big deal, but if the elements of the set are small,
   1149 std::set is almost never a good choice.
   1150 
   1151 .. _dss_setvector:
   1152 
   1153 llvm/ADT/SetVector.h
   1154 ^^^^^^^^^^^^^^^^^^^^
   1155 
   1156 LLVM's ``SetVector<Type>`` is an adapter class that combines your choice of a
   1157 set-like container along with a :ref:`Sequential Container <ds_sequential>` The
   1158 important property that this provides is efficient insertion with uniquing
   1159 (duplicate elements are ignored) with iteration support.  It implements this by
   1160 inserting elements into both a set-like container and the sequential container,
   1161 using the set-like container for uniquing and the sequential container for
   1162 iteration.
   1163 
   1164 The difference between SetVector and other sets is that the order of iteration
   1165 is guaranteed to match the order of insertion into the SetVector.  This property
   1166 is really important for things like sets of pointers.  Because pointer values
   1167 are non-deterministic (e.g. vary across runs of the program on different
   1168 machines), iterating over the pointers in the set will not be in a well-defined
   1169 order.
   1170 
   1171 The drawback of SetVector is that it requires twice as much space as a normal
   1172 set and has the sum of constant factors from the set-like container and the
   1173 sequential container that it uses.  Use it **only** if you need to iterate over
   1174 the elements in a deterministic order.  SetVector is also expensive to delete
   1175 elements out of (linear time), unless you use it's "pop_back" method, which is
   1176 faster.
   1177 
   1178 ``SetVector`` is an adapter class that defaults to using ``std::vector`` and a
   1179 size 16 ``SmallSet`` for the underlying containers, so it is quite expensive.
   1180 However, ``"llvm/ADT/SetVector.h"`` also provides a ``SmallSetVector`` class,
   1181 which defaults to using a ``SmallVector`` and ``SmallSet`` of a specified size.
   1182 If you use this, and if your sets are dynamically smaller than ``N``, you will
   1183 save a lot of heap traffic.
   1184 
   1185 .. _dss_uniquevector:
   1186 
   1187 llvm/ADT/UniqueVector.h
   1188 ^^^^^^^^^^^^^^^^^^^^^^^
   1189 
   1190 UniqueVector is similar to :ref:`SetVector <dss_setvector>` but it retains a
   1191 unique ID for each element inserted into the set.  It internally contains a map
   1192 and a vector, and it assigns a unique ID for each value inserted into the set.
   1193 
   1194 UniqueVector is very expensive: its cost is the sum of the cost of maintaining
   1195 both the map and vector, it has high complexity, high constant factors, and
   1196 produces a lot of malloc traffic.  It should be avoided.
   1197 
   1198 .. _dss_immutableset:
   1199 
   1200 llvm/ADT/ImmutableSet.h
   1201 ^^^^^^^^^^^^^^^^^^^^^^^
   1202 
   1203 ImmutableSet is an immutable (functional) set implementation based on an AVL
   1204 tree.  Adding or removing elements is done through a Factory object and results
   1205 in the creation of a new ImmutableSet object.  If an ImmutableSet already exists
   1206 with the given contents, then the existing one is returned; equality is compared
   1207 with a FoldingSetNodeID.  The time and space complexity of add or remove
   1208 operations is logarithmic in the size of the original set.
   1209 
   1210 There is no method for returning an element of the set, you can only check for
   1211 membership.
   1212 
   1213 .. _dss_otherset:
   1214 
   1215 Other Set-Like Container Options
   1216 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1217 
   1218 The STL provides several other options, such as std::multiset and the various
   1219 "hash_set" like containers (whether from C++ TR1 or from the SGI library).  We
   1220 never use hash_set and unordered_set because they are generally very expensive
   1221 (each insertion requires a malloc) and very non-portable.
   1222 
   1223 std::multiset is useful if you're not interested in elimination of duplicates,
   1224 but has all the drawbacks of std::set.  A sorted vector (where you don't delete
   1225 duplicate entries) or some other approach is almost always better.
   1226 
   1227 .. _ds_map:
   1228 
   1229 Map-Like Containers (std::map, DenseMap, etc)
   1230 ---------------------------------------------
   1231 
   1232 Map-like containers are useful when you want to associate data to a key.  As
   1233 usual, there are a lot of different ways to do this. :)
   1234 
   1235 .. _dss_sortedvectormap:
   1236 
   1237 A sorted 'vector'
   1238 ^^^^^^^^^^^^^^^^^
   1239 
   1240 If your usage pattern follows a strict insert-then-query approach, you can
   1241 trivially use the same approach as :ref:`sorted vectors for set-like containers
   1242 <dss_sortedvectorset>`.  The only difference is that your query function (which
   1243 uses std::lower_bound to get efficient log(n) lookup) should only compare the
   1244 key, not both the key and value.  This yields the same advantages as sorted
   1245 vectors for sets.
   1246 
   1247 .. _dss_stringmap:
   1248 
   1249 llvm/ADT/StringMap.h
   1250 ^^^^^^^^^^^^^^^^^^^^
   1251 
   1252 Strings are commonly used as keys in maps, and they are difficult to support
   1253 efficiently: they are variable length, inefficient to hash and compare when
   1254 long, expensive to copy, etc.  StringMap is a specialized container designed to
   1255 cope with these issues.  It supports mapping an arbitrary range of bytes to an
   1256 arbitrary other object.
   1257 
   1258 The StringMap implementation uses a quadratically-probed hash table, where the
   1259 buckets store a pointer to the heap allocated entries (and some other stuff).
   1260 The entries in the map must be heap allocated because the strings are variable
   1261 length.  The string data (key) and the element object (value) are stored in the
   1262 same allocation with the string data immediately after the element object.
   1263 This container guarantees the "``(char*)(&Value+1)``" points to the key string
   1264 for a value.
   1265 
   1266 The StringMap is very fast for several reasons: quadratic probing is very cache
   1267 efficient for lookups, the hash value of strings in buckets is not recomputed
   1268 when looking up an element, StringMap rarely has to touch the memory for
   1269 unrelated objects when looking up a value (even when hash collisions happen),
   1270 hash table growth does not recompute the hash values for strings already in the
   1271 table, and each pair in the map is store in a single allocation (the string data
   1272 is stored in the same allocation as the Value of a pair).
   1273 
   1274 StringMap also provides query methods that take byte ranges, so it only ever
   1275 copies a string if a value is inserted into the table.
   1276 
   1277 StringMap iteratation order, however, is not guaranteed to be deterministic, so
   1278 any uses which require that should instead use a std::map.
   1279 
   1280 .. _dss_indexmap:
   1281 
   1282 llvm/ADT/IndexedMap.h
   1283 ^^^^^^^^^^^^^^^^^^^^^
   1284 
   1285 IndexedMap is a specialized container for mapping small dense integers (or
   1286 values that can be mapped to small dense integers) to some other type.  It is
   1287 internally implemented as a vector with a mapping function that maps the keys
   1288 to the dense integer range.
   1289 
   1290 This is useful for cases like virtual registers in the LLVM code generator: they
   1291 have a dense mapping that is offset by a compile-time constant (the first
   1292 virtual register ID).
   1293 
   1294 .. _dss_densemap:
   1295 
   1296 llvm/ADT/DenseMap.h
   1297 ^^^^^^^^^^^^^^^^^^^
   1298 
   1299 DenseMap is a simple quadratically probed hash table.  It excels at supporting
   1300 small keys and values: it uses a single allocation to hold all of the pairs
   1301 that are currently inserted in the map.  DenseMap is a great way to map
   1302 pointers to pointers, or map other small types to each other.
   1303 
   1304 There are several aspects of DenseMap that you should be aware of, however.
   1305 The iterators in a DenseMap are invalidated whenever an insertion occurs,
   1306 unlike map.  Also, because DenseMap allocates space for a large number of
   1307 key/value pairs (it starts with 64 by default), it will waste a lot of space if
   1308 your keys or values are large.  Finally, you must implement a partial
   1309 specialization of DenseMapInfo for the key that you want, if it isn't already
   1310 supported.  This is required to tell DenseMap about two special marker values
   1311 (which can never be inserted into the map) that it needs internally.
   1312 
   1313 DenseMap's find_as() method supports lookup operations using an alternate key
   1314 type.  This is useful in cases where the normal key type is expensive to
   1315 construct, but cheap to compare against.  The DenseMapInfo is responsible for
   1316 defining the appropriate comparison and hashing methods for each alternate key
   1317 type used.
   1318 
   1319 .. _dss_valuemap:
   1320 
   1321 llvm/ADT/ValueMap.h
   1322 ^^^^^^^^^^^^^^^^^^^
   1323 
   1324 ValueMap is a wrapper around a :ref:`DenseMap <dss_densemap>` mapping
   1325 ``Value*``\ s (or subclasses) to another type.  When a Value is deleted or
   1326 RAUW'ed, ValueMap will update itself so the new version of the key is mapped to
   1327 the same value, just as if the key were a WeakVH.  You can configure exactly how
   1328 this happens, and what else happens on these two events, by passing a ``Config``
   1329 parameter to the ValueMap template.
   1330 
   1331 .. _dss_intervalmap:
   1332 
   1333 llvm/ADT/IntervalMap.h
   1334 ^^^^^^^^^^^^^^^^^^^^^^
   1335 
   1336 IntervalMap is a compact map for small keys and values.  It maps key intervals
   1337 instead of single keys, and it will automatically coalesce adjacent intervals.
   1338 When then map only contains a few intervals, they are stored in the map object
   1339 itself to avoid allocations.
   1340 
   1341 The IntervalMap iterators are quite big, so they should not be passed around as
   1342 STL iterators.  The heavyweight iterators allow a smaller data structure.
   1343 
   1344 .. _dss_map:
   1345 
   1346 <map>
   1347 ^^^^^
   1348 
   1349 std::map has similar characteristics to :ref:`std::set <dss_set>`: it uses a
   1350 single allocation per pair inserted into the map, it offers log(n) lookup with
   1351 an extremely large constant factor, imposes a space penalty of 3 pointers per
   1352 pair in the map, etc.
   1353 
   1354 std::map is most useful when your keys or values are very large, if you need to
   1355 iterate over the collection in sorted order, or if you need stable iterators
   1356 into the map (i.e. they don't get invalidated if an insertion or deletion of
   1357 another element takes place).
   1358 
   1359 .. _dss_mapvector:
   1360 
   1361 llvm/ADT/MapVector.h
   1362 ^^^^^^^^^^^^^^^^^^^^
   1363 
   1364 ``MapVector<KeyT,ValueT>`` provides a subset of the DenseMap interface.  The
   1365 main difference is that the iteration order is guaranteed to be the insertion
   1366 order, making it an easy (but somewhat expensive) solution for non-deterministic
   1367 iteration over maps of pointers.
   1368 
   1369 It is implemented by mapping from key to an index in a vector of key,value
   1370 pairs.  This provides fast lookup and iteration, but has two main drawbacks: The
   1371 key is stored twice and it doesn't support removing elements.
   1372 
   1373 .. _dss_inteqclasses:
   1374 
   1375 llvm/ADT/IntEqClasses.h
   1376 ^^^^^^^^^^^^^^^^^^^^^^^
   1377 
   1378 IntEqClasses provides a compact representation of equivalence classes of small
   1379 integers.  Initially, each integer in the range 0..n-1 has its own equivalence
   1380 class.  Classes can be joined by passing two class representatives to the
   1381 join(a, b) method.  Two integers are in the same class when findLeader() returns
   1382 the same representative.
   1383 
   1384 Once all equivalence classes are formed, the map can be compressed so each
   1385 integer 0..n-1 maps to an equivalence class number in the range 0..m-1, where m
   1386 is the total number of equivalence classes.  The map must be uncompressed before
   1387 it can be edited again.
   1388 
   1389 .. _dss_immutablemap:
   1390 
   1391 llvm/ADT/ImmutableMap.h
   1392 ^^^^^^^^^^^^^^^^^^^^^^^
   1393 
   1394 ImmutableMap is an immutable (functional) map implementation based on an AVL
   1395 tree.  Adding or removing elements is done through a Factory object and results
   1396 in the creation of a new ImmutableMap object.  If an ImmutableMap already exists
   1397 with the given key set, then the existing one is returned; equality is compared
   1398 with a FoldingSetNodeID.  The time and space complexity of add or remove
   1399 operations is logarithmic in the size of the original map.
   1400 
   1401 .. _dss_othermap:
   1402 
   1403 Other Map-Like Container Options
   1404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1405 
   1406 The STL provides several other options, such as std::multimap and the various
   1407 "hash_map" like containers (whether from C++ TR1 or from the SGI library).  We
   1408 never use hash_set and unordered_set because they are generally very expensive
   1409 (each insertion requires a malloc) and very non-portable.
   1410 
   1411 std::multimap is useful if you want to map a key to multiple values, but has all
   1412 the drawbacks of std::map.  A sorted vector or some other approach is almost
   1413 always better.
   1414 
   1415 .. _ds_bit:
   1416 
   1417 Bit storage containers (BitVector, SparseBitVector)
   1418 ---------------------------------------------------
   1419 
   1420 Unlike the other containers, there are only two bit storage containers, and
   1421 choosing when to use each is relatively straightforward.
   1422 
   1423 One additional option is ``std::vector<bool>``: we discourage its use for two
   1424 reasons 1) the implementation in many common compilers (e.g.  commonly
   1425 available versions of GCC) is extremely inefficient and 2) the C++ standards
   1426 committee is likely to deprecate this container and/or change it significantly
   1427 somehow.  In any case, please don't use it.
   1428 
   1429 .. _dss_bitvector:
   1430 
   1431 BitVector
   1432 ^^^^^^^^^
   1433 
   1434 The BitVector container provides a dynamic size set of bits for manipulation.
   1435 It supports individual bit setting/testing, as well as set operations.  The set
   1436 operations take time O(size of bitvector), but operations are performed one word
   1437 at a time, instead of one bit at a time.  This makes the BitVector very fast for
   1438 set operations compared to other containers.  Use the BitVector when you expect
   1439 the number of set bits to be high (i.e. a dense set).
   1440 
   1441 .. _dss_smallbitvector:
   1442 
   1443 SmallBitVector
   1444 ^^^^^^^^^^^^^^
   1445 
   1446 The SmallBitVector container provides the same interface as BitVector, but it is
   1447 optimized for the case where only a small number of bits, less than 25 or so,
   1448 are needed.  It also transparently supports larger bit counts, but slightly less
   1449 efficiently than a plain BitVector, so SmallBitVector should only be used when
   1450 larger counts are rare.
   1451 
   1452 At this time, SmallBitVector does not support set operations (and, or, xor), and
   1453 its operator[] does not provide an assignable lvalue.
   1454 
   1455 .. _dss_sparsebitvector:
   1456 
   1457 SparseBitVector
   1458 ^^^^^^^^^^^^^^^
   1459 
   1460 The SparseBitVector container is much like BitVector, with one major difference:
   1461 Only the bits that are set, are stored.  This makes the SparseBitVector much
   1462 more space efficient than BitVector when the set is sparse, as well as making
   1463 set operations O(number of set bits) instead of O(size of universe).  The
   1464 downside to the SparseBitVector is that setting and testing of random bits is
   1465 O(N), and on large SparseBitVectors, this can be slower than BitVector.  In our
   1466 implementation, setting or testing bits in sorted order (either forwards or
   1467 reverse) is O(1) worst case.  Testing and setting bits within 128 bits (depends
   1468 on size) of the current bit is also O(1).  As a general statement,
   1469 testing/setting bits in a SparseBitVector is O(distance away from last set bit).
   1470 
   1471 .. _common:
   1472 
   1473 Helpful Hints for Common Operations
   1474 ===================================
   1475 
   1476 This section describes how to perform some very simple transformations of LLVM
   1477 code.  This is meant to give examples of common idioms used, showing the
   1478 practical side of LLVM transformations.
   1479 
   1480 Because this is a "how-to" section, you should also read about the main classes
   1481 that you will be working with.  The :ref:`Core LLVM Class Hierarchy Reference
   1482 <coreclasses>` contains details and descriptions of the main classes that you
   1483 should know about.
   1484 
   1485 .. _inspection:
   1486 
   1487 Basic Inspection and Traversal Routines
   1488 ---------------------------------------
   1489 
   1490 The LLVM compiler infrastructure have many different data structures that may be
   1491 traversed.  Following the example of the C++ standard template library, the
   1492 techniques used to traverse these various data structures are all basically the
   1493 same.  For a enumerable sequence of values, the ``XXXbegin()`` function (or
   1494 method) returns an iterator to the start of the sequence, the ``XXXend()``
   1495 function returns an iterator pointing to one past the last valid element of the
   1496 sequence, and there is some ``XXXiterator`` data type that is common between the
   1497 two operations.
   1498 
   1499 Because the pattern for iteration is common across many different aspects of the
   1500 program representation, the standard template library algorithms may be used on
   1501 them, and it is easier to remember how to iterate.  First we show a few common
   1502 examples of the data structures that need to be traversed.  Other data
   1503 structures are traversed in very similar ways.
   1504 
   1505 .. _iterate_function:
   1506 
   1507 Iterating over the ``BasicBlock`` in a ``Function``
   1508 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1509 
   1510 It's quite common to have a ``Function`` instance that you'd like to transform
   1511 in some way; in particular, you'd like to manipulate its ``BasicBlock``\ s.  To
   1512 facilitate this, you'll need to iterate over all of the ``BasicBlock``\ s that
   1513 constitute the ``Function``.  The following is an example that prints the name
   1514 of a ``BasicBlock`` and the number of ``Instruction``\ s it contains:
   1515 
   1516 .. code-block:: c++
   1517 
   1518   // func is a pointer to a Function instance
   1519   for (Function::iterator i = func->begin(), e = func->end(); i != e; ++i)
   1520     // Print out the name of the basic block if it has one, and then the
   1521     // number of instructions that it contains
   1522     errs() << "Basic block (name=" << i->getName() << ") has "
   1523                << i->size() << " instructions.\n";
   1524 
   1525 Note that i can be used as if it were a pointer for the purposes of invoking
   1526 member functions of the ``Instruction`` class.  This is because the indirection
   1527 operator is overloaded for the iterator classes.  In the above code, the
   1528 expression ``i->size()`` is exactly equivalent to ``(*i).size()`` just like
   1529 you'd expect.
   1530 
   1531 .. _iterate_basicblock:
   1532 
   1533 Iterating over the ``Instruction`` in a ``BasicBlock``
   1534 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1535 
   1536 Just like when dealing with ``BasicBlock``\ s in ``Function``\ s, it's easy to
   1537 iterate over the individual instructions that make up ``BasicBlock``\ s.  Here's
   1538 a code snippet that prints out each instruction in a ``BasicBlock``:
   1539 
   1540 .. code-block:: c++
   1541 
   1542   // blk is a pointer to a BasicBlock instance
   1543   for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i)
   1544      // The next statement works since operator<<(ostream&,...)
   1545      // is overloaded for Instruction&
   1546      errs() << *i << "\n";
   1547 
   1548 
   1549 However, this isn't really the best way to print out the contents of a
   1550 ``BasicBlock``!  Since the ostream operators are overloaded for virtually
   1551 anything you'll care about, you could have just invoked the print routine on the
   1552 basic block itself: ``errs() << *blk << "\n";``.
   1553 
   1554 .. _iterate_insiter:
   1555 
   1556 Iterating over the ``Instruction`` in a ``Function``
   1557 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1558 
   1559 If you're finding that you commonly iterate over a ``Function``'s
   1560 ``BasicBlock``\ s and then that ``BasicBlock``'s ``Instruction``\ s,
   1561 ``InstIterator`` should be used instead.  You'll need to include
   1562 ``llvm/Support/InstIterator.h`` (`doxygen
   1563 <http://llvm.org/doxygen/InstIterator_8h-source.html>`__) and then instantiate
   1564 ``InstIterator``\ s explicitly in your code.  Here's a small example that shows
   1565 how to dump all instructions in a function to the standard error stream:
   1566 
   1567 .. code-block:: c++
   1568 
   1569   #include "llvm/Support/InstIterator.h"
   1570 
   1571   // F is a pointer to a Function instance
   1572   for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
   1573     errs() << *I << "\n";
   1574 
   1575 Easy, isn't it?  You can also use ``InstIterator``\ s to fill a work list with
   1576 its initial contents.  For example, if you wanted to initialize a work list to
   1577 contain all instructions in a ``Function`` F, all you would need to do is
   1578 something like:
   1579 
   1580 .. code-block:: c++
   1581 
   1582   std::set<Instruction*> worklist;
   1583   // or better yet, SmallPtrSet<Instruction*, 64> worklist;
   1584 
   1585   for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
   1586     worklist.insert(&*I);
   1587 
   1588 The STL set ``worklist`` would now contain all instructions in the ``Function``
   1589 pointed to by F.
   1590 
   1591 .. _iterate_convert:
   1592 
   1593 Turning an iterator into a class pointer (and vice-versa)
   1594 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1595 
   1596 Sometimes, it'll be useful to grab a reference (or pointer) to a class instance
   1597 when all you've got at hand is an iterator.  Well, extracting a reference or a
   1598 pointer from an iterator is very straight-forward.  Assuming that ``i`` is a
   1599 ``BasicBlock::iterator`` and ``j`` is a ``BasicBlock::const_iterator``:
   1600 
   1601 .. code-block:: c++
   1602 
   1603   Instruction& inst = *i;   // Grab reference to instruction reference
   1604   Instruction* pinst = &*i; // Grab pointer to instruction reference
   1605   const Instruction& inst = *j;
   1606 
   1607 However, the iterators you'll be working with in the LLVM framework are special:
   1608 they will automatically convert to a ptr-to-instance type whenever they need to.
   1609 Instead of derferencing the iterator and then taking the address of the result,
   1610 you can simply assign the iterator to the proper pointer type and you get the
   1611 dereference and address-of operation as a result of the assignment (behind the
   1612 scenes, this is a result of overloading casting mechanisms).  Thus the last line
   1613 of the last example,
   1614 
   1615 .. code-block:: c++
   1616 
   1617   Instruction *pinst = &*i;
   1618 
   1619 is semantically equivalent to
   1620 
   1621 .. code-block:: c++
   1622 
   1623   Instruction *pinst = i;
   1624 
   1625 It's also possible to turn a class pointer into the corresponding iterator, and
   1626 this is a constant time operation (very efficient).  The following code snippet
   1627 illustrates use of the conversion constructors provided by LLVM iterators.  By
   1628 using these, you can explicitly grab the iterator of something without actually
   1629 obtaining it via iteration over some structure:
   1630 
   1631 .. code-block:: c++
   1632 
   1633   void printNextInstruction(Instruction* inst) {
   1634     BasicBlock::iterator it(inst);
   1635     ++it; // After this line, it refers to the instruction after *inst
   1636     if (it != inst->getParent()->end()) errs() << *it << "\n";
   1637   }
   1638 
   1639 Unfortunately, these implicit conversions come at a cost; they prevent these
   1640 iterators from conforming to standard iterator conventions, and thus from being
   1641 usable with standard algorithms and containers.  For example, they prevent the
   1642 following code, where ``B`` is a ``BasicBlock``, from compiling:
   1643 
   1644 .. code-block:: c++
   1645 
   1646   llvm::SmallVector<llvm::Instruction *, 16>(B->begin(), B->end());
   1647 
   1648 Because of this, these implicit conversions may be removed some day, and
   1649 ``operator*`` changed to return a pointer instead of a reference.
   1650 
   1651 .. _iterate_complex:
   1652 
   1653 Finding call sites: a slightly more complex example
   1654 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1655 
   1656 Say that you're writing a FunctionPass and would like to count all the locations
   1657 in the entire module (that is, across every ``Function``) where a certain
   1658 function (i.e., some ``Function *``) is already in scope.  As you'll learn
   1659 later, you may want to use an ``InstVisitor`` to accomplish this in a much more
   1660 straight-forward manner, but this example will allow us to explore how you'd do
   1661 it if you didn't have ``InstVisitor`` around.  In pseudo-code, this is what we
   1662 want to do:
   1663 
   1664 .. code-block:: none
   1665 
   1666   initialize callCounter to zero
   1667   for each Function f in the Module
   1668     for each BasicBlock b in f
   1669       for each Instruction i in b
   1670         if (i is a CallInst and calls the given function)
   1671           increment callCounter
   1672 
   1673 And the actual code is (remember, because we're writing a ``FunctionPass``, our
   1674 ``FunctionPass``-derived class simply has to override the ``runOnFunction``
   1675 method):
   1676 
   1677 .. code-block:: c++
   1678 
   1679   Function* targetFunc = ...;
   1680 
   1681   class OurFunctionPass : public FunctionPass {
   1682     public:
   1683       OurFunctionPass(): callCounter(0) { }
   1684 
   1685       virtual runOnFunction(Function& F) {
   1686         for (Function::iterator b = F.begin(), be = F.end(); b != be; ++b) {
   1687           for (BasicBlock::iterator i = b->begin(), ie = b->end(); i != ie; ++i) {
   1688             if (CallInst* callInst = dyn_cast<CallInst>(&*i)) {
   1689               // We know we've encountered a call instruction, so we
   1690               // need to determine if it's a call to the
   1691               // function pointed to by m_func or not.
   1692               if (callInst->getCalledFunction() == targetFunc)
   1693                 ++callCounter;
   1694             }
   1695           }
   1696         }
   1697       }
   1698 
   1699     private:
   1700       unsigned callCounter;
   1701   };
   1702 
   1703 .. _calls_and_invokes:
   1704 
   1705 Treating calls and invokes the same way
   1706 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1707 
   1708 You may have noticed that the previous example was a bit oversimplified in that
   1709 it did not deal with call sites generated by 'invoke' instructions.  In this,
   1710 and in other situations, you may find that you want to treat ``CallInst``\ s and
   1711 ``InvokeInst``\ s the same way, even though their most-specific common base
   1712 class is ``Instruction``, which includes lots of less closely-related things.
   1713 For these cases, LLVM provides a handy wrapper class called ``CallSite``
   1714 (`doxygen <http://llvm.org/doxygen/classllvm_1_1CallSite.html>`__) It is
   1715 essentially a wrapper around an ``Instruction`` pointer, with some methods that
   1716 provide functionality common to ``CallInst``\ s and ``InvokeInst``\ s.
   1717 
   1718 This class has "value semantics": it should be passed by value, not by reference
   1719 and it should not be dynamically allocated or deallocated using ``operator new``
   1720 or ``operator delete``.  It is efficiently copyable, assignable and
   1721 constructable, with costs equivalents to that of a bare pointer.  If you look at
   1722 its definition, it has only a single pointer member.
   1723 
   1724 .. _iterate_chains:
   1725 
   1726 Iterating over def-use & use-def chains
   1727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1728 
   1729 Frequently, we might have an instance of the ``Value`` class (`doxygen
   1730 <http://llvm.org/doxygen/classllvm_1_1Value.html>`__) and we want to determine
   1731 which ``User`` s use the ``Value``.  The list of all ``User``\ s of a particular
   1732 ``Value`` is called a *def-use* chain.  For example, let's say we have a
   1733 ``Function*`` named ``F`` to a particular function ``foo``.  Finding all of the
   1734 instructions that *use* ``foo`` is as simple as iterating over the *def-use*
   1735 chain of ``F``:
   1736 
   1737 .. code-block:: c++
   1738 
   1739   Function *F = ...;
   1740 
   1741   for (Value::use_iterator i = F->use_begin(), e = F->use_end(); i != e; ++i)
   1742     if (Instruction *Inst = dyn_cast<Instruction>(*i)) {
   1743       errs() << "F is used in instruction:\n";
   1744       errs() << *Inst << "\n";
   1745     }
   1746 
   1747 Note that dereferencing a ``Value::use_iterator`` is not a very cheap operation.
   1748 Instead of performing ``*i`` above several times, consider doing it only once in
   1749 the loop body and reusing its result.
   1750 
   1751 Alternatively, it's common to have an instance of the ``User`` Class (`doxygen
   1752 <http://llvm.org/doxygen/classllvm_1_1User.html>`__) and need to know what
   1753 ``Value``\ s are used by it.  The list of all ``Value``\ s used by a ``User`` is
   1754 known as a *use-def* chain.  Instances of class ``Instruction`` are common
   1755 ``User`` s, so we might want to iterate over all of the values that a particular
   1756 instruction uses (that is, the operands of the particular ``Instruction``):
   1757 
   1758 .. code-block:: c++
   1759 
   1760   Instruction *pi = ...;
   1761 
   1762   for (User::op_iterator i = pi->op_begin(), e = pi->op_end(); i != e; ++i) {
   1763     Value *v = *i;
   1764     // ...
   1765   }
   1766 
   1767 Declaring objects as ``const`` is an important tool of enforcing mutation free
   1768 algorithms (such as analyses, etc.).  For this purpose above iterators come in
   1769 constant flavors as ``Value::const_use_iterator`` and
   1770 ``Value::const_op_iterator``.  They automatically arise when calling
   1771 ``use/op_begin()`` on ``const Value*``\ s or ``const User*``\ s respectively.
   1772 Upon dereferencing, they return ``const Use*``\ s.  Otherwise the above patterns
   1773 remain unchanged.
   1774 
   1775 .. _iterate_preds:
   1776 
   1777 Iterating over predecessors & successors of blocks
   1778 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1779 
   1780 Iterating over the predecessors and successors of a block is quite easy with the
   1781 routines defined in ``"llvm/Support/CFG.h"``.  Just use code like this to
   1782 iterate over all predecessors of BB:
   1783 
   1784 .. code-block:: c++
   1785 
   1786   #include "llvm/Support/CFG.h"
   1787   BasicBlock *BB = ...;
   1788 
   1789   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
   1790     BasicBlock *Pred = *PI;
   1791     // ...
   1792   }
   1793 
   1794 Similarly, to iterate over successors use ``succ_iterator/succ_begin/succ_end``.
   1795 
   1796 .. _simplechanges:
   1797 
   1798 Making simple changes
   1799 ---------------------
   1800 
   1801 There are some primitive transformation operations present in the LLVM
   1802 infrastructure that are worth knowing about.  When performing transformations,
   1803 it's fairly common to manipulate the contents of basic blocks.  This section
   1804 describes some of the common methods for doing so and gives example code.
   1805 
   1806 .. _schanges_creating:
   1807 
   1808 Creating and inserting new ``Instruction``\ s
   1809 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1810 
   1811 *Instantiating Instructions*
   1812 
   1813 Creation of ``Instruction``\ s is straight-forward: simply call the constructor
   1814 for the kind of instruction to instantiate and provide the necessary parameters.
   1815 For example, an ``AllocaInst`` only *requires* a (const-ptr-to) ``Type``.  Thus:
   1816 
   1817 .. code-block:: c++
   1818 
   1819   AllocaInst* ai = new AllocaInst(Type::Int32Ty);
   1820 
   1821 will create an ``AllocaInst`` instance that represents the allocation of one
   1822 integer in the current stack frame, at run time.  Each ``Instruction`` subclass
   1823 is likely to have varying default parameters which change the semantics of the
   1824 instruction, so refer to the `doxygen documentation for the subclass of
   1825 Instruction <http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_ that
   1826 you're interested in instantiating.
   1827 
   1828 *Naming values*
   1829 
   1830 It is very useful to name the values of instructions when you're able to, as
   1831 this facilitates the debugging of your transformations.  If you end up looking
   1832 at generated LLVM machine code, you definitely want to have logical names
   1833 associated with the results of instructions!  By supplying a value for the
   1834 ``Name`` (default) parameter of the ``Instruction`` constructor, you associate a
   1835 logical name with the result of the instruction's execution at run time.  For
   1836 example, say that I'm writing a transformation that dynamically allocates space
   1837 for an integer on the stack, and that integer is going to be used as some kind
   1838 of index by some other code.  To accomplish this, I place an ``AllocaInst`` at
   1839 the first point in the first ``BasicBlock`` of some ``Function``, and I'm
   1840 intending to use it within the same ``Function``.  I might do:
   1841 
   1842 .. code-block:: c++
   1843 
   1844   AllocaInst* pa = new AllocaInst(Type::Int32Ty, 0, "indexLoc");
   1845 
   1846 where ``indexLoc`` is now the logical name of the instruction's execution value,
   1847 which is a pointer to an integer on the run time stack.
   1848 
   1849 *Inserting instructions*
   1850 
   1851 There are essentially two ways to insert an ``Instruction`` into an existing
   1852 sequence of instructions that form a ``BasicBlock``:
   1853 
   1854 * Insertion into an explicit instruction list
   1855 
   1856   Given a ``BasicBlock* pb``, an ``Instruction* pi`` within that ``BasicBlock``,
   1857   and a newly-created instruction we wish to insert before ``*pi``, we do the
   1858   following:
   1859 
   1860   .. code-block:: c++
   1861 
   1862       BasicBlock *pb = ...;
   1863       Instruction *pi = ...;
   1864       Instruction *newInst = new Instruction(...);
   1865 
   1866       pb->getInstList().insert(pi, newInst); // Inserts newInst before pi in pb
   1867 
   1868   Appending to the end of a ``BasicBlock`` is so common that the ``Instruction``
   1869   class and ``Instruction``-derived classes provide constructors which take a
   1870   pointer to a ``BasicBlock`` to be appended to.  For example code that looked
   1871   like:
   1872 
   1873   .. code-block:: c++
   1874 
   1875     BasicBlock *pb = ...;
   1876     Instruction *newInst = new Instruction(...);
   1877 
   1878     pb->getInstList().push_back(newInst); // Appends newInst to pb
   1879 
   1880   becomes:
   1881 
   1882   .. code-block:: c++
   1883 
   1884     BasicBlock *pb = ...;
   1885     Instruction *newInst = new Instruction(..., pb);
   1886 
   1887   which is much cleaner, especially if you are creating long instruction
   1888   streams.
   1889 
   1890 * Insertion into an implicit instruction list
   1891 
   1892   ``Instruction`` instances that are already in ``BasicBlock``\ s are implicitly
   1893   associated with an existing instruction list: the instruction list of the
   1894   enclosing basic block.  Thus, we could have accomplished the same thing as the
   1895   above code without being given a ``BasicBlock`` by doing:
   1896 
   1897   .. code-block:: c++
   1898 
   1899     Instruction *pi = ...;
   1900     Instruction *newInst = new Instruction(...);
   1901 
   1902     pi->getParent()->getInstList().insert(pi, newInst);
   1903 
   1904   In fact, this sequence of steps occurs so frequently that the ``Instruction``
   1905   class and ``Instruction``-derived classes provide constructors which take (as
   1906   a default parameter) a pointer to an ``Instruction`` which the newly-created
   1907   ``Instruction`` should precede.  That is, ``Instruction`` constructors are
   1908   capable of inserting the newly-created instance into the ``BasicBlock`` of a
   1909   provided instruction, immediately before that instruction.  Using an
   1910   ``Instruction`` constructor with a ``insertBefore`` (default) parameter, the
   1911   above code becomes:
   1912 
   1913   .. code-block:: c++
   1914 
   1915     Instruction* pi = ...;
   1916     Instruction* newInst = new Instruction(..., pi);
   1917 
   1918   which is much cleaner, especially if you're creating a lot of instructions and
   1919   adding them to ``BasicBlock``\ s.
   1920 
   1921 .. _schanges_deleting:
   1922 
   1923 Deleting Instructions
   1924 ^^^^^^^^^^^^^^^^^^^^^
   1925 
   1926 Deleting an instruction from an existing sequence of instructions that form a
   1927 BasicBlock_ is very straight-forward: just call the instruction's
   1928 ``eraseFromParent()`` method.  For example:
   1929 
   1930 .. code-block:: c++
   1931 
   1932   Instruction *I = .. ;
   1933   I->eraseFromParent();
   1934 
   1935 This unlinks the instruction from its containing basic block and deletes it.  If
   1936 you'd just like to unlink the instruction from its containing basic block but
   1937 not delete it, you can use the ``removeFromParent()`` method.
   1938 
   1939 .. _schanges_replacing:
   1940 
   1941 Replacing an Instruction with another Value
   1942 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1943 
   1944 Replacing individual instructions
   1945 """""""""""""""""""""""""""""""""
   1946 
   1947 Including "`llvm/Transforms/Utils/BasicBlockUtils.h
   1948 <http://llvm.org/doxygen/BasicBlockUtils_8h-source.html>`_" permits use of two
   1949 very useful replace functions: ``ReplaceInstWithValue`` and
   1950 ``ReplaceInstWithInst``.
   1951 
   1952 .. _schanges_deleting_sub:
   1953 
   1954 Deleting Instructions
   1955 """""""""""""""""""""
   1956 
   1957 * ``ReplaceInstWithValue``
   1958 
   1959   This function replaces all uses of a given instruction with a value, and then
   1960   removes the original instruction.  The following example illustrates the
   1961   replacement of the result of a particular ``AllocaInst`` that allocates memory
   1962   for a single integer with a null pointer to an integer.
   1963 
   1964   .. code-block:: c++
   1965 
   1966     AllocaInst* instToReplace = ...;
   1967     BasicBlock::iterator ii(instToReplace);
   1968 
   1969     ReplaceInstWithValue(instToReplace->getParent()->getInstList(), ii,
   1970                          Constant::getNullValue(PointerType::getUnqual(Type::Int32Ty)));
   1971 
   1972 * ``ReplaceInstWithInst``
   1973 
   1974   This function replaces a particular instruction with another instruction,
   1975   inserting the new instruction into the basic block at the location where the
   1976   old instruction was, and replacing any uses of the old instruction with the
   1977   new instruction.  The following example illustrates the replacement of one
   1978   ``AllocaInst`` with another.
   1979 
   1980   .. code-block:: c++
   1981 
   1982     AllocaInst* instToReplace = ...;
   1983     BasicBlock::iterator ii(instToReplace);
   1984 
   1985     ReplaceInstWithInst(instToReplace->getParent()->getInstList(), ii,
   1986                         new AllocaInst(Type::Int32Ty, 0, "ptrToReplacedInt"));
   1987 
   1988 
   1989 Replacing multiple uses of Users and Values
   1990 """""""""""""""""""""""""""""""""""""""""""
   1991 
   1992 You can use ``Value::replaceAllUsesWith`` and ``User::replaceUsesOfWith`` to
   1993 change more than one use at a time.  See the doxygen documentation for the
   1994 `Value Class <http://llvm.org/doxygen/classllvm_1_1Value.html>`_ and `User Class
   1995 <http://llvm.org/doxygen/classllvm_1_1User.html>`_, respectively, for more
   1996 information.
   1997 
   1998 .. _schanges_deletingGV:
   1999 
   2000 Deleting GlobalVariables
   2001 ^^^^^^^^^^^^^^^^^^^^^^^^
   2002 
   2003 Deleting a global variable from a module is just as easy as deleting an
   2004 Instruction.  First, you must have a pointer to the global variable that you
   2005 wish to delete.  You use this pointer to erase it from its parent, the module.
   2006 For example:
   2007 
   2008 .. code-block:: c++
   2009 
   2010   GlobalVariable *GV = .. ;
   2011 
   2012   GV->eraseFromParent();
   2013 
   2014 
   2015 .. _create_types:
   2016 
   2017 How to Create Types
   2018 -------------------
   2019 
   2020 In generating IR, you may need some complex types.  If you know these types
   2021 statically, you can use ``TypeBuilder<...>::get()``, defined in
   2022 ``llvm/Support/TypeBuilder.h``, to retrieve them.  ``TypeBuilder`` has two forms
   2023 depending on whether you're building types for cross-compilation or native
   2024 library use.  ``TypeBuilder<T, true>`` requires that ``T`` be independent of the
   2025 host environment, meaning that it's built out of types from the ``llvm::types``
   2026 (`doxygen <http://llvm.org/doxygen/namespacellvm_1_1types.html>`__) namespace
   2027 and pointers, functions, arrays, etc. built of those.  ``TypeBuilder<T, false>``
   2028 additionally allows native C types whose size may depend on the host compiler.
   2029 For example,
   2030 
   2031 .. code-block:: c++
   2032 
   2033   FunctionType *ft = TypeBuilder<types::i<8>(types::i<32>*), true>::get();
   2034 
   2035 is easier to read and write than the equivalent
   2036 
   2037 .. code-block:: c++
   2038 
   2039   std::vector<const Type*> params;
   2040   params.push_back(PointerType::getUnqual(Type::Int32Ty));
   2041   FunctionType *ft = FunctionType::get(Type::Int8Ty, params, false);
   2042 
   2043 See the `class comment
   2044 <http://llvm.org/doxygen/TypeBuilder_8h-source.html#l00001>`_ for more details.
   2045 
   2046 .. _threading:
   2047 
   2048 Threads and LLVM
   2049 ================
   2050 
   2051 This section describes the interaction of the LLVM APIs with multithreading,
   2052 both on the part of client applications, and in the JIT, in the hosted
   2053 application.
   2054 
   2055 Note that LLVM's support for multithreading is still relatively young.  Up
   2056 through version 2.5, the execution of threaded hosted applications was
   2057 supported, but not threaded client access to the APIs.  While this use case is
   2058 now supported, clients *must* adhere to the guidelines specified below to ensure
   2059 proper operation in multithreaded mode.
   2060 
   2061 Note that, on Unix-like platforms, LLVM requires the presence of GCC's atomic
   2062 intrinsics in order to support threaded operation.  If you need a
   2063 multhreading-capable LLVM on a platform without a suitably modern system
   2064 compiler, consider compiling LLVM and LLVM-GCC in single-threaded mode, and
   2065 using the resultant compiler to build a copy of LLVM with multithreading
   2066 support.
   2067 
   2068 .. _startmultithreaded:
   2069 
   2070 Entering and Exiting Multithreaded Mode
   2071 ---------------------------------------
   2072 
   2073 In order to properly protect its internal data structures while avoiding
   2074 excessive locking overhead in the single-threaded case, the LLVM must intialize
   2075 certain data structures necessary to provide guards around its internals.  To do
   2076 so, the client program must invoke ``llvm_start_multithreaded()`` before making
   2077 any concurrent LLVM API calls.  To subsequently tear down these structures, use
   2078 the ``llvm_stop_multithreaded()`` call.  You can also use the
   2079 ``llvm_is_multithreaded()`` call to check the status of multithreaded mode.
   2080 
   2081 Note that both of these calls must be made *in isolation*.  That is to say that
   2082 no other LLVM API calls may be executing at any time during the execution of
   2083 ``llvm_start_multithreaded()`` or ``llvm_stop_multithreaded``.  It's is the
   2084 client's responsibility to enforce this isolation.
   2085 
   2086 The return value of ``llvm_start_multithreaded()`` indicates the success or
   2087 failure of the initialization.  Failure typically indicates that your copy of
   2088 LLVM was built without multithreading support, typically because GCC atomic
   2089 intrinsics were not found in your system compiler.  In this case, the LLVM API
   2090 will not be safe for concurrent calls.  However, it *will* be safe for hosting
   2091 threaded applications in the JIT, though :ref:`care must be taken
   2092 <jitthreading>` to ensure that side exits and the like do not accidentally
   2093 result in concurrent LLVM API calls.
   2094 
   2095 .. _shutdown:
   2096 
   2097 Ending Execution with ``llvm_shutdown()``
   2098 -----------------------------------------
   2099 
   2100 When you are done using the LLVM APIs, you should call ``llvm_shutdown()`` to
   2101 deallocate memory used for internal structures.  This will also invoke
   2102 ``llvm_stop_multithreaded()`` if LLVM is operating in multithreaded mode.  As
   2103 such, ``llvm_shutdown()`` requires the same isolation guarantees as
   2104 ``llvm_stop_multithreaded()``.
   2105 
   2106 Note that, if you use scope-based shutdown, you can use the
   2107 ``llvm_shutdown_obj`` class, which calls ``llvm_shutdown()`` in its destructor.
   2108 
   2109 .. _managedstatic:
   2110 
   2111 Lazy Initialization with ``ManagedStatic``
   2112 ------------------------------------------
   2113 
   2114 ``ManagedStatic`` is a utility class in LLVM used to implement static
   2115 initialization of static resources, such as the global type tables.  Before the
   2116 invocation of ``llvm_shutdown()``, it implements a simple lazy initialization
   2117 scheme.  Once ``llvm_start_multithreaded()`` returns, however, it uses
   2118 double-checked locking to implement thread-safe lazy initialization.
   2119 
   2120 Note that, because no other threads are allowed to issue LLVM API calls before
   2121 ``llvm_start_multithreaded()`` returns, it is possible to have
   2122 ``ManagedStatic``\ s of ``llvm::sys::Mutex``\ s.
   2123 
   2124 The ``llvm_acquire_global_lock()`` and ``llvm_release_global_lock`` APIs provide
   2125 access to the global lock used to implement the double-checked locking for lazy
   2126 initialization.  These should only be used internally to LLVM, and only if you
   2127 know what you're doing!
   2128 
   2129 .. _llvmcontext:
   2130 
   2131 Achieving Isolation with ``LLVMContext``
   2132 ----------------------------------------
   2133 
   2134 ``LLVMContext`` is an opaque class in the LLVM API which clients can use to
   2135 operate multiple, isolated instances of LLVM concurrently within the same
   2136 address space.  For instance, in a hypothetical compile-server, the compilation
   2137 of an individual translation unit is conceptually independent from all the
   2138 others, and it would be desirable to be able to compile incoming translation
   2139 units concurrently on independent server threads.  Fortunately, ``LLVMContext``
   2140 exists to enable just this kind of scenario!
   2141 
   2142 Conceptually, ``LLVMContext`` provides isolation.  Every LLVM entity
   2143 (``Module``\ s, ``Value``\ s, ``Type``\ s, ``Constant``\ s, etc.) in LLVM's
   2144 in-memory IR belongs to an ``LLVMContext``.  Entities in different contexts
   2145 *cannot* interact with each other: ``Module``\ s in different contexts cannot be
   2146 linked together, ``Function``\ s cannot be added to ``Module``\ s in different
   2147 contexts, etc.  What this means is that is is safe to compile on multiple
   2148 threads simultaneously, as long as no two threads operate on entities within the
   2149 same context.
   2150 
   2151 In practice, very few places in the API require the explicit specification of a
   2152 ``LLVMContext``, other than the ``Type`` creation/lookup APIs.  Because every
   2153 ``Type`` carries a reference to its owning context, most other entities can
   2154 determine what context they belong to by looking at their own ``Type``.  If you
   2155 are adding new entities to LLVM IR, please try to maintain this interface
   2156 design.
   2157 
   2158 For clients that do *not* require the benefits of isolation, LLVM provides a
   2159 convenience API ``getGlobalContext()``.  This returns a global, lazily
   2160 initialized ``LLVMContext`` that may be used in situations where isolation is
   2161 not a concern.
   2162 
   2163 .. _jitthreading:
   2164 
   2165 Threads and the JIT
   2166 -------------------
   2167 
   2168 LLVM's "eager" JIT compiler is safe to use in threaded programs.  Multiple
   2169 threads can call ``ExecutionEngine::getPointerToFunction()`` or
   2170 ``ExecutionEngine::runFunction()`` concurrently, and multiple threads can run
   2171 code output by the JIT concurrently.  The user must still ensure that only one
   2172 thread accesses IR in a given ``LLVMContext`` while another thread might be
   2173 modifying it.  One way to do that is to always hold the JIT lock while accessing
   2174 IR outside the JIT (the JIT *modifies* the IR by adding ``CallbackVH``\ s).
   2175 Another way is to only call ``getPointerToFunction()`` from the
   2176 ``LLVMContext``'s thread.
   2177 
   2178 When the JIT is configured to compile lazily (using
   2179 ``ExecutionEngine::DisableLazyCompilation(false)``), there is currently a `race
   2180 condition <http://llvm.org/bugs/show_bug.cgi?id=5184>`_ in updating call sites
   2181 after a function is lazily-jitted.  It's still possible to use the lazy JIT in a
   2182 threaded program if you ensure that only one thread at a time can call any
   2183 particular lazy stub and that the JIT lock guards any IR access, but we suggest
   2184 using only the eager JIT in threaded programs.
   2185 
   2186 .. _advanced:
   2187 
   2188 Advanced Topics
   2189 ===============
   2190 
   2191 This section describes some of the advanced or obscure API's that most clients
   2192 do not need to be aware of.  These API's tend manage the inner workings of the
   2193 LLVM system, and only need to be accessed in unusual circumstances.
   2194 
   2195 .. _SymbolTable:
   2196 
   2197 The ``ValueSymbolTable`` class
   2198 ------------------------------
   2199 
   2200 The ``ValueSymbolTable`` (`doxygen
   2201 <http://llvm.org/doxygen/classllvm_1_1ValueSymbolTable.html>`__) class provides
   2202 a symbol table that the :ref:`Function <c_Function>` and Module_ classes use for
   2203 naming value definitions.  The symbol table can provide a name for any Value_.
   2204 
   2205 Note that the ``SymbolTable`` class should not be directly accessed by most
   2206 clients.  It should only be used when iteration over the symbol table names
   2207 themselves are required, which is very special purpose.  Note that not all LLVM
   2208 Value_\ s have names, and those without names (i.e. they have an empty name) do
   2209 not exist in the symbol table.
   2210 
   2211 Symbol tables support iteration over the values in the symbol table with
   2212 ``begin/end/iterator`` and supports querying to see if a specific name is in the
   2213 symbol table (with ``lookup``).  The ``ValueSymbolTable`` class exposes no
   2214 public mutator methods, instead, simply call ``setName`` on a value, which will
   2215 autoinsert it into the appropriate symbol table.
   2216 
   2217 .. _UserLayout:
   2218 
   2219 The ``User`` and owned ``Use`` classes' memory layout
   2220 -----------------------------------------------------
   2221 
   2222 The ``User`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1User.html>`__)
   2223 class provides a basis for expressing the ownership of ``User`` towards other
   2224 `Value instance <http://llvm.org/doxygen/classllvm_1_1Value.html>`_\ s.  The
   2225 ``Use`` (`doxygen <http://llvm.org/doxygen/classllvm_1_1Use.html>`__) helper
   2226 class is employed to do the bookkeeping and to facilitate *O(1)* addition and
   2227 removal.
   2228 
   2229 .. _Use2User:
   2230 
   2231 Interaction and relationship between ``User`` and ``Use`` objects
   2232 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2233 
   2234 A subclass of ``User`` can choose between incorporating its ``Use`` objects or
   2235 refer to them out-of-line by means of a pointer.  A mixed variant (some ``Use``
   2236 s inline others hung off) is impractical and breaks the invariant that the
   2237 ``Use`` objects belonging to the same ``User`` form a contiguous array.
   2238 
   2239 We have 2 different layouts in the ``User`` (sub)classes:
   2240 
   2241 * Layout a)
   2242 
   2243   The ``Use`` object(s) are inside (resp. at fixed offset) of the ``User``
   2244   object and there are a fixed number of them.
   2245 
   2246 * Layout b)
   2247 
   2248   The ``Use`` object(s) are referenced by a pointer to an array from the
   2249   ``User`` object and there may be a variable number of them.
   2250 
   2251 As of v2.4 each layout still possesses a direct pointer to the start of the
   2252 array of ``Use``\ s.  Though not mandatory for layout a), we stick to this
   2253 redundancy for the sake of simplicity.  The ``User`` object also stores the
   2254 number of ``Use`` objects it has. (Theoretically this information can also be
   2255 calculated given the scheme presented below.)
   2256 
   2257 Special forms of allocation operators (``operator new``) enforce the following
   2258 memory layouts:
   2259 
   2260 * Layout a) is modelled by prepending the ``User`` object by the ``Use[]``
   2261   array.
   2262 
   2263   .. code-block:: none
   2264 
   2265     ...---.---.---.---.-------...
   2266       | P | P | P | P | User
   2267     '''---'---'---'---'-------'''
   2268 
   2269 * Layout b) is modelled by pointing at the ``Use[]`` array.
   2270 
   2271   .. code-block:: none
   2272 
   2273     .-------...
   2274     | User
   2275     '-------'''
   2276         |
   2277         v
   2278         .---.---.---.---...
   2279         | P | P | P | P |
   2280         '---'---'---'---'''
   2281 
   2282 *(In the above figures* '``P``' *stands for the* ``Use**`` *that is stored in
   2283 each* ``Use`` *object in the member* ``Use::Prev`` *)*
   2284 
   2285 .. _Waymarking:
   2286 
   2287 The waymarking algorithm
   2288 ^^^^^^^^^^^^^^^^^^^^^^^^
   2289 
   2290 Since the ``Use`` objects are deprived of the direct (back)pointer to their
   2291 ``User`` objects, there must be a fast and exact method to recover it.  This is
   2292 accomplished by the following scheme:
   2293 
   2294 A bit-encoding in the 2 LSBits (least significant bits) of the ``Use::Prev``
   2295 allows to find the start of the ``User`` object:
   2296 
   2297 * ``00`` --- binary digit 0
   2298 
   2299 * ``01`` --- binary digit 1
   2300 
   2301 * ``10`` --- stop and calculate (``s``)
   2302 
   2303 * ``11`` --- full stop (``S``)
   2304 
   2305 Given a ``Use*``, all we have to do is to walk till we get a stop and we either
   2306 have a ``User`` immediately behind or we have to walk to the next stop picking
   2307 up digits and calculating the offset:
   2308 
   2309 .. code-block:: none
   2310 
   2311   .---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.----------------
   2312   | 1 | s | 1 | 0 | 1 | 0 | s | 1 | 1 | 0 | s | 1 | 1 | s | 1 | S | User (or User*)
   2313   '---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'----------------
   2314       |+15                |+10            |+6         |+3     |+1
   2315       |                   |               |           |       | __>
   2316       |                   |               |           | __________>
   2317       |                   |               | ______________________>
   2318       |                   | ______________________________________>
   2319       | __________________________________________________________>
   2320 
   2321 Only the significant number of bits need to be stored between the stops, so that
   2322 the *worst case is 20 memory accesses* when there are 1000 ``Use`` objects
   2323 associated with a ``User``.
   2324 
   2325 .. _ReferenceImpl:
   2326 
   2327 Reference implementation
   2328 ^^^^^^^^^^^^^^^^^^^^^^^^
   2329 
   2330 The following literate Haskell fragment demonstrates the concept:
   2331 
   2332 .. code-block:: haskell
   2333 
   2334   > import Test.QuickCheck
   2335   >
   2336   > digits :: Int -> [Char] -> [Char]
   2337   > digits 0 acc = '0' : acc
   2338   > digits 1 acc = '1' : acc
   2339   > digits n acc = digits (n `div` 2) $ digits (n `mod` 2) acc
   2340   >
   2341   > dist :: Int -> [Char] -> [Char]
   2342   > dist 0 [] = ['S']
   2343   > dist 0 acc = acc
   2344   > dist 1 acc = let r = dist 0 acc in 's' : digits (length r) r
   2345   > dist n acc = dist (n - 1) $ dist 1 acc
   2346   >
   2347   > takeLast n ss = reverse $ take n $ reverse ss
   2348   >
   2349   > test = takeLast 40 $ dist 20 []
   2350   >
   2351 
   2352 Printing <test> gives: ``"1s100000s11010s10100s1111s1010s110s11s1S"``
   2353 
   2354 The reverse algorithm computes the length of the string just by examining a
   2355 certain prefix:
   2356 
   2357 .. code-block:: haskell
   2358 
   2359   > pref :: [Char] -> Int
   2360   > pref "S" = 1
   2361   > pref ('s':'1':rest) = decode 2 1 rest
   2362   > pref (_:rest) = 1 + pref rest
   2363   >
   2364   > decode walk acc ('0':rest) = decode (walk + 1) (acc * 2) rest
   2365   > decode walk acc ('1':rest) = decode (walk + 1) (acc * 2 + 1) rest
   2366   > decode walk acc _ = walk + acc
   2367   >
   2368 
   2369 Now, as expected, printing <pref test> gives ``40``.
   2370 
   2371 We can *quickCheck* this with following property:
   2372 
   2373 .. code-block:: haskell
   2374 
   2375   > testcase = dist 2000 []
   2376   > testcaseLength = length testcase
   2377   >
   2378   > identityProp n = n > 0 && n <= testcaseLength ==> length arr == pref arr
   2379   >     where arr = takeLast n testcase
   2380   >
   2381 
   2382 As expected <quickCheck identityProp> gives:
   2383 
   2384 ::
   2385 
   2386   *Main> quickCheck identityProp
   2387   OK, passed 100 tests.
   2388 
   2389 Let's be a bit more exhaustive:
   2390 
   2391 .. code-block:: haskell
   2392 
   2393   >
   2394   > deepCheck p = check (defaultConfig { configMaxTest = 500 }) p
   2395   >
   2396 
   2397 And here is the result of <deepCheck identityProp>:
   2398 
   2399 ::
   2400 
   2401   *Main> deepCheck identityProp
   2402   OK, passed 500 tests.
   2403 
   2404 .. _Tagging:
   2405 
   2406 Tagging considerations
   2407 ^^^^^^^^^^^^^^^^^^^^^^
   2408 
   2409 To maintain the invariant that the 2 LSBits of each ``Use**`` in ``Use`` never
   2410 change after being set up, setters of ``Use::Prev`` must re-tag the new
   2411 ``Use**`` on every modification.  Accordingly getters must strip the tag bits.
   2412 
   2413 For layout b) instead of the ``User`` we find a pointer (``User*`` with LSBit
   2414 set).  Following this pointer brings us to the ``User``.  A portable trick
   2415 ensures that the first bytes of ``User`` (if interpreted as a pointer) never has
   2416 the LSBit set. (Portability is relying on the fact that all known compilers
   2417 place the ``vptr`` in the first word of the instances.)
   2418 
   2419 .. _coreclasses:
   2420 
   2421 The Core LLVM Class Hierarchy Reference
   2422 =======================================
   2423 
   2424 ``#include "llvm/IR/Type.h"``
   2425 
   2426 header source: `Type.h <http://llvm.org/doxygen/Type_8h-source.html>`_
   2427 
   2428 doxygen info: `Type Clases <http://llvm.org/doxygen/classllvm_1_1Type.html>`_
   2429 
   2430 The Core LLVM classes are the primary means of representing the program being
   2431 inspected or transformed.  The core LLVM classes are defined in header files in
   2432 the ``include/llvm/`` directory, and implemented in the ``lib/VMCore``
   2433 directory.
   2434 
   2435 .. _Type:
   2436 
   2437 The Type class and Derived Types
   2438 --------------------------------
   2439 
   2440 ``Type`` is a superclass of all type classes.  Every ``Value`` has a ``Type``.
   2441 ``Type`` cannot be instantiated directly but only through its subclasses.
   2442 Certain primitive types (``VoidType``, ``LabelType``, ``FloatType`` and
   2443 ``DoubleType``) have hidden subclasses.  They are hidden because they offer no
   2444 useful functionality beyond what the ``Type`` class offers except to distinguish
   2445 themselves from other subclasses of ``Type``.
   2446 
   2447 All other types are subclasses of ``DerivedType``.  Types can be named, but this
   2448 is not a requirement.  There exists exactly one instance of a given shape at any
   2449 one time.  This allows type equality to be performed with address equality of
   2450 the Type Instance.  That is, given two ``Type*`` values, the types are identical
   2451 if the pointers are identical.
   2452 
   2453 .. _m_Type:
   2454 
   2455 Important Public Methods
   2456 ^^^^^^^^^^^^^^^^^^^^^^^^
   2457 
   2458 * ``bool isIntegerTy() const``: Returns true for any integer type.
   2459 
   2460 * ``bool isFloatingPointTy()``: Return true if this is one of the five
   2461   floating point types.
   2462 
   2463 * ``bool isSized()``: Return true if the type has known size.  Things
   2464   that don't have a size are abstract types, labels and void.
   2465 
   2466 .. _derivedtypes:
   2467 
   2468 Important Derived Types
   2469 ^^^^^^^^^^^^^^^^^^^^^^^
   2470 
   2471 ``IntegerType``
   2472   Subclass of DerivedType that represents integer types of any bit width.  Any
   2473   bit width between ``IntegerType::MIN_INT_BITS`` (1) and
   2474   ``IntegerType::MAX_INT_BITS`` (~8 million) can be represented.
   2475 
   2476   * ``static const IntegerType* get(unsigned NumBits)``: get an integer
   2477     type of a specific bit width.
   2478 
   2479   * ``unsigned getBitWidth() const``: Get the bit width of an integer type.
   2480 
   2481 ``SequentialType``
   2482   This is subclassed by ArrayType, PointerType and VectorType.
   2483 
   2484   * ``const Type * getElementType() const``: Returns the type of each
   2485     of the elements in the sequential type.
   2486 
   2487 ``ArrayType``
   2488   This is a subclass of SequentialType and defines the interface for array
   2489   types.
   2490 
   2491   * ``unsigned getNumElements() const``: Returns the number of elements
   2492     in the array.
   2493 
   2494 ``PointerType``
   2495   Subclass of SequentialType for pointer types.
   2496 
   2497 ``VectorType``
   2498   Subclass of SequentialType for vector types.  A vector type is similar to an
   2499   ArrayType but is distinguished because it is a first class type whereas
   2500   ArrayType is not.  Vector types are used for vector operations and are usually
   2501   small vectors of of an integer or floating point type.
   2502 
   2503 ``StructType``
   2504   Subclass of DerivedTypes for struct types.
   2505 
   2506 .. _FunctionType:
   2507 
   2508 ``FunctionType``
   2509   Subclass of DerivedTypes for function types.
   2510 
   2511   * ``bool isVarArg() const``: Returns true if it's a vararg function.
   2512 
   2513   * ``const Type * getReturnType() const``: Returns the return type of the
   2514     function.
   2515 
   2516   * ``const Type * getParamType (unsigned i)``: Returns the type of the ith
   2517     parameter.
   2518 
   2519   * ``const unsigned getNumParams() const``: Returns the number of formal
   2520     parameters.
   2521 
   2522 .. _Module:
   2523 
   2524 The ``Module`` class
   2525 --------------------
   2526 
   2527 ``#include "llvm/IR/Module.h"``
   2528 
   2529 header source: `Module.h <http://llvm.org/doxygen/Module_8h-source.html>`_
   2530 
   2531 doxygen info: `Module Class <http://llvm.org/doxygen/classllvm_1_1Module.html>`_
   2532 
   2533 The ``Module`` class represents the top level structure present in LLVM
   2534 programs.  An LLVM module is effectively either a translation unit of the
   2535 original program or a combination of several translation units merged by the
   2536 linker.  The ``Module`` class keeps track of a list of :ref:`Function
   2537 <c_Function>`\ s, a list of GlobalVariable_\ s, and a SymbolTable_.
   2538 Additionally, it contains a few helpful member functions that try to make common
   2539 operations easy.
   2540 
   2541 .. _m_Module:
   2542 
   2543 Important Public Members of the ``Module`` class
   2544 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2545 
   2546 * ``Module::Module(std::string name = "")``
   2547 
   2548   Constructing a Module_ is easy.  You can optionally provide a name for it
   2549   (probably based on the name of the translation unit).
   2550 
   2551 * | ``Module::iterator`` - Typedef for function list iterator
   2552   | ``Module::const_iterator`` - Typedef for const_iterator.
   2553   | ``begin()``, ``end()``, ``size()``, ``empty()``
   2554 
   2555   These are forwarding methods that make it easy to access the contents of a
   2556   ``Module`` object's :ref:`Function <c_Function>` list.
   2557 
   2558 * ``Module::FunctionListType &getFunctionList()``
   2559 
   2560   Returns the list of :ref:`Function <c_Function>`\ s.  This is necessary to use
   2561   when you need to update the list or perform a complex action that doesn't have
   2562   a forwarding method.
   2563 
   2564 ----------------
   2565 
   2566 * | ``Module::global_iterator`` - Typedef for global variable list iterator
   2567   | ``Module::const_global_iterator`` - Typedef for const_iterator.
   2568   | ``global_begin()``, ``global_end()``, ``global_size()``, ``global_empty()``
   2569 
   2570   These are forwarding methods that make it easy to access the contents of a
   2571   ``Module`` object's GlobalVariable_ list.
   2572 
   2573 * ``Module::GlobalListType &getGlobalList()``
   2574 
   2575   Returns the list of GlobalVariable_\ s.  This is necessary to use when you
   2576   need to update the list or perform a complex action that doesn't have a
   2577   forwarding method.
   2578 
   2579 ----------------
   2580 
   2581 * ``SymbolTable *getSymbolTable()``
   2582 
   2583   Return a reference to the SymbolTable_ for this ``Module``.
   2584 
   2585 ----------------
   2586 
   2587 * ``Function *getFunction(StringRef Name) const``
   2588 
   2589   Look up the specified function in the ``Module`` SymbolTable_.  If it does not
   2590   exist, return ``null``.
   2591 
   2592 * ``Function *getOrInsertFunction(const std::string &Name, const FunctionType
   2593   *T)``
   2594 
   2595   Look up the specified function in the ``Module`` SymbolTable_.  If it does not
   2596   exist, add an external declaration for the function and return it.
   2597 
   2598 * ``std::string getTypeName(const Type *Ty)``
   2599 
   2600   If there is at least one entry in the SymbolTable_ for the specified Type_,
   2601   return it.  Otherwise return the empty string.
   2602 
   2603 * ``bool addTypeName(const std::string &Name, const Type *Ty)``
   2604 
   2605   Insert an entry in the SymbolTable_ mapping ``Name`` to ``Ty``.  If there is
   2606   already an entry for this name, true is returned and the SymbolTable_ is not
   2607   modified.
   2608 
   2609 .. _Value:
   2610 
   2611 The ``Value`` class
   2612 -------------------
   2613 
   2614 ``#include "llvm/IR/Value.h"``
   2615 
   2616 header source: `Value.h <http://llvm.org/doxygen/Value_8h-source.html>`_
   2617 
   2618 doxygen info: `Value Class <http://llvm.org/doxygen/classllvm_1_1Value.html>`_
   2619 
   2620 The ``Value`` class is the most important class in the LLVM Source base.  It
   2621 represents a typed value that may be used (among other things) as an operand to
   2622 an instruction.  There are many different types of ``Value``\ s, such as
   2623 Constant_\ s, Argument_\ s.  Even Instruction_\ s and :ref:`Function
   2624 <c_Function>`\ s are ``Value``\ s.
   2625 
   2626 A particular ``Value`` may be used many times in the LLVM representation for a
   2627 program.  For example, an incoming argument to a function (represented with an
   2628 instance of the Argument_ class) is "used" by every instruction in the function
   2629 that references the argument.  To keep track of this relationship, the ``Value``
   2630 class keeps a list of all of the ``User``\ s that is using it (the User_ class
   2631 is a base class for all nodes in the LLVM graph that can refer to ``Value``\ s).
   2632 This use list is how LLVM represents def-use information in the program, and is
   2633 accessible through the ``use_*`` methods, shown below.
   2634 
   2635 Because LLVM is a typed representation, every LLVM ``Value`` is typed, and this
   2636 Type_ is available through the ``getType()`` method.  In addition, all LLVM
   2637 values can be named.  The "name" of the ``Value`` is a symbolic string printed
   2638 in the LLVM code:
   2639 
   2640 .. code-block:: llvm
   2641 
   2642   %foo = add i32 1, 2
   2643 
   2644 .. _nameWarning:
   2645 
   2646 The name of this instruction is "foo". **NOTE** that the name of any value may
   2647 be missing (an empty string), so names should **ONLY** be used for debugging
   2648 (making the source code easier to read, debugging printouts), they should not be
   2649 used to keep track of values or map between them.  For this purpose, use a
   2650 ``std::map`` of pointers to the ``Value`` itself instead.
   2651 
   2652 One important aspect of LLVM is that there is no distinction between an SSA
   2653 variable and the operation that produces it.  Because of this, any reference to
   2654 the value produced by an instruction (or the value available as an incoming
   2655 argument, for example) is represented as a direct pointer to the instance of the
   2656 class that represents this value.  Although this may take some getting used to,
   2657 it simplifies the representation and makes it easier to manipulate.
   2658 
   2659 .. _m_Value:
   2660 
   2661 Important Public Members of the ``Value`` class
   2662 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2663 
   2664 * | ``Value::use_iterator`` - Typedef for iterator over the use-list
   2665   | ``Value::const_use_iterator`` - Typedef for const_iterator over the
   2666     use-list
   2667   | ``unsigned use_size()`` - Returns the number of users of the value.
   2668   | ``bool use_empty()`` - Returns true if there are no users.
   2669   | ``use_iterator use_begin()`` - Get an iterator to the start of the
   2670     use-list.
   2671   | ``use_iterator use_end()`` - Get an iterator to the end of the use-list.
   2672   | ``User *use_back()`` - Returns the last element in the list.
   2673 
   2674   These methods are the interface to access the def-use information in LLVM.
   2675   As with all other iterators in LLVM, the naming conventions follow the
   2676   conventions defined by the STL_.
   2677 
   2678 * ``Type *getType() const``
   2679   This method returns the Type of the Value.
   2680 
   2681 * | ``bool hasName() const``
   2682   | ``std::string getName() const``
   2683   | ``void setName(const std::string &Name)``
   2684 
   2685   This family of methods is used to access and assign a name to a ``Value``, be
   2686   aware of the :ref:`precaution above <nameWarning>`.
   2687 
   2688 * ``void replaceAllUsesWith(Value *V)``
   2689 
   2690   This method traverses the use list of a ``Value`` changing all User_\ s of the
   2691   current value to refer to "``V``" instead.  For example, if you detect that an
   2692   instruction always produces a constant value (for example through constant
   2693   folding), you can replace all uses of the instruction with the constant like
   2694   this:
   2695 
   2696   .. code-block:: c++
   2697 
   2698     Inst->replaceAllUsesWith(ConstVal);
   2699 
   2700 .. _User:
   2701 
   2702 The ``User`` class
   2703 ------------------
   2704 
   2705 ``#include "llvm/IR/User.h"``
   2706 
   2707 header source: `User.h <http://llvm.org/doxygen/User_8h-source.html>`_
   2708 
   2709 doxygen info: `User Class <http://llvm.org/doxygen/classllvm_1_1User.html>`_
   2710 
   2711 Superclass: Value_
   2712 
   2713 The ``User`` class is the common base class of all LLVM nodes that may refer to
   2714 ``Value``\ s.  It exposes a list of "Operands" that are all of the ``Value``\ s
   2715 that the User is referring to.  The ``User`` class itself is a subclass of
   2716 ``Value``.
   2717 
   2718 The operands of a ``User`` point directly to the LLVM ``Value`` that it refers
   2719 to.  Because LLVM uses Static Single Assignment (SSA) form, there can only be
   2720 one definition referred to, allowing this direct connection.  This connection
   2721 provides the use-def information in LLVM.
   2722 
   2723 .. _m_User:
   2724 
   2725 Important Public Members of the ``User`` class
   2726 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2727 
   2728 The ``User`` class exposes the operand list in two ways: through an index access
   2729 interface and through an iterator based interface.
   2730 
   2731 * | ``Value *getOperand(unsigned i)``
   2732   | ``unsigned getNumOperands()``
   2733 
   2734   These two methods expose the operands of the ``User`` in a convenient form for
   2735   direct access.
   2736 
   2737 * | ``User::op_iterator`` - Typedef for iterator over the operand list
   2738   | ``op_iterator op_begin()`` - Get an iterator to the start of the operand
   2739     list.
   2740   | ``op_iterator op_end()`` - Get an iterator to the end of the operand list.
   2741 
   2742   Together, these methods make up the iterator based interface to the operands
   2743   of a ``User``.
   2744 
   2745 
   2746 .. _Instruction:
   2747 
   2748 The ``Instruction`` class
   2749 -------------------------
   2750 
   2751 ``#include "llvm/IR/Instruction.h"``
   2752 
   2753 header source: `Instruction.h
   2754 <http://llvm.org/doxygen/Instruction_8h-source.html>`_
   2755 
   2756 doxygen info: `Instruction Class
   2757 <http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_
   2758 
   2759 Superclasses: User_, Value_
   2760 
   2761 The ``Instruction`` class is the common base class for all LLVM instructions.
   2762 It provides only a few methods, but is a very commonly used class.  The primary
   2763 data tracked by the ``Instruction`` class itself is the opcode (instruction
   2764 type) and the parent BasicBlock_ the ``Instruction`` is embedded into.  To
   2765 represent a specific type of instruction, one of many subclasses of
   2766 ``Instruction`` are used.
   2767 
   2768 Because the ``Instruction`` class subclasses the User_ class, its operands can
   2769 be accessed in the same way as for other ``User``\ s (with the
   2770 ``getOperand()``/``getNumOperands()`` and ``op_begin()``/``op_end()`` methods).
   2771 An important file for the ``Instruction`` class is the ``llvm/Instruction.def``
   2772 file.  This file contains some meta-data about the various different types of
   2773 instructions in LLVM.  It describes the enum values that are used as opcodes
   2774 (for example ``Instruction::Add`` and ``Instruction::ICmp``), as well as the
   2775 concrete sub-classes of ``Instruction`` that implement the instruction (for
   2776 example BinaryOperator_ and CmpInst_).  Unfortunately, the use of macros in this
   2777 file confuses doxygen, so these enum values don't show up correctly in the
   2778 `doxygen output <http://llvm.org/doxygen/classllvm_1_1Instruction.html>`_.
   2779 
   2780 .. _s_Instruction:
   2781 
   2782 Important Subclasses of the ``Instruction`` class
   2783 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2784 
   2785 .. _BinaryOperator:
   2786 
   2787 * ``BinaryOperator``
   2788 
   2789   This subclasses represents all two operand instructions whose operands must be
   2790   the same type, except for the comparison instructions.
   2791 
   2792 .. _CastInst:
   2793 
   2794 * ``CastInst``
   2795   This subclass is the parent of the 12 casting instructions.  It provides
   2796   common operations on cast instructions.
   2797 
   2798 .. _CmpInst:
   2799 
   2800 * ``CmpInst``
   2801 
   2802   This subclass respresents the two comparison instructions,
   2803   `ICmpInst <LangRef.html#i_icmp>`_ (integer opreands), and
   2804   `FCmpInst <LangRef.html#i_fcmp>`_ (floating point operands).
   2805 
   2806 .. _TerminatorInst:
   2807 
   2808 * ``TerminatorInst``
   2809 
   2810   This subclass is the parent of all terminator instructions (those which can
   2811   terminate a block).
   2812 
   2813 .. _m_Instruction:
   2814 
   2815 Important Public Members of the ``Instruction`` class
   2816 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2817 
   2818 * ``BasicBlock *getParent()``
   2819 
   2820   Returns the BasicBlock_ that this
   2821   ``Instruction`` is embedded into.
   2822 
   2823 * ``bool mayWriteToMemory()``
   2824 
   2825   Returns true if the instruction writes to memory, i.e. it is a ``call``,
   2826   ``free``, ``invoke``, or ``store``.
   2827 
   2828 * ``unsigned getOpcode()``
   2829 
   2830   Returns the opcode for the ``Instruction``.
   2831 
   2832 * ``Instruction *clone() const``
   2833 
   2834   Returns another instance of the specified instruction, identical in all ways
   2835   to the original except that the instruction has no parent (i.e. it's not
   2836   embedded into a BasicBlock_), and it has no name.
   2837 
   2838 .. _Constant:
   2839 
   2840 The ``Constant`` class and subclasses
   2841 -------------------------------------
   2842 
   2843 Constant represents a base class for different types of constants.  It is
   2844 subclassed by ConstantInt, ConstantArray, etc. for representing the various
   2845 types of Constants.  GlobalValue_ is also a subclass, which represents the
   2846 address of a global variable or function.
   2847 
   2848 .. _s_Constant:
   2849 
   2850 Important Subclasses of Constant
   2851 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2852 
   2853 * ConstantInt : This subclass of Constant represents an integer constant of
   2854   any width.
   2855 
   2856   * ``const APInt& getValue() const``: Returns the underlying
   2857     value of this constant, an APInt value.
   2858 
   2859   * ``int64_t getSExtValue() const``: Converts the underlying APInt value to an
   2860     int64_t via sign extension.  If the value (not the bit width) of the APInt
   2861     is too large to fit in an int64_t, an assertion will result.  For this
   2862     reason, use of this method is discouraged.
   2863 
   2864   * ``uint64_t getZExtValue() const``: Converts the underlying APInt value
   2865     to a uint64_t via zero extension.  IF the value (not the bit width) of the
   2866     APInt is too large to fit in a uint64_t, an assertion will result.  For this
   2867     reason, use of this method is discouraged.
   2868 
   2869   * ``static ConstantInt* get(const APInt& Val)``: Returns the ConstantInt
   2870     object that represents the value provided by ``Val``.  The type is implied
   2871     as the IntegerType that corresponds to the bit width of ``Val``.
   2872 
   2873   * ``static ConstantInt* get(const Type *Ty, uint64_t Val)``: Returns the
   2874     ConstantInt object that represents the value provided by ``Val`` for integer
   2875     type ``Ty``.
   2876 
   2877 * ConstantFP : This class represents a floating point constant.
   2878 
   2879   * ``double getValue() const``: Returns the underlying value of this constant.
   2880 
   2881 * ConstantArray : This represents a constant array.
   2882 
   2883   * ``const std::vector<Use> &getValues() const``: Returns a vector of
   2884     component constants that makeup this array.
   2885 
   2886 * ConstantStruct : This represents a constant struct.
   2887 
   2888   * ``const std::vector<Use> &getValues() const``: Returns a vector of
   2889     component constants that makeup this array.
   2890 
   2891 * GlobalValue : This represents either a global variable or a function.  In
   2892   either case, the value is a constant fixed address (after linking).
   2893 
   2894 .. _GlobalValue:
   2895 
   2896 The ``GlobalValue`` class
   2897 -------------------------
   2898 
   2899 ``#include "llvm/IR/GlobalValue.h"``
   2900 
   2901 header source: `GlobalValue.h
   2902 <http://llvm.org/doxygen/GlobalValue_8h-source.html>`_
   2903 
   2904 doxygen info: `GlobalValue Class
   2905 <http://llvm.org/doxygen/classllvm_1_1GlobalValue.html>`_
   2906 
   2907 Superclasses: Constant_, User_, Value_
   2908 
   2909 Global values ( GlobalVariable_\ s or :ref:`Function <c_Function>`\ s) are the
   2910 only LLVM values that are visible in the bodies of all :ref:`Function
   2911 <c_Function>`\ s.  Because they are visible at global scope, they are also
   2912 subject to linking with other globals defined in different translation units.
   2913 To control the linking process, ``GlobalValue``\ s know their linkage rules.
   2914 Specifically, ``GlobalValue``\ s know whether they have internal or external
   2915 linkage, as defined by the ``LinkageTypes`` enumeration.
   2916 
   2917 If a ``GlobalValue`` has internal linkage (equivalent to being ``static`` in C),
   2918 it is not visible to code outside the current translation unit, and does not
   2919 participate in linking.  If it has external linkage, it is visible to external
   2920 code, and does participate in linking.  In addition to linkage information,
   2921 ``GlobalValue``\ s keep track of which Module_ they are currently part of.
   2922 
   2923 Because ``GlobalValue``\ s are memory objects, they are always referred to by
   2924 their **address**.  As such, the Type_ of a global is always a pointer to its
   2925 contents.  It is important to remember this when using the ``GetElementPtrInst``
   2926 instruction because this pointer must be dereferenced first.  For example, if
   2927 you have a ``GlobalVariable`` (a subclass of ``GlobalValue)`` that is an array
   2928 of 24 ints, type ``[24 x i32]``, then the ``GlobalVariable`` is a pointer to
   2929 that array.  Although the address of the first element of this array and the
   2930 value of the ``GlobalVariable`` are the same, they have different types.  The
   2931 ``GlobalVariable``'s type is ``[24 x i32]``.  The first element's type is
   2932 ``i32.`` Because of this, accessing a global value requires you to dereference
   2933 the pointer with ``GetElementPtrInst`` first, then its elements can be accessed.
   2934 This is explained in the `LLVM Language Reference Manual
   2935 <LangRef.html#globalvars>`_.
   2936 
   2937 .. _m_GlobalValue:
   2938 
   2939 Important Public Members of the ``GlobalValue`` class
   2940 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2941 
   2942 * | ``bool hasInternalLinkage() const``
   2943   | ``bool hasExternalLinkage() const``
   2944   | ``void setInternalLinkage(bool HasInternalLinkage)``
   2945 
   2946   These methods manipulate the linkage characteristics of the ``GlobalValue``.
   2947 
   2948 * ``Module *getParent()``
   2949 
   2950   This returns the Module_ that the
   2951   GlobalValue is currently embedded into.
   2952 
   2953 .. _c_Function:
   2954 
   2955 The ``Function`` class
   2956 ----------------------
   2957 
   2958 ``#include "llvm/IR/Function.h"``
   2959 
   2960 header source: `Function.h <http://llvm.org/doxygen/Function_8h-source.html>`_
   2961 
   2962 doxygen info: `Function Class
   2963 <http://llvm.org/doxygen/classllvm_1_1Function.html>`_
   2964 
   2965 Superclasses: GlobalValue_, Constant_, User_, Value_
   2966 
   2967 The ``Function`` class represents a single procedure in LLVM.  It is actually
   2968 one of the more complex classes in the LLVM hierarchy because it must keep track
   2969 of a large amount of data.  The ``Function`` class keeps track of a list of
   2970 BasicBlock_\ s, a list of formal Argument_\ s, and a SymbolTable_.
   2971 
   2972 The list of BasicBlock_\ s is the most commonly used part of ``Function``
   2973 objects.  The list imposes an implicit ordering of the blocks in the function,
   2974 which indicate how the code will be laid out by the backend.  Additionally, the
   2975 first BasicBlock_ is the implicit entry node for the ``Function``.  It is not
   2976 legal in LLVM to explicitly branch to this initial block.  There are no implicit
   2977 exit nodes, and in fact there may be multiple exit nodes from a single
   2978 ``Function``.  If the BasicBlock_ list is empty, this indicates that the
   2979 ``Function`` is actually a function declaration: the actual body of the function
   2980 hasn't been linked in yet.
   2981 
   2982 In addition to a list of BasicBlock_\ s, the ``Function`` class also keeps track
   2983 of the list of formal Argument_\ s that the function receives.  This container
   2984 manages the lifetime of the Argument_ nodes, just like the BasicBlock_ list does
   2985 for the BasicBlock_\ s.
   2986 
   2987 The SymbolTable_ is a very rarely used LLVM feature that is only used when you
   2988 have to look up a value by name.  Aside from that, the SymbolTable_ is used
   2989 internally to make sure that there are not conflicts between the names of
   2990 Instruction_\ s, BasicBlock_\ s, or Argument_\ s in the function body.
   2991 
   2992 Note that ``Function`` is a GlobalValue_ and therefore also a Constant_.  The
   2993 value of the function is its address (after linking) which is guaranteed to be
   2994 constant.
   2995 
   2996 .. _m_Function:
   2997 
   2998 Important Public Members of the ``Function``
   2999 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3000 
   3001 * ``Function(const FunctionType *Ty, LinkageTypes Linkage,
   3002   const std::string &N = "", Module* Parent = 0)``
   3003 
   3004   Constructor used when you need to create new ``Function``\ s to add the
   3005   program.  The constructor must specify the type of the function to create and
   3006   what type of linkage the function should have.  The FunctionType_ argument
   3007   specifies the formal arguments and return value for the function.  The same
   3008   FunctionType_ value can be used to create multiple functions.  The ``Parent``
   3009   argument specifies the Module in which the function is defined.  If this
   3010   argument is provided, the function will automatically be inserted into that
   3011   module's list of functions.
   3012 
   3013 * ``bool isDeclaration()``
   3014 
   3015   Return whether or not the ``Function`` has a body defined.  If the function is
   3016   "external", it does not have a body, and thus must be resolved by linking with
   3017   a function defined in a different translation unit.
   3018 
   3019 * | ``Function::iterator`` - Typedef for basic block list iterator
   3020   | ``Function::const_iterator`` - Typedef for const_iterator.
   3021   | ``begin()``, ``end()``, ``size()``, ``empty()``
   3022 
   3023   These are forwarding methods that make it easy to access the contents of a
   3024   ``Function`` object's BasicBlock_ list.
   3025 
   3026 * ``Function::BasicBlockListType &getBasicBlockList()``
   3027 
   3028   Returns the list of BasicBlock_\ s.  This is necessary to use when you need to
   3029   update the list or perform a complex action that doesn't have a forwarding
   3030   method.
   3031 
   3032 * | ``Function::arg_iterator`` - Typedef for the argument list iterator
   3033   | ``Function::const_arg_iterator`` - Typedef for const_iterator.
   3034   | ``arg_begin()``, ``arg_end()``, ``arg_size()``, ``arg_empty()``
   3035 
   3036   These are forwarding methods that make it easy to access the contents of a
   3037   ``Function`` object's Argument_ list.
   3038 
   3039 * ``Function::ArgumentListType &getArgumentList()``
   3040 
   3041   Returns the list of Argument_.  This is necessary to use when you need to
   3042   update the list or perform a complex action that doesn't have a forwarding
   3043   method.
   3044 
   3045 * ``BasicBlock &getEntryBlock()``
   3046 
   3047   Returns the entry ``BasicBlock`` for the function.  Because the entry block
   3048   for the function is always the first block, this returns the first block of
   3049   the ``Function``.
   3050 
   3051 * | ``Type *getReturnType()``
   3052   | ``FunctionType *getFunctionType()``
   3053 
   3054   This traverses the Type_ of the ``Function`` and returns the return type of
   3055   the function, or the FunctionType_ of the actual function.
   3056 
   3057 * ``SymbolTable *getSymbolTable()``
   3058 
   3059   Return a pointer to the SymbolTable_ for this ``Function``.
   3060 
   3061 .. _GlobalVariable:
   3062 
   3063 The ``GlobalVariable`` class
   3064 ----------------------------
   3065 
   3066 ``#include "llvm/IR/GlobalVariable.h"``
   3067 
   3068 header source: `GlobalVariable.h
   3069 <http://llvm.org/doxygen/GlobalVariable_8h-source.html>`_
   3070 
   3071 doxygen info: `GlobalVariable Class
   3072 <http://llvm.org/doxygen/classllvm_1_1GlobalVariable.html>`_
   3073 
   3074 Superclasses: GlobalValue_, Constant_, User_, Value_
   3075 
   3076 Global variables are represented with the (surprise surprise) ``GlobalVariable``
   3077 class.  Like functions, ``GlobalVariable``\ s are also subclasses of
   3078 GlobalValue_, and as such are always referenced by their address (global values
   3079 must live in memory, so their "name" refers to their constant address).  See
   3080 GlobalValue_ for more on this.  Global variables may have an initial value
   3081 (which must be a Constant_), and if they have an initializer, they may be marked
   3082 as "constant" themselves (indicating that their contents never change at
   3083 runtime).
   3084 
   3085 .. _m_GlobalVariable:
   3086 
   3087 Important Public Members of the ``GlobalVariable`` class
   3088 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3089 
   3090 * ``GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes &Linkage,
   3091   Constant *Initializer = 0, const std::string &Name = "", Module* Parent = 0)``
   3092 
   3093   Create a new global variable of the specified type.  If ``isConstant`` is true
   3094   then the global variable will be marked as unchanging for the program.  The
   3095   Linkage parameter specifies the type of linkage (internal, external, weak,
   3096   linkonce, appending) for the variable.  If the linkage is InternalLinkage,
   3097   WeakAnyLinkage, WeakODRLinkage, LinkOnceAnyLinkage or LinkOnceODRLinkage, then
   3098   the resultant global variable will have internal linkage.  AppendingLinkage
   3099   concatenates together all instances (in different translation units) of the
   3100   variable into a single variable but is only applicable to arrays.  See the
   3101   `LLVM Language Reference <LangRef.html#modulestructure>`_ for further details
   3102   on linkage types.  Optionally an initializer, a name, and the module to put
   3103   the variable into may be specified for the global variable as well.
   3104 
   3105 * ``bool isConstant() const``
   3106 
   3107   Returns true if this is a global variable that is known not to be modified at
   3108   runtime.
   3109 
   3110 * ``bool hasInitializer()``
   3111 
   3112   Returns true if this ``GlobalVariable`` has an intializer.
   3113 
   3114 * ``Constant *getInitializer()``
   3115 
   3116   Returns the initial value for a ``GlobalVariable``.  It is not legal to call
   3117   this method if there is no initializer.
   3118 
   3119 .. _BasicBlock:
   3120 
   3121 The ``BasicBlock`` class
   3122 ------------------------
   3123 
   3124 ``#include "llvm/IR/BasicBlock.h"``
   3125 
   3126 header source: `BasicBlock.h
   3127 <http://llvm.org/doxygen/BasicBlock_8h-source.html>`_
   3128 
   3129 doxygen info: `BasicBlock Class
   3130 <http://llvm.org/doxygen/classllvm_1_1BasicBlock.html>`_
   3131 
   3132 Superclass: Value_
   3133 
   3134 This class represents a single entry single exit section of the code, commonly
   3135 known as a basic block by the compiler community.  The ``BasicBlock`` class
   3136 maintains a list of Instruction_\ s, which form the body of the block.  Matching
   3137 the language definition, the last element of this list of instructions is always
   3138 a terminator instruction (a subclass of the TerminatorInst_ class).
   3139 
   3140 In addition to tracking the list of instructions that make up the block, the
   3141 ``BasicBlock`` class also keeps track of the :ref:`Function <c_Function>` that
   3142 it is embedded into.
   3143 
   3144 Note that ``BasicBlock``\ s themselves are Value_\ s, because they are
   3145 referenced by instructions like branches and can go in the switch tables.
   3146 ``BasicBlock``\ s have type ``label``.
   3147 
   3148 .. _m_BasicBlock:
   3149 
   3150 Important Public Members of the ``BasicBlock`` class
   3151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   3152 
   3153 * ``BasicBlock(const std::string &Name = "", Function *Parent = 0)``
   3154 
   3155   The ``BasicBlock`` constructor is used to create new basic blocks for
   3156   insertion into a function.  The constructor optionally takes a name for the
   3157   new block, and a :ref:`Function <c_Function>` to insert it into.  If the
   3158   ``Parent`` parameter is specified, the new ``BasicBlock`` is automatically
   3159   inserted at the end of the specified :ref:`Function <c_Function>`, if not
   3160   specified, the BasicBlock must be manually inserted into the :ref:`Function
   3161   <c_Function>`.
   3162 
   3163 * | ``BasicBlock::iterator`` - Typedef for instruction list iterator
   3164   | ``BasicBlock::const_iterator`` - Typedef for const_iterator.
   3165   | ``begin()``, ``end()``, ``front()``, ``back()``,
   3166     ``size()``, ``empty()``
   3167     STL-style functions for accessing the instruction list.
   3168 
   3169   These methods and typedefs are forwarding functions that have the same
   3170   semantics as the standard library methods of the same names.  These methods
   3171   expose the underlying instruction list of a basic block in a way that is easy
   3172   to manipulate.  To get the full complement of container operations (including
   3173   operations to update the list), you must use the ``getInstList()`` method.
   3174 
   3175 * ``BasicBlock::InstListType &getInstList()``
   3176 
   3177   This method is used to get access to the underlying container that actually
   3178   holds the Instructions.  This method must be used when there isn't a
   3179   forwarding function in the ``BasicBlock`` class for the operation that you
   3180   would like to perform.  Because there are no forwarding functions for
   3181   "updating" operations, you need to use this if you want to update the contents
   3182   of a ``BasicBlock``.
   3183 
   3184 * ``Function *getParent()``
   3185 
   3186   Returns a pointer to :ref:`Function <c_Function>` the block is embedded into,
   3187   or a null pointer if it is homeless.
   3188 
   3189 * ``TerminatorInst *getTerminator()``
   3190 
   3191   Returns a pointer to the terminator instruction that appears at the end of the
   3192   ``BasicBlock``.  If there is no terminator instruction, or if the last
   3193   instruction in the block is not a terminator, then a null pointer is returned.
   3194 
   3195 .. _Argument:
   3196 
   3197 The ``Argument`` class
   3198 ----------------------
   3199 
   3200 This subclass of Value defines the interface for incoming formal arguments to a
   3201 function.  A Function maintains a list of its formal arguments.  An argument has
   3202 a pointer to the parent Function.
   3203 
   3204 
   3205