79 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.TL
 | 
						|
The design and implementation of
 | 
						|
the EM Global Optimizer
 | 
						|
.AU
 | 
						|
H.E. Bal
 | 
						|
.AI
 | 
						|
Vrije Universiteit
 | 
						|
Wiskundig Seminarium, Amsterdam
 | 
						|
.AB
 | 
						|
The EM Global Optimizer is part of the Amsterdam Compiler Kit,
 | 
						|
a toolkit for making retargetable compilers.
 | 
						|
It optimizes the intermediate code common to all compilers of
 | 
						|
the toolkit (EM),
 | 
						|
so it can be used for all programming languages and
 | 
						|
all processors supported by the kit.
 | 
						|
.PP
 | 
						|
The optimizer is based on well-understood concepts like
 | 
						|
control flow analysis and data flow analysis.
 | 
						|
It performs the following optimizations:
 | 
						|
Inline Substitution, Strength Reduction, Common Subexpression Elimination,
 | 
						|
Stack Pollution, Cross Jumping, Branch Optimization, Copy Propagation,
 | 
						|
Constant Propagation, Dead Code Elimination and Register Allocation.
 | 
						|
.PP
 | 
						|
This report describes the design of the optimizer and several
 | 
						|
of its implementation issues.
 | 
						|
.AE
 | 
						|
.bp
 | 
						|
.NH 1
 | 
						|
Introduction
 | 
						|
.PP
 | 
						|
.FS
 | 
						|
This work was supported by the
 | 
						|
Stichting Technische Wetenschappen (STW)
 | 
						|
under grant VWI00.0001.
 | 
						|
.FE
 | 
						|
The EM Global Optimizer is part of a software toolkit
 | 
						|
for making production-quality retargetable compilers.
 | 
						|
This toolkit,
 | 
						|
called the Amsterdam Compiler Kit
 | 
						|
.[
 | 
						|
tanenbaum toolkit rapport
 | 
						|
.]
 | 
						|
.[
 | 
						|
tanenbaum toolkit cacm
 | 
						|
.]
 | 
						|
runs under the Unix*
 | 
						|
.FS
 | 
						|
*Unix is a Trademark of Bell Laboratories
 | 
						|
.FE
 | 
						|
operating system.
 | 
						|
.sp 0
 | 
						|
The main design philosophy of the toolkit is to use
 | 
						|
a language- and machine-independent
 | 
						|
intermediate code, called EM.
 | 
						|
.[
 | 
						|
keizer architecture
 | 
						|
.]
 | 
						|
The basic compilation process can be split up into
 | 
						|
two parts.
 | 
						|
A language-specific front end translates the source program into EM.
 | 
						|
A machine-specific back end transforms EM to assembly code
 | 
						|
of the target machine.
 | 
						|
.PP
 | 
						|
The global optimizer is an optional phase of the
 | 
						|
compilation process, and can be used to obtain
 | 
						|
machine code of a higher quality.
 | 
						|
The optimizer transforms EM-code to better EM-code,
 | 
						|
so it comes between the front end and the back end.
 | 
						|
It can be used with any combination of languages
 | 
						|
and machines, as far as they are supported by
 | 
						|
the compiler kit.
 | 
						|
.PP
 | 
						|
This report describes the design of the
 | 
						|
global optimizer and several of its
 | 
						|
implementation issues.
 | 
						|
Measurements can be found in.
 | 
						|
.[
 | 
						|
bal tanenbaum global
 | 
						|
.]
 |