44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.bp
 | 
						|
.NH 1
 | 
						|
Strength reduction
 | 
						|
.NH 2
 | 
						|
Introduction
 | 
						|
.PP
 | 
						|
The Strength Reduction optimization technique (SR)
 | 
						|
tries to replace expensive operators
 | 
						|
by cheaper ones,
 | 
						|
in order to decrease the execution time
 | 
						|
of the program.
 | 
						|
A classical example is replacing a 'multiplication by 2'
 | 
						|
by an addition or a shift instruction.
 | 
						|
These kinds of local transformations are already
 | 
						|
done by the EM Peephole Optimizer.
 | 
						|
Strength reduction can also be applied
 | 
						|
more generally to operators used in a loop.
 | 
						|
.DS
 | 
						|
i := 1;                    i := 1;
 | 
						|
while i < 100 loop  -->    TMP := i * 118;
 | 
						|
   put(i * 118);           while i < 100 loop
 | 
						|
   i := i + 1;                put(TMP);
 | 
						|
end loop;                     i := i + 1;
 | 
						|
			      TMP := TMP + 118;
 | 
						|
			   end loop;
 | 
						|
 | 
						|
Fig. 6.1 An example of Strenght Reduction
 | 
						|
.DE
 | 
						|
In Fig. 6.1, a multiplication inside a loop is
 | 
						|
replaced by an addition inside the loop and a multiplication
 | 
						|
outside the loop.
 | 
						|
Clearly, this is a global optimization; it cannot
 | 
						|
be done by a peephole optimizer.
 | 
						|
.PP
 | 
						|
In some cases a related technique, \fItest replacement\fR,
 | 
						|
can be used to eliminate the
 | 
						|
loop variable i.
 | 
						|
This technique will not be discussed in this report.
 | 
						|
.sp 0
 | 
						|
In the example above, the resulting code
 | 
						|
can be further optimized by using
 | 
						|
constant propagation.
 | 
						|
Obviously, this is not the task of the
 | 
						|
Strength Reduction phase.
 |