GarbageCollection.html is expanded to encompass the coming

capabilities. This is a major rewrite and is easier to read en toto
rather than patchwise.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gordon Henriksen 2007-09-27 19:31:36 +00:00
parent 1ed37fdb3b
commit 326e24fff0
4 changed files with 1195 additions and 266 deletions

File diff suppressed because it is too large Load Diff

View File

@ -30,13 +30,19 @@
</tr> </tr>
<tr><th colspan="8"><b>- <a href="#D">D</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#D">D</a> -</b></th></tr>
<tr> <tr>
<td><a href="#DAG">DAG</a></td>
<td><a href="#Derived_Pointer">Derived Pointer</a></td>
<td><a href="#DSA">DSA</a></td> <td><a href="#DSA">DSA</a></td>
<td><a href="#DSE">DSE</a></td> <td><a href="#DSE">DSE</a></td>
</tr> </tr>
<tr><th colspan="8"><b>- <a href="#G">G</a> -</b></th></tr>
<td><a href="#GC">GC</a></td>
</tr>
<tr><th colspan="8"><b>- <a href="#I">I</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#I">I</a> -</b></th></tr>
<tr> <tr>
<td><a href="#IPA">IPA</a></td> <td><a href="#IPA">IPA</a></td>
<td><a href="#IPO">IPO</a></td> <td><a href="#IPO">IPO</a></td>
<td><a href="#ISel">ISel</a></td>
</tr> </tr>
<tr><th colspan="8"><b>- <a href="#L">L</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#L">L</a> -</b></th></tr>
<tr> <tr>
@ -44,6 +50,10 @@
<td><a href="#LICM">LICM</a></td> <td><a href="#LICM">LICM</a></td>
<td><a href="#Load-VN">Load-VN</a></td> <td><a href="#Load-VN">Load-VN</a></td>
</tr> </tr>
<tr><th colspan="8"><b>- <a href="#O">O</a> -</b></th></tr>
<tr>
<td><a href="#Object_Pointer">Object Pointer</a></td>
</tr>
<tr><th colspan="8"><b>- <a href="#P">P</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#P">P</a> -</b></th></tr>
<tr> <tr>
<td><a href="#PRE">PRE</a></td> <td><a href="#PRE">PRE</a></td>
@ -51,13 +61,16 @@
<tr><th colspan="8"><b>- <a href="#R">R</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#R">R</a> -</b></th></tr>
<tr> <tr>
<td><a href="#Reassociation">Reassociation</a></td> <td><a href="#Reassociation">Reassociation</a></td>
<td><a href="#Root">Root</a></td>
</tr> </tr>
<tr><th colspan="8"><b>- <a href="#S">S</a> -</b></th></tr> <tr><th colspan="8"><b>- <a href="#S">S</a> -</b></th></tr>
<tr> <tr>
<td><a href="#Safe_Point">Safe Point</a></td>
<td><a href="#SCC">SCC</a></td> <td><a href="#SCC">SCC</a></td>
<td><a href="#SCCP">SCCP</a></td> <td><a href="#SCCP">SCCP</a></td>
<td><a href="#SDISel">SDISel</a></td>
<td><a href="#SRoA">SRoA</a></td> <td><a href="#SRoA">SRoA</a></td>
<td><a href="#SSA">SSA</a></td> <td><a href="#Stack_Map">Stack Map</a></td>
</tr> </tr>
</table> </table>
</div> </div>
@ -92,13 +105,23 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
subexpression compuation. For example <tt>(a+b)*(a+b)</tt> has two subexpression compuation. For example <tt>(a+b)*(a+b)</tt> has two
subexpressions that are the same: <tt>(a+b)</tt>. This optimization would subexpressions that are the same: <tt>(a+b)</tt>. This optimization would
perform the addition only once and then perform the multiply (but only if perform the addition only once and then perform the multiply (but only if
its compulationally correct/safe). it's compulationally correct/safe).
</dl> </dl>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="D">- D -</a></div> <div class="doc_subsection"><a name="D">- D -</a></div>
<div class="doc_text"> <div class="doc_text">
<dl> <dl>
<dt><a name="DAG"><b>DAG</b></a></dt>
<dd>Directed Acyclic Graph</dd>
<dt><a name="Derived_Pointer"><b>Derived Pointer</b></a></dt>
<dd>A pointer to the interior of an object, such that a garbage collector
is unable to use the pointer for reachability analysis. While a derived
pointer is live, the corresponding object pointer must be kept in a root,
otherwise the collector might free the referenced object. With copying
collectors, derived pointers pose an additional hazard that they may be
invalidated at any <a href="Safe_Point">safe point</a>. This term is used in
opposition to <a href="#Object_Pointer">object pointer</a>.</dd>
<dt><a name="DSA"><b>DSA</b></a></dt> <dt><a name="DSA"><b>DSA</b></a></dt>
<dd>Data Structure Analysis</dd> <dd>Data Structure Analysis</dd>
<dt><a name="DSE"><b>DSE</b></a></dt> <dt><a name="DSE"><b>DSE</b></a></dt>
@ -106,6 +129,24 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
</dl> </dl>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="G">- G -</a></div>
<div class="doc_text">
<dl>
<dt><a name="GC"><b>GC</b></a></dt>
<dd>Garbage Collection. The practice of using reachability analysis instead
of explicit memory management to reclaim unused memory.</dd>
</dl>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="H">- H -</a></div>
<div class="doc_text">
<dl>
<dt><a name="Heap"><b>Heap</b></a></dt>
<dd>In garbage collection, the region of memory which is managed using
reachability analysis.</dd>
</dl>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="I">- I -</a></div> <div class="doc_subsection"><a name="I">- I -</a></div>
<div class="doc_text"> <div class="doc_text">
<dl> <dl>
@ -116,6 +157,8 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
<dd>Inter-Procedural Optimization. Refers to any variety of code <dd>Inter-Procedural Optimization. Refers to any variety of code
optimization that occurs between procedures, functions or compilation units optimization that occurs between procedures, functions or compilation units
(modules).</dd> (modules).</dd>
<dt><a name="IPO"><b>ISel</b></a></dt>
<dd>Instruction Selection.</dd>
</dl> </dl>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
@ -131,6 +174,17 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
</dl> </dl>
</div> </div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="P">- O -</a></div>
<div class="doc_text">
<dl>
<dt><a name="Object_Pointer"><b>Object Pointer</b></a></dt>
<dd>A pointer to an object such that the garbage collector is able to trace
references contained within the object. This term is used in opposition to
<a href="#Derived_Pointer">derived pointer</a>.</dd>
</dl>
</div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="P">- P -</a></div> <div class="doc_subsection"><a name="P">- P -</a></div>
<div class="doc_text"> <div class="doc_text">
@ -147,7 +201,12 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
<dt><a name="Reassociation"><b>Reassociation</b></a></dt> <dd>Rearranging <dt><a name="Reassociation"><b>Reassociation</b></a></dt> <dd>Rearranging
associative expressions to promote better redundancy elimination and other associative expressions to promote better redundancy elimination and other
optimization. For example, changing (A+B-A) into (B+A-A), permitting it to optimization. For example, changing (A+B-A) into (B+A-A), permitting it to
be optimized into (B+0) then (B). be optimized into (B+0) then (B).</dd>
<dt><a name="Root"><b>Root</b></a></dt> <dd>In garbage collection, a
pointer variable lying outside of the <a href="#Heap">heap</a> from which
the collector begins its reachability analysis. In the context of code
generation, "root" almost always refers to a "stack root"&#151;a local or
temporary variable within an executing function.</dd>
</dl> </dl>
</div> </div>
@ -155,6 +214,16 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
<div class="doc_subsection"><a name="S">- S -</a></div> <div class="doc_subsection"><a name="S">- S -</a></div>
<div class="doc_text"> <div class="doc_text">
<dl> <dl>
<dt><a name="SCC"><b>Safe Point</b></a></dt>
<dd>In garbage collection, it is necessary to identify <a href="#Root">stack
roots</a> so that reachability analysis may proceed. It may be infeasible to
provide this information for every instruction, so instead the information
may is calculated only at designated safe points. With a copying collector,
<a href="#Derived_Pointers">derived pointers</a> must not be retained across
safe points and <a href="#Object_Pointers">object pointers</a> must be
reloaded from stack roots.</dd>
<dt><a name="SDISel"><b>SDISel</b></a></dt>
<dd>Selection DAG Instruction Selection.</dd>
<dt><a name="SCC"><b>SCC</b></a></dt> <dt><a name="SCC"><b>SCC</b></a></dt>
<dd>Strongly Connected Component</dd> <dd>Strongly Connected Component</dd>
<dt><a name="SCCP"><b>SCCP</b></a></dt> <dt><a name="SCCP"><b>SCCP</b></a></dt>
@ -163,6 +232,10 @@ href="http://www.program-transformation.org/Transform/BURG">BURG</a> tool.</dd>
<dd>Scalar Replacement of Aggregates</dd> <dd>Scalar Replacement of Aggregates</dd>
<dt><a name="SSA"><b>SSA</b></a></dt> <dt><a name="SSA"><b>SSA</b></a></dt>
<dd>Static Single Assignment</dd> <dd>Static Single Assignment</dd>
<dt><a name="Stack_Map"><b>Stack Map</b></a></dt>
<dd>In garbage collection, metadata emitted by the code generator which
identifies <a href="#Root">roots</a> within the stack frame of an executing
function.</dd>
</dl> </dl>
</div> </div>
<!-- *********************************************************************** --> <!-- *********************************************************************** -->

View File

@ -13,7 +13,7 @@ address { clear: right; }
TR, TD { border: 2px solid gray; padding: 4pt 4pt 2pt 2pt; } TR, TD { border: 2px solid gray; padding: 4pt 4pt 2pt 2pt; }
TH { border: 2px solid gray; font-weight: bold; font-size: 105%; TH { border: 2px solid gray; font-weight: bold; font-size: 105%;
color: black; background: url("img/lines.gif"); background: url("img/lines.gif");
font-family: "Georgia,Palatino,Times,Roman,SanSerif"; text-align:center; font-family: "Georgia,Palatino,Times,Roman,SanSerif"; text-align:center;
vertical-align: middle; } vertical-align: middle; }
TABLE { text-align: center; border: 2px solid black; TABLE { text-align: center; border: 2px solid black;

View File

@ -0,0 +1,5 @@
//===----------------------------------------------------------------------===//
Possible enhancement: If a collection cycle happens and the heap is not
compacted very much (say less than 25% of the allocated memory was freed), the
memory regions should be doubled in size.