Speaker Prof. Dr. Helmut Seidl
Location MI 00.13.009A
Date Wednesdays & Thursdays 10:00 - 12:00
Module IN2053

Contents

The lecture is meant for students doing Master studies who are interested in compiler technology. 

Programs which we write should be both efficient and easily to maintain. In particular, maintainability means that programs should be well-structured and easily understandable also by humans. Being well-structured and easily readable, though, may often come at the price oft a degradation in efficiency at run-time.

For this reason, most compilers offer an optimization phase in which the source program is analyzed and where various transformations are applied to automatically improve efficiency. In some cases, it may happen that the attempt for improvement overshoots the target and results in programs which are perhaps fast but are no longer equivalent to the original program.

In the lecture, we give an overview over standard techniques for improving the quality of the generated code. In particular, we are interested in methods which guarantee that the resulting code still is equivalent to the source program.

The topics covered:

  • Intra-procedural analysis and optimizations
  • Abstract Interpretation and Interval Analysis
  • Interprocedural optimizations
  • Exploitation of hardware features such as registers, pipelines, caches, specific instructions
  • Optimization of functional languages
  • Optimization of Prolog

Last year slides

Exam

NEW: Repetition exam review will take place on Tuesday, April 30 16:15 - 17:15 in the room 02.07.034. You may also review your end-of-term exam, if you missed the appointment in March.

The written exam will take place on Tuesday, February 26, 10:30 - 12:30 in the hall 102, Interims Hörsaal 2. The only allowed auxiliary material is one A4 (double-sided) cheat sheet.

The repetition exam is on Friday, April 12, 10:30 - 12:30 in the lecture hall MW 1801, Ernst-Schmidt-Hörsaal. You can register for the re-exam between March 18 and April 1. 

Exercises

Exercises take place on Wednesdays 12:30 - 14:00 in 02.07.014.

Please prepare the corresponding sheet below.

24.10. 01.pdf 01sol.pdf

31.10. 02.pdf 02sol.pdf

07.11. exercise sheet 2, ex. 2-4

14.11. 03.pdf 03sol.pdf

21.11. 04.pdf 04sol.pdf This exercise session is CANCELLED because of illness, apologies for a short notice. We will discuss the solutions/questions you had next week.

28.11. 05.pdf 05sol.pdf

06.12 15:00 06.pdf 06sol.pdf

12.12 07.pdf 07sol.pdf

19.12 08.pdf 08sol.pdf

09.01 09.pdf 09sol.pdf

16.01 10.pdf 10sol.pdf

23.01 11.pdf 11sol.pdf

30.01 12.pdf 12sol.pdf

06.02 13.pdf 13sol.pdf

13.02 Office hours. No new exercise sheet, please prepare your questions 

If you have any questions regarding organization or content of the exercises, please contact Anastasiia Izycheva (izycheva@in.tum.de).

Projects

UPDATE: The presentations take place on March 7 starting at 10:30 am in the room 02.09.014. We planned the time until 14:15

@Project teams only: If you have a good reason why you can't make it for the presentations, please email Anastasiia Izycheva as soon as possible.

Students who are not involved in the projects are not required to attend the presentations.

For the implementation projects you can use a Java front-end for a very restricted C.

To get a grade bonus you will have to submit an artefact and present your project.

Presentation schedule

Time Topic
10:30 Loop unrolling, bounds detection and constant propagation
11:00 Function inlining, unrolling for recursive functions and tail-call optimization
11:30-12:15 Lunch break
12:15 Software pipelining
12:45 Dynamic calls
13:15 Interval Analysis with the interval set domain
13:45 SSA form

 

List of projects

Talks:

  • 1 person - Software pipelining
  • 2 people - Polyhedral model and affine scheduling + any optimization based on the polyhedral model
  • 3 people - PBQP talk + implementation + register allocation using PBQP

Implementations:

  • 2 people - Loop unrolling + find loop bounds + constant propagation
  • 2 people - Function inlining (different strategies - provide the call graph) + unroll for recursive functions + tail call optimization
  • 2 people - Deal with dynamic calls:
    • adaption of syntax/semantics
    • analysis of functions (function pointers) residing in blocks
    • extended call-graph construction
    • extend Points-to analysis for function calls (pointers)
  • 1 person - Interval Analysis with the interval set domain
  • 2 people - SSA form

Bibliography

  • Helmut Seidl, Reinhard Wilhelm and Sebastian Hack. Compiler Design - Analysis and Transformation. Springer, 2012.
  • Helmut Seidl, Reinhard Wilhelm and Sebastian Hack. Übersetzerbau 3: Analyse und Transformation. Springer, 2010.