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
Automated Software Engineering

Home

General
Staff
Contact
Partners
Alumni

Research
Areas
Projects
Papers
Books
Reports

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 HS 13 Beginn: 9.3.2010


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
  • Appel A. W.: Modern Compiler Implementation in Java. Addison-Wesley 1997
  • Muchnick, S.: Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997
  • Wirth N.: Grundlagen und Techniken des Compilerbaus. Oldenbourg, 2008

Prüfung

Die Prüfung besteht aus einer Klausur am 15.6.2010 (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 eine korrekte Übung abgibt, verbessert seine Vorlesungsnote um einen Grad. Das Projekt ist am Freitag, den 2. Juli 2010 zwischen 13:00 und 15:00 am SSW abzugeben. Andere Abgabetermine können mit dem LVA-Leiter vereinbart werden.

Zur Implementierung der Übung 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.

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