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

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

of 30

  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    215
  • download

    2

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 out[0]out[1] merge out in[0]in[1]
  • 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 =