Syllabus
This syllabus is only indicative. Our aim is to cover topics in the mid and back-end of a compiler. In the Spring 2020 offering, we will also focus on analyses that execute "outside" of a compiler (Oracle's Souffle, Facebook's Infer, various model checkers, symbolic execution engines, etc.).
Machine-independent analyses and transformations
- intermediate representations
- value numbering
- data flow analysis using the monotone framework
- available expressions
- liveness
- def-use
- dead code elimination (DCE)
- constant/copy propagation
- common subexpression elimination (CSE)
- partial redundancy elimination (PRE)
- reasoning in the monotone framework
- interprocedural analyses
- alias and points-to
- dominator analysis, control dependence graphs
- SSA representation
Reasoning about programs
- Types
- Abstract interpretation
- Symbolic execution
- Introduction to program verification
In the Spring 2020 edition of the course, I may elide the following components.
Machine-dependent transformations
- Register Allocation
- Instruction Scheduling
- Software Pipelining
Loop analyses and transformations in the polyhedral framework
Primary focus on vectorization and cache locality