+ All Categories
Home > Documents > Recap from last time Saw several examples of optimizations –Constant folding –Constant Prop...

Recap from last time Saw several examples of optimizations –Constant folding –Constant Prop...

Date post: 19-Dec-2015
Category:
View: 216 times
Download: 0 times
Share this document with a friend
Popular Tags:
26
Recap from last time Saw several examples of optimizations Constant folding Constant Prop Copy Prop Common Sub-expression Elim Partial Redundancy Elim Saw that a naïve CSE can undo Copy Prop
Transcript

Recap from last time

• Saw several examples of optimizations– Constant folding– Constant Prop– Copy Prop– Common Sub-expression Elim– Partial Redundancy Elim

• Saw that a naïve CSE can undo Copy Prop

Another example

x := y**z

...

x := ...

Another example

• Often used as a clean-up pass

x := y**z

...

x := ...

x := yz := z + x

x := yz := z + y

Copy prop DAEx := yz := z + y

Another example

if (false) {

...

}

Another example

if (false) {

...

}

Another example

• In Java:

a = new int [10];for (index = 0; index < 10; index ++) { a[index] = 100;}

Another example

• In “lowered” Java:

a = new int [10];for (index = 0; index < 10; index ++) { if (index < 0 || index >= a.length()) { throw OutOfBoundsException; } a[index] = 0;}

Another example

• In “lowered” Java:

a = new int [10];for (index = 0; index < 10; index ++) { if (index < 0 || index >= a.length()) { throw OutOfBoundsException; } a[index] = 0;}

Another example

p := &x;*p := 5y := x + 1;

Another example

p := &x;*p := 5y := x + 1;

x := 5;*p := 3y := x + 1; ???

Another example

for j := 1 to N for i := 1 to M a[i] := a[i] + b[j]

Another example

for j := 1 to N for i := 1 to M a[i] := a[i] + b[j]

Another example

area(h,w) { return h * w }

h := ...;w := 4;a := area(h,w)

Another example

area(h,w) { return h * w }

h := ...;w := 4;a := area(h,w)

Optimization themes

• Don’t compute if you don’t have to– unused assignment elimination

• Compute at compile-time if possible– constant folding, loop unrolling, inlining

• Compute it as few times as possible– CSE, PRE, PDE, loop invariant code motion

• Compute it as cheaply as possible– strength reduction

• Enable other optimizations– constant and copy prop, pointer analysis

• Compute it with as little code space as possible– unreachable code elimination

Dataflow analysis

Dataflow analysis: what is it?

• A common framework for expressing algorithms that compute information about a program

• Why is such a framework useful?

Dataflow analysis: what is it?

• A common framework for expressing algorithms that compute information about a program

• Why is such a framework useful?

• Provides a common language, which makes it easier to:– communicate your analysis to others– compare analyses– adapt techniques from one analysis to another– reuse implementations (eg: dataflow analysis

frameworks)

Control Flow Graphs

• For now, we will use a Control Flow Graph representation of programs– each statement becomes a node– edges between nodes represent control flow

• Later we will see other program representations– variations on the CFG (eg CFG with basic blocks)– other graph based representations

x := ...

x := ...y := ...y := ...p := ...if (...) { ... x ... x := ... ... y ...}else { ... x ... x := ... *p := ...}... x ...... y ...y := ...

y := ...

y := ...

p := ...

... x ...

x := ...

... y ...

... x ...

x := ...

*p := ...

... x ...

... x ...

y := ...

if (...)

Example CFG

An example DFA: reaching definitions

• For each use of a variable, determine what assignments could have set the value being read from the variable

• Information useful for:– performing constant and copy prop– detecting references to undefined variables– presenting “def/use chains” to the programmer– building other representations, like the DFG

• Let’s try this out on an example

1: x := ...

2: y := ...

3: y := ...

4: p := ...

... x ...

5: x := ...

... y ...

... x ...

6: x := ...

7: *p := ...

... x ...

... y ...

8: y := ...

x := ...

y := ...

y := ...

p := ...

... x ...

x := ...

... y ...

... x ...

x := ...

*p := ...

... x ...

... x ...

y := ...

if (...)

Visual sugar

1: x := ...

2: y := ...

3: y := ...

4: p := ...

... x ...

5: x := ...

... y ...

... x ...

6: x := ...

7: *p := ...

... x ...

... y ...

8: y := ...

1: x := ...

2: y := ...

3: y := ...

4: p := ...

... x ...

5: x := ...

... y ...

... x ...

6: x := ...

7: *p := ...

... x ...

... y ...

8: y := ...

Safety

• When is computed info safe?

• Recall intended use of this info:– performing constant and copy prop– detecting references to undefined variables– presenting “def/use chains” to the programmer– building other representations, like the DFG

• Safety:– can have more bindings than the “true” answer, but

can’t miss any

Reaching definitions generalized

• DFA framework geared to computing information at each program point (edge) in the CFG– So generalize problem by stating what should be

computed at each program point

• For each program point in the CFG, compute the set of definitions (statements) that may reach that point

• Notion of safety remains the same


Recommended