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
© Copyright 2026 Paperzz