|Subject Area||Software and Information System Engineering|
|Semester||Semester 8 – Spring|
The course provides students with advanced knowledge in the subject of compilers. After a quick overview of basic compiler topics, it briefly covers some advanced front-end subjects, like parallel parsing algorithms, type systems and attribute grammar evaluation. Starting with a study of intermediate representations, it then concentrates on optimizations and code generation. In the area of optimizations, it covers thoroughly data and control flow analysis, dependence and basic block detection, symbolic analysis, pointer analysis, interprocedural analysis. Special attention is given to loop optimizations, including loop reorganization through unrolling, interchange, if-conversion, fusion and distribution, as well as iteration space transformations, loop invariant code detection and other optimizations. Code generation issues are also analyzed, like register allocation, instruction selection, code scheduling through reordering and software pipelining, and parallel code generation.
The course includes reading of important research papers in the areas of compiler optimizations and code generation, as well as a programming project on the implementation of optimizations on an open-source compiler.
The course is an advanced course on the subject of compilers.
The course material aims at the understanding and acquisition of an in-depth knowledge of compilers, through the study of (a) front-end specialized issues, and (b) advanced issues on optimization of intermediate and final code, as well as on final code generation, which are not covered in the course “HY320 Compilers”. The former provide complementary knowledge that the student may need in specific compiler applications, whereas the latter – which consist the largest part of the course material – are issues met in all modern compilers.
With the successful completion of the course, the student will be in a position to:
- Have in-depth understanding of both basic and critical compiler issues.
- Have specialized knowledge on advanced issues met in modern compilers.
- Explain and solve problems related to modern compilers, or analyze and comment subjects of important publications.
- Develop new optimization algorithms, fully comprehending the necessity of their implementation.
- Study real compilers, develop code for them, and on the other hand cooperate with colleagues in order to create and present a group project on a subject related to modern compilers, should they select a group project.
- Search and study contemporary bibliography from internationally high-ranking journals and conferences, explain and evaluate publications from them at a sufficient level, and also present their conclusions in class, should they choose a non-group project.