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

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

    21-Dec-2015
  • Category

    Documents

  • view

    218
  • download

    2

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

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 =