.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 .]