Code Optimization in Production Compilers NSWI134, 2019
Office hours: by appointment (prefferably Tuesday or Wednesday). S322 (Malostranské nám. 25, 3rd floor).
- February 20
- Brief history of compilers: from 1950s till today. What are main differences between compilers in 1980s, 90s, 2000s and today. Introduction to open-source compiler projects: GCC, LLVM, Open64, Spider Monkey, Chrome V8
- February 28
- Intermediate languages: design challenges, basic features of a highlevel, midlevel and lowlevel ILs. Type system of Gimple as an example of high-level approach, LLVM as an example of midlevel/lowlevel approach and RTL (a very low-leve IL). Brief mention of WHIRL used by Open64 as an example if IL that can work on multiple levels and MLIR, a multi-level IR being developed by Google for LLVM and Tensorflow.
Some discussion about new architectures such as GCN and ARM SVE.
- March 7
- More on intermediate languages. Control flow graph. Introduction to basic local optimizers: basic-block, super-block and hyper-block based optimizers.
- March 14
- Data-flow analysis and basic iterative dataflow slovers. Formulation of constant-propagation, copy-propagation, constant subexpression ellimination as data-flow problems. Why writting data-flow based compilers is hard. You can check, for example this slides.