64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| .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
 |