58 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.bp
 | 
						|
.NH 1
 | 
						|
Use-Definition analysis
 | 
						|
.NH 2
 | 
						|
Introduction
 | 
						|
.PP
 | 
						|
The "Use-Definition analysis" phase (UD) consists of two related optimization
 | 
						|
techniques that both depend on "Use-Definition" information.
 | 
						|
The techniques are Copy Propagation and Constant Propagation.
 | 
						|
They are best explained via an example (see Figs. 11.1 and 11.2).
 | 
						|
.DS
 | 
						|
   (1)  A := B                  A := B
 | 
						|
	 ...          -->        ...
 | 
						|
   (2)  use(A)                  use(B)
 | 
						|
 | 
						|
Fig. 11.1 An example of Copy Propagation
 | 
						|
.DE
 | 
						|
.DS
 | 
						|
   (1)  A := 12                  A := 12
 | 
						|
	 ...          -->        ...
 | 
						|
   (2)  use(A)                  use(12)
 | 
						|
 | 
						|
Fig. 11.2 An example of Constant Propagation
 | 
						|
.DE
 | 
						|
Both optimizations have to check that the value of A at line (2)
 | 
						|
can only be obtained at line (1).
 | 
						|
Copy Propagation also has to assure that the value of B is
 | 
						|
the same at line (1) as at line (2).
 | 
						|
.PP
 | 
						|
One purpose of both transformations is to introduce
 | 
						|
opportunities for the Dead Code Elimination optimization.
 | 
						|
If the variable A is used nowhere else, the assignment A := B
 | 
						|
becomes useless and can be eliminated.
 | 
						|
.sp 0
 | 
						|
If B is less expensive to access than A (e.g. this is sometimes the case
 | 
						|
if A is a local variable and B is a global variable),
 | 
						|
Copy Propagation directly improves the code itself.
 | 
						|
If A is cheaper to access the transformation will not be performed.
 | 
						|
Likewise, a constant as operand may be cheeper than a variable.
 | 
						|
Having a constant as operand may also facilitate other optimizations.
 | 
						|
.PP
 | 
						|
The design of UD is based on the theory described in section
 | 
						|
14.1 and 14.3 of.
 | 
						|
.[
 | 
						|
aho compiler design
 | 
						|
.]
 | 
						|
As a main departure from that theory,
 | 
						|
we do not demand the statement A := B to become redundant after
 | 
						|
Copy Propagation.
 | 
						|
If B is cheaper to access than A, the optimization is always performed;
 | 
						|
if B is more expensive than A, we never do the transformation.
 | 
						|
If A and B are equally expensive UD uses the heuristic rule to
 | 
						|
replace infrequently used variables by frequently used ones.
 | 
						|
This rule increases the chances of the assignment to become useless.
 | 
						|
.PP
 | 
						|
In the next section we will give a brief outline of the data
 | 
						|
flow theory used
 | 
						|
for the implementation of UD.
 |