Optimizations in Our CompilersStandard optimizations and architecture specific optimizations are implemented in the compilers we develop. The standard optimizations implemented in our compilers are:
Local optimizations- Constant propagation
- Copy propagation
- Constant folding
- Common sub expression elimination
- Algebraic transformation
- Use of algebraic identities
- Resolving aliases
- Switch jump table creation
- Useless definition elimination
Global optimizations- Resolving aliases
- Constant propagation
- Constant folding
- Common sub expression elimination
- Code sinking
- Code hoisting
- Code motion for else
- Dead variable elimination
- Dead code elimination
- Merging of IF statements
- Branch optimizations
- Automatic procedure inlining
- Tail merging
- Convert linear code to loop
- Conversion of if statement to switch
- Template optimization
Loop optimizations- Loop invariant code motion
- Loop variant code motion
- Induction variable elimination
- Loop unrolling
Postcode Optimizations- Register tracking
- Peep hole optimizations
- Instruction hoisting and sinking
- Tail-call optimization
- Optimizing jump-and-link instruction to branch-and-link instruction
- Template optimization
- Straight path optimization (Optimizing jumps to return instruction)
For DSP, the following architectural features are used effectively:
- Zero Overhead Loop
- Multiply And Accumulation Instruction Support
- Instruction Scheduling
- Instruction Level Parallelism
- Pipeline Hazard Optimization
- Conditional Instruction Support
- Bit Field Instruction Support
- Delay Slot Optimization
|