Advanced compilers cmpsci 710 spring 2003 data flow analysis
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

Advanced Compilers CMPSCI 710 Spring 2003 Data flow analysis PowerPoint PPT Presentation


  • 51 Views
  • Uploaded on
  • Presentation posted in: General

Advanced Compilers CMPSCI 710 Spring 2003 Data flow analysis. Emery Berger University of Massachusetts, Amherst. Data flow analysis. Framework for proving facts about program at each point Point: entry or exit from block (or CFG edge) Lots of “small facts”

Download Presentation

Advanced Compilers CMPSCI 710 Spring 2003 Data flow analysis

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Advanced compilers cmpsci 710 spring 2003 data flow analysis

Advanced CompilersCMPSCI 710Spring 2003Data flow analysis

Emery Berger

University of Massachusetts, Amherst


Data flow analysis

Data flow analysis

  • Framework for proving facts about program at each point

    • Point: entry or exit from block (or CFG edge)

    • Lots of “small facts”

    • Little or no interaction between facts

  • Based on all paths through program

    • Includes infeasible paths


Infeasible paths example

Infeasible Paths Example

a = 1;

if (a == 0) {

a = 1;

}

if (a == 0) {

a = 2;

}

  • Infeasible paths never actually taken by program, regardless of input

  • Undecidable to distinguish from feasible


Data flow based optimizations

Data Flow-Based Optimizations

  • Dead variable elimination

    • a = 3; print a; x = 12; halt) a = 3; print a; halt

  • Copy propagation

    • x = y; … use of x ) …use of y

  • Partial redundancy

    • a = 3*c + d; b = 3*c ) b = 3*c; a=b+d

  • Constant propagation

    • a = 3; b = 2; c = a+b ) a = 3; b = 2; c = 5


Data flow analysis1

Data Flow Analysis

  • Define lattice to represent facts

  • Attach meaning to lattice values

  • Associate transfer function to each node

    • (f:L!L)

  • Initialize values at each program point

  • Iterate through program until fixed point


Lattice related definitions

Lattice-Related Definitions

  • Meet function: u

    • commutative and associative

    • x u x = x

  • Unique bottom? and top > element

    • x u? = ?

    • x u> = x

  • Ordering: x v y iff x u y = x

  • Function f is monotone if 8 x, y:

    • x v y implies f(x) v f(y)


Bit vector lattice

Bit-Vector Lattice

  • Meet = bit-vector logical and

>

111

111 u 111 =

011 u 111 =

000 u 101 =

100 u 011 =

011 u 110 =

001 u 110 =

011

101

110

001

010

100

?

000


Constant propagation lattice

Constant Propagation Lattice

>

… -2 -1 0 1 2 …

?

  • Meet rules:

    • a u> = a

    • a u? = ?

    • constant u constant = constant (if equal)

    • constant u constant = ?(if not equal)

  • Define obvious transfer functions for arithmetic


Iterative data flow analysis

Iterative Data Flow Analysis

  • Initialize non-entry nodes to >

    • Identity element for meet function

  • If node function is monotone:

    • Each re-evaluation of node moves down the lattice, if it moves at all

  • If height of lattice is finite, must terminate


Constant propagation example i

Constant Propagation Example I

  • Two choices of “point”:

    • Compute at edges

      • maximal information

    • Compute on entry

      • must “meet” data from all incident edges

      • loses information

x = true;

if (x)

then

else

a = 3;

b = 2;

a = 2;

b = 3;

c = a+b;


Constant propagation example ii

Constant Propagation Example II

  • Vector for (x,a,b,c)

  • Init values to >

  • Iterate forwards

x = true;

if (x)

(true,>,>,>)

(>,>,>,>)

(>,>,>,>)

(true,>,>,>)

then

else

a = 3;

b = 2;

a = 2;

b = 3;

(>,>,>,>)

(>,>,>,>)

(true,3,2,>)

(true,2,3,>)

c = a+b;

(>,>,>,>)

(true,?,?,5)


Accuracy mop vs mfp

Accuracy: MOP vs. MFP

  • We want “meet-over-all-paths” solution, but paths can be infinite if there are loops

  • Best we can do in general:

    • Maximum Fixed Point solution =largest solution, ordered by v, that is fixed point of iterative computation

    • Provides “most information”

    • More conservative than MOP


Distributive problems

Distributive Problems

  • f is distributiveiff

    • f(x u y) = f(x) u f(y)

    • Doing meet early doesn’t reduce precision

  • Non-distributive problems:

    • constant propagation

  • Distributive problems:

    • MFP = MOP

    • reaching definitions, live variables


Reaching definitions

Reaching Definitions

  • Definition: each assignment to variable

  • defs(v) represents set of all definitions of v

  • Assume all variables scalars

    • No pointers

    • No arrays

  • A definition reaches given point if 9path to that point such that variable may have value from definition


Data flow functions

Data Flow Functions

  • Kill(S): facts not true after S just because they were true before

    • example: redefinition of variable (assignment)

  • Gen(S): facts true after S regardless of facts true before S

    • example: assigned values not killed in S

  • In(S): dataflow info on entry to S

    • In(S) = [p 2PRED(S)Out(p)

    • example: definitions that reach S

  • Out(S): dataflow info on exit from S

    • Out(S) = Gen(S) [ (In(S) – Kill(S))

    • example: reaching defs after S


For reaching definitions

For Reaching Definitions

  • For reaching defs, u= [

  • Gen(d: v = exp) = {d}

    • “on exit from block d, generate new definition”

  • Kill(d: v = exp) = defs(v)

    • “on exit from block d, definitions of v are killed”

  • Computing In(S)

    • If S has one predecessor P, In(S) = Out(P)

    • Otherwise: In(S) = uP inPRED(S)Out(P)

    • Out(Entry) = {}


Reaching definitions example

Reaching Definitions Example

Entry

parameter a;

parameter b;

x = a*b;

y = a*b;

while (y > a+b) {

a = a+1;

x = a+b;

}

1: parameter a;

2: parameter b;

3: x=a*b;

4: y=a*b;

if y > a+b

defs(x) =

defs(y) =

defs(a) =

defs(b) =

5: a = a+1;

Exit

6: x = a+b;


Analysis direction

Analysis Direction

  • Forwards analysis:

    • start with Entry, compute towards Exit

  • Backwards analysis:

    • start with Exit, compute towards Entry

    • In(S) = Gen(S) [ (Out(S) – Kill(S))

    • Out(S) = uF in SUCC(S) In(F)

  • Backwards problems:

    • Live variables: which variables might be read before overwritten or discarded


Next time

Next Time

  • More data flow analysis


  • Login