9 This document is a work in progress!
18 Aggressive Dead Code Elimination
24 Basic Block Vectorization
27 Bottom Up Rewriting System --- A method of instruction selection for code
28 generation. An example is the `BURG
29 <http://www.program-transformation.org/Transform/BURG>`_ tool.
35 Common Subexpression Elimination. An optimization that removes common
36 subexpression compuation. For example ``(a+b)*(a+b)`` has two subexpressions
37 that are the same: ``(a+b)``. This optimization would perform the addition
38 only once and then perform the multiply (but only if it's compulationally
45 Directed Acyclic Graph
51 A pointer to the interior of an object, such that a garbage collector is
52 unable to use the pointer for reachability analysis. While a derived pointer
53 is live, the corresponding object pointer must be kept in a root, otherwise
54 the collector might free the referenced object. With copying collectors,
55 derived pointers pose an additional hazard that they may be invalidated at
56 any `safe point`_. This term is used in opposition to `object pointer`_.
59 Data Structure Analysis
62 Dead Store Elimination
74 Garbage Collection. The practice of using reachability analysis instead of
75 explicit memory management to reclaim unused memory.
83 In garbage collection, the region of memory which is managed using
84 reachability analysis.
90 Inter-Procedural Analysis. Refers to any variety of code analysis that
91 occurs between procedures, functions or compilation units (modules).
94 Inter-Procedural Optimization. Refers to any variety of code optimization
95 that occurs between procedures, functions or compilation units (modules).
104 Loop-Closed Static Single Assignment Form
107 Loop Invariant Code Motion
113 Link-Time Optimization
127 A pointer to an object such that the garbage collector is able to trace
128 references contained within the object. This term is used in opposition to
135 Partial Redundancy Elimination
142 Replace All Uses With. The functions ``User::replaceUsesOfWith()``,
143 ``Value::replaceAllUsesWith()``, and
144 ``Constant::replaceUsesOfWithOnConstant()`` implement the replacement of one
145 Value with another by iterating over its def/use chain and fixing up all of
146 the pointers to point to the new value. See
147 also `def/use chains <ProgrammersManual.html#iterate_chains>`_.
150 Rearranging associative expressions to promote better redundancy elimination
151 and other optimization. For example, changing ``(A+B-A)`` into ``(B+A-A)``,
152 permitting it to be optimized into ``(B+0)`` then ``(B)``.
158 In garbage collection, a pointer variable lying outside of the `heap`_ from
159 which the collector begins its reachability analysis. In the context of code
160 generation, "root" almost always refers to a "stack root" --- a local or
161 temporary variable within an executing function.
172 In garbage collection, it is necessary to identify `stack roots`_ so that
173 reachability analysis may proceed. It may be infeasible to provide this
174 information for every instruction, so instead the information may is
175 calculated only at designated safe points. With a copying collector,
176 `derived pointers`_ must not be retained across safe points and `object
177 pointers`_ must be reloaded from stack roots.
180 Selection DAG Instruction Selection.
183 Strongly Connected Component
186 Sparse Conditional Constant Propagation
189 Scalar Replacement of Aggregates
192 Static Single Assignment
195 In garbage collection, metadata emitted by the code generator which
196 identifies `roots`_ within the stack frame of an executing function.
202 Type-Based Alias Analysis