Electrical Fire
Optimizations
|
  
|
We are considering including the following kinds of optimizations in
ElectricalFire:
Initial
- Straight-line dataflow analysis (mainly there to speed up the compiler
by folding the most common optimizations into the compiler's primitive
graph generation)
- Constant propagation and folding
- Dead code elimination
- Strength reduction
- Rudimentary register allocation
- Method dispatch optimizations
Near term
- Iterative dataflow analysis
- Better phi-node assignment strategy
- Better constant propagation and strength reduction
- Null pointer check elimination
Medium term
- Common subexpression elimination (CSE) or partial redundancy elimination
- Partial redundancy elimination in branches of if statements
- Global code motion or one of its variants
- Undoing some CSE optimization for x86 code generation to relieve register
pressure
- Value range analysis for eliminating array bounds checks
- Better register allocation
- Better instruction scheduling
- Better interface dispatching
After first release
- Function inlining together with the decision-making process of when
to inline
- Duplicating and specializing code within a function to handle common
cases faster (i.e. combining all array bounds checks into one conservative
one at the beginning of a loop, with a backup loop to execute if the conservative
check fails)
- Specialized library optimizations for things like string and vector
operations
Farther future
- Limited interprocedural dataflow analysis
- Alias analysis of memory locations (hard because of Java's concurrency
semantics)
- Synchronization point (monitorenter/exit) elimination or motion
- Object lifetime analysis
- Interprocedural object lifetime analysis