diff options
Diffstat (limited to 'docs/ProgrammersManual.html')
-rw-r--r-- | docs/ProgrammersManual.html | 480 |
1 files changed, 244 insertions, 236 deletions
diff --git a/docs/ProgrammersManual.html b/docs/ProgrammersManual.html index e3f2a7a909..b29c582612 100644 --- a/docs/ProgrammersManual.html +++ b/docs/ProgrammersManual.html @@ -8,9 +8,9 @@ </head> <body> -<div class="doc_title"> +<h1> LLVM Programmer's Manual -</div> +</h1> <ol> <li><a href="#introduction">Introduction</a></li> @@ -210,9 +210,9 @@ with another <tt>Value</tt></a> </li> </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="introduction">Introduction </a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -242,9 +242,9 @@ href="/doxygen/InstVisitor_8h-source.html">InstVisitor</a></tt> template.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="general">General Information</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -255,9 +255,9 @@ in the LLVM source-base, but that isn't specific to any particular API.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="stl">The C++ Standard Template Library</a> -</div> +</h3> <div class="doc_text"> @@ -305,9 +305,9 @@ to write maintainable code more than where to put your curly braces.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="stl">Other useful references</a> -</div> +</h3> <div class="doc_text"> @@ -319,9 +319,9 @@ static and shared libraries across platforms</a></li> </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="apis">Important and useful LLVM APIs</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -332,10 +332,10 @@ know about when writing transformations.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="isa">The <tt>isa<></tt>, <tt>cast<></tt> and <tt>dyn_cast<></tt> templates</a> -</div> +</h3> <div class="doc_text"> @@ -442,10 +442,10 @@ are lots of examples in the LLVM source base.</p> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="string_apis">Passing strings (the <tt>StringRef</tt> and <tt>Twine</tt> classes)</a> -</div> +</h3> <div class="doc_text"> @@ -464,9 +464,9 @@ passing strings efficiently.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="StringRef">The <tt>StringRef</tt> class</a> -</div> +</h4> <div class="doc_text"> @@ -504,9 +504,9 @@ small and pervasive enough in LLVM that it should always be passed by value.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="Twine">The <tt>Twine</tt> class</a> -</div> +</h4> <div class="doc_text"> @@ -541,9 +541,9 @@ accept concatenated strings.</p> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="DEBUG">The <tt>DEBUG()</tt> macro and <tt>-debug</tt> option</a> -</div> +</h3> <div class="doc_text"> @@ -594,10 +594,10 @@ program hasn't been started yet, you can always just run it with </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="DEBUG_TYPE">Fine grained debug info with <tt>DEBUG_TYPE</tt> and the <tt>-debug-only</tt> option</a> -</div> +</h4> <div class="doc_text"> @@ -668,10 +668,10 @@ DEBUG_WITH_TYPE("", errs() << "No debug type (2)\n"); </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="Statistic">The <tt>Statistic</tt> class & <tt>-stats</tt> option</a> -</div> +</h3> <div class="doc_text"> @@ -768,9 +768,9 @@ maintainable and useful.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ViewGraph">Viewing graphs while debugging code</a> -</div> +</h3> <div class="doc_text"> @@ -817,9 +817,9 @@ attributes, then you can <tt>call DAG.clearGraphAttrs()</tt>. </p> </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="datastructure">Picking the Right Data Structure for a Task</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -881,9 +881,9 @@ cost of adding the elements to the container. </p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ds_sequential">Sequential Containers (std::vector, std::list, etc)</a> -</div> +</h3> <div class="doc_text"> There are a variety of sequential containers available for you, based on your @@ -891,9 +891,9 @@ needs. Pick the first in this section that will do what you want. </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_arrayref">llvm/ADT/ArrayRef.h</a> -</div> +</h4> <div class="doc_text"> <p>The llvm::ArrayRef class is the preferred class to use in an interface that @@ -906,9 +906,9 @@ needs. Pick the first in this section that will do what you want. <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_fixedarrays">Fixed Size Arrays</a> -</div> +</h4> <div class="doc_text"> <p>Fixed size arrays are very simple and very fast. They are good if you know @@ -917,9 +917,9 @@ you have.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_heaparrays">Heap Allocated Arrays</a> -</div> +</h4> <div class="doc_text"> <p>Heap allocated arrays (new[] + delete[]) are also simple. They are good if @@ -933,9 +933,9 @@ construct those elements actually used).</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_smallvector">"llvm/ADT/SmallVector.h"</a> -</div> +</h4> <div class="doc_text"> <p><tt>SmallVector<Type, N></tt> is a simple class that looks and smells @@ -962,9 +962,9 @@ SmallVectors are most useful when on the stack.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_vector"><vector></a> -</div> +</h4> <div class="doc_text"> <p> @@ -1004,9 +1004,9 @@ the loop.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_deque"><deque></a> -</div> +</h4> <div class="doc_text"> <p>std::deque is, in some senses, a generalized version of std::vector. Like @@ -1020,9 +1020,9 @@ something cheaper.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_list"><list></a> -</div> +</h4> <div class="doc_text"> <p>std::list is an extremely inefficient class that is rarely useful. @@ -1038,9 +1038,9 @@ not invalidate iterator or pointers to other elements in the list.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_ilist">llvm/ADT/ilist.h</a> -</div> +</h4> <div class="doc_text"> <p><tt>ilist<T></tt> implements an 'intrusive' doubly-linked list. It is @@ -1068,9 +1068,9 @@ Related classes of interest are explained in the following subsections: </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_ilist_traits">ilist_traits</a> -</div> +</h4> <div class="doc_text"> <p><tt>ilist_traits<T></tt> is <tt>ilist<T></tt>'s customization @@ -1079,9 +1079,9 @@ publicly derive from this traits class.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_iplist">iplist</a> -</div> +</h4> <div class="doc_text"> <p><tt>iplist<T></tt> is <tt>ilist<T></tt>'s base and as such @@ -1093,9 +1093,9 @@ used for a wide variety of customizations.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_ilist_node">llvm/ADT/ilist_node.h</a> -</div> +</h4> <div class="doc_text"> <p><tt>ilist_node<T></tt> implements a the forward and backward links @@ -1108,9 +1108,9 @@ in the default manner.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_ilist_sentinel">Sentinels</a> -</div> +</h4> <div class="doc_text"> <p><tt>ilist</tt>s have another specialty that must be considered. To be a good @@ -1146,9 +1146,9 @@ field in the ghostly sentinel which can be legally accessed.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_other">Other Sequential Container options</a> -</div> +</h4> <div class="doc_text"> <p>Other STL containers are available, such as std::string.</p> @@ -1161,9 +1161,9 @@ underlying container but don't affect the cost of the container itself.</p> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ds_set">Set-Like Containers (std::set, SmallSet, SetVector, etc)</a> -</div> +</h3> <div class="doc_text"> @@ -1175,9 +1175,9 @@ this, providing various trade-offs.</p> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_sortedvectorset">A sorted 'vector'</a> -</div> +</h4> <div class="doc_text"> @@ -1197,9 +1197,9 @@ efficiently queried with a standard binary or radix search.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_smallset">"llvm/ADT/SmallSet.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1220,9 +1220,9 @@ and erasing, but does not support iteration.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_smallptrset">"llvm/ADT/SmallPtrSet.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1240,9 +1240,9 @@ visited in sorted order.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_denseset">"llvm/ADT/DenseSet.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1259,9 +1259,9 @@ href="#dss_densemap">DenseMap</a> has. </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_FoldingSet">"llvm/ADT/FoldingSet.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1296,9 +1296,9 @@ elements. </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_set"><set></a> -</div> +</h4> <div class="doc_text"> @@ -1321,9 +1321,9 @@ std::set is almost never a good choice.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_setvector">"llvm/ADT/SetVector.h"</a> -</div> +</h4> <div class="doc_text"> <p>LLVM's SetVector<Type> is an adapter class that combines your choice of @@ -1361,9 +1361,9 @@ heap traffic.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_uniquevector">"llvm/ADT/UniqueVector.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1381,9 +1381,9 @@ factors, and produces a lot of malloc traffic. It should be avoided.</p> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_otherset">Other Set-Like Container Options</a> -</div> +</h4> <div class="doc_text"> @@ -1402,9 +1402,9 @@ better.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ds_map">Map-Like Containers (std::map, DenseMap, etc)</a> -</div> +</h3> <div class="doc_text"> Map-like containers are useful when you want to associate data to a key. As @@ -1412,9 +1412,9 @@ usual, there are a lot of different ways to do this. :) </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_sortedvectormap">A sorted 'vector'</a> -</div> +</h4> <div class="doc_text"> @@ -1429,9 +1429,9 @@ vectors for sets. </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_stringmap">"llvm/ADT/StringMap.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1463,9 +1463,9 @@ copies a string if a value is inserted into the table.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_indexedmap">"llvm/ADT/IndexedMap.h"</a> -</div> +</h4> <div class="doc_text"> <p> @@ -1483,9 +1483,9 @@ virtual register ID).</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_densemap">"llvm/ADT/DenseMap.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1509,9 +1509,9 @@ inserted into the map) that it needs internally.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_valuemap">"llvm/ADT/ValueMap.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1526,9 +1526,9 @@ a <code>Config</code> parameter to the ValueMap template.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_intervalmap">"llvm/ADT/IntervalMap.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1543,9 +1543,9 @@ as STL iterators. The heavyweight iterators allow a smaller data structure.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_map"><map></a> -</div> +</h4> <div class="doc_text"> @@ -1563,9 +1563,9 @@ another element takes place).</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_inteqclasses">"llvm/ADT/IntEqClasses.h"</a> -</div> +</h4> <div class="doc_text"> @@ -1583,9 +1583,9 @@ it can be edited again.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_othermap">Other Map-Like Container Options</a> -</div> +</h4> <div class="doc_text"> @@ -1602,9 +1602,9 @@ always better.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ds_string">String-like containers</a> -</div> +</h3> <div class="doc_text"> @@ -1616,9 +1616,9 @@ xref to #string_apis. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="ds_bit">Bit storage containers (BitVector, SparseBitVector)</a> -</div> +</h3> <div class="doc_text"> <p>Unlike the other containers, there are only two bit storage containers, and @@ -1633,9 +1633,9 @@ please don't use it.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_bitvector">BitVector</a> -</div> +</h4> <div class="doc_text"> <p> The BitVector container provides a dynamic size set of bits for manipulation. @@ -1648,9 +1648,9 @@ the number of set bits to be high (IE a dense set). </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_smallbitvector">SmallBitVector</a> -</div> +</h4> <div class="doc_text"> <p> The SmallBitVector container provides the same interface as BitVector, but @@ -1667,9 +1667,9 @@ and its operator[] does not provide an assignable lvalue. </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="dss_sparsebitvector">SparseBitVector</a> -</div> +</h4> <div class="doc_text"> <p> The SparseBitVector container is much like BitVector, with one major @@ -1682,9 +1682,9 @@ universe). The downside to the SparseBitVector is that setting and testing of r </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="common">Helpful Hints for Common Operations</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -1700,9 +1700,9 @@ and descriptions of the main classes that you should know about.</p> <!-- NOTE: this section should be heavy on example code --> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="inspection">Basic Inspection and Traversal Routines</a> -</div> +</h3> <div class="doc_text"> @@ -1724,11 +1724,11 @@ structures are traversed in very similar ways.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="iterate_function">Iterating over the </a><a href="#BasicBlock"><tt>BasicBlock</tt></a>s in a <a href="#Function"><tt>Function</tt></a> -</div> +</h4> <div class="doc_text"> @@ -1759,11 +1759,11 @@ exactly equivalent to <tt>(*i).size()</tt> just like you'd expect.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="iterate_basicblock">Iterating over the </a><a href="#Instruction"><tt>Instruction</tt></a>s in a <a href="#BasicBlock"><tt>BasicBlock</tt></a> -</div> +</h4> <div class="doc_text"> @@ -1790,11 +1790,11 @@ basic block itself: <tt>errs() << *blk << "\n";</tt>.</p> </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="iterate_institer">Iterating over the </a><a href="#Instruction"><tt>Instruction</tt></a>s in a <a href="#Function"><tt>Function</tt></a> -</div> +</h4> <div class="doc_text"> @@ -1836,10 +1836,10 @@ for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) </div> <!-- _______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="iterate_convert">Turning an iterator into a class pointer (and vice-versa)</a> -</div> +</h4> <div class="doc_text"> @@ -1913,10 +1913,10 @@ and <tt>operator*</tt> changed to return a pointer instead of a reference.</p> </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="iterate_complex">Finding call sites: a slightly more complex example</a> -</div> +</h4> <div class="doc_text"> @@ -1975,9 +1975,9 @@ class OurFunctionPass : public FunctionPass { </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="calls_and_invokes">Treating calls and invokes the same way</a> -</div> +</h4> <div class="doc_text"> @@ -2002,9 +2002,9 @@ If you look at its definition, it has only a single pointer member.</p> </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="iterate_chains">Iterating over def-use & use-def chains</a> -</div> +</h4> <div class="doc_text"> @@ -2063,10 +2063,10 @@ calling <tt>use/op_begin()</tt> on <tt>const Value*</tt>s or </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="iterate_preds">Iterating over predecessors & successors of blocks</a> -</div> +</h4> <div class="doc_text"> @@ -2093,9 +2093,9 @@ succ_iterator/succ_begin/succ_end.</p> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="simplechanges">Making simple changes</a> -</div> +</h3> <div class="doc_text"> @@ -2108,10 +2108,10 @@ and gives example code.</p> </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="schanges_creating">Creating and inserting new <tt>Instruction</tt>s</a> -</div> +</h4> <div class="doc_text"> @@ -2249,9 +2249,9 @@ Instruction* newInst = new Instruction(..., pi); </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="schanges_deleting">Deleting <tt>Instruction</tt>s</a> -</div> +</h4> <div class="doc_text"> @@ -2273,10 +2273,10 @@ block but not delete it, you can use the <tt>removeFromParent()</tt> method.</p> </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="schanges_replacing">Replacing an <tt>Instruction</tt> with another <tt>Value</tt></a> -</div> +</h4> <div class="doc_text"> @@ -2339,9 +2339,9 @@ ReplaceInstWithValue, ReplaceInstWithInst --> </div> <!--_______________________________________________________________________--> -<div class="doc_subsubsection"> +<h4> <a name="schanges_deletingGV">Deleting <tt>GlobalVariable</tt>s</a> -</div> +</h4> <div class="doc_text"> @@ -2361,9 +2361,9 @@ GV->eraseFromParent(); </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="create_types">How to Create Types</a> -</div> +</h3> <div class="doc_text"> @@ -2401,9 +2401,9 @@ comment</a> for more details.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="threading">Threads and LLVM</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -2432,9 +2432,9 @@ support. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="startmultithreaded">Entering and Exiting Multithreaded Mode</a> -</div> +</h3> <div class="doc_text"> @@ -2469,9 +2469,9 @@ result in concurrent LLVM API calls. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="shutdown">Ending Execution with <tt>llvm_shutdown()</tt></a> -</div> +</h3> <div class="doc_text"> <p> @@ -2489,9 +2489,9 @@ destructor. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="managedstatic">Lazy Initialization with <tt>ManagedStatic</tt></a> -</div> +</h3> <div class="doc_text"> <p> @@ -2518,9 +2518,9 @@ and only if you know what you're doing! </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="llvmcontext">Achieving Isolation with <tt>LLVMContext</tt></a> -</div> +</h3> <div class="doc_text"> <p> @@ -2562,9 +2562,9 @@ isolation is not a concern. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="jitthreading">Threads and the JIT</a> -</div> +</h3> <div class="doc_text"> <p> @@ -2590,9 +2590,9 @@ access, but we suggest using only the eager JIT in threaded programs. </div> <!-- *********************************************************************** --> -<div class="doc_section"> +<h2> <a name="advanced">Advanced Topics</a> -</div> +</h2> <!-- *********************************************************************** --> <div class="doc_text"> @@ -2604,9 +2604,9 @@ LLVM system, and only need to be accessed in unusual circumstances. </div> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="TypeResolve">LLVM Type Resolution</a> -</div> +</h3> <div class="doc_text"> @@ -2640,9 +2640,9 @@ float }</tt>"). </div> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="BuildRecType">Basic Recursive Type Construction</a> -</div> +</h4> <div class="doc_text"> @@ -2696,9 +2696,9 @@ href="#PATypeHolder">PATypeHolder class</a>. </div> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="refineAbstractTypeTo">The <tt>refineAbstractTypeTo</tt> method</a> -</div> +</h4> <div class="doc_text"> <p> @@ -2726,9 +2726,9 @@ complex datastructures. </div> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="PATypeHolder">The PATypeHolder Class</a> -</div> +</h4> <div class="doc_text"> <p> @@ -2748,9 +2748,9 @@ Type is maintained by PATypeHolder objects. </div> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="AbstractTypeUser">The AbstractTypeUser Class</a> -</div> +</h4> <div class="doc_text"> @@ -2768,10 +2768,10 @@ objects) can never be refined. <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="SymbolTable">The <tt>ValueSymbolTable</tt> and <tt>TypeSymbolTable</tt> classes</a> -</div> +</h3> <div class="doc_text"> <p>The <tt><a href="http://llvm.org/doxygen/classllvm_1_1ValueSymbolTable.html"> @@ -2804,9 +2804,9 @@ insert entries into the symbol table.</p> <!-- ======================================================================= --> -<div class="doc_subsection"> +<h3> <a name="UserLayout">The <tt>User</tt> and owned <tt>Use</tt> classes' memory layout</a> -</div> +</h3> <div class="doc_text"> <p>The <tt><a href="http://llvm.org/doxygen/classllvm_1_1User.html"> @@ -2817,9 +2817,11 @@ Use</a></tt> helper class is employed to do the bookkeeping and to facilitate <i addition and removal.</p> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> - <a name="Use2User">Interaction and relationship between <tt>User</tt> and <tt>Use</tt> objects</a> -</div> +<h4> + <a name="Use2User"> + Interaction and relationship between <tt>User</tt> and <tt>Use</tt> objects + </a> +</h4> <div class="doc_text"> <p> @@ -2878,9 +2880,9 @@ enforce the following memory layouts:</p> is stored in each <tt>Use</tt> object in the member <tt>Use::Prev</tt>)</i> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="Waymarking">The waymarking algorithm</a> -</div> +</h4> <div class="doc_text"> <p> @@ -2919,9 +2921,9 @@ stops, so that the <i>worst case is 20 memory accesses</i> when there are 1000 <tt>Use</tt> objects associated with a <tt>User</tt>.</p> <!-- ______________________________________________________________________ --> -<div class="doc_subsubsection"> +<h4> <a name="ReferenceImpl">Reference implementation</a> |