0% found this document useful (0 votes)
55 views

04 Data Flow Analysis Handout

The document discusses available expressions analysis, an intraprocedural data flow analysis technique. It begins by defining what it means for an expression to be available at a point in a program. It then shows how available expressions analysis is performed for basic blocks in a structured program by computing the GEN, KILL, IN and OUT sets using equations. The analysis makes conservative approximations and is an iterative process. Examples are provided to illustrate the analysis.

Uploaded by

phtcosta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views

04 Data Flow Analysis Handout

The document discusses available expressions analysis, an intraprocedural data flow analysis technique. It begins by defining what it means for an expression to be available at a point in a program. It then shows how available expressions analysis is performed for basic blocks in a structured program by computing the GEN, KILL, IN and OUT sets using equations. The analysis makes conservative approximations and is an iterative process. Examples are provided to illustrate the analysis.

Uploaded by

phtcosta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

Agenda

CS738: Advanced Compiler Optimizations

Data Flow Analysis

Amey Karkare ◮ Intraprocedural Data Flow Analysis: Classical Examples


[email protected] ◮ Last lecture: Reaching Definitions
◮ Today: Available Expressions
http://www.cse.iitk.ac.in/~karkare/cs738 ◮ Discussion about the similarities/differences
Department of CSE, IIT Kanpur

Available Expressions Analysis AvE Analysis of a Structured Program

IN(s1 )
◮ An expression e is available at a point p if
d :x =y +z s1
◮ Every path from the Entry to p has at least one evaluation
of e
◮ There is no assignment to any component variable of e OUT(s1 )
after the last evaluation of e prior to p
◮ Expression e is generated by its evaluation
OUT(s1 ) = IN(s1 ) − KILL(s1 ) ∪ GEN(s1 )
◮ Expression e is killed by assignment to its component
GEN(s1 ) = {y + z}
variables
KILL(s1 ) = Ex
where Ex : set of all expression having x as a component
This may not work in general – WHY?
AvE Analysis of a Structured Program AvE Analysis of a Structured Program

IN(s1 )
IN(s1 )
x =x +z s1
lhs = rhs s1
OUT(s1 )
OUT(s1 )

OUT(s1 ) = IN(s1 ) − KILL(s1 ) ∪ GEN(s1 )


GEN(s1 ) = {x + z} OUT(s1 ) = IN(s1 ) − KILL(s1 ) ∪ GEN(s1 )
KILL(s1 ) = Ex GEN(s1 ) = {rhs | lhs is not part of rhs}
Incorrectly marks x + z as available after s1 KILL(s1 ) = Elhs
GEN(s1 ) = ∅ for this case

AvE Analysis of a Structured Program AvE Analysis of a Structured Program

IN(S)
IN(S)
S
s1 S

s1 s2
s2
OUT(S)
OUT(S)

GEN(S) = GEN(s1 ) − KILL(s2 ) ∪ GEN(s2 )


GEN(S) = GEN(s1 ) ∩ GEN(s2 )
KILL(S) = KILL(s1 ) − GEN(s2 ) ∪ KILL(s2 )
KILL(S) = KILL(s1 ) ∪ KILL(s2 )
IN(s1 ) = IN(S)
IN(s1 ) = IN(s2 ) = IN(S)
IN(s2 ) = OUT(s1 )
OUT(S) = OUT(s1 ) ∩ OUT(s2 )
OUT(S) = OUT(s2 )
AvE Analysis of a Structured Program AvE Analysis of a Structured Program

IN(S)
S
IN(S) = {x + y }
s1
S
s1 : nop
OUT(S)

GEN(S) = GEN(s1 ) OUT(S) =?


KILL(S) = KILL(s1 )
OUT(S) = OUT(s1 ) Is x + y available at OUT(S)?
IN(s1 ) = IN(S) ∩ GEN(s1 ) ?
IN(s1 ) = IN(S) ∩ OUT(s1 )??

AvE Analysis is Approximate AvE Analysis is Approximate

IN(S) IN(S)
S S
s1 s2 s1 s2

OUT(S) OUT(S)
◮ Assumption: All paths are feasible. ◮ Thus,
◮ Example: true GEN(S) ⊇ analysis GEN(S)
if (true) s1; true KILL(S) ⊆ analysis KILL(S)
else s2; ◮ Fewer expressions marked available than actually do!
Fact Computed Actual ◮ Later we shall see that this is SAFE approximation
GEN(S) = GEN(s1 ) ∩ GEN(s2 ) ⊆ GEN(s1 ) ◮ prevents optimizations
◮ but NO wrong optimization
KILL(S) = KILL(s1 ) ∪ KILL(s2 ) ⊇ KILL(s1 )
AvE for Basic Blocks Solving AvE Constraints

◮ Expr e is available at the start of a block if


◮ It is available at the end of all predecessors
\
IN(B) = OUT(P) ◮ KILL & GEN known for each BB.
P∈PRED(B) ◮ A program with N BBs has 2N equations with 2N
◮ Expr e is available at the end of a block if unknowns.
◮ Either it is generated by the block ◮ Solution is possible.
◮ Or it is available at the start of the block and not killed by ◮ Iterative approach (on the next slide).
the block
OUT(B) = IN(B) − KILL(B) ∪ GEN(B)

Some Issues

for each block B {


OUT(B) = U ; U = “universal” set of all exprs
}
OUT(Entry ) = ∅; // remember reaching defs? ◮ What is U – the set of all expressions?
change = true;
◮ How to compute it efficiently?
while (change) {
change = false; ◮ Why Entry block is initialized differently?
for each blockT B other than Entry {
IN(B) = P∈PRED(B) OUT(P);
oldOut = OUT(B);
OUT(B) = IN(B) − KILL(B) ∪ GEN(B);
if (OUT(B) 6=oldOut) then {
change = true;
}
}
}
Available Expressions: Example Available Expressions: Example

Pass# Pt B1 B2 B3 B4
Init IN - - - -
BB GEN KILL OUT U U U U
B1 {a*b, c+d} {} 1 IN ∅ a*b, c+d c+d
c+d
B2 {c+d} {a*b} OUT a*b, c+d a*b, a*b
B3 {a*b} {} c+d c+d
2 IN ∅ a*b c+d c+d
B4 {a*b} {c+d} OUT a*b, c+d a*b, a*b
c+d c+d
3 IN ∅ a*b c+d c+d
U = {a*b, c+d} OUT a*b, c+d a*b, a*b
c+d c+d

Available Expressions: Bitvectors Available Expressions: Bitvectors

◮ Set-theoretic definitions:
\
a bit for each expression: IN(B) = OUT(P)
a*b c+d
P∈PRED(B)
Pass# Pt B1 B2 B3 B4
Init IN - - - - OUT(B) = IN(B) − KILL(B) ∪ GEN(B)
OUT 11 11 11 11
1 IN 00 11 01 01 ◮ Bitvector definitions:
OUT 11 01 11 10
2 IN 00 10 01 01
^
OUT 11 01 11 10 IN(B) = OUT(P)
3 IN 00 10 01 01 P∈PRED(B)
OUT 11 01 11 10
OUT(B) = IN(B) ∧ ¬KILL(B) ∨ GEN(B)
◮ Bitwise ∨, ∧, ¬ operators
Available Expressions: Application Comparison of RD and AvE

◮ Common subexpression elimination in a block B ◮ Some vs. All path property


◮ Expression e available at the entry of B
◮ Meet operator: ∪ vs. ∩
◮ e is also computed at a point p in B
◮ Components of e are not modified from entry of B to p ◮ Initialization of Entry: ∅
◮ e is “upward exposed” in B ◮ Initialization of other BBs: ∅ vs. U
◮ Expressions generated in B are “downward exposed” ◮ Safety: “More” RD vs. “Fewer” AvE

AvE: alternate Initialization Live Variables

◮ What if we Initialize:
◮ A variable x is live at a point p if
OUT(B) = ∅, ∀B including Entry ◮ There is a point p′ along some path in the flow graph
starting at p to the Exit
◮ Would we find “extra” available expressions? ◮ Value of x could be used at p′
◮ More opportunity to optimize? ◮ There is no definition of x between p and p′ along this path
◮ OR would we miss some expressions that are available? ◮ Otherwise x is dead at p
◮ Loose on opportunity to optimize?
Live Variables: GEN Live Variables: KILL

◮ GEN(B): Set of variables whose values may be used in ◮ KILL(B): Set of variables defined in block B prior to any
block B prior to any definition use
◮ Also called “use(B)” ◮ Also called “def(B)”
◮ “upward exposed use” of a variable in B ◮ “upward exposed definition” of a variable in B

Live Variables: Equations Very Busy Expressions

◮ Set-theoretic definitions:
[
OUT(B) = IN(S)
S∈SUCC(B) ◮ Expression e is very busy at a point p if
◮ Every path from p to Exit has at least one evaluation of e
IN(B) = OUT(B) − KILL(B) ∪ GEN(B) ◮ On every path, there is no assignment to any component
◮ Bitvector definitions: variable of e before the first evaluation of e following p
_ ◮ Also called Anticipable expression
OUT(B) = OUT(S)
S∈SUCC(B)

IN(B) = OUT(B) ∧ ¬KILL(B) ∨ GEN(B)


◮ Bitwise ∨, ∧, ¬ operators
QQ

◮ Expression e is very busy at a point p if


◮ Every path from p to Exit has at least one evaluation of e
and there is no assignment to any component variable of e
before the first evaluation of e following p on these paths.
◮ Set up the data flow equations for Very Busy Expressions
(VBE). You have to give equations for GEN, KILL, IN, and
OUT.
◮ Think of an optimization/transformation that uses VBE
analysis. Briefly describe it (2-3 lines only)
◮ Will your optimization be safe if we replace “Every” by
“Some” in the definition of VBE?

You might also like