optimizing compilers nai-wei lin department of computer science and information engineering national...
TRANSCRIPT
Optimizing CompilersOptimizing Compilers
Nai-Wei Lin
Department of Computer Science
and Information Engineering
National Chung Cheng University
ContentContent
• Introduction
• Control flow analysis
• Data flow analysis
• Program transformations
• Case studies
Introduction
Optimizing Compilers Optimizing Compilers
• Compilers that apply code-improving transformations
• Must preserve the meaning of programs
• Must improve programs by a measurable amount
• Must be worth the effort
Levels of Code OptimizationLevels of Code Optimization
• Source code level– profile programs, change algorithms, transform loo
ps
• Intermediate code level– analyze programs, inline procedure calls, improve l
oops, eliminate common subexpressions
• Target code level– use machine characteristics, do peephole optimizati
ons
Organization of an Optimizing Organization of an Optimizing CompilerCompiler
• Front end
• Code optimization– control flow analysis– data flow analysis– code transformation
• Code generation
Program TransformationsProgram Transformations
• Statement level– common-subexpression elimination, copy pro
pagation, dead-code elimination, constant folding, constant propagation
• Loop level– code motion, reduction in strength, induction
variable elimination
• Procedure level– inline expansion, tail recursion optimization
Common Subexpression EliminCommon Subexpression Eliminationation
a = b + cb = a - dc = b + cd = a - da = a + cc = a - d
a = b + cb = a - dc = b + cd = ba = a + cc = a - d
Copy PropagationCopy Propagation
a = b + cb = a - dc = b + cd = ba = a + cc = a - d
a = b + cb = a - dc = b + cd = ba = a + cc = a - b
Dead-Code EliminationDead-Code Elimination
a = b + cb = a - dc = b + cd = ba = a + cc = a - b
a = b + cb = a - dc = b + c
a = a + cc = a - b
Constant FoldingConstant Folding
a = 4 * 2b = a + 3
a = 8b = a + 3
Constant PropagationConstant Propagation
a = 8b = a + 3
a = 8b = 8 + 3
Code MotionCode Motion
t = 4 * ib = a[t] i = i + 1if i < n- 1 goto L
i = 0
L: t = 4 * ib = a[t] i = i + 1if i < f goto L
i = 0f = n - 1
L:
Reduction in StrengthReduction in Strength
t = 4 * ib = a[t] i = i + 1if i < f goto L
i = 0f = n - 1
t = t + 4b = a[t] i = i + 1if i < f goto L
i = 0f = n - 1t = -4
Induction Variable EliminationInduction Variable Elimination
t = t + 4b = a[t]
if t < 4 * f goto L
i = 0f = n - 1t = -4
t = t + 4b = a[t] i = i + 1if i < f goto L
i = 0f = n - 1t = -4
Inline ExpansionInline Expansion
p: a = c + d b = a + c param a param b call q, 2 c = d + e returnq: d = sp[0] + sp[1] return
p: a = c + d b = a + c d = a + b
c = d + e returnq: d = sp[0] + sp[1] return
Tail Recursion OptimizationTail Recursion Optimization
p: a = sp[0] + c b = sp[1] + d param a param b call p, 2 return
p: a = sp[0] + c b = sp[1] + d sp[0] = a sp[1] = b goto p return