Die Information ob zwei Pointer denselben Speicher referenzieren (also
aliasen) können, ist eine Grundlage für viele Compileroptimierungen.
Zwei Pointer die nicht aliasen, arbeiten auf unterschiedlichen Teilen
des Speichers, so dass sie sich gegenseitig nicht beeinflussen können.
Die Firm Zwischensprache repräsentiert
Speicher als Wert und kennt Speicherabhängigkeiten, allerdings ist die
Semantik eines Speicherwerts nicht klar definiert. Alias Information
lässt sich als Aufspaltung des Speicherwerts repräsentieren, wobei
darauf geachtet werden muss, dass Speicher nicht verdoppelt werden kann,
wie das beispielsweise mit Registerinhalten möglich ist. Zu jeder
Aufspaltung muss es also auch eine Vereinigung geben, damit am Ende eines
Programmgraphen wieder der gesamte Speicher zurückgegeben werden kann.
Im folgenden Beispiel alias a und b nicht, aber c könnte mit beiden aliasen.
Aufgabe
- Aufstellen einer Semantik für Speicherwerte in Firm
- Adaption der Aliasanalyse als Graphtransformation
- Falls noch Zeit ist Erweiterung/Verbesserung der existierenden Aliasanlyse
Literatur
Voraussetzungen
- Spaß am Übersetzerbau
- Vorkenntnisse in Programmanlyse (Sprachtechnologie+Compiler1) werden empfohlen
- Kenntnisse in C (oder C++)
Veröffentlichungen
Betreuer
Studenten