|
|
||||||||||||||||||
|
|
|||||||||||||||||
|
|
|||||||||||||||||
Research GroupsScalar Compilers Group The Scalar Compiler Group investigates problems in compiling for microprocessor-based systems that arise from three distinct sources: first, each new generation of microprocessor-based systems presents new challenges to the compiler; second, the nature of the code being input to the compiler is changing, with new languages, new language features, and increased use of preprocessors like parallelization tools; and, finally, improved methods for compiler-based analysis and transformation make both new transformations and improved techniques for old transformations possible. These three forces of change make it necessary to periodically reexamine algorithms and approaches in code generation and optimization. Changing Microprocessor Design Modern microprocessor-based systems have features that challenge the compiler's ability to generate good code. These machines have complex memory hierarchies with one or more levels of cache memory, so the placement of data in the memory hierarchy is important. They have pipelined functional units and can issue multiple instructions at each cycle, so aggressive instruction scheduling is necessary for good performance. Finally, many of the critical hardware resources, such as registers and translation lookaside buffer slots, are limited in quantity, so the compiler must allocate them and manage their lifetimes. Changing Compiler Input The compiler faces new challenges with widespread adoption of new language features, such as object-oriented programming and explicit expression of parallelism. Increased use of preprocessors to perform inline substitution, macro-expansion, cache blocking, and automatic parallelization change some of the fundamental properties of code presented for compilation. Unfortunately, compilers are engineered objects. Once programs step outside the set of expected properties, the effectiveness of optimization can decrease dramatically. To compile good code for these programs requires both new optimization techniques and more robust versions of existing techniques. Changing Compiler Techniques New techniques for analyzing programs, such as static-single assignment form (SSA), dependence analysis, and interprocedural data-flow analysis, give the compiler with more precise information about the flow of values in a program. This makes possible new transformations and lets the compiler do a better job with known transformations. For example, SSA form can be used to improve both value numbering and operator strength reduction. Similarly, interprocedural analysis can be used to disambiguate pointer references; this may lead to better code for nonnumerical programs. To focus on problems in code generation and optimization that arise as a result of these changes, group members identify problems by examining the output of compilers and talking with commercial compiler groups. They devise new algorithms to improve the situation, build a prototype implementation, and experiment with it. This usually leads to refinements or new algorithms. When a technique is judged stable enough for implementation in a commercial compiler, they write a reference implementation and distribute it on the Internet. Additional Information: |
||||||||||||||||||
|
||||||||||||||||||
Mailing Address: PO Box 1892, MS-132, Houston TX 77251-1892
Physical Address: 3122 Duncan Hall, 6100 Main Street, Houston TX 77005 | ||||||||||||||||||
|
|