Course Syllabus
Prerequisites: You need to have taken a basic undergraduate or graduate compiler course. You need to be able to read and write C++.
Compilers are awesome. If you don't think so, read this paper. If you still don't think so, then probably this isn't a good class for you to take. We'll be studying the technologies that live in the "middle end" of a compiler, focusing particularly on static analysis and the optimizations that are driven by static analysis. We will not talk about parsing at all because parsing is boring. Programming assignments and projects will be based on LLVM. You will implement at least one brand new LLVM optimization before finishing this class. You will also use compiler technology to find at least one bug in an open source program, and you will report that bug to people who can do something about it.
Since this is a high-level special topics class, its direction will be partially driven by you, the students. The rest of the driving will be done by me. To see what I'm interested in, take a look at some compiler papers I've written:
- Understanding Integer Overflow in C/C++
- Deniable Backdoors Using Compiler Bugs
- Provably Correct Peephole Optimizations with Alive
- Taming Compiler Fuzzers
- Test Case Reduction for C Compiler Bugs
- Testing Static Analyzers with Randomly Generated Programs
- Finding and Understanding Bugs in C Compilers
- Eliminating the Call Stack to Save RAM
- Volatiles are Miscompiled and What to Do About It
- Efficient Memory Safety for TinyOS
- Offline Compression for On-Chip RAM
I also sometimes write about compilers at my blog.
Course Summary:
Date | Details | Due |
---|---|---|