Welcome to my Presentation Topic : Peephole Optimization Samrin Ahmed ID: 011142021
Contents Functioning of Peephole Optimization & Example Replacement Rules Working Flow of Peephole Optimization Introduction to Peephole Optimization What is an Optimization 2 Conclusion References
What is Optimization ?? Process of transforming a piece of code to make it more efficient (either in terms of time or space) without changing its output or side-effects. Tries to minimize or maximize some attributes of an executable computer program.
Introduction to Peephole Optimization ?? Optimization performed over a very small set of instructions in a segment of generated code. Works by recognizing sets of instructions that can be replaced by shorter or faster sets of instructions . Goals: improve performance reduce code size reduce memory footprint
Why it’s needed ?? After compilation, the code still has some flaws Scheduling & allocation really are NP-Complete Optimizer may not implement every needed transformation Curing the problem More work on scheduling and allocation Implement more optimizations — or — Optimize after compilation Peephole optimization Link-time optimization
Working Flow of Peephole Optimization
Replacement Rules Common techniques applied in peephole optimization:- Constant folding – Evaluate constant sub-expressions in advance. Strength reduction – Replace slow operations with faster equivalents. Null sequences – Delete useless operations. Combine operations – Replace several operations with one equivalent. Algebraic laws – Use algebraic laws to simplify or reorder instructions. Special case instructions – Use instructions designed for special operand cases. Address mode operations – Use address modes to simplify code.
Functioning of Peephole Optimization Replacing slow instructions with faster ones Removing redundant code Removing redundant stack instructions
Functioning (Contd…) Replacing slow instructions with faster ones The following Java byteCode ... load 1 load 1 mul ... Can be replaced by ... load 1 dup mul ...
Functioning (Contd…) Removing redundant code Another example is to eliminate redundant load stores. a = b + c; d = a + e; is straightforwardly implemented as MOV b, R0 # Copy b to the register ADD c, R0 # Add c to the register, the register is now b+c MOV R0, a # Copy the register to a MOV a, R0 # Copy a to the register ADD e, R0 # Add e to the register, the register is now a+e [(b+c)+e] MOV R0, d # Copy the register to d
Functioning (Contd…) Removing redundant code but can be optimized to MOV b, R0 # Copy b to the register ADD c, R0 # Add c to the register, which is now b+c (a) MOV R0, a # Copy the register to a ADD e, R0 # Add e to the register, which is now b+c+e [(a)+e] MOV R0, d # Copy the register to d
Functioning (Contd…) Removing redundant stack instructions PUSH AF PUSH BC PUSH DE PUSH HL CALL _ADDR1 POP HL POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE PUSH HL CALL _ADDR2 POP HL POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE PUSH HL CALL _ADDR1 CALL _ADDR2 POP HL POP DE POP BC POP AF
Functioning (Contd…) Source Code: If ( a<b ) { a = a + b; } Peephole optimization of jumps Eliminate jumps to jumps Eliminate jumps after conditional branches “Adjacent” instructions = “Adjacent in control flow” IL Code: PUSH a PUSH b CMP a,b JUMP L1 EXIT L1: ADD a,b
Other Considerations Control-flow operations Can clear simplifier’s window at branch or label More aggressive approach: combine across branches Same considerations arise with predication Physical versus logical windows Can run optimizer over a logical window Logical windows (within block) improve effectiveness
Conclusion So… Peephole optimization remains viable Post allocation improvements Cleans up rough edges Peephole technology works for selection Description driven matchers Used in several important systems All of this will work equally well in binary-to-binary translation