Advanced compilers cmpsci 710 spring 2003 data flow analysis
Download
1 / 19

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


  • 63 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”

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha

Download Presentationdownload

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


ad
  • Login