Top Banner
Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions
30

Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Dec 21, 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: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Recap

• Let’s do a recap of what we’ve seen so far

• Started with worklist algorithm for reaching definitions

Page 2: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Worklist algorithm for reaching defnslet m: map from edge to computed value at edgelet worklist: work list of nodes

for each edge e in CFG do m(e) := ;

for each node n do worklist.add(n)

while (worklist.empty.not) do let n := worklist.remove_any; let info_in := m(n.incoming_edges); let info_out := F(n, info_in); for i := 0 .. info_out.length do let new_info := m(n.outgoing_edges[i]) [ info_out[i]; if (m(n.outgoing_edges[i]) new_info]) m(n.outgoing_edges[i]) := new_info; worklist.add(n.outgoing_edges[i].dst);

Page 3: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Generalized algorithm using latticeslet m: map from edge to computed value at edgelet worklist: work list of nodes

for each edge e in CFG do m(e) := ?

for each node n do worklist.add(n)

while (worklist.empty.not) do let n := worklist.remove_any; let info_in := m(n.incoming_edges); let info_out := F(n, info_in); for i := 0 .. info_out.length do let new_info := m(n.outgoing_edges[i]) t info_out[i]; if (m(n.outgoing_edges[i]) new_info]) m(n.outgoing_edges[i]) := new_info; worklist.add(n.outgoing_edges[i].dst);

Page 4: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Next step: removed outer join

• Wanted to remove the outer join, while still providing termination guarantee

• To do this, we re-expressed our algorithm more formally

• We first defined a “global” flow function F, and then expressed our algorithm as a fixed point computation

Page 5: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Fixedpoint view

• We want to find a fixed point of F, that is to say a map m such that m = F(m)

• Define ?, which is ? lifted to be a map:

? = e. ?

• Compute F(?), then F(F(?)), then F(F(F(?))), ... until the result doesn’t change anymore

Page 6: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Guarantees

• If F is monotonic and height of lattice is finite: iterative algorithm terminates

• If F is monotonic, the fixed point we find is the least fixed point.

• Any questions so far?

Page 7: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

What about if we start at top?

• What if we start with >: F(>), F(F(>)), F(F(F(>)))

• We get the greatest fixed point

• Why do we prefer the least fixed point?– More precise

Page 8: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Graphically

x

y

10

10

Page 9: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Graphically

x

y

10

10

Page 10: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Graphically

x

y

10

10

Page 11: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Graphically, another way

Page 12: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

• Set D =

x := N

in

out

Fx := n(in) =

x := y op z

in

out

Fx := y op z(in) =

Page 13: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

• Set D = 2 { x ! N | x 2 Vars Æ N 2 Z }

x := N

in

outFx := n(in) = in – { x ! * } [ { x ! N }

x := y op z

in

outFx := y op z(in) = in – { x ! * } [ { x ! N | ( y ! N1 ) 2 in Æ ( z ! N2 ) 2 in Æ N = N1 op N2 }

Page 14: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

*x := y

in

out

F*x := y(in) =

x := *y

in

out

Fx := *y(in) =

Page 15: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

*x := y

in

out

F*x := y(in) = in – { z ! * | z 2 may-point(x) } [ { z ! N | z 2 must-point-to(x) Æ y ! N 2 in } [ { z ! N | (y ! N) 2 in Æ (z ! N) 2 in }

x := *y

in

out

Fx := *y(in) = in – { x ! * } [ { x ! N | 8 z 2 may-point-to(x) . (z ! N) 2 in }

Page 16: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

x := f(...)

in

outFx := f(...)(in) =

*x := *y + *z

in

out

F*x := *y + *z(in) =

Page 17: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

x := f(...)

in

outFx := f(...)(in) = ;

*x := *y + *z

in

out

F*x := *y + *z(in) = Fa := *y;b := *z;c := a + b; *x := c(in)

Page 18: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Another example: constant prop

s: if (...)

in

out[0] out[1]

merge

out

in[0] in[1]

Page 19: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Lattice

• (D, v, ?, >, t, u) =

Page 20: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Lattice

• (D, v, ?, >, t, u) = (2 { x ! N | x 2 Vars Æ N 2 Z } , ¶, D, ;, Å, [)

Page 21: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Example

x := 5

v := 2

x := x + 1

w := v + 1

w := 3

y := x * 2

z := y + 5

w := w * v

Page 22: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Back to lattice

• (D, v, ?, >, t, u) = (2 { x ! N | x 2 Vars Æ N 2 Z } , ¶, D, ;, Å, [)

• What’s the problem with this lattice?

Page 23: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Back to lattice

• (D, v, ?, >, t, u) = (2 { x ! N | x 2 Vars Æ N 2 Z } , ¶, D, ;, Å, [)

• What’s the problem with this lattice?

• Lattice is infinitely high, which means we can’t guarantee termination

Page 24: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Better lattice

• Suppose we only had one variable

Page 25: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Better lattice

• Suppose we only had one variable

• D = {?, > } [ Z

• 8 i 2 Z . ? v i Æ i v >

• height = 3

Page 26: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

For all variables

• Two possibilities

• Option 1: Tuple of lattices

• Given lattices (D1, v1, ?1, >1, t1, u1) ... (Dn, vn, ?n, >n, tn, un) create:

tuple lattice Dn =

Page 27: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

For all variables

• Two possibilities

• Option 1: Tuple of lattices

• Given lattices (D1, v1, ?1, >1, t1, u1) ... (Dn, vn, ?n, >n, tn, un) create:

tuple lattice Dn = ((D1 £ ... £ Dn), v, ?, >, t, u) where

? = (?1, ..., ?n)

> = (>1, ..., >n)

(a1, ..., an) t (b1, ..., bn) = (a1 t1 b1, ..., an tn bn)

(a1, ..., an) u (b1, ..., bn) = (a1 u1 b1, ..., an un bn)

height = height(D1) + ... + height(Dn)

Page 28: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

For all variables

• Option 2: Map from variables to single lattice

• Given lattice (D, v, ?, >, t, u) and a set V, create:

map lattice V ! D = (V ! D, v, ?, >, t, u)

Page 29: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Back to example

x := y op z

in

out

Fx := y op z(in) =

Page 30: Recap Let’s do a recap of what we’ve seen so far Started with worklist algorithm for reaching definitions.

Back to example

x := y op z

in

out

Fx := y op z(in) = in [ x ! in(y) op in(z) ]

where a op b =