You are on page 1of 13

Code Optimization

Code Optimization
REQUIREMENTS:
• 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
2
Levels
• Window – peephole optimization
• Basic block
• Procedural – global (control flow graph)
• Program level – intra procedural (program
dependence graph)

3
Peephole Optimizations
• Constant Folding
x := 32 becomes x := 64
x := x + 32
• Unreachable Code
goto L2
x := x + 1  unneeded
• Flow of control optimizations
goto L1 becomes goto L2

L1: goto L2
4
Peephole Optimizations
• Algebraic Simplification
x := x + 0  unneeded
• 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

5
Peephole Optimizations
• Local in nature
• Pattern driven
• Limited by the size of the window

6
Basic Block Level
• Common Sub expression elimination
• Value Numbering
• Constant Propagation
• Copy Propagation
• Dead code elimination
• …

7
Simple example: a[i+1] = b[i+1]
• t1 = i+1 • t1 = i + 1
• t2 = b[t1] • t2 = b[t1]
• t3 = i + 1 • t3 = i + 1  no longer live
• a[t3] = t2 • a[t1] = t2

Common expression can be eliminated

8
Now, suppose i is a constant:

• i=4 • i=4 • i=4


• t1 = i+1 • t1 = 5 • t1 = 5
• t2 = b[t1] • t2 = b[t1] • t2 = b[5]
• a[t1] = t2 • a[t1] = t2 • a[5] = t2

Final Code: • i=4


• t2 = b[5]
• a[5] = t2
9
Control Flow Graph - CFG
CFG = < V, E, Entry >, where
V = vertices or nodes, representing an instruction or basic
block (group of statements).
E = (V x V) edges, potential flow of control
Entry is an element of V, the unique program entry
Two sets used in algorithms:
• SUCC (v) = {x in V| exists e in E, e = v x}
• PRED (v) = {x in V| exists e in E, e = x v}

1 2 3 4 5

10
Definitions
• point - any location between adjacent statements
and before and after a basic block.
• A path in a CFG from point p1 to pn I
• s a sequence of points such that  j, 1 <= j < n,
either pi is the point immediately preceding a
statement and pi+1 is the point immediately
following that statement in the same block, or pi is
the end of some block and pi+1 is the start of a
successor block.
11
Data Dependencies
• Flow Dependencies - write/read
x := 4;
y := x + 1
• Output Dependencies - write/write
x := 4;
x := y + 1;
• Anti dependencies - read/write
y := x + 1;
x := 4;

12
x := 4 y := 6
x := 4
y := 6
p := x + 2
z := y + p p := x + 2
x := z
y := p
z := y + p

Flow y := p x := z
Output
Anti

13

You might also like