Code Optimization in Production Compilers NSWI134, 2019

Jan Hubička, hubicka@kam.mff.cuni.cz

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.