Top Banner
CH10.2 CSE 4100 Overview Overview Code Level Optimization Code Level Optimization Common Sub-expression elimination Copy Propagation Dead-code elimination Peephole optimization Peephole optimization Load/Store elimination Unreachable code Flow of Control Optimization Algebraic simplification Strength Reduction
40
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Code optimisation presnted

CH10.2

CSE4100

OverviewOverview Code Level Optimization Code Level Optimization

Common Sub-expression elimination Copy Propagation Dead-code elimination

Peephole optimizationPeephole optimization Load/Store elimination Unreachable code Flow of Control Optimization Algebraic simplification Strength Reduction

Page 2: Code optimisation presnted

CH10.4

CSE4100

Where can Optimation Occur?Where can Optimation Occur?

Software Engineer can:Software Engineer can: Profile Program Change Algorithm Data Transform/Improve Loops

Front EndLA, Parse,Int. Code

Code Generator

Int. Code TargetProgram

SourceProgram

Compiler Can:Compiler Can: Improve Loops/Proc

Calls Calculate Addresses Use Registers Selected Instructions Perform Peephole Opt.

All are OptimizationsAll are Optimizations 1st is User Controlled and Defined At Intermediate Code Level by Compiler At Assembly Level for Target Architecture (to take

advantage of different machine features)

Page 3: Code optimisation presnted

CH10.6

CSE4100

First Look at OptimizationFirst Look at Optimization Optimization Applied to 3 Address Coding (3AC) Optimization Applied to 3 Address Coding (3AC)

Version of Source Program - Examples:Version of Source Program - Examples:

Page 4: Code optimisation presnted

CH10.7

CSE4100

First Look at OptimizationFirst Look at Optimization Identify each Basic Block which

Represents a set of Three Address Statements whereExecution Enters at Top and

Leaves at BottomNo Branches within Code

Represent the Control FlowDependencies Among and

Between Basic BlocksDefines what is Termed a “Flow

Graph”

Page 5: Code optimisation presnted

CH10.8

CSE4100

First Look at OptimizationFirst Look at Optimization Steps 1 to 12 from two Slides Back Represented as:Steps 1 to 12 from two Slides Back Represented as:

Optimization Works with Basic Blocks and Flow Optimization Works with Basic Blocks and Flow Graph to Perform Transformations that:Graph to Perform Transformations that:

Page 6: Code optimisation presnted

CH10.9

CSE4100

First Look at OptimizationFirst Look at Optimization

Optimization will Perform Optimization will Perform Transformations on Basic Transformations on Basic Blocks/Flow GraphBlocks/Flow Graph

Resulting Graph(s) Passed Resulting Graph(s) Passed Through to Final Code Generation Through to Final Code Generation to Obtain More Optimal Codeto Obtain More Optimal Code

Two Fold Goal of OptimizationTwo Fold Goal of OptimizationReduce TimeReduce Space

Page 7: Code optimisation presnted

CH10.10

CSE4100

First Look at OptimizationFirst Look at Optimization

Two Types of TransformationsTwo Types of Transformations Structure Preserving

Inherent Structure and Implicit Functionality of Basic Blocks is Unchanged

AlgebraicElimination of Useless Expressions

x = x + 0 or y = y * 1Replace Expensive Operators

Change x = y ** 2 to x = y * y

Page 8: Code optimisation presnted

CH10.11

CSE4100

Structure Preserving TransformationsStructure Preserving Transformations

Common Sub-Expression EliminationCommon Sub-Expression Elimination How can Following Code be Improved?

a = b + cb = a – dc = b + cd = a – d

What Must Make Sure Doesn’t happen? Dead-Code EliminationDead-Code Elimination

If x is not Used in Block, Can it be Removed?x = y + z

d = b

Page 9: Code optimisation presnted

CH10.12

CSE4100

Structure Preserving TransformationsStructure Preserving Transformations

Renaming Temporary VariablesRenaming Temporary Variables Consider the code t = b + c Can be Changed to u = b + c May Reduce the Number of temporaries Make Change from all t’s to all u’s

Interchange of StatementsInterchange of Statements Consider and Change to:

t1 = b + c t2 = x + yt2 = x + y t1 = b + c

This can Occur as Long as: x and y not t1 b and c not t2

Page 10: Code optimisation presnted

CH10.13

CSE4100

