to invoke all these pieces and pass the right options to each (see Figure 5-1). An optimizer can be
added after almost any of these phases. The current SPARCompilers do most optimizations on the
intermediate representation between the front and back ends of the compiler.
Figure 5-1. A Compiler is Often Split into Smaller Programs