Common Subexpression Elimination. An optimization that removes common
+ subexpression compuation. For example (a+b)*(a+b) has two
+ subexpressions that are the same: (a+b). This optimization would
+ perform the addition only once and then perform the multiply (but only if
+ it's compulationally correct/safe).
+
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 safe point. This term is used in
+ opposition to object pointer.
Inter-Procedural Optimization. Refers to any variety of code
+ optimization that occurs between procedures, functions or compilation units
+ (modules).
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
+ derived pointer.
An abbreviation for Replace
+ All Uses With. The functions User::replaceUsesOfWith(),
+ Value::replaceAllUsesWith(), and Constant::replaceUsesOfWithOnConstant()
+ implement the replacement of one Value with another by iterating over its
+ def/use chain and fixing up all of the pointers to point to the new value.
+ See also def/use chains.
+
Rearranging
+ associative expressions to promote better redundancy elimination and other
+ optimization. For example, changing (A+B-A) into (B+A-A), permitting it to
+ be optimized into (B+0) then (B).
In garbage collection, a
+ pointer variable lying outside of the heap from which
+ the collector begins its reachability analysis. In the context of code
+ generation, "root" almost always refers to a "stack root" -- a local or
+ temporary variable within an executing function.
In garbage collection, it is necessary to identify stack
+ roots 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,
+ derived pointers must not be retained across
+ safe points and object pointers must be
+ reloaded from stack roots.