Requirements for OptimizationRequirements for Optimization

Page 11: Code optimisation presnted

CH10.14

CSE4100

The Overall Optimization ProcessThe Overall Optimization Process

AdvantagesAdvantages Intermediate Code has Explicit Operations and Their

Identification Promotes Optimization Intermediate Code is Relatively Machine Independent Therefore, Optimization Doesn’t Impact Final Code

Generation

Page 12: Code optimisation presnted

CH10.15

CSE4100

Example Source CodeExample Source Code

Page 13: Code optimisation presnted

CH10.16

CSE4100

Generated Three Address CodingGenerated Three Address Coding

Page 14: Code optimisation presnted

CH10.17

CSE4100

Flow Graph of Basic BlocksFlow Graph of Basic Blocks

Page 15: Code optimisation presnted

CH10.18

CSE4100

Indepth Examination of OptimizationIndepth Examination of Optimization

Code-Transformation Techniques:Code-Transformation Techniques: Local – within a “Basic Block” Global – between “Basic Blocks”

Data Flow Dependencies Determined by Data Flow Dependencies Determined by InspectionInspection

what do i, a, and v refer to? what do i, a, and v refer to? Dependent in Another Basic BlockDependent in Another Basic Block Scoping is Very CriticalScoping is Very Critical

Page 16: Code optimisation presnted

CH10.19

CSE4100

Indepth Examination of OptimizationIndepth Examination of Optimization

Function Preserving TransformationsFunction Preserving Transformations Common Subexpressions Copy Propagation Deal Code Elimination Constant Folding

Loop OptimizationsLoop Optimizations Code Motion Induction Variables Strength Reduction

Page 17: Code optimisation presnted

CH10.20

CSE4100

Common Sub-ExpressionsCommon Sub-Expressions E is a Common Sub-Expression ifE is a Common Sub-Expression if

E as Previously Computed Value of E Unchanged since Previous

Coamputation What Can be Saved in B5?What Can be Saved in B5?

t6 and t7 same computation t8 and t10 same computation Save:

Remove 2 temp variables Remove 2 multiplications Remove 4 variable accesses Remove 2 assignments

t6 := 4 * ix := a[t6] t7 := 4 * it8 := 4 * jt9 := a[t8] a[t7] := t9 t10 := 4 * ja[t10]:= xGoto B2

Page 18: Code optimisation presnted

CH10.21

CSE4100

Common Sub-ExpressionsCommon Sub-Expressions

What about B6?What about B6? t11 and t12 t13 and t15

Similar Savings as in B5Similar Savings as in B5t11 := 4 * ix := a[t11] t12 := 4 * it13 := 4 * nt14 := a[t13] a[t12]:= t14 t15 := 4 * na[t15]:= x

t11 := 4 * ix := a[t11] t13 := 4 * nt14 := a[t13] a[t11]:= t14 a[t13]:= x

Page 19: Code optimisation presnted

CH10.22

CSE4100

Common Sub-ExpressionsCommon Sub-Expressions What else Can be Accomplished?What else Can be Accomplished? Where is Variable j Determined?Where is Variable j Determined?

In B3 – and when drop through B3 to B4 and into B5, no change occurs to j!

What Does B5 Become?What Does B5 Become? t9 same as t5!t9 same as t5! Again savings in access, variables, Again savings in access, variables,

operations, etc.operations, etc.t6 := 4 * ix := a[t6] t8 := 4 * jt9 := a[t8] a[t6] := t9 a[t8]:= xGoto B2

j := j - 1t4 := 4 * jt5 := a[t4]if t5>4 goto B3

B4

t6 := 4 * ix := a[t6] t9 := a[t4] a[t6] := t9 a[t4]:= xGoto B2

t6 := 4 * ix := a[t6] a[t6] := t5 a[t4]:= xGoto B2

Page 20: Code optimisation presnted

CH10.24

CSE4100

Common Sub-ExpressionsCommon Sub-Expressions B6 is Similarly Changed ….B6 is Similarly Changed ….

t11 := 4 * ix := a[t11] t13 := 4 * nt14 := a[t13] a[t11]:= t14 a[t13]:= x

x := t3 t14 := a[t1] a[t2]:= t14 a[t1]:= x

Page 21: Code optimisation presnted

CH10.25

CSE4100

Resulting Flow DiagramResulting Flow Diagram

