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