peephole optimization

Post on 23-Jan-2018

250 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

References

https://en.wikipedia.org/wiki/Peephole_optimization

http://www.iosrjournals.org/iosr-jce/papers/Vol9-Issue4/N0948086.pdf?id=255

https://class.coursera.org/compilers/lecture/76

https://www.slideshare.net/AnulChaudhary/peephole-optimization-techniques-in-

compiler-design

That’s all

Any Question

top related