CS 6241A Compiler Design 
Fall 2002

Instructor: Santosh Pande (santosh@cc.gatech.edu)
Office: CoC 218
Phone: 385-2169
Office Hrs: Tue-Thurs,1-2 pm (subject to change)
TA: Nanjuan Shi (clarenan@cc.gatech.edu)
TA Office Hrs: CRB 367, Wednesday and Friday, 3 to 4 pm


Course Description

Compilers have always played a key role in the backbone of computing systems. From high performance to tiny systems, compilers optimize code which can fit small memory, which can execute faster on high performance computers, which can reduce power on battery-driven systems, which can be predictable (in real time systems) and which can make systems ubiquitous (such as mobile code). This interesting and important area offers a beautiful blend of science and engineering with a bit of art mixed in it. This course is a first course on compiler optimization techniques that are commonly used at intermediate level and in the backend. The following are the objectives of this course: We will achieve these goals by in-depth discussion of classical and modern compiler analyses and optimizations. The course starts with a discussion of basic dataflow and control flow analysis and building of necessary information at various levels of intermediate forms through analysis. The techniques covered include first bit-vector analysis followed by discussion of SSA form. Special analysis based on SSA form (such as global value numbering) is discussed next. Finally, advanced dataflow problems such as partial redundancy elimination (PRE) are discussed. We then shift our attention to data dependence analysis used in modern high performance compilers and its use in loop transformations for optimizing for memory hierarchy. Finally we end the course with a detailed discussion about code generation issues involving register allocation, rematerialization, coalescing and coloring. We also introduce instruction selection and register reallocation etc. in the end. We read papers on one of the topics in the end. A series of small projects on a skeletel compiler are given out that develop a given series of optimizations. Finally, students define their own optimization and propose a project based on it. There is considerable flexibility in defining such a project, and students will be able to define their own projects, and depending on the nature of the project, students can work in groups.

After successfully completing this course, it is expected that students will be ready to explore research literature on one or more topics in compilers.Similar to other systems courses, this course is intense and one should stay on top of things in it.


Homework and Project Information


Prerequisites

Students should have taken first course (front end) in compilers and should have excellent programming skills and knowledge of data-structures. Others must take permission of the instructor.


Topics

The following listed topics will be discussed in class. Key papers will be presented and then other related ones will be assigned for reading and presentation.