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:
-
In depth understanding of foundational concepts of optimizing compilers.
-
Hands-on experience in building optimizing compilers from a working single pass compiler.
-
Understanding of current research results in one or more areas of
optimizing compilers
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.
- Register allocation
- SSA based optimizations