EDA045F: Program Analysis LECTURE 2: DATAFLOW BONUS EXAMPLE Christoph Reichenbach
Example: Reaching Definitions x = 0 x = 0 y = 0 y = 0 z = 1 z = 1 while ( x < 5) { x = x + 1 x = x + 1 i f ( x >= 2) { y = 7 } e l s e { y = 7 z = y z = y } } return x, y, z r e t u r n x , y , z 2 / 1
Example: Reaching Definitions x = 0 x = 0 y = 0 y = 0 z = 1 z = 1 while ( x < 5) { x = x + 1 x = x + 1 i f ( x >= 2) { y = 7 } e l s e { y = 7 z = y z = y } } return x, y, z r e t u r n x , y , z Reaching Definitions: What values are possible? 2 / 1
Example: Reaching Definitions Designing our abstract domain: ⊤ = ∅ · · · {− 3 } {− 2 } {− 1 } { 0 } { 1 } { 2 } { 3 } · · · {− 3 , 0 } { 0 , 3 } {− 3 , 0 , 1 } ⊥ = Z ◮ Capture sets of up to 3 possible numbers ◮ ⊤ : ∅ (no possible numbers seen yet) ◮ ⊥ : More than 3 possible numbers ◮ Infinitely many elements, but finite height! 3 / 1
Example: Control-Flow Graph b 0 x = 0 trans b inputs b x y z y = 0 z = 1 b 0 ∅ 0 0 1 b 1 { b 0 , b 2 , b 3 } x + 1 y z { b 1 } b 2 x 7 z b 1 x = x + 1 { b 1 } b 3 x y y { b 0 , b 2 , b 3 } b 4 x y z b 2 b 3 y = 7 z = y � merge b = s b 4 s ∈ inputs b return x, y, z 4 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊤ ⊤ ⊤ trans: in: ⊤ ⊤ ⊤ x+1 ↓ ↓ out: trans: ⊤ ⊤ ⊤ out: b 2 b 3 x y z x y z ⊤ ⊤ ⊤ ⊤ ⊤ ⊤ in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊤ ⊤ ⊤ ⊤ ⊤ ⊤ out: out: b 4 x y z ⊤ ⊤ ⊤ in: Initialise ↓ ↓ ↓ trans: ⊤ ⊤ ⊤ out: 5 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊤ ⊤ ⊤ trans: in: 0 0 1 x+1 ↓ ↓ out: trans: ⊤ ⊤ ⊤ out: b 2 b 3 x y z x y z ⊤ ⊤ ⊤ ⊤ ⊤ ⊤ in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊤ ⊤ ⊤ ⊤ ⊤ 7 out: out: b 4 x y z ⊤ ⊤ ⊤ in: Transfer (1st) ↓ ↓ ↓ trans: ⊤ ⊤ ⊤ out: 6 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 0 , 7 1 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: ⊤ ⊤ ⊤ out: b 2 b 3 x y z x y z ⊤ ⊤ ⊤ ⊤ ⊤ ⊤ in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊤ ⊤ ⊤ ⊤ ⊤ 7 out: out: b 4 x y z 0 0 , 7 1 in: Join (1st) ↓ ↓ ↓ trans: ⊤ ⊤ ⊤ out: 7 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 0 , 7 1 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 0 , 7 1 out: b 2 b 3 x y z x y z ⊤ ⊤ ⊤ ⊤ ⊤ ⊤ in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊤ ⊤ ⊤ ⊤ ⊤ 7 out: out: b 4 x y z 0 0 , 7 1 in: Transfer (2nd) ↓ ↓ ↓ trans: 0 0 , 7 1 out: 8 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 0 , 7 1 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 0 , 7 1 out: b 2 b 3 x y z x y z 1 0 , 7 1 1 0 , 7 1 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊤ ⊤ ⊤ ⊤ ⊤ 7 out: out: b 4 x y z 0 0 , 7 1 in: Join (2nd) ↓ ↓ ↓ trans: 0 0 , 7 1 out: 9 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 0 , 7 1 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 0 , 7 1 out: b 2 b 3 x y z x y z 1 0 , 7 1 1 0 , 7 1 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 7 1 1 0 , 7 0 , 7 out: out: b 4 x y z 0 0 , 7 1 in: Transfer (3rd) ↓ ↓ ↓ trans: 0 0 , 7 1 out: 10 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 0 , 7 1 out: b 2 b 3 x y z x y z 1 0 , 7 1 1 0 , 7 1 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 7 1 1 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 0 , 7 0 , 1 , 7 in: Join (3rd) ↓ ↓ ↓ trans: 0 0 , 7 1 out: 11 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 0 , 7 1 1 0 , 7 1 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 7 1 1 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 0 , 7 0 , 1 , 7 in: Transfer (4th) ↓ ↓ ↓ trans: 0 , 1 0 , 7 0 , 1 , 7 out: 12 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 0 , 7 0 , 1 , 7 1 , 2 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 7 1 1 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 0 , 7 0 , 1 , 7 in: Join (4th) ↓ ↓ ↓ trans: 0 , 1 0 , 7 0 , 1 , 7 out: 13 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 0 , 7 0 , 1 , 7 1 , 2 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 7 0 , 1 , 7 1 , 2 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 0 , 7 0 , 1 , 7 in: Transfer (5th) ↓ ↓ ↓ trans: 0 , 1 0 , 7 0 , 1 , 7 out: 14 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 , 2 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 0 , 7 0 , 1 , 7 1 , 2 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 7 0 , 1 , 7 1 , 2 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 , 2 0 , 7 0 , 1 , 7 in: Join (5th) ↓ ↓ ↓ trans: 0 , 1 0 , 7 0 , 1 , 7 out: 15 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 , 2 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 , 3 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 0 , 7 0 , 1 , 7 1 , 2 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 7 0 , 1 , 7 1 , 2 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 , 2 0 , 7 0 , 1 , 7 in: Transfer (6th) ↓ ↓ ↓ trans: 0 , 1 , 2 0 , 7 0 , 1 , 7 out: 16 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 , 2 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 , 3 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 , 3 0 , 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 7 0 , 1 , 7 1 , 2 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 , 2 0 , 7 0 , 1 , 7 in: Join (6th) ↓ ↓ ↓ trans: 0 , 1 , 2 0 , 7 0 , 1 , 7 out: 17 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 0 , 1 , 2 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 , 3 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 , 3 0 , 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 , 3 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 7 out: out: b 4 x y z 0 , 1 , 2 0 , 7 0 , 1 , 7 in: Transfer (7th) ↓ ↓ ↓ trans: 0 , 1 , 2 0 , 7 0 , 1 , 7 out: 18 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊥ 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: 1 , 2 , 3 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 , 3 0 , 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 , 3 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 7 out: out: b 4 x y z ⊥ 0 , 7 0 , 1 , 7 in: Join (7th) ↓ ↓ ↓ trans: 0 , 1 , 2 0 , 7 0 , 1 , 7 out: 19 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊥ 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: ⊥ 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z 1 , 2 , 3 0 , 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 , 3 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 7 out: out: b 4 x y z ⊥ 0 , 7 0 , 1 , 7 in: Transfer (8th) ↓ ↓ ↓ trans: ⊥ 0 , 7 0 , 1 , 7 out: 20 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊥ 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: ⊥ 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z ⊥ ⊥ 0 , 7 0 , 1 , 7 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: 1 , 2 , 3 7 0 , 1 , 7 1 , 2 , 3 0 , 7 0 , 7 out: out: b 4 x y z ⊥ 0 , 7 0 , 1 , 7 in: Join (8th) ↓ ↓ ↓ trans: ⊥ 0 , 7 0 , 1 , 7 out: 21 / 1
Example: Computing the Fixpoint b 0 x y z b 1 ⊤ ⊤ ⊤ x y z in: 0 0 1 ⊥ 0 , 7 0 , 1 , 7 trans: in: 0 0 1 x+1 ↓ ↓ out: trans: ⊥ 0 , 7 0 , 1 , 7 out: b 2 b 3 x y z x y z ⊥ ⊥ 0 , 7 0 , 1 , 7 0 , 7 0 , 1 , 7 in: in: ↓ ↓ ↓ ↓ 7 y trans: trans: ⊥ ⊥ 7 0 , 1 , 7 0 , 7 0 , 7 out: out: b 4 x y z ⊥ 0 , 7 0 , 1 , 7 in: Transfer (9th) ↓ ↓ ↓ trans: ⊥ 0 , 7 0 , 1 , 7 out: 22 / 1
Recommend
More recommend