Live Variable Analysis
Determines for each “point” in a program
what (variable’s) values are live at that
point.
Program “points” are defined before and
after each statement of a basic block.
A value is “live” iff
It
has been written (defined)
It might be read (used) on some path later in
the control flow graph
Statement Dataflow
Consider a statement, S,
dest
= src1 operator src2,
OR
dest = operator(src1, src2, … srcN)
Keep two sets for each statement
Written
(defined)
Read (used)
Live Variables – Basic Block
For each block, BB, compute
Written,
Initialize each BB
Live-in
read, readB4written, for BB
= readB4written, Live-out = Ø
Repeat until neither live-in, live-out change
For
each BB
Live-out(BB) U= U Live-in(Successor)
Live-in(BB) U= Live-out(BB) – written(BB)
Live Analysis – Statements
Lin (s ) (Lout (s ) write (s )) read (s )
if succ (s )
Lout (s )
Lin (s )
otherwise
s succ ( s )
Whole Algorithm
Traverse
each statement, S, in function
Compute S->written, S->read
For
each basic block, BB, compute BB->live-in and
BB->live-out (See Live Variables – Basic Block)
For each basic block, BB
Live = BB->live-out
Traverse each statement, S, of BB, in reverse
Live = Live – S->written
S->live = Live
Live = Live ∨ S->read