Code Optimization

  • Uploaded by: readerSujay
  • 0
  • 0
  • March 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Code Optimization as PDF for free.

More details

  • Words: 2,340
  • Pages: 28
Loading documents preview...
Code Optimization

Introduction  Criteria for Code-Improving Transformation:

  

Meaning must be preserved (correctness) Speedup must occur on average. Work done must be worth the effort.

 Opportunities:

  

Programmer (algorithm, directives) Intermediate code Target code

Peephole Optimizations (9.9) 1.

A Simple but effective technique for locally improving the target code is peephole optimization,

2.

a method for trying to improve the performance of the target program

3.

by examining a short sequence of target instructions and replacing these instructions by a shorter or faster sequence whenever possible.

Characteristics of peephole optimization 1. Redundant instruction elimination 2. Flow of control information 3. Algebraic Simplification 4. Use of machine Idioms

Peephole Optimizations  Constant Folding

x := 32 x := x + 32

becomes

x := 64

 Unreachable Code

goto L2 x := x + 1

 No need

 Flow of control optimizations

goto L1 becomes goto L2 … L1: goto L2  No needed if no other L1 branch

Peephole Optimizations  Algebraic Simplification

x := x + 0  No needed  Dead code

x := 32  where x not used after statement y := x + y  y := y + 32  Reduction in strength

x := x * 2

 x := x + x  x := x << 2

Common expression can be eliminated

Simple example: a[i+1] = b[i+1] t1 = i+1 t2 = b[t1] t3 = i + 1 a[t3] = t2

t1 = i + 1 t2 = b[t1] t3 = i + 1 a[t1] = t2

 no longer live

Now, suppose i is a constant: i = 4

i = 4

t1 = i+1

t1 = 5

t2 = b[t1]

t2 = b[t1]

a[t1] = t2

a[t1] = t2

Final Code:

i=4 t2 = b[5] a[5] = t2

i=4 t1 = 5 t2 = b[5] a[5] = t2

Simple Loop Optimizations Code Motion Move invariants out of the loop. Example: while (i <= limit - 2) becomes

t := limit - 2 while (i <= t)

Three Address Code of Quick Sort 1

i=m-1

16

t7 = 4 * I

2

j=n

17

t8 = 4 * j

3

t1 =4 * n

18

t9 = a[t8]

4

v = a[t1]

19

5

i=i +1

20

a[t7] = t9

6

t2 = 4 * i

21

7

t3 = a[t2]

22

8 9 10 11

if t3 < v goto (5) j=j–1 t4 = 4 * j

23

t10 = 4 * j a[t10 ] = x goto (5)

24

t11 = 4 * I

25

x = a[t11 ]

26

t12 = 4 * i

27

t13 = 4 * n

12

t5 = a[t4]

13

if t5 > v goto (9)

28

t14 = a[t13 ]

14

if i >= j goto (23)

29

15

t6 = 4 * i

a[t12 ] = t14

30

t15 = 4 * n

x = a[t6]

a[t15 ] = x

Find The Basic Block 1

i=m-1

16

t7 = 4 * I

2

j=n

17

t8 = 4 * j

3

t1 =4 * n

18

t9 = a[t8]

4

v = a[t1]

19

5

i=i +1

20

a[t7] = t9

6

t2 = 4 * i

21

7

t3 = a[t2]

22

8 9 10 11

if t3 < v goto (5) j=j–1 t4 = 4 * j

23

t10 = 4 * j a[t10 ] = x goto (5)

24

t11 = 4 * i

25

x = a[t11 ]

26

t12 = 4 * i

27

t13 = 4 * n

12

t5 = a[t4]

13

if t5 > v goto (9)

28

t14 = a[t13 ]

14

if i >= j goto (23)

29

15

t6 = 4 * i

a[t12 ] = t14

30

t15 = 4 * n

x = a[t6]

a[t15 ] = x

Flow Graph

B1 i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 * i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t7 = 4 * i

t12 = 4 * i

t3 = a[t2]

t8 = 4 * j

t13 = 4 * n

if t3 < v goto B2

t9 = a[t8]

t14 = a[t13 ]

a[t7] = t9

a[t12 ] = t14

t10 = 4 * j

t15 = 4 * n

a[t10 ] = x

a[t15 ] = x

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

goto B2

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 * i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t7 = 4 * i

t12 = 4 * i

t3 = a[t2]

t8 = 4 * j

t13 = 4 * n

if t3 < v goto B2

t9 = a[t8]

t14 = a[t13 ]

a[t7] = t9

a[t12 ] = t14

t10 = 4 * j

t15 = 4 * n

a[t10 ] = x

a[t15 ] = x

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

goto B2

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 * i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t8 = 4 * j

t12 = 4 * i

t3 = a[t2]

t9 = a[t8]

t13 = 4 * n

if t3 < v goto B2

a[t6] = t9

t14 = a[t13 ]

t10 = 4 * j

a[t12 ] = t14

a[t10 ] = x

t15 = 4 * n

goto B2

a[t15 ] = x

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 *i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t8 = 4 * j

t12 = 4 * i

t3 = a[t2]

t9 = a[t8]

t13 = 4 * n

if t3 < v goto B2

a[t6] = t9

t14 = a[t13 ]

a[t8] = x

a[t12 ] = t14

goto B2

t15 = 4 * n

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

a[t15 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 * i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t8 = 4 * j

t12 = 4 * i

t3 = a[t2]

t9 = a[t8]

t13 = 4 * n

if t3 < v goto B2

a[t6] = t9

t14 = a[t13 ]

a[t8] = x

a[t12 ] = t14

goto B2

t15 = 4 * n

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

a[t15 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

t11 = 4 * i

i=i +1

x = a[t6]

x = a[t11 ]

t2 = 4 * i

t8 = 4 * j

t13 = 4 * n

t3 = a[t2]

t9 = a[t8]

t14 = a[t13 ]

if t3 < v goto B2

a[t6] = t9

a[t11 ] = t14

a[t8] = x

t15 = 4 * n

goto B2

a[t15 ] = x

B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

B2 i=i +1

x = a[t6]

t2 = 4 * i

t8 = 4 * j

t3 = a[t2]

t9 = a[t8]

if t3 < v goto B2

a[t6] = t9

B3

a[t8] = x j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

goto B2

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 t6 = 4 * i

B2 i=i +1

x = a[t6]

t2 = 4 * i

t8 = 4 * j

t3 = a[t2]

t9 = a[t8]

if t3 < v goto B2

a[t6] = t9

B3

a[t8] = x j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

goto B2

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = a[t2]

B2 i=i +1

t8 = 4 * j

t2 = 4 * i

t9 = a[t8]

t3 = a[t2]

a[t2] = t9

if t3 < v goto B2

a[t8] = x

B3

goto B2 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = t3

B2 i=i +1

t8 = 4 * j

t2 = 4 * i

t9 = a[t8]

t3 = a[t2]

a[t2] = t9

if t3 < v goto B2

a[t8] = x

B3

goto B2 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = t3

B2 i=i +1

t9 = a[t4]

t2 = 4 * i

a[t2] = t9

t3 = a[t2]

a[t4] = x

if t3 < v goto B2

goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = t3

B2 i=i +1

a[t2] = t5

t2 = 4 * i

a[t4] = x

t3 = a[t2]

goto B2

if t3 < v goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

t11 = 4 * i x = a[t11 ] t13 = 4 * n t14 = a[t13 ] a[t11 ] = t14 a[t13 ] = x

B1

Common Subexpression Elimination i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = t3

B2 i=i +1

a[t2] = t5

t2 = 4 * i

a[t4] = x

t3 = a[t2]

goto B2

if t3 < v goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

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

Similarly for B6

Dead Code Elimination

B1 i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6 x = t3

B2 i=i +1

a[t2] = t5

t2 = 4 * i

a[t4] = x

t3 = a[t2]

goto B2

if t3 < v goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

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

Dead Code Elimination

B1 i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6

a[t2] = t5

t14 = a[t1]

i=i +1

a[t4] = t3

a[t2] = t14

t2 = 4 * i

goto B2

a[t1] = t3

B2

t3 = a[t2] if t3 < v goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

Reduction in Strength

B1 i=m-1 j=n t1 =4 * n v = a[t1]

B5

B6

a[t2] = t5

t14 = a[t1]

i=i +1

a[t4] = t3

a[t2] = t14

t2 = 4 * i

goto B2

a[t1] = t3

B2

t3 = a[t2] if t3 < v goto B2

B3 j=j–1 t4 = 4 * j t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

Reduction in Strength

B1 i=m-1 j=n t1 =4 * n v = a[t1]

B2

t2 = 4 * i t4 = 4 * j

t2 = t2 + 4 t3 = a[t2]

B3

if t3 < v goto B2

t4 = t4 - 4 t5 = a[t4] if t5 > v goto B3

B4 if i >= j goto B6

B5

B6

a[t2] = t5

t14 = a[t1]

a[t4] = t3

a[t2] = t14

goto B2

a[t1] = t3

The End

Related Documents


More Documents from "Claudiu Nistorescu"

Code Optimization
March 2021 0