Scale is an optimizing compiler. Dramatic and continuous changes in architecture require that the next generation of compilers be more powerful, flexible, and reusable in order to achieve high performance before the target architecture is obsolete. The Scale compilation system is designed to meet this challenge. Scale currently implements parsers for C, Fortran, and Java byte-codes, alias analyses, static single assignment form (SSA), a collection of scalar optimizations, (PRE, value numbering, copy propagation, dead code elimination, and constant propagation), and outputs C and assembly code. These are performed using a new intermediate representation, called Scribble.
The primary focus of the Scale project at this time is to generate high performance code for the Trips architecture. This architecture presents some interesting challenges. In order to obtain the very high performance of which it is capable, the compiler must be able to construct basic blocks that are much larger than the ones seen in a typical C program. To accomplish this, we are using powerful inlining and unrolling combined with predication.
The Scale compiler is able to visually display abstract syntax trees and control flow graphs. This provides a powerful debugging tool when implementing new optimizations. Graphical displays can also be used for understanding how compilers accomplish their tasks.