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

17
Optimizing Compilers Optimizing Compilers Nai-Wei Lin Department of Computer Sc ience and Information Engineeri ng National Chung Cheng Univ ersity

Upload: caroline-edwards

Post on 25-Dec-2015

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

Optimizing CompilersOptimizing Compilers

Nai-Wei Lin

Department of Computer Science

and Information Engineering

National Chung Cheng University

Page 2: Optimizing 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

Page 3: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

Introduction

Page 4: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 5: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 6: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

Organization of an Optimizing Organization of an Optimizing CompilerCompiler

• Front end

• Code optimization– control flow analysis– data flow analysis– code transformation

• Code generation

Page 7: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 8: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 9: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 10: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 11: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

Constant FoldingConstant Folding

a = 4 * 2b = a + 3

a = 8b = a + 3

Page 12: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

Constant PropagationConstant Propagation

a = 8b = a + 3

a = 8b = 8 + 3

Page 13: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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:

Page 14: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 15: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 16: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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

Page 17: Optimizing Compilers Nai-Wei Lin Department of Computer Science and Information Engineering National Chung Cheng University

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