|  | ================ | 
|  | The LLVM Lexicon | 
|  | ================ | 
|  |  | 
|  | .. note:: | 
|  |  | 
|  | This document is a work in progress! | 
|  |  | 
|  | Definitions | 
|  | =========== | 
|  |  | 
|  | A | 
|  | - | 
|  |  | 
|  | **ADCE** | 
|  | Aggressive Dead Code Elimination | 
|  |  | 
|  | **AST** | 
|  | Abstract Syntax Tree. | 
|  |  | 
|  | Due to Clang's influence (mostly the fact that parsing and semantic | 
|  | analysis are so intertwined for C and especially C++), the typical | 
|  | working definition of AST in the LLVM community is roughly "the | 
|  | compiler's first complete symbolic (as opposed to textual) | 
|  | representation of an input program". | 
|  | As such, an "AST" might be a more general graph instead of a "tree" | 
|  | (consider the symbolic representation for the type of a typical "linked | 
|  | list node"). This working definition is closer to what some authors | 
|  | call an "annotated abstract syntax tree". | 
|  |  | 
|  | Consult your favorite compiler book or search engine for more details. | 
|  |  | 
|  | B | 
|  | - | 
|  |  | 
|  | .. _lexicon-bb-vectorization: | 
|  |  | 
|  | **BB Vectorization** | 
|  | Basic-Block Vectorization | 
|  |  | 
|  | **BURS** | 
|  | Bottom Up Rewriting System --- A method of instruction selection for code | 
|  | generation.  An example is the `BURG | 
|  | <http://www.program-transformation.org/Transform/BURG>`_ tool. | 
|  |  | 
|  | C | 
|  | - | 
|  |  | 
|  | **CSE** | 
|  | 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). | 
|  |  | 
|  | D | 
|  | - | 
|  |  | 
|  | **DAG** | 
|  | Directed Acyclic Graph | 
|  |  | 
|  | .. _derived pointer: | 
|  | .. _derived pointers: | 
|  |  | 
|  | **Derived Pointer** | 
|  | 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`_. | 
|  |  | 
|  | **DSA** | 
|  | Data Structure Analysis | 
|  |  | 
|  | **DSE** | 
|  | Dead Store Elimination | 
|  |  | 
|  | F | 
|  | - | 
|  |  | 
|  | **FCA** | 
|  | First Class Aggregate | 
|  |  | 
|  | G | 
|  | - | 
|  |  | 
|  | **GC** | 
|  | Garbage Collection. The practice of using reachability analysis instead of | 
|  | explicit memory management to reclaim unused memory. | 
|  |  | 
|  | H | 
|  | - | 
|  |  | 
|  | .. _heap: | 
|  |  | 
|  | **Heap** | 
|  | In garbage collection, the region of memory which is managed using | 
|  | reachability analysis. | 
|  |  | 
|  | I | 
|  | - | 
|  |  | 
|  | **IPA** | 
|  | Inter-Procedural Analysis. Refers to any variety of code analysis that | 
|  | occurs between procedures, functions or compilation units (modules). | 
|  |  | 
|  | **IPO** | 
|  | Inter-Procedural Optimization. Refers to any variety of code optimization | 
|  | that occurs between procedures, functions or compilation units (modules). | 
|  |  | 
|  | **ISel** | 
|  | Instruction Selection | 
|  |  | 
|  | L | 
|  | - | 
|  |  | 
|  | **LCSSA** | 
|  | Loop-Closed Static Single Assignment Form | 
|  |  | 
|  | **LICM** | 
|  | Loop Invariant Code Motion | 
|  |  | 
|  | **Load-VN** | 
|  | Load Value Numbering | 
|  |  | 
|  | **LTO** | 
|  | Link-Time Optimization | 
|  |  | 
|  | M | 
|  | - | 
|  |  | 
|  | **MC** | 
|  | Machine Code | 
|  |  | 
|  | O | 
|  | - | 
|  | .. _object pointer: | 
|  | .. _object pointers: | 
|  |  | 
|  | **Object Pointer** | 
|  | 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`_. | 
|  |  | 
|  | P | 
|  | - | 
|  |  | 
|  | **PRE** | 
|  | Partial Redundancy Elimination | 
|  |  | 
|  | R | 
|  | - | 
|  |  | 
|  | **RAUW** | 
|  |  | 
|  | 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 <ProgrammersManual.html#iterate_chains>`_. | 
|  |  | 
|  | **Reassociation** | 
|  | 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)``. | 
|  |  | 
|  | .. _roots: | 
|  | .. _stack roots: | 
|  |  | 
|  | **Root** | 
|  | 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. | 
|  |  | 
|  | **RPO** | 
|  | Reverse postorder | 
|  |  | 
|  | S | 
|  | - | 
|  |  | 
|  | .. _safe point: | 
|  |  | 
|  | **Safe Point** | 
|  | 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. | 
|  |  | 
|  | **SDISel** | 
|  | Selection DAG Instruction Selection. | 
|  |  | 
|  | **SCC** | 
|  | Strongly Connected Component | 
|  |  | 
|  | **SCCP** | 
|  | Sparse Conditional Constant Propagation | 
|  |  | 
|  | **SLP** | 
|  | Superword-Level Parallelism, same as :ref:`Basic-Block Vectorization | 
|  | <lexicon-bb-vectorization>`. | 
|  |  | 
|  | **SRoA** | 
|  | Scalar Replacement of Aggregates | 
|  |  | 
|  | **SSA** | 
|  | Static Single Assignment | 
|  |  | 
|  | **Stack Map** | 
|  | In garbage collection, metadata emitted by the code generator which | 
|  | identifies `roots`_ within the stack frame of an executing function. | 
|  |  | 
|  | T | 
|  | - | 
|  |  | 
|  | **TBAA** | 
|  | Type-Based Alias Analysis | 
|  |  |