Download - Lecture 6 ECS 240 - cs.ucdavis.edu
![Page 1: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/1.jpg)
ECS 240 Data Flow Analysis 1
Data Flow Analysis
Lecture 6 ECS 240
![Page 2: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/2.jpg)
ECS 240 Data Flow Analysis 2
The Plan
• Introduce a few example analyses
• Generalize to see the underlying theory
• Discuss some more advanced issues
![Page 3: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/3.jpg)
ECS 240 Data Flow Analysis 3
Control-Flow Graphs
x := a + b; y := a * b; while y > a + b {
a := a + 1; x := a + b; }
if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b
Control-flow graphs are state-transition systems.
![Page 4: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/4.jpg)
ECS 240 Data Flow Analysis 4
Notation
s is a statement succ(s) = { successor statements of s } pred(s) = { predecessor statements of s } write(s) = { variables written by s } read(s) = { variables read by s } Kill(s) = facts killed by statement s Gen(s) = facts generated by statement s
![Page 5: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/5.jpg)
ECS 240 Data Flow Analysis 5
Liveness Analysis
• For each program point p, which of the variables defined at that point are used on some execution path?
if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b
• Optimization: If a variable is not live, no need to keep it in a register.
x is not live here
![Page 6: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/6.jpg)
ECS 240 Data Flow Analysis 6
Example
if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b x,a,b
x,y,a,b
y,a,b
y,a,b x,y,a,b
a,b
x
![Page 7: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/7.jpg)
ECS 240 Data Flow Analysis 7
Dataflow Equations
( )
( ) ( ( ) ( )) ( )
if ( )( ) ( ) otherwise
outin
outin
s succ s
L s L s write s read s
succ sL s L s
!∈
= − ∪
∅ = ∅& '( (
= ) *!( (+ ,
![Page 8: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/8.jpg)
ECS 240 Data Flow Analysis 8
Available Expressions
• For each program point p, which expressions must have already been computed, and not later modified, on all paths to p. if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b
• Optimization: Where available, expressions need not be recomputed.
a+b is available here
![Page 9: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/9.jpg)
ECS 240 Data Flow Analysis 9
Example
if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b a+b
a+b, a*b
a+b, a*b, y > a+b
a+b
a+b
a+b, y > a+b
![Page 10: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/10.jpg)
ECS 240 Data Flow Analysis 10
Dataflow Equations
{ }{ }
( )
if ( )( ) ( ) otherwise
( ) ( ( ) | ( ) ( ) )
|if ( ) ( )
in outs pred s
out in
pred sA s A s
A s A s a S write s V a
s write s read s
!∈
∅ = ∅$%
= & !%'
= − ∈ ∩ ≠ ∅
∪ ∩ = ∅
![Page 11: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/11.jpg)
ECS 240 Data Flow Analysis 11
Available Expressions: Schematic
( )
1 2
( ) ( )
( ) ( )
outins pred s
out in
A s A s
A s A s C C
!∈
!=
= − ∪
Must analysis: property holds on all paths Forwards analysis: from inputs to outputs
Transfer function:
![Page 12: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/12.jpg)
ECS 240 Data Flow Analysis 12
Live Variables Again
( )
( ) ( ( ) ( )) ( )
if ( )( ) ( ) otherwise
outin
outin
s succ s
L s L s write s read s
succ sL s L s
!∈
= − ∪
∅ = ∅& '( (
= ) *!( (+ ,
![Page 13: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/13.jpg)
ECS 240 Data Flow Analysis 13
Live Variables: Schematic
1 2
( )
( ) ( )
( ) ( )
outin
out ins succ s
L s L s C C
L s L s!∈
= − ∪
!= May analysis: property holds on some path Backwards analysis: from outputs to inputs
Transfer function:
![Page 14: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/14.jpg)
ECS 240 Data Flow Analysis 14
Very Busy Expressions
• An expression e is very busy at program point p if every path from p must evaluate e before any variable in e is redefined
• Optimization: hoisting expressions
• A must-analysis • A backwards analysis
![Page 15: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/15.jpg)
ECS 240 Data Flow Analysis 15
Reaching Definitions
• For a program point p, which assignments made on paths reaching p have not been overwritten
• Connects definitions with uses (use-def chains)
• A may-anlaysis • A forwards analysis
![Page 16: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/16.jpg)
ECS 240 Data Flow Analysis 16
One Cut at the Dataflow Design Space
May Must
Forwards
Reaching definitions
Available expressions
Backwards
Live variables
Very busy expressions
![Page 17: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/17.jpg)
ECS 240 Data Flow Analysis 17
The Literature
• Vast literature of dataflow analyses
• 90+% can be described by – Forwards or backwards – May or must
• Some oddballs, but not many – Bidirectional analyses
![Page 18: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/18.jpg)
ECS 240 Data Flow Analysis 18
Another Cut at Dataflow Design
• What theory are we dealing with?
• Review our schemas:
( )
1 2
( ) ( )
( ) ( )
outins pred s
out in
A s A s
A s A s C C
!∈
!=
= − ∪
1 2
( )
( ) ( )
( ) ( )
outin
out ins succ s
L s L s C C
L s L s!∈
= − ∪
!=
![Page 19: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/19.jpg)
ECS 240 Data Flow Analysis 19
Essential Features
• Set variables Lin(s), Lout(S) • Set operations: union, intersection
– Restricted complement (- constant) • Domain of atoms
– E.g., variable names • Equations with single variable on lhs
![Page 20: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/20.jpg)
ECS 240 Data Flow Analysis 20
Dataflow Problems
• Many dataflow equations are described by the grammar:
• v is a variable • a is an atom • Note: More general than most problems . . .
; || | |
EQS v E EQSE E E E E v a
ε→ =
→ ∩ ∪
![Page 21: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/21.jpg)
ECS 240 Data Flow Analysis 21
Solving Dataflow Equations
• Simple worklist algorithm: – Initially let S(v) = 0 for all v – Repeat until S(v) = S(E) for all equations
• Pick any v = E such that S(v) ≠ S(E) • Set S := S[v/S(E)]
![Page 22: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/22.jpg)
ECS 240 Data Flow Analysis 22
Termination
• How do we know the algorithm terminates?
• Because – operations are monotonic – the domain is finite
![Page 23: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/23.jpg)
ECS 240 Data Flow Analysis 23
Monotonicity
• Operation f is monotonic if X · Y ) f(x) · f(y)
• We require that all operations be monotonic – Easy to check for the set operations – Easy to check for all transfer functions; recall:
1 2( ) ( )outinL s L s C C= − ∪
![Page 24: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/24.jpg)
ECS 240 Data Flow Analysis 24
Termination again
• To see the algorithm terminates – All variables start empty – Variables and rhs’s only increase with each update
• By induction on # of updates, using monotonicity – Sets can only grow to a max finite size
• Together, these imply termination
![Page 25: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/25.jpg)
ECS 240 Data Flow Analysis 25
The Rest of the Lecture
• Distributive Problems • Flow Sensitivity • Context Sensitivity
– Or interprocedural analysis
• What are the limits of dataflow analysis?
![Page 26: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/26.jpg)
ECS 240 Data Flow Analysis 26
Distributive Dataflow Problems
• Monotonicity implies for a transfer function f:
• Distributive dataflow problems satisfy a stronger property:
f(x [ y) ¸ f(x) [ f(y)
f(x [ y) =f(x) [ f(y)
![Page 27: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/27.jpg)
ECS 240 Data Flow Analysis 27
Distributivity Example
h
g f
k
k(h(f(0) [ g(0))) = k(h(f(0)) [ h(g(0))) = k(h(f(0))) [ k(h(g(0)))
The analysis of the graph is equivalent to combining the analysis of each path!
![Page 28: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/28.jpg)
ECS 240 Data Flow Analysis 28
Meet Over All Paths
• If a dataflow problem is distributive, then the (least) solution of the dataflow equations is equivalent to the analyzing every path (including infinite ones) and combining the results
• Says joins cause no loss of information
![Page 29: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/29.jpg)
ECS 240 Data Flow Analysis 29
Distributivity Again
• Obtaining the meet over all paths solution is a very powerful guarantee
• Says that dataflow analysis is really as good as you can do for a distributive problem.
• Alternatively, can be viewed as saying distributive problems are very easy indeed . . .
![Page 30: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/30.jpg)
ECS 240 Data Flow Analysis 30
What Problems are Distributive?
• Many analyses of program structure are distributive – E.g., live variables, available expressions, reaching
definitions, very busy expressions – Properties of how the program computes
![Page 31: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/31.jpg)
ECS 240 Data Flow Analysis 31
Liveness Example Revisited
if y > a + b
a := a + 1
x := a + b
y := a * b
x := a + b x,a,b
x,y,a,b
y,a,b
y,a,b x,y,a,b
a,b
x
![Page 32: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/32.jpg)
ECS 240 Data Flow Analysis 32
Constant Folding
• Ordering i<> for any integer i • jt k= > if j ≠ k • Example transfer function:
• Consider
1 2 1 2( : ) [ ( ) ( ) ]if , constants
where otherwise
C v e e v C e C ea b a b
a b
σ σ σ σ= × = ← ⊗
×%⊗ = &
' ú
![Page 33: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/33.jpg)
ECS 240 Data Flow Analysis 33
What Problems are Not Distributive?
• Analyses of what the program computes – The output is (a constant, positive, …)
![Page 34: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/34.jpg)
ECS 240 Data Flow Analysis 34
Flow Sensitivity
• Flow sensitive analyses – The order of statements matters – Need a control flow graph
• Or transition system, ….
• Flow insensitive analyses – The order of statements doesn’t matter – Analysis is the same regardless of statement order
![Page 35: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/35.jpg)
ECS 240 Data Flow Analysis 35
Example Flow Insensitive Analysis
• What variables does a program fragment modify?
{ }
1 2 1 2
( : )( ; ) ( ) ( )
G x e xG s s G s G s
= =
= ∪
• Note G(s1;s2) = G(s2;s1)
![Page 36: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/36.jpg)
ECS 240 Data Flow Analysis 36
The Advantage
• Flow-sensitive analyses require a model of program state at each program point – E.g., liveness analysis, reaching definitions, …
• Flow-insensitive analyses require only a single global state – E.g., for G, the set of all variables modified
![Page 37: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/37.jpg)
ECS 240 Data Flow Analysis 37
Notes on Flow Sensitivity
• Flow insensitive analyses seem weak, but:
• Flow sensitive analyses are hard to scale to very large programs – Additional cost: state size X # of program points
• Beyond 1000’s of lines of code, only flow insensitive analyses have been shown to scale
![Page 38: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/38.jpg)
ECS 240 Data Flow Analysis 38
Context-Sensitive Analysis
• What about analyzing across procedure boundaries?
Def f(x){…} Def g(y){…f(a)…} Def h(z){…f(b)…} • Goal: Specialize analysis of f to take
advantage of • f is called with a by g • f is called with b by h
![Page 39: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/39.jpg)
ECS 240 Data Flow Analysis 39
Control-Flow Graphs Again
• How do we extend control-flow graphs to procedures?
• Idea: Model procedure call f(a) by: – Edge from point before call to entry of f – Edge from exit(s) of f to point after call
![Page 40: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/40.jpg)
ECS 240 Data Flow Analysis 40
Example
• Edges from – before f(a) to entry of f – Exit of f to after f(a) – Before f(b) to entry of f – Exit of f to after f(b)
f(x){…}
g(y){…f(a)…} h(z){…f(b)…}
![Page 41: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/41.jpg)
ECS 240 Data Flow Analysis 41
Example
• Edges from – before f(a) to entry of f – Exit of f to after f(a) – Before f(b) to entry of f – Exit of f to after f(b)
• Has the correct flows for g
f(x){…}
g(y){…f(a)…} h(z){…f(b)…}
![Page 42: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/42.jpg)
ECS 240 Data Flow Analysis 42
Example
• Edges from – before f(a) to entry of f – Exit of f to after f(a) – Before f(b) to entry of f – Exit of f to after f(b)
• Has the correct flows for h
f(x){…}
g(y){…f(a)…} h(z){…f(b)…}
![Page 43: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/43.jpg)
ECS 240 Data Flow Analysis 43
Example
• But also has flows we don’t want – One path captures a call
to g returning at h!
• So-called “infeasible paths”
f(x){…}
g(y){…f(a)…} h(z){…f(b)…}
![Page 44: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/44.jpg)
ECS 240 Data Flow Analysis 44
What to do?
• Must distinguish calls to f in different contexts
• Three techniques – Assumptions
• later – Context-free reachability
• Later – Call strings
• Today
![Page 45: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/45.jpg)
ECS 240 Data Flow Analysis 45
Call Strings
• Observation: – At run time, different calls to f are distinguished
by the call stack • Problem:
– The stack is unbounded • Idea:
– Use the last k calls on the stack to distinguish context
– Represent a call by the name of the calling procedure
![Page 46: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/46.jpg)
ECS 240 Data Flow Analysis 46
Example Revisited
• Use call strings of length 1 • Context is name of calling
procedure
f(x){…}
g(y){…f(a)…} h(z){…f(b)…}
<
g
g h h
Note: labels on edges are part of the state: tag a call with “g” on call of f() from g(), filter out all but that portion of the state with call string “g” on return from g() to f()
![Page 47: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/47.jpg)
ECS 240 Data Flow Analysis 47
Experience with Call Strings
• Very expensive – Multiplies # of abstract values by (# of
procedures ** length of call string) – Hard to contemplate call strings > 1
• Fragile – Very sensitive to organization of procedures
• Well-studied, but not much used in practice
![Page 48: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/48.jpg)
ECS 240 Data Flow Analysis 48
Review of Terminology
• Must vs. May • Forwards vs. Backwards • Flow-sensitive vs. Flow-insensitive • Context-sensitive vs. Context-insensitive • Distributive vs. non-Distributive
![Page 49: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/49.jpg)
ECS 240 Data Flow Analysis 49
Where is Dataflow Analysis Useful?
• Best for flow-sensitive, context-insensitive, distributive problems on small pieces of code – E.g., the examples we’ve seen and many others
• Extremely efficient algorithms are known – Use different representation than control-flow
graph, but not fundamentally different – More on this in a minute . . .
![Page 50: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/50.jpg)
ECS 240 Data Flow Analysis 50
Where is Dataflow Analysis Weak?
• Lots of places
![Page 51: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/51.jpg)
ECS 240 Data Flow Analysis 51
Data Structures
• Not good at analyzing data structures
• Works well for atomic values – Labels, constants, variable names
• Not easily extended to arrays, lists, trees, etc. – Work on shape analysis
![Page 52: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/52.jpg)
ECS 240 Data Flow Analysis 52
The Heap
• Good at analyzing flow of values in local variables
• No notion of the heap in traditional dataflow applications
• In general, very hard to model anonymous values accurately – Aliasing – The “strong update” problem
![Page 53: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/53.jpg)
ECS 240 Data Flow Analysis 53
Context Sensitivity
• Standard dataflow techniques for handling context sensitivity don’t scale well
• Brittle under common program edits
• E.g., call strings
![Page 54: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/54.jpg)
ECS 240 Data Flow Analysis 54
Flow Sensitivity (Beyond Procedures)
• Flow sensitive analyses are standard for analyzing single procedures
• Not used (or not aware of uses) for whole programs – Too expensive
![Page 55: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/55.jpg)
ECS 240 Data Flow Analysis 55
The Call Graph
• Dataflow analysis requires a call graph – Or something close
• Inadequate for higher-order programs
– First class functions – Object-oriented languages with dynamic dispatch
• Call-graph hinders algorithmic efficiency – Desire to keep executable specification is limiting
![Page 56: Lecture 6 ECS 240 - cs.ucdavis.edu](https://reader033.vdocument.in/reader033/viewer/2022042209/62592ec56141841f130573af/html5/thumbnails/56.jpg)
ECS 240 Data Flow Analysis 56
Forwards vs. Backwards
• Restriction to forwards/backwards reachability – Very constraining – Many important problems not easy to fit into this
mold