Top Banner
9. Optimization Marcus Denker
52

9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap Introduction Optimizations in the Back-end The Optimizer SSA Optimizations.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

9. Optimization

Marcus Denker

Page 2: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

2© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 3: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

3© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 4: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

4© Marcus Denker

Optimization

Optimization: The Idea

> Transform the program to improve efficiency

> Performance: faster execution> Size: smaller executable, smaller memory footprint

Tradeoffs: 1) Performance vs. Size

2) Compilation speed and memory

Page 5: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

5© Marcus Denker

Optimization

No Magic Bullet!

> There is no perfect optimizer> Example: optimize for simplicity

Opt(P): Smallest Program

Q: Program with no output, does not stop

Opt(Q)?

Page 6: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

6© Marcus Denker

Optimization

No Magic Bullet!

> There is no perfect optimizer> Example: optimize for simplicity

Opt(P): Smallest Program

Q: Program with no output, does not stop

Opt(Q)?

L1 goto L1

Page 7: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

7© Marcus Denker

Optimization

No Magic Bullet!

> There is no perfect optimizer> Example: optimize for simplicity

Opt(P): Smallest ProgramQ: Program with no output, does not stop

Opt(Q)?

L1 goto L1 Halting problem!

Page 8: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

8© Marcus Denker

Optimization

Another way to look at it...

> Rice (1953): For every compiler there is a modified compiler that generates shorter code.

> Proof: Assume there is a compiler U that generates the shortest optimized program Opt(P) for all P. — Assume P to be a program that does not stop and has no output— Opt(P) will be L1 goto L1— Halting problem. Thus: U does not exist.

> There will be always a better optimizer! — Job guarantee for compiler architects :-)

Page 9: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

9© Marcus Denker

Optimization

Optimization on many levels

> Optimizations both in the optimizer and back-end

Page 10: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

10© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 11: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

11© Marcus Denker

Optimization

Optimizations in the Backend

> Register Allocation> Instruction Selection> Peep-hole Optimization

Page 12: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

12© Marcus Denker

Optimization

Register Allocation

> Processor has only finite amount of registers— Can be very small (x86)

> Temporary variables— non-overlapping temporaries can share one register

> Passing arguments via registers

> Optimizing register allocation very important for good performance— Especially on x86

Page 13: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

13© Marcus Denker

Optimization

Instruction Selection

> For every expression, there are many ways to realize them for a processor

> Example: Multiplication*2 can be done by bit-shift

Instruction selection is a form of optimization

Page 14: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

14© Marcus Denker

Optimization

Peephole Optimization

> Simple local optimization> Look at code “through a hole”

— replace sequences by known shorter ones— table pre-computed

store R,a; load a,R

store R,a;

imul 2,R; ashl 2,R;

Important when using simple instruction selection!

Page 15: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

15© Marcus Denker

Optimization

Optimization on many levels

Major work of optimization done in a special phase

Focus of this lecture

Page 16: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

16© Marcus Denker

Optimization

Different levels of IR

> Different levels of IR for different optimizations

> Example: — Array access as direct memory manipulation— We generate many simple to optimize integer expressions

> We focus on high-level optimizations

Page 17: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

17© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 18: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

18© Marcus Denker

Optimization

Examples for Optimizations

> Constant Folding / Propagation> Copy Propagation> Algebraic Simplifications> Strength Reduction> Dead Code Elimination

— Structure Simplifications

> Loop Optimizations> Partial Redundancy Elimination> Code Inlining

Page 19: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

19© Marcus Denker

Optimization

Constant Folding

> Evaluate constant expressions at compile time> Only possible when side-effect freeness guaranteed

c:= 1 + 3 c:= 4

true not false

Caveat: Floats — implementation could be different between machines!

Page 20: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

20© Marcus Denker

Optimization

Constant Propagation

> Variables that have constant value, e.g. c := 3— Later uses of c can be replaced by the constant— If no change of c between!

b := 3c := 1 + bd := b + c

b := 3c := 1 + 3d := 3 + c

Analysis needed, as b can be assigned more than once!

Page 21: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

21© Marcus Denker

Optimization

Copy Propagation

> for a statement x := y> replace later uses of x with y, if x and y have not been

changed.

x := yc := 1 + xd := x + c

x := yc := 1 + yd := y + c

Analysis needed, as y and x can be assigned more than once!

Page 22: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

22© Marcus Denker

Optimization

Algebraic Simplifications

> Use algebraic properties to simplify expressions

-(-i) i

b or: true true

Important to simplify code for later optimizations

Page 23: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

23© Marcus Denker

Optimization

Strength Reduction

> Replace expensive operations with simpler ones> Example: Multiplications replaced by additions

y := x * 2 y := x + x

Peephole optimizations are often strength reductions

Page 24: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

24© Marcus Denker

Optimization

Dead Code

> Remove unnecessary code— e.g. variables assigned but never read

b := 3c := 1 + 3d := 3 + c

c := 1 + 3d := 3 + c

> Remove code never reached

if (false) {a := 5}

if (false) {}

Page 25: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

25© Marcus Denker

Optimization

Simplify Structure

> Similar to dead code: Simplify CFG Structure

> Optimizations will degenerate CFG

> Needs to be cleaned to simplify further optimization!

Page 26: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

26© Marcus Denker

Optimization

Delete Empty Basic Blocks

Page 27: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

27© Marcus Denker

Optimization

Fuse Basic Blocks

Page 28: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

28© Marcus Denker

Optimization

Common Subexpression Elimination (CSE)

Common Subexpression: - There is another occurrence of the expression whose evaluation always precedes this one - operands remain unchanged

Local (inside one basic block): When building IR

Global (complete flow-graph)

Page 29: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

29© Marcus Denker

Optimization

