Course Description
     This course will focus on advanced techniques for program optimization and verification, with a focus on multicore processors and concurrency.  We will begin with classical topics such as interprocedural and intraprocedural dataflow analysis, abstract interpretation, and optimization techniques for modern uniprocessors. Then we will discuss multicore processors, and study techniques such as dependence analysis, loop transformations, points-to analysis, and shape analysis for optimizing the execution of regular and irregular programs on multicore processors.

Prerequisites
    
An undergraduate compiler course or permission of instructor. Programming experience in the context of a larger system is helpful because some of the programming assignments require the use of the LLVM infrastructure.

Coursework
   
In the first half of the course, students will do both written and programming assignments. There will be one mid-semester exam. In the second half of the course, students will present papers and do a final project.

Lecture slides

Assignments

Projects