logo of the SSW institute
Institut für Systemsoftware
Johannes Kepler Universität Linz
Fachbereich Informatik
logo of the Cristian Doppler Research Association
Christian Doppler Labor
Monitoring and Evolution of Very-Large-Scale Software Systems

Home

General
Staff
Contact
Partners
Alumni

Research
Areas
Projects
Papers
Books
Reports
Awards

Teaching
Lectures
Exams
B.Projects
M.Theses
PhD Theses
Go Abroad

Misc
Library
Seminars
Gallery
Links
Search

Webmaster


logo of the Johannes Kepler University (JKU)

Übersetzerbau 2

Mössenböck 2KV Di 13:45 - 15:15 MT 226/1 Beginn: 5.3.2013


Diese zweistündige KV schließt an die Lehrveranstaltung Übersetzbau an und konzentriert sich vor allem auf die Codeerzeugung für Registermaschinen (am Beispiel der Intel-Architektur) und auf Optimierungstechniken. In den Übungen wird das Arbeiten mit dem Compilergenerator Coco/R geübt.

Voraussetzung: Lehrveranstaltung Übersetzerbau

Inhalt

  1. Symbollisten und getrennte Übersetzung
    - Wiederholung: Objekte, Gültigkeitsbereiche, Typen
    - Getrennte Übersetzung in Oberon-2
    - Getrennte Übersetzung in Java

  2. Codeerzeugung für Registermaschinen
    - Architektur des Intel IA-32
    - Designüberlegungen
    - Verwaltung des Codespeichers
    - Registerallokation
    - Items: Operanden der Codeerzeugung
    - Ausgabe von Maschinenbefehlen
    - Laden von Werten und Adressen
    - Codeerzeugung für Ausdrücke
    - Codeerzeugung für Zuweisungen
    - Sprünge
    - Codeerzeugung für Ablaufkontrollstrukturen
    - Kurzschlussauswertung Boolescher Ausdrücke
    - Codeerzeugung für Prozeduren
    - Inhalt der Objektdatei

  3. Zwischensprachen
    - Abstrakter Syntaxbaum
    - Kontrollflussgraph
    - Def-Use-Information
    - Dominatorbaum
    - Static Single Assignment Form (SSA-Form)

  4. Optimierung
    - Motivation
    - Einfache Optimierungen
    - Copy Propagation
    - Common Subexpression Elimination
    - Dead Code Elimination
    - Prozedurenoptimierung
    - Schleifenoptimierung
    - Instruction Scheduling
    - Peephole-Optimierung

  5. Registerallokation
    - Einfache Registerallokation
    - Registervariablen
    - Globale Registerallokation mit Graph Coloring
       - Live Ranges
       - Interferenzgraph
       - Aufbau des Interferenzgraphen
       - Graph Coloring
       - Register Spilling
    - Beseitigung von Phi-Anweisungen
    - Retten von Registern bei Prozeduraufrufen

Skript

Das Skript ist auf der KUSSS-Seite dieser LVA als PDF-Dokument verfügbar.

Literatur

  • Aho A.V., Lam M., Sethi R., Ullman J.D.: Compiler -- Prinzipien, Techniken und Werkzeuge. Pearson Education, 2008
  • Cooper, K.D., Torczon, L.: Engineering a Compiler. 2nd edition, Morgan Kaufmann, 2012
  • Appel A. W.: Modern Compiler Implementation in Java. 2nd edition, Addison-Wesley, 2002
  • Muchnick, S.: Advanced Compiler Design and Implementation. Morgan Kaufmann, 2003
  • Wirth N.: Grundlagen und Techniken des Compilerbaus. Oldenbourg, 2008

Prüfung

Die Prüfung besteht aus einer Klausur am Di, 4.6.2013 (ohne Unterlagen) sowie aus der Abgabe des unten beschriebenen Projekts.

Projekt

Als Projekt zur Vorlesung wird ein kleiner Compiler für die Intel-Architektur entwickelt (siehe Aufgabenstellung). Scanner und Parser werden dabei mit Coco/R erzeugt, so dass sich die Arbeit auf die Codeerzeugung konzentriert. Die Abgabe des Projekts ist nicht verpflichtend. Mit der Klausur ist jedoch bestenfalls ein "gut" zu erreichen. Wer ein korrektes Projekt abgibt, und auf der Klausur zumindest 40 von 90 Punkten erreicht hat, verbessert seine Vorlesungsnote um einen Grad. Das Projekt ist am Freitag, den 7.6.2013 zwischen 13:00 und 15:00 am SSW abzugeben. Bringen Sie Ihr Notebook mit und führen Sie ihren Compiler vor.

Zur Implementierung des Projekts benötigen Sie eine detaillierte Beschreibung der Intel-Architektur samt Befehlscodierung. Sie finden sie in folgenden Handbüchern:

Um den erzeugten Code zu laden und auszuführen, verwenden Sie bitte folgenden Mini-Lader (Quellcode, Executable) gemäß Projektbeschreibung. Wenn Sie den Lader mit Visual Studio übersetzen, können Sie Visual Studio auch dazu verwenden, um sich den erzeugten Binärcode anzusehen und zu debuggen.

Den Compilergenerator Coco/R finden Sie hier. Er ist für die Sprachen Java, C# und C++ verfügbar.