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