Praktisch alle Übersetzer besitzen eine Optimierung die Konstanten faltet, also Operationen mit Konstanten Parametern zur Übersetzungszeit ausrechnet. Beispielsweise wird return 3+2*4 zu return 11 umgeformt. Analog werden arithmetische Vereinfachungen durchgeführt return -x + y wird zu return x - y. Einige dieser Regeln sind trickreich und nicht offensichtlich: (a < 0) || (b < 0) kann auf einer 32 Bit Maschine zu ((a | b) >> 31) umgeformt werden.
Konstantenfalten und arithmetische Optimierungen haben gemeinsam, dass sie eine feste Anzahl Operationen betrachten und diese durch andere Operationen ersetzen. Übersetzer enthalten zahllose solcher einfachen Regeln, die manuell ausprogrammiert sind. Dies ist wenig systematisch und fehleranfällig.
Ziel der Arbeit ist es eine Übersicht und Systematik solcher lokalen Optimierungsregeln aufzustellen. Damit soll dann die Optimierungsphase eines Übersetzers automatisch generiert werden.
Aufgabe:
- Aufstellen einer Liste von lokalen Optimierungen. Regeln können durch Lesen des Quelltexts anderer Übersetzer gefunden werden.
- Systematisches Zusammenfassen der Regeln durch Erstellen einer maschinenlesbaren Spezifikation.
- Entwicklung eines Optimierungsphase für den libFirm Übersetzer die die Regeln der Spezifikationsdatei einliest und abarbeitet. Alternativ kann ein Codegenerator zur Erzeugung der kompletten Phase entwickelt werden.
Voraussetzungen
- Grundkenntnisse im Übersetzerbau.
- Gute Kenntnisse in C (oder C++).
Veröffentlichungen
Veröffentlichung |
Eine Systematik für lokale Optimierungen |
Betreuer
Ehemalige Mitarbeiter |
---|
Dipl.-Inform. Matthias Braun |
Studenten
Ehemalige Studenten |
---|
Johannes Franz |