Compiler Optimizations

Optimizations

Constant Folding and Propagation

Constant Folding is the process of recognizing and evaluating constant expressions at compile time rather than computing them at runtime.

Strength Reduction

Strength Reduction is a compiler optimization where expensive operations are replaced with equivalent but less expensive operations.

Dead Code Elimination

Dead code elimination is an optimization to remove instructions which does not affect the results of a program.

Static Single Assignment Form

In Single Static Assignment (SSA) form, all virtual registers may only have one definition. While not an immediate optimization by itself, it enables other optimization opportunities by simultaneously simplifies and improves the results of the other compiler optimizations.

Sparse Conditional Constant Propagation

Sparse Conditional Constant Propagation is an optimization applied after conversion to static single assignment form (SSA). It simultaneously removes dead code and propagates constants. It can finds more constant values, and thus more opportunities for improvement, than other optimizations.

Global Value Numbering

Global Value Numbering is a technique of determining when two computations in a program are equivalent and eliminating one of them with while preserving the same semantics.

Inline Expansion

Inline Expansion replaces a methods call site with the body of the called method. This improves the performance, because calls can be expensive (storing the registers, placing the arguments onto stack, jumping to another location).

Bit Tracker

Bit Tracker tracks the known state of bits and value ranges thru the various operations. This may enables other optimizations and shortcuts.

Block Reordering

Basic Block Reordering organizaze block of instructions to maximize the number of fall-through branches.

Greedy Register Allocation

Greedy Register Allocation assigns CPU registers based on live ranges and spill weights.

Long Expansion

Long Expansion is the transformation of 64-bit instructions into 32-bit instructions for platforms without native 64-bit instructions. This may result in further optimization opportunities.

Devirtualization

Devirtualization is an optimization where virtual method calls are translated into faster static method calls. Devirtualization can happen when the compiler can statically determine at compile-time which method are be called, so it can produce a direct call to that method instead, or even inline it.

Null Check Elimination

Null Check Elimination is an optimization that removes null checks instructions when the compiler can statically determine at compile-time that the object reference are never null.

Two Pass Optimizations

This option causes the optimization stages to be executed again, possibility unlocked additional optimizations.