Compiler Optimization, Winter 2018

General Course Information

Instructor: Prof. Gennady Pekhimenko
Teaching Assistant: Bojian Zheng
Discussion Board: https://piazza.com/utoronto.ca/winter2018/cscd70/home
Syllabus: [PDF]

Course Description

The goal of this course is introduce students to the theoretical and practical aspects of building optimizing compilers that effectively exploit modern architectures. The course will begin with the fundamentals of compiler optimization, and will build upon these fundamentals to address issues in state-of-the-art commercial and research machines. Topics include: intermediate representations, basic blocks and flow graphs, data flow analysis, partial evaluation and redundancy elimination, loop optimizations, register allocation, instruction scheduling, interprocedural analysis, memory hierarchy optimizations, extracting parallelism, and dynamic optimizations. Students will implement significant optimizations within LLVM, a modern research compiler framework.

Prerequisites

This course is not supposed to be your first C++ course. Previous knowledge on compiler frontend is recommended but not required. If you feel uncertain about whether you are adequately prepared to take this class, please discuss this with the instructor.

Course Work and Grading

Assignments45%A major focus of this course is the assignments. We prefer that you work in groups of two on the assignments. The assignments will contain both programming and theoretical questions. There will be three assignments, each worth 15% of your final grade. The first assignment will be distributed on Jan. 11 and it will be about introduction to the LLVM compiler (we will be using this compiler framework throughout the whole semester).
Midterm 20%There will be one midterm exam covering the earlier (and more fundamental) portion of the course material. The exam will be closed book, closed notes.
Final Exam 35%There will be a final exam covering the whole course material. The exam will be closed book, closed notes.