Show / Hide Table of Contents

    Namespace Flame.Compiler.Transforms

    Classes

    AllocaToRegister

    The "alloca to register" transformation, which tries to eliminate alloca instructions whose addresses do not escape.

    BlockFusion

    An optimization that fuses basic blocks, eliminating unnecessary jumps.

    BoxToAlloca

    A transform that looks for box instructions that are only ever unboxed and replaces them with alloca instructions. The transform is only applied to box instructions for which the unboxed pointers do not escape.

    CallDevirtualization

    The call devirtualization optimization: a transform that takes iterates over virtual calls in a control-flow graph and tries to reduce them to a static call.

    ConstantPropagation

    A transform that evaluates non-effectful instructions at compile-time and propagates their results. Essentially just an implementation of sparse conditional constant propagation.

    CopyPropagation

    The copy propagation transform, which replaces references to values that are merely copies of values with the copied values themselves.

    DeadBlockElimination

    A transform that removes all blocks not reachable from the entry point block.

    DeadValueElimination

    Removes unused, non-effectful instructions and basic block parameters from flow graphs.

    DuplicateReturns

    An optimization that replaces direct jumps to blocks that return a copy of a value with the return itself.

    ForwardRegisters

    A transform that rewrites control-flow graphs in register forwarding form, that is, it rewrites control-flow graphs such that basic blocks only use values that are defined in that basic block. Block parameters and branch arguments are used to "import" and "export" values.

    FuseMemoryAccesses

    A transform that tries to turn loads from and stores to special addresses like field pointers into fused loads and store instructions.

    Back-ends are this pass' main target audience; fused loads and stores produce better codegen for back-ends such as the CIL back-end.

    GlobalValueNumbering

    An optimization that replaces redundant computations by copies based on the results of value numbering and dominator tree analyses.

    Inlining

    The inlining optimization: a transform that copies the function bodies of callees into the caller, replacing the call with its implementation.

    InstructionReordering

    A transformation that reorders instructions. It is intended to be used prior to codegen. Instruction reordering helps reduce register pressure and promotes register-to-stack conversion on virtual machines that use an evaluation stack.

    InstructionSimplification

    An intraprocedural transform that greedily applies instruction simplifications.

    InstructionSimplificationAnalysis

    Looks for transforms that simplify instructions.

    InstructionSimplificationAnalysis.Results

    The results produced by the analysis.

    IntraproceduralOptimization

    Describes an intraprocedural optimization: an optimization that considers a method implementation only and does not rely on the implementation of other methods.

    JumpThreading

    An optimization that tries to eliminate repeated jumps between blocks.

    JumpToEntryRemoval

    A transform that removes all direct jumps to the entry point by replacing the current entry point with a 'thunk' basic block that is entered once per function call.

    MemoryAccessElimination

    A pass that tries to eliminate loads and stores, replacing them with local value copies instead.

    PartialScalarReplacement

    An optimization that replaces aggregates by scalars, i.e., their fields. Depending on the control-flow graph, aggregates might be replaced by scalars on some control-flow paths while remaining untouched on others.

    ReassociateOperators

    An optimization that reassociates operators to simplify computations.

    ScalarReplacement

    The scalar replacement of aggregates transform, which tries to decompose local variables of aggregate types, replacing them with other local variables that represent their fields.

    SwitchLowering

    A switch lowering transform, which rewrites general switch flow as if-else switch flow and jump table switch flow.

    SwitchSimplification

    An optimization that transforms switch flows in a way that makes it easier for other optimizations to reason about said switches.

    TailRecursionElimination

    A transform that rewrites static calls to the current method just prior to a return as unconditional jumps to the entry point.

    Transform

    A transform that can be applied to a flow graph.

    Back to top Generated by DocFX