Web & Social Media Analytics Previous Year Question Paper.pdf
Code Optimization Techniques and Phases
1. C dCode
O i i iOptimization
P K Singh 1M M M Engg. College, Gorakhpur
2. Code Optimization and Phases
source front code
intermediate
code code
intermediate
code targetsource
program
front
end
code
optimizer
code code
generator
code target
code
symbol
table
P K Singh 2M M M Engg. College, Gorakhpur
3. Optimization
• Code produced by standard algorithms can often be made to run
faster, take less space or both
• These improvements are achieved through transformations called• These improvements are achieved through transformations called
optimization
• Compilers that apply these transformations are called optimizing
compilerscompilers
• It is especially important to optimize frequently executed parts of a
program
The 90/10 rule– The 90/10 rule
– Profiling can be helpful, but compilers do not typically have sample input
data
– Inner loops tend to be good candidates for optimizationInner loops tend to be good candidates for optimization
P K Singh 3M M M Engg. College, Gorakhpur
4. Criteria for Transformations
• A transformation must preserve the meaning of
a programa program
– Can not change the output produced for any input
– Can not introduce an errorCan not introduce an error
• Transformations should, on average, speed up
programsprograms
• Transformations should be worth the effort
P K Singh 4M M M Engg. College, Gorakhpur
5. Beyond Optimizing Compilers
• Really improvements can be made at various phases
• Source code:
Algorithmic transformations can produce spectacular– Algorithmic transformations can produce spectacular
improvements
– Profiling can be helpful to focus a programmer's attention on
important codep
• Intermediate code:
– Compiler can improve loops, procedure calls, and address
calculationscalculations
– Typically only optimizing compilers include this phase
• Target code:
Compilers can use registers efficiently– Compilers can use registers efficiently
– Peephole transformation can be applied
P K Singh 5M M M Engg. College, Gorakhpur
6. Peephole Optimizations
• A simple technique for locally improving target
code (can also be applied to intermediate code)( )
• The peephole is a small, moving window on the
target program
• Each improvement replaces the instructions of
the peephole with a shorter or faster sequence
• Each improvement may create opportunities for
additional improvements
• Repeated passes may be necessary
P K Singh 6M M M Engg. College, Gorakhpur
7. Redundant-Instruction Elimination
• Redundant loads and stores:
(1)MOV R0 a(1)MOV R0, a
(2)MOV a, R0
• Unreachable code:
#define debug 0
if (debug) {
/* i t d b i i f ti *//* print debugging information */
}
P K Singh 7M M M Engg. College, Gorakhpur
8. Flow-of-Control Optimizations
• Jumps to jumps, jumps to conditional jumps, and conditional jumps
to jumps are not necessary
• Jumps to jumps example:p j p p
– The following replacement is valid:
goto L1
…
goto L2
…
– If there are no other jumps to L1 and L1 is preceded by an unconditional
L1: goto L2 L1: goto L2
– If there are no other jumps to L1 and L1 is preceded by an unconditional
jump, the statement at L1 can be eliminated
• Jumps to conditional jumps and conditional jumps to jumps lead to
similar transformations
P K Singh 8M M M Engg. College, Gorakhpur
9. Other Peephole Optimizationsp p
• A few algebraic identities that occur frequently
(such as x := x + 0 or x := x * 1) can be
eliminated
• Reduction in strength replaces expensive
operations with cheaper onesoperations with cheaper ones
– Calculating x * x is likely much cheaper than x^2 using an
exponentiation routine
– It may be cheaper to implement x * 5 as x * 4 + x
• Some machines may have hardware instructions to
implement certain specific operations efficiently
– For example, auto-increment may be cheaper than a straight-For example, auto increment may be cheaper than a straight
forward x := x + 1
– Auto-increment and auto-decrement are also useful when
pushing into or popping off of a stackp g p pp g
P K Singh 9M M M Engg. College, Gorakhpur
10. Optimizing Intermediate Code
• This phase is generally only included in
optimizing compilersoptimizing compilers
• Offers the following advantages:
Operations needed to implement high level constructs– Operations needed to implement high-level constructs
are made explicit (i.e. address calculations)
– Intermediate code is independent of target machine;p g ;
code generator can be replaced for different machine
• We are assuming intermediate code uses three-
address instructions
P K Singh 10M M M Engg. College, Gorakhpur
11. QuickSort in C
void quicksort(int m, int n) {
int i, j, v, x;
if (n <= m) return;if (n < m) return;
/* Start of partition code */
i = m-1; j = n; v =a[n];
while (1) {
do i = i+1; while (a[i] < v);
do j = j-1; while (a[j] > v);
if (i >= j) break;( j) ;
x = a[i]; a[i] = a[j]; a[j] = x;
}
x = a[i]; a[i] = a[n]; a[n] = x;
/* E d f titi d *//* End of partition code */
quicksort(m, j); quicksort(i+1, n);
}
P K Singh 11M M M Engg. College, Gorakhpur
12. Partition in Three-Address Code
(1) i := m-1
(2) j := n
(3) 1 4*
(16) t7 := 4*i
(17) t8 := 4*j
(18) 9 [ 8](3) t1 := 4*n
(4) v := a[t1]
(5) i := i+1
(6) t2 := 4*i
(18) t9 := a[t8]
(19) a[t7] := t9
(20) t10 := 4*j
(21) a[t10] := x( )
(7) t3 := a[t2]
(8) if t3 < v goto (5)
(9) j := j-1
(10) t4 : 4*j
( ) [ ]
(22) goto (5)
(23) t11 := 4*i
(24) x := a[t11]
(25) t12 : 4*i(10) t4 := 4*j
(11) t5 := a[t4]
(12) if t5 > v goto (9)
(13) if i >= j goto (23)
(25) t12 := 4*i
(26) t13 := 4*n
(27) t14 := a[t13]
(28) a[t12] := t14
(14) t6 := 4*i
(15) x := a[t6]
(29) t15 := 4*n
(30) a[t15] := x
P K Singh 12M M M Engg. College, Gorakhpur
14. Local vs. Global Transformations
• Local transformations involve statements within a
single basic block
• All other transformations are called global
transformations
• Local transformations are generally performed first
• Many types of transformations can be performed
either locally or globally
P K Singh 14M M M Engg. College, Gorakhpur
15. Code Optimizations
• Local/global common subexpression elimination
• Dead code elimination• Dead-code elimination
• Instruction reordering
C t t f ldi• Constant folding
• Algebraic transformations
C i• Copy propagation
• Loop optimizations
15P K Singh M M M Engg. College, Gorakhpur
16. Loop Optimizations
• Code motion
• Induction variable elimination• Induction variable elimination
• Reduction in strength
l t• … lots more
16P K Singh M M M Engg. College, Gorakhpur
17. Code Motion
i := 0
t2 := 4*i
B1:
B2:
i := 0
t1 := n-2
B1:
t :
A[t2] := 0
i := i+1
t2 := 4*i
A[t2] := 0
i := i+1
B2:
t1 := n-2
if i < t1 goto B2
B3:
if i < t1 goto B2B3:
Move loop-invariant computations before the loop
17P K Singh M M M Engg. College, Gorakhpur
18. Strength Reduction
i := 0
t1 := n-2
B1: i := 0
t1 := n-2
t2 := 4*i
B1:
t2 := 4*i
A[t2] := 0
i := i+1
B2: A[t2] := 0
i := i+1
t2 := t2+4
B2:
if i < t1 goto B2B3: if i < t1 goto B2B3:
Replace expensive computations with induction variables
18P K Singh M M M Engg. College, Gorakhpur
19. Reduction Variable Elimination
i 0B1: t1 4*B1:i := 0
t1 := n-2
t2 := 4*i
B1:
B2
t1 := 4*n
t1 := t1-8
t2 := 4*i
B1:
A[t2] := 0
i := i+1
t2 := t2+4
B2:
A[t2] := 0
t2 := t2+4
B2:
if i<t1 goto B2B3: if t2<t1 goto B2B3:
Replace induction variable in expressions with another
19P K Singh M M M Engg. College, Gorakhpur
20. Common Subexpressions
• E is a common subexpression if:
– E was previously computed– E was previously computed
– Variables in E have not changed since previous
computation
• Can avoid recomputing E if previously computed
value is still available
• Dags are useful to detect common subexpressions
P K Singh 20M M M Engg. College, Gorakhpur
21. Local Common Subexpressionsp
t6 := 4*i
x := a[t6]
7 4*i
t6 := 4*i
[ 6]t7 := 4*i
t8 := 4*j
t9 := a[t8]
a[t7] := t9
x := a[t6]
t8 := 4*j
t9 := a[t8]
a[t6] := t9a[t7] := t9
t10 := 4*j
a[t10] := x
goto B2
a[t6] := t9
a[t8] := x
goto B2
goto B2
P K Singh 21M M M Engg. College, Gorakhpur
23. Copy Propagation
• Assignments of the form f := g are called copy
statements (or copies)
• The idea behind copy propagation is to use g for f
whenever possible after such a statement
• For example applied to block B5 of the previous• For example, applied to block B5 of the previous
flow graph, we obtain:
x := t3
[t2] t5a[t2] := t5
a[t4] := t3
goto B2
Copy propagation often turns the copy statement• Copy propagation often turns the copy statement
into "dead code"
P K Singh 23M M M Engg. College, Gorakhpur
24. Dead-Code Elimination
• Dead code includes code that can never be reached and
code that computes a value that never gets used
C id if (d b ) i• Consider: if (debug) print …
– It can sometimes be deduced at compile time that the value of an
expression is constant
– Then the constant can be used in place of the expression (constant– Then the constant can be used in place of the expression (constant
folding)
– Let's assume a previous statement assigns debug := false and
value never changes
– Then the print statement becomes unreachable and can be
eliminated
• Consider the example from the previous slide
The value of computed by the copy statement never gets used after– The value of x computed by the copy statement never gets used after
the copy propagation
– The copy statement is now dead code and can be eliminated
P K Singh 24M M M Engg. College, Gorakhpur
25. Loop Optimizations (1)
• The running time of a program may be improved if
we do both of the following:we do both of the following:
– Decrease the number of statements in an inner loop
– Increase the number of statements in the outer loopp
• Code motion moves code outside of a loop
– For example, consider:p ,
while (i <= limit-2) …
– The result of code motion would be:
t li it 2t = limit – 2
while (i <= t) …
P K Singh 25M M M Engg. College, Gorakhpur
26. Loop Optimizations (2)
• Induction variables: variables that remain in "lock-step"
– For example, in block B3 of previous flow graph, j and t4 are
induction variablesinduction variables
– Induction-variable elimination can sometimes eliminate all but one of
a set of induction variables
• Reduction in strength replaces a more expensive operationReduction in strength replaces a more expensive operation
with a less expensive one
– For example, in block B3, t4 decreases by four with every iteration
– If initialized correctly, can replace multiplication with subtractiony
– Often application of reduction in strength leads to induction-variable
elimination
• Methods exist to recognize induction variables and apply
i t t f ti t ti llappropriate transformations automatically
P K Singh 26M M M Engg. College, Gorakhpur
28. Example
• Given the following code segment, obtain:
The 3AC statements for this computation– The 3AC statements for this computation
– The basic blocks and the flow graph
prod = 0; i = 1;prod 0; i 1;
do {
prod = prod + a[i] * b[i];prod = prod + a[i] b[i];
i = i + 1;
} while ( i <= 20 );} while ( i <= 20 );
P K Singh 28M M M Engg. College, Gorakhpur
29. Example …contd
• 3AC for the given code segment
(1) prod :=0
(2) i := 1
(3) t1 := 4 * i (9) prod := t6
(4) t2 := a [t1] (10) t7 := i + 1
(5) t3 := 4 * i (11) i := t7
(6) t4 := b [t3] (12) if i <= 20 goto (3)
(7) t5 := t2 * t4(7) t5 := t2 * t4
(8) t6 := prod + t5
P K Singh 29M M M Engg. College, Gorakhpur
30. Example …contd
2 Basic blocks
(1) prod :=0
(2) i := 1
B1
(3) t1 := 4 * i (9) prod := t6
(4) t2 := a [t1] (10) t7 := i + 1
(5) t3 := 4 * i (11) i := t7
(6) t4 := b [t3] (12) if i <= 20 goto (3)
(7) t5 := t2 * t4(7) t5 := t2 * t4
(8) t6 := prod + t5
B2
P K Singh 30M M M Engg. College, Gorakhpur
B2
31. Example …contd
Flow Graph
t1 := 4 * iB2
prod := 0
t1 := 4 i
t2 := a [t1]
t3 := 4 * i
t4 := b [t3]B1
B2
i := 1 t5 := t2 * t4
t6 := prod + t5
prod := t6
t7 := i + 1t7 : i 1
i := t7
if i <= 20 goto B2B1
B2
P K Singh 31M M M Engg. College, Gorakhpur
32. Implementing a Code Optimizer
• Organization consists of control-flow analysis, then data-
flow analysis, and then transformations
• The code generator is applied to the transformedThe code generator is applied to the transformed
intermediate code
• Details of code optimization are beyond the scope of this
coursecourse
P K Singh 32M M M Engg. College, Gorakhpur