Computer Science

Faculty of Engineering, LTH

Denna sida på svenska This page in English

EDAN75 - Optimizing Compilers

  • You can sign up for a lab time here
  • The planned 2020 edition of the course book is delayed to at least 2021. I will base the youtube lectures on the 2018 edition.
  • Link to vcc is here.
  • Lectures
  • F1 yt Introduction to the course
  • F2 yt dominance analysis, p 53-96 
  • F3 yt translation to SSA Form, p99-101, 130-141 (142-151 after Lab 2)
  • F4 yt register allocation, p245-257
  • F5 vt constant folding and constant propagation, p153-160
  • F6 vt value numbering, p181-194
  • F7 yt partial redundancy elimination, p161-180
  • F8 yt operator strength reduction, p194-204
  • F9 yt dead code elimination, p102-105, 204-214
  • F10 yt data dependence analysis, p107-120
  • F11 yt unimodular transformations: inner loop parallelization, p215-226
  • F12 yt instruction scheduling, p229-243
  • F13yt LLVM
  • F14yt the Java virtual machine: Hotspot 
  • Reading advice for the exam
  • Link for the current edition of the book which covers this course instance
  • Link for the 2016 edition of the book for the 2016 course instance. Note that not all research covered in the current course was published in 2016.

The course goal is to give the students a solid understanding of modern optimizing compilers. The course covers:

  • Dominance analysis
  • SSA Form
  • Scalar optimization algorithms
  • Dependence analysis
  • Loop transformations
  • Instruction scheduling
  • Register allocation
  • Link-time optimization
  • The design of the Clang/LLVM compiler
  • Current research in optimizing compilers and virtual machines (e.g., the JVM)

Optimizing compilers make extensive use of graph algorithms and linear algebra for dependence analysis. An optimizing compiler must be fast, and therefore an important focus is on efficient algorithms. Often, however, NP-complete problems need to be solved and therefore good but suboptimal solutions must be found, e.g. to instruction scheduling register allocation.

The following are NOT prerequisites:  C programming, C++ programming, EDAN65 Compilers. EDAN65 and EDAN75 can be taken in any order. With some efforts, you will be able to take this course without prior knowledge of C/C++.

After taking this course in LP1 2018, you may want to take EDAN70 Project in Computer Science in LP2 to focus on a relevant topic of your choice in optimizing compilers, and then do a MSc thesis in LP3-LP4 for one of the compiler companies in Lund or elsewhere.


Page Manager:

Facts about the course