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.