download

Matakuliah
Tahun
Versi
: T0174 / Teknik Kompilasi
: 2005
: 1/6
Pertemuan 23 & 24
Code Optimization
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mahasiswa dapat menjelaskan berbagai metode
code optimization (C2)
• Mahasiswa dapat menggunakan metode code
optimization dalam suatu kasus tertentu (C3)
2
Outline Materi
•
•
•
•
•
•
Pengertian code optimization
prinsip-prinsip source code optimization
Optimisasi per blok
Optimisasi loop
Data flow analysis
Estimation of types
3
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
4
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
5
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
6
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
7
Basic Block Level
1. Common Sub expression elimination
2. Constant Propagation
3. Copy Propagation
4. Dead code elimination
5. …
8
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  no
longer live
• a[t1] = t2
9
Now, suppose i is a constant:
•
•
•
•
i=4
t1 = i+1
t2 = b[t1]
a[t1] = t2
Final Code:
•
•
•
•
i=4
t1 = 5
t2 = b[t1]
a[t1] = t2
i=4
t1 = 5
t2 = b[5]
a[5] = t2
i=4
t2 = b[5]
a[5] = t2
10
Optimizations on CFG
• Must take control flow into account
– Common Sub-expression Elimination
– Constant Propagation
– Dead Code Elimination
– Partial redundancy Elimination
–…
• Applying one optimization may raise
opportunities for other optimizations.
11
Simple Loop Optimizations
• Code Motion
Move invariants out of the loop.
Example:
while (i <= limit - 2)
becomes
t := limit - 2
while (i <= t)
12
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
a[t7] = t9
5
i=i +1
20
t10 = 4 * j
6
t2 = 4 * i
21
a[t10] = x
7
t3 = a[t2]
22
goto (5)
8
if t3 < v goto (5)
23
t11 = 4 * I
9
j=j–1
24
x = a[t11]
10
t4 = 4 * j
25
t12 = 4 * i
11
t5 = a[t4]
26
t13 = 4 * n
12
if t5 > v goto (9)
27
t14 = a[t13]
13
if i >= j goto (23)
28
a[t12] = t14
14
t6 = 4 * i
29
t15 = 4 * n
15
x = a[t6]
30
a[t15] = x
13
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
a[t7] = t9
5
i=i +1
20
t10 = 4 * j
6
t2 = 4 * i
21
a[t10] = x
7
t3 = a[t2]
22
goto (5)
8
if t3 < v goto (5)
23
t11 = 4 * i
9
j=j–1
24
x = a[t11]
10
t4 = 4 * j
25
t12 = 4 * i
11
t5 = a[t4]
26
t13 = 4 * n
12
if t5 > v goto (9)
27
t14 = a[t13]
13
if i >= j goto (23)
28
a[t12] = t14
14
t6 = 4 * i
29
t15 = 4 * n
15
x = a[t6]
30
a[t15] = x
14
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
goto B2
B4
if i >= j goto B6
15
Common Subexpression Elimination
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
goto B2
B4
if i >= j goto B6
16
Common Subexpression Elimination
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
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
17
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]
a[t15] = x
if t5 > v goto B3
B4
if i >= j goto B6
18
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]
a[t15] = x
if t5 > v goto B3
B4
if i >= j goto B6
19
Common Subexpression
Elimination
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
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
20
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
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
a[t13] = x
goto B2
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
21
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
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
a[t13] = x
goto B2
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
22
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
B3
a[t8] = x
goto B2
j=j–1
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
a[t13] = x
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
23
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
B3
a[t8] = x
goto B2
j=j–1
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
a[t13] = x
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
24
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
B3
j=j–1
goto B2
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
a[t13] = x
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
25
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
t11 = 4 * i
x = a[t11]
t13 = 4 * n
t14 = a[t13]
a[t11] = t14
B3
j=j–1
a[t13] = x
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
26
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
x = t3
t14 = a[t1]
a[t2] = t14
a[t1] = x
B3
j=j–1
Similarly for B6
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
27
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
x = t3
t14 = a[t1]
a[t2] = t14
a[t1] = x
B3
j=j–1
t4 = 4 * j
t5 = a[t4]
if t5 > v goto B3
B4
if i >= j goto B6
28
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
29
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
30
Reduction in Strength
B1
i=m-1
j=n
t1 =4 * n
v = a[t1]
B2
t2 = 4 * i
t4 = 4 * j
B5
B6
a[t2] = t5
t14 = a[t1]
a[t4] = t3
a[t2] = t14
goto B2
a[t1] = t3
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
31