optimizing compilers nai-wei lin department of computer science and information engineering national...

Post on 25-Dec-2015

214 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

top related