Page 22: Code optimisation presnted

CH10.26

CSE4100

Copy PropagationCopy Propagation Introduce a Common Copy Statement to Replace Introduce a Common Copy Statement to Replace

an Arithmetic Calculation with Assignmentan Arithmetic Calculation with Assignment

Regardless of the Path Chosen, the use of an Regardless of the Path Chosen, the use of an Assignment Saves Time and SpaceAssignment Saves Time and Space

a:= d + ea:= t

a:= d + e b:= d + e

c:= d + e

b:= d + ea:= t

c:= t

Page 23: Code optimisation presnted

CH10.27

CSE4100

Copy PropagationCopy Propagation In our Example for B5 and B6 Below:In our Example for B5 and B6 Below:

Since x is t3, we can replace the use of x on right hand Since x is t3, we can replace the use of x on right hand side as below:side as below:

x := t3 t14 := a[t1] a[t2]:= t14 a[t1]:= x

x := t3 a[t2] := t5 a[t4]:= xGoto B2

x := t3 t14 := a[t1] a[t2] := t14 a[t1] := t3

x := t3 a[t2] := t5 a[t4] := t3Goto B2

Page 24: Code optimisation presnted

CH10.28

CSE4100

Dead Code EliminationDead Code Elimination Variable is “Dead” if its Value will never be Utilized Variable is “Dead” if its Value will never be Utilized

Again SubsequentlyAgain Subsequently Otherwise, Variable is “Live”Otherwise, Variable is “Live” What’s True about B5 and B6?What’s True about B5 and B6?

Can Any Statements be Eliminated? Which Ones? Can Any Statements be Eliminated? Which Ones? Why?Why?

B5 and B6 are Now Optimized withB5 and B6 are Now Optimized with B5 has 9 Statements Reduced to 3 B56 has 8 Statements Reduced to 3

x := t3 t14 := a[t1] a[t2] := t14 a[t1] := t3

x := t3 a[t2] := t5 a[t4] := t3Goto B2

Page 25: Code optimisation presnted

CH10.29

CSE4100

Loop OptimizationsLoop Optimizations Three Types: Code Motion, Induction Variables, and Three Types: Code Motion, Induction Variables, and

Strength ReductionStrength Reduction Code MotionCode Motion

Remove Invariant Operations from Loopwhile (limit * 2 > i) do

Replaced by:t = limit * 2while (t > i) do

Induction VariablesInduction Variables Identify Which Variables are Interdependent or in

Stepj = j – 1t4 = 4 * j

Replaced by below with an initialization of t4t4 = t4 - 4

Page 26: Code optimisation presnted

CH10.30

CSE4100

Loop OptimizationsLoop Optimizations Strength ReductionStrength Reduction

Replace an Expensive Operation (Such as Multiply) with a Cheaper Operation (Such as Add)

In B4, I and j can be replaced with t2 and t4 This Eliminates the need for Variables i and j

Page 27: Code optimisation presnted

CH10.31

CSE4100

Final Optimized Flow Graph Final Optimized Flow Graph

Page 28: Code optimisation presnted

CH10.43

CSE4100

Peephole OptimizationPeephole Optimization

Simple IdeaSimple Idea Slide a window over the code Optimize code in the window only.

Optimizations are Optimizations are Local Semantic preserving Cheap to implement

UsuallyUsually One can repeat the peephole several times! Each pass can create new opportunities for

more

Page 29: Code optimisation presnted

CH10.44

CSE4100

Peephole OptimizerPeephole Optimizer

block_3:mov [esp-4],ebp mov ebp,esp mov [ebp-8],esp sub esp,28 mov eax,[ebp+8] cmp eax,0mov eax,0sete ahcmp eax,0 jz block_5

block_4:mov eax,1 jmp block_6

block_5:mov eax,[ebp+8] sub eax,1 push eax mov eax,[ebp+4] push eax mov eax,[eax] mov eax,[eax] call eax add esp,8 mov ebx,[ebp+8] imul ebx,eax mov eax,ebx

block_6:mov esp,[ebp-8] mov ebp,[ebp-4] ret

block_3:mov [esp-4],ebp mov ebp,esp mov [ebp-8],esp sub esp,28 mov eax,[ebp+8] cmp eax,0mov eax,0sete ahcmp eax,0 jz block_5

block_4:mov eax,1 jmp block_6

block_5:mov eax,[ebp+8] sub eax,1 push eax mov eax,[ebp+4] push eax mov eax,[eax] mov eax,[eax] call eax add esp,8 mov ebx,[ebp+8] imul ebx,eax mov eax,ebx

block_6:mov esp,[ebp-8] mov ebp,[ebp-4] ret

Page 30: Code optimisation presnted

CH10.45

CSE4100

Peephole OptimizationsPeephole Optimizations Load/Store elimination

Get rid of redundant operations Unreachable code

Get rid of code guaranteed to never execute Flow of Control Optimization

Simply jump sequences. Algebraic simplification

Use rules of algebra to rewrite some basic operation Strength Reduction

Replace expensive instructions by equivalent ones (yet cheaper)

Machine Idioms Replace expensive instructions by equivalent ones (for a

given machine)

Page 31: Code optimisation presnted

CH10.46

CSE4100

Load / Store SequencesLoad / Store Sequences

Imagine the following sequenceImagine the following sequence “a” is a label for a memory location

mov a,eax

mov eax,a

mov a,eax

mov eax,a

Page 32: Code optimisation presnted

CH10.47

CSE4100

Unreachable CodeUnreachable Code ExampleExample

#define debug 0

....if (debug) {

printf(“This is a trace message\n”);}....

#define debug 0

....if (debug) {

printf(“This is a trace message\n”);}....

Page 33: Code optimisation presnted

CH10.48

CSE4100

ExampleExample The Generated code looks like....The Generated code looks like....

If we know that...If we know that... debug == 0 Then

....if (debug == 0) goto L2printf(“This is a trace message\n”);

L2: ....

....if (debug == 0) goto L2printf(“This is a trace message\n”);

L2: ....

....if (0 == 0) goto L2printf(“This is a trace message\n”);

L2: ....

....if (0 == 0) goto L2printf(“This is a trace message\n”);

L2: ....

1

Page 34: Code optimisation presnted

CH10.49

CSE4100

ExampleExample Final transformationFinal transformation

Given this codeGiven this code There is no way to branch “into” the blue block The last instruction (goto L2) jumps over the blue

block The blue block is never used. Get rid of it!

....goto L2printf(“This is a trace message\n”);

L2: ....

....goto L2printf(“This is a trace message\n”);

L2: ....

Page 35: Code optimisation presnted

CH10.50

CSE4100

Unreachable Code ExampleUnreachable Code Example Bottom LineBottom Line

Now L2 is instruction after goto...Now L2 is instruction after goto... So get rid of goto altogether!

....goto L2

L2: ....

....goto L2

L2: ....

....L2: ....

....L2: ....

Page 36: Code optimisation presnted

CH10.51

CSE4100

Flow of Control OptimizationFlow of Control Optimization SituationSituation

We can have chains of jumps Direct to conditional or vice-versa

ObjectiveObjective Avoid extra jumps.

ExampleExample

if (x relop y) goto L2....

L2: goto L4L3: ....L4:

L4_BLOCK

if (x relop y) goto L2....

L2: goto L4L3: ....L4:

L4_BLOCK

Page 37: Code optimisation presnted

CH10.52

CSE4100

Flow of ControlFlow of Control What can be doneWhat can be done

Collapse the chain

if (x relop y) goto L4....

L2: goto L4L3: ....L4:

L4_BLOCK

if (x relop y) goto L4....

L2: goto L4L3: ....L4:

L4_BLOCK

Page 38: Code optimisation presnted

CH10.53

CSE4100

Algebraic SimplificationAlgebraic Simplification Simple IdeaSimple Idea

Use algebraic rules to rewrite some code ExamplesExamples

x := y + 0x := y + 0

x := yx := y

x := y * 1x := y * 1

x := yx := y

x := y * 0x := y * 0

x := 0x := 0

Page 39: Code optimisation presnted

CH10.54

CSE4100

Strength ReductionStrength Reduction IdeaIdea

Replace expensive operation By semantically equivalent cheaper ones.

ExamplesExamples Multiplication by 2 is equivalent to a left shift Left shift is much faster

Page 40: Code optimisation presnted

CH10.55

CSE4100

Hardware IdiomHardware Idiom IdeaIdea

Replace expensive instructions by... Equivalent instruction that are optimized for the

platform ExampleExample

add eax,1add eax,1

inceax

inceax