• date post

21-Dec-2015
• Category

## Documents

• view

215

2

TAGS:

Embed Size (px)

### Transcript of Recap Letâ€™s do a recap of what weâ€™ve seen so far Started with...

• Slide 1
• Recap Lets do a recap of what weve seen so far Started with worklist algorithm for reaching definitions
• Slide 2
• Worklist algorithm for reaching defns let m: map from edge to computed value at edge let 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);
• Slide 3
• Generalized algorithm using lattices let m: map from edge to computed value at edge let 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);
• Slide 4
• 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
• Slide 5
• 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 doesnt change anymore
• Slide 6
• 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?
• Slide 7
• 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
• Slide 8
• Graphically x y 10
• Slide 9
• Graphically x y 10
• Slide 10
• Graphically x y 10
• Slide 11
• Graphically, another way
• Slide 12
• Another example: constant prop Set D = x := N in out F x := n (in) = x := y op z in out F x := y op z (in) =
• Slide 13
• Another example: constant prop Set D = 2 { x ! N | x 2 Vars N 2 Z } x := N in out F x := n (in) = in { x ! * } [ { x ! N } x := y op z in out F x := y op z (in) = in { x ! * } [ { x ! N | ( y ! N 1 ) 2 in ( z ! N 2 ) 2 in N = N 1 op N 2 }
• Slide 14
• Another example: constant prop *x := y in out F *x := y (in) = x := *y in out F x := *y (in) =
• Slide 15
• 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 F x := *y (in) = in { x ! * } [ { x ! N | 8 z 2 may-point-to(x). (z ! N) 2 in }
• Slide 16
• Another example: constant prop x := f(...) in out F x := f(...) (in) = *x := *y + *z in out F *x := *y + *z (in) =
• Slide 17
• Another example: constant prop x := f(...) in out F x := f(...) (in) = ; *x := *y + *z in out F *x := *y + *z (in) = F a := *y;b := *z;c := a + b; *x := c (in)
• Slide 18
• Another example: constant prop s: if (...) in outout merge out inin
• Slide 19
• Lattice (D, v, ?, >, t, u ) =
• Slide 20
• Lattice (D, v, ?, >, t, u ) = (2 { x ! N | x 2 Vars N 2 Z }, , D, ;, , [ )
• Slide 21
• Example x := 5 v := 2 x := x + 1 w := v + 1 w := 3 y := x * 2 z := y + 5 w := w * v
• Slide 22
• Back to lattice (D, v, ?, >, t, u ) = (2 { x ! N | x 2 Vars N 2 Z }, , D, ;, , [ ) Whats the problem with this lattice?
• Slide 23
• Back to lattice (D, v, ?, >, t, u ) = (2 { x ! N | x 2 Vars N 2 Z }, , D, ;, , [ ) Whats the problem with this lattice? Lattice is infinitely high, which means we cant guarantee termination
• Slide 24
• Better lattice Suppose we only had one variable
• Slide 25
• Better lattice Suppose we only had one variable D = { ?, > } [ Z 8 i 2 Z. ? v i i v > height = 3
• Slide 26
• For all variables Two possibilities Option 1: Tuple of lattices Given lattices (D 1, v 1, ? 1, > 1, t 1, u 1 )... (D n, v n, ? n, > n, t n, u n ) create: tuple lattice D n =
• Slide 27
• For all variables Two possibilities Option 1: Tuple of lattices Given lattices (D 1, v 1, ? 1, > 1, t 1, u 1 )... (D n, v n, ? n, > n, t n, u n ) create: tuple lattice D n = ((D 1 ... D n ), v, ?, >, t, u ) where ? = ( ? 1,..., ? n ) > = ( > 1,..., > n ) (a 1,..., a n ) t (b 1,..., b n ) = (a 1 t 1 b 1,..., a n t n b n ) (a 1,..., a n ) u (b 1,..., b n ) = (a 1 u 1 b 1,..., a n u n b n ) height = height(D 1 ) +... + height(D n )
• Slide 28
• 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 )
• Slide 29
• Back to example x := y op z in out F x := y op z (in) =
• Slide 30
• Back to example x := y op z in out F x := y op z (in) = in [ x ! in(y) op in(z) ] where a op b =