###################### 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.