Initial revision
This commit is contained in:
64
doc/ego/ud/ud2
Normal file
64
doc/ego/ud/ud2
Normal file
@@ -0,0 +1,64 @@
|
||||
.NH 2
|
||||
Data flow information
|
||||
.PP
|
||||
.NH 3
|
||||
Use-Definition information
|
||||
.PP
|
||||
A \fIdefinition\fR of a variable A is an assignment to A.
|
||||
A definition is said to \fIreach\fR a point p if there is a
|
||||
path in the control flow graph from the definition to p, such that
|
||||
A is not redefined on that path.
|
||||
.PP
|
||||
For every basic block B, we define the following sets:
|
||||
.IP GEN[b] 9
|
||||
the set of definitions in b that reach the end of b.
|
||||
.IP KILL[b]
|
||||
the set of definitions outside b that define a variable that
|
||||
is changed in b.
|
||||
.IP IN[b]
|
||||
the set of all definitions reaching the beginning of b.
|
||||
.IP OUT[b]
|
||||
the set of all definitions reaching the end of b.
|
||||
.LP
|
||||
GEN and KILL can be determined by inspecting the code of the procedure.
|
||||
IN and OUT are computed by solving the following data flow equations:
|
||||
.DS
|
||||
(1) OUT[b] = IN[b] - KILL[b] + GEN[b]
|
||||
(2) IN[b] = OUT[p1] + ... + OUT[pn],
|
||||
where PRED(b) = {p1, ... , pn}
|
||||
.DE
|
||||
.NH 3
|
||||
Copy information
|
||||
.PP
|
||||
A \fIcopy\fR is a definition of the form "A := B".
|
||||
A copy is said to be \fIgenerated\fR in a basic block n if
|
||||
it occurs in n and there is no subsequent assignment to B in n.
|
||||
A copy is said to be \fIkilled\fR in n if:
|
||||
.IP (i)
|
||||
it occurs in n and there is a subsequent assignment to B within n, or
|
||||
.IP (ii)
|
||||
it occurs outside n, the definition A := B reaches the beginning of n
|
||||
and B is changed in n (note that a copy also is a definition).
|
||||
.LP
|
||||
A copy \fIreaches\fR a point p, if there are no assignments to B
|
||||
on any path in the control flow graph from the copy to p.
|
||||
.PP
|
||||
We define the following sets:
|
||||
.IP C_GEN[b] 11
|
||||
the set of all copies in b generated in b.
|
||||
.IP C_KILL[b]
|
||||
the set of all copies killed in b.
|
||||
.IP C_IN[b]
|
||||
the set of all copies reaching the beginning of b.
|
||||
.IP C_OUT[b]
|
||||
the set of all copies reaching the end of b.
|
||||
.LP
|
||||
C_IN and C_OUT are computed by solving the following equations:
|
||||
(root is the entry node of the current procedure; '*' denotes
|
||||
set intersection)
|
||||
.DS
|
||||
(1) C_OUT[b] = C_IN[b] - C_KILL[b] + C_GEN[b]
|
||||
(2) C_IN[b] = C_OUT[p1] * ... * C_OUT[pn],
|
||||
where PRED(b) = {p1, ... , pn} and b /= root
|
||||
C_IN[root] = {all copies}
|
||||
.DE
|
||||
Reference in New Issue
Block a user