================
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

**BDCE**
    Bit-tracking dead code elimination. Some bit-wise instructions (shifts,
    ands, ors, etc.) "kill" some of their input bits -- that is, they make it
    such that those bits can be either zero or one without affecting control or
    data flow of a program. The BDCE pass removes instructions that only
    compute these dead bits.

**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
-

**CFI**
    Call Frame Information. Used in DWARF debug info and in C++ unwind info
    to show how the function prolog lays out the stack frame.

**CIE**
    Common Information Entry.  A kind of CFI used to reduce the size of FDEs.
    The compiler creates a CIE which contains the information common across all
    the FDEs.  Each FDE then points to its CIE.

**CSE**
    Common Subexpression Elimination. An optimization that removes common
    subexpression computation. 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 computationally 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

E
-

**ento**
    This namespace houses the
    `Clang Static Analyzer <https://clang.llvm.org/docs/ClangStaticAnalyzer.html>`_.
    It is an abbreviaton of `entomology <https://en.wikipedia.org/wiki/Entomology>`_.

      *"Entomology is the scientific study of insects."*

    In the past, this namespace had not only the name `GR` (aka. Graph Reachability)
    but also `entoSA`.

F
-

**FCA**
    First Class Aggregate

**FDE**
    Frame Description Entry. A kind of CFI used to describe the stack frame of
    one function.

G
-

**GC**
    Garbage Collection. The practice of using reachability analysis instead of
    explicit memory management to reclaim unused memory.

**GEP**
    ``GetElementPtr``. An LLVM IR instruction that is used to get the address
    of a subelement of an aggregate data structure. It is documented in detail
    `here <https://llvm.org/docs/GetElementPtr.html>`_.

**GVN**
    Global Value Numbering. GVN is a pass that partitions values computed by a
    function into congruence classes. Values ending up in the same congruence
    class are guaranteed to be the same for every execution of the program.
    In that respect, congruency is a compile-time approximation of equivalence
    of values at runtime.

H
-

.. _heap:

**Heap**
    In garbage collection, the region of memory which is managed using
    reachability analysis.

I
-

**ICE**
    Internal Compiler Error. This abbreviation is used to describe errors
    that occur in LLVM or Clang as they are compiling source code. For example,
    if a valid C++ source program were to trigger an assert in Clang when
    compiled, that could be referred to as an "ICE".

**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

**LGTM**
    "Looks Good To Me". In a review thread, this indicates that the
    reviewer thinks that the patch is okay to commit.

**LICM**
    Loop Invariant Code Motion

**LSDA**
    Language Specific Data Area.  C++ "zero cost" unwinding is built on top a
    generic unwinding mechanism.  As the unwinder walks each frame, it calls
    a "personality" function to do language specific analysis.  Each function's
    FDE points to an optional LSDA which is passed to the personality function.
    For C++, the LSDA contain info about the type and location of catch
    statements in that function.

**Load-VN**
    Load Value Numbering

**LTO**
    Link-Time Optimization

M
-

**MC**
    Machine Code

N
-
.. _nfc:

**NFC**
  "No functional change". Used in a commit message to indicate that a patch
  is a pure refactoring/cleanup.
  Usually used in the first line, so it is visible without opening the
  actual commit email.

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
-

**PR**
    Problem report. A bug filed on `the LLVM Bug Tracking System
    <https://bugs.llvm.org/enter_bug.cgi>`_.

**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#iterating-over-def-use-use-def-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)``.

**RFC**
  Request for Comment. An email sent to a project mailing list in order to
  solicit feedback on a proposed change.

.. _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 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>`.

**Splat**
    Splat refers to a vector of identical scalar elements.

    The term is based on the PowerPC Altivec instructions that provided
    this functionality in hardware. For example, "vsplth" and the corresponding
    software intrinsic "vec_splat()". Examples of other hardware names for this
    action include "duplicate" (ARM) and "broadcast" (x86).

**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