Example CSE

b := a + 2c := 4 * b b < c?

b := 1

d := a + 2

t1 := a + 2b := t1c := 4 * b b < c?

b := 1

d := t1

Page 30: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

30© Marcus Denker

Optimization

Loop Optimizations

> Optimizing code in loops is important— often executed, large payoff

> All optimizations help when applied to loop-bodies

> Some optimizations are loop specific

Page 31: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

31© Marcus Denker

Optimization

Loop Invariant Code Motion

> Move expressions that are constant over all iterations out of the loop

Page 32: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

32© Marcus Denker

Optimization

Induction Variable Optimizations

> Values of variables form an arithmetic progression

integer a(100)do i = 1, 100 a(i) = 202 - 2 * iendo

integer a(100)t1 := 202do i = 1, 100 t1 := t1 - 2 a(i) = t1endo

value assigned to a decreases by 2 uses Strength Reduction

Page 33: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

33© Marcus Denker

Optimization

Partial Redundancy Elimination (PRE)

> Combines multiple optimizations:— global common-subexpression elimination— loop-invariant code motion

> Partial Redundancy: computation done more than once on some path in the flow-graph

> PRE: insert and delete code to minimize redundancy.

Page 34: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

34© Marcus Denker

Optimization

Code Inlining

> All optimization up to know where local to one procedure

> Problem: procedures or functions are very short — Especially in good OO code!

> Solution: Copy code of small procedures into the caller— OO: Polymorphic calls. Which method is called?

Page 35: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

35© Marcus Denker

Optimization

Example: Inlining

a := power2(b) power2(x) { return x*x}

a := b * b

Page 36: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

36© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 37: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

37© Marcus Denker

Optimization

Repeat: SSA

> SSA: Static Single Assignment Form

> Definition: Every variable is only assigned once

Page 38: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

38© Marcus Denker

Optimization

Properties

> Definitions of variables (assignments) have a list of all uses

> Variable uses (reads) point to the one definition

> CFG of Basic Blocks

Page 39: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

39© Marcus Denker

Optimization

Examples: Optimization on SSA

> We take three simple ones:

— Constant Propagation

— Copy Propagation

— Simple Dead Code Elimination

Page 40: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

40© Marcus Denker

Optimization

Repeat: Constant Propagation

> Variables that have constant value, e.g. c := 3— Later uses of c can be replaced by the constant— If no change of c between!

b := 3c := 1 + bd := b + c

b := 3c := 1 + 3d := 3 + c

Analysis needed, as b can be assigned more than once!

Page 41: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

41© Marcus Denker

Optimization

Constant Propagation and SSA

> Variables are assigned once> We know that we can replace all uses by the constant!

b1 := 3c1 := 1 + b1d1 := b1 + c1

b1 := 3c1 := 1 + 3d1 := 3 + c

Page 42: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

42© Marcus Denker

Optimization

Repeat: Copy Propagation

> for a statement x := y> replace later uses of x with y, if x and y have not been

changed.

x := yc := 1 + yd := y + c

x := yc := 1 + yd := y + c

Analysis needed, as y and x can be assigned more than once!

Page 43: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

43© Marcus Denker

Optimization

Copy Propagation And SSA

> for a statement x1 := y1> replace later uses of x1 with y1

x1 := y1c1 := 1 + x1d1 := x1 + c1

x1 := y1c1 := 1 + y1d1 := y1 + c1

Page 44: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

44© Marcus Denker

Optimization

Dead Code Elimination and SSA

> Variable is live if the list of uses is not empty.

> Dead definitions can be deleted— (If there is no side-effect)

Page 45: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

45© Marcus Denker

Optimization

Roadmap

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 46: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

46© Marcus Denker

Optimization

Advanced Optimizations

> Optimizing for using multiple processors— Auto parallelization— Very active area of research (again)

> Inter-procedural optimizations— Global view, not just one procedure

> Profile-guided optimization> Vectorization> Dynamic optimization

— Used in virtual machines (both hardware and language VM)

Page 47: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

47© Marcus Denker

Optimization

Iterative Process

> There is no general “right” order of optimizations> One optimization generates new opportunities for a

preceding one.> Optimization is an iterative process

Compile Time vs. Code Quality

Page 48: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

48© Marcus Denker

Optimization

What we have seen...

> Introduction> Optimizations in the Back-end> The Optimizer> SSA Optimizations> Advanced Optimizations

Page 49: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

49© Marcus Denker

Optimization

Literature

> Muchnick: Advanced Compiler Design and Implementation— >600 pages on

optimizations

> Appel: Modern Compiler Implementation in Java— The basics

Page 50: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

50© Marcus Denker

Optimization

What you should know!

Why do we optimize programs? Is there an optimal optimizer? Where in a compiler does optimization happen? Can you explain constant propagation?

Page 51: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

51© Marcus Denker

Optimization

Can you answer these questions?

What makes SSA suitable for optimization? When is a definition of a variable live in SSA Form? Why don’t we just optimize on the AST? Why do we need to optimize IR on different levels? In which order do we run the different optimizations?

Page 52: 9. Optimization Marcus Denker. 2 © Marcus Denker Optimization Roadmap  Introduction  Optimizations in the Back-end  The Optimizer  SSA Optimizations.

52© Marcus Denker

Optimization

License

> http://creativecommons.org/licenses/by-sa/2.5/

Attribution-ShareAlike 2.5You are free:• to copy, distribute, display, and perform the work• to make derivative works• to make commercial use of the work

Under the following conditions:

Attribution. You must attribute the work in the manner specified by the author or licensor.

Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.

• For any reuse or distribution, you must make clear to others the license terms of this work.• Any of these conditions can be waived if you get permission from the copyright holder.

Your fair use and other rights are in no way affected by the above.