GCC performs various optimizations on its internal tree structure.
Currently done (All are SSA based):
- Simple alias analysis
- Type based alias analysis
Combined GVN-PRE (Global Value Numbering and Partial Redundancy Elimination)
- Tail call and sibling call transformations
- Jump threading
- Jump bypassing
- Dead Code Elimination
- Dead Store Elimination
- Forward propagation
- Sparse Conditional Constant Propagation
- Scalar Replacement of Aggregates
- Named return value optimizations
- CFG simplification
- Copy propagation
- Various PHI node optimizations (basically a form of if-conversion)
- Loop unrolling/peeling
- Induction variable optimizations including strength reduction
- Loop header copying
Most of these optimizations use the tree_folder.
Ongoing and future work (most of these are partially done in GCC 4.2):
- Strength reduction for GVN-PRE
- Partial Dead Code Elimination (limited form, not Knoop)
- Improved conditional constant/copy propagation
OpenMP project
Related work on trees: