Advanced Compiler Techniques
|
|---|
| Instructor: Kostis Sagonas <kostis@csd.uu.se> Instructor's Office Hours: Tuesdays and Thursdays 14:00 - 15:00 |
| The course will start in the first week of February. First lecture and registration is on Tuesday February 4th, 15-17, in Polacksbacken, Hus 1, 145. If interested in registering in the course, please show up in the first lecture. |
| We will study the construction of optimizing compilers with a focus on uniprocessor architectures. The course will cover data-flow analysis, program optimization, and code generation across basic blocks, procedures, and complete programs. Classical topics such as interprocedural and intraprocedural analysis, intermediate representations, register allocation, and scheduling will be presented in the context of modern uniprocessors. The course will also cover dependence analysis and loop transformations: the building blocks for optimizing for memory hierarchies and parallel machines. Finally, the course will cover virtual machines and the efficient implementation of their interpreters, and uniprocessor garbage collector techniques. |
| This course focuses on the interpretation and compilation techniques needed to obtain high performance on modern computer architectures. Program analysis and optimization techniques are presented in class lectures. Programming projects provide experience with implementation issues and allow students to evaluate the impact of each technique in the context of an actual compiler. |
| Kompilatorteknik DV1 or permission of the instructor. |
Program Representation, Control-Flow and Data-Flow Analyses, Static Single Assignment, Global Optimizations, Partial Redundancy Elimination, Loop Optimizations, Global Register Allocation, Code Scheduling, Control-Flow and LOw-Level Optimizations, Virtual Machines and Interpretation Techniques, Just-In-Time (JIT) Compilation, Runtime System Architectures and Automatic Memory Management Techniques. |
| Num | Date | Time | Place | Topics Covered | Read |
| 1 | Tuesday 4/2 | 15-17 | 1145 | Introduction to Optimizing Compilers | Ch. 1 |
| 2 | Thursday 6/2 | 15-17 | 1212 | Control-Flow Analysis | Ch. 7.1-7.5 |
| 3 | Tuesday 11/2 | 15-17 | 1245 | Foundations of Data-Flow Analysis | Ch. 8.1-8.5 |
| 4 | Thursday 13/2 | 15-17 | 1145 | Reaching Definitions, Available Expressions, and Liveness Analyses. Introduction to Abstract Interpretation. | Slides |
| 5 | Tuesday 18/2 | 15-17 | 1245 | The HiPE Compiler: An Overview | |
| 6 | Thursday 20/2 | 15-17 | 1145 | Static Single Assignment Form | Slides Ch. 8.11 Papers 1, 2 |
| 7 | Tuesday 25/2 | 15-17 | 1245 | SSA-based Dead Code Elimination & Sparse Conditional Constant Propagation | Slides Ch. 12.6 Paper 3 |
| 8 | Thursday 27/2 | 15-17 | 1245 | Partial Redundancy Elimination & Lazy Code Motion | Slides Ch. 13.1, 13.3 Papers 4, 5 |
| 9 | Tuesday 4/3 | 15-17 | 1245 | Loop Optimizations | Slides Ch. 13.2, 14.1 |
| 10 | Thursday 6/3 | 15-17 | 1145 | Global Register Allocation | Slides Ch. 16 |
| 11 | Tuesday 11/3 | 15-17 | 1145 | Code Scheduling | Slides Ch. 17.1-17.5 |
| 12 | Thursday 13/3 | 15-17 | 1145 | Control-Flow and Low-Level Optimizations | Slides Ch. 18 |
| 13 | Tuesday 18/3 | 15-17 | 1245 | Automatic Memory Management | Slides Paper 7 |
| 14 | Thursday 20/3 | 15-17 | 1146 | Virtual Machines, Interpretation Techniques, and Just-In-Time Compilers | Slides |