Kein Folientitel

Transcription

Kein Folientitel
SSA
Definition und
Aufbau aus dem AST
Simone Forster
[email protected]
Betreuer: Florian Liekweg
Übersicht
•
•
•
•
•
•
Einleitung
SSA - Definition
PHI - Funktionen
SSA - Variationen
Dominanzgrenzen
Algorithmus nach
Cytron et al.
02.6.2003
• Verbesserter
Algorithmus nach
Cytron/Ferrante
• Weitere Algorithmen
• Vorteile von SSA
• Zusammenfassung
• Quellenangabe
Simone Forster
2
Einleitung
• SSA arbeitet auf Zwischendarstellung
• SSA bietet sich für Graphen an
• moderne Zwischendarstellungen immer
mehr graphbasiert:
– nur Darstellung von Datenabhängigkeiten
– erhält wichtige Übersetzungs-Informationen
• SSA vereinfacht Optimierungen auf der
Zwischendarstellung erheblich
02.6.2003
Simone Forster
3
SSA - Definition
• SSA = engl.: Static Single Assignment
Jede Variable im ganzen Programm
bekommt nur einmal einen Wert
zugewiesen.
• keine Zwischendarstellung
• Eigenschaft, der die
Zwischendarstellung genügen kann
02.6.2003
Simone Forster
4
PHI - Funktionen
• normales Programm
• Ablaufgraph
func foo
{
int x = 0;
if (x==0)
then do { x=5; }
else do { x=7; }
int y = x+1;
}
02.6.2003
Simone Forster
5
PHI - Funktionen (2)
• Anzahl der Operanden =
Anzahl der Vorgänger im Ablaufgraph
• j-ter Operand =
Wert der Variable im j-ten Vorgänger
Φ(x1, x2, x3, ...) liefert den Wert der
Variable in dem Knoten zurück, von dem
aus der momentane Knoten erreicht
wurde.
02.6.2003
Simone Forster
6
Beispiel
• normales Programm
func foo
{
int x = 0;
if (x==0)
then do { x=5; }
else do { x=7; }
int y = x+1;
}
02.6.2003
• Programm in SSA-Form
func foo
{
int x1 = 0;
if (x1==0)
then do { x2=5; }
else do { x3=7; }
x4 = Φ(x2,x3);
int y1 = x4+1;
}
Simone Forster
7
SSA - Variationen
• minimale SSA-Form [CEtAl]
– Anzahl der eingesetzten Φ-Funktionen
minimal
• Pruned SSA (engl. abgeschnitten) [CCF]
– im Graph nur Φ-Funktionen platziert, wenn
die Variable tiefer noch verwendet wird
• Aufbau auf Anfrage (on demand) [AR]
– nur Φ-Funktionen konstruiert, wenn der
Wert benötigt wird
02.6.2003
Simone Forster
8
Transformation nach SSA
• Ziel: Programm in Zwischendarstellung
umwandeln nach SSA-Form
• verschiedene Algorithmen möglich:
– Φ-Funktionen durch Dominanzgrenzen
bestimmen [CEtAl]
– Φ-Funktionen bestimmen durch Finden der
unmittelbaren Dominatoren [CF]
02.6.2003
Simone Forster
9
Dominanzgrenzen
• X, Y sind Knoten
– X dominiert Y ⇔
X auf jedem Pfad von der Wurzel zu Y
– X dominiert Y strikt ⇔
X dominiert Y und X ≠ Y
– Y in Dominanzgrenze von X ⇔
Y ist der erste Knoten, der von X nicht strikt
dominiert wird, dessen Vorgänger aber von
X dominiert werden (Y ∈ DG(X))
02.6.2003
Simone Forster
10
Dominanzgrenzen (2)
• iterierte
Dominanzgrenzen
• Beispiel
DG(M) = UX∈M DG(X)
DG1(M) = DG(M)
DGi+1(M) = DG(M ∪ DGi(M))
DG+(M) =
maximale Menge der
Dominanzgrenzen einer
Knotenmenge
02.6.2003
Simone Forster
11
Algorithmus nach Cytron et al.
• Dominanzgrenzen aus dem
Ablaufgraph bestimmen
• mit den Dominanzgrenzen durch
iterierte Dominanzgrenzen Platzierung
der Φ-Funktionen bestimmen
• Variablen umbenennen
02.6.2003
Simone Forster
12
Verbesserter Algorithmus
• unmittelbarer (direkter) Dominator
– X ist der nächste Knoten, der Y strikt
dominiert ⇔ X = ddom(Y)
• Mengen von Knoten bilden, die alle den
selben unmittelbaren Dominator haben
– Menge in Knotenmengen aufteilen, sodaß
jeder Knoten in DG+ der anderen Knoten
• Platzieren der Φ-Funktionen aufgrund
Kenntnis der iterierten Dominanzgrenzen
02.6.2003
Simone Forster
13
Weitere Algorithmen
• Pruned (abgeschnittenes) SSA:
– während Generierung der Φ-Funktionen Vorausschau,
ob Variable weiter unten im Graph noch verwendet
– ja: Φ-Funktion eingefügt
– nein: Φ-Funktion nicht gebildet
• Aufbau auf Anfrage (on demand):
– Φ-Funktion erst dann gebildet, wenn klar ist, daß sie
benötigt wird
– wenn benötigt, dann Rückverfolgung des Ablaufes
und nachträgliche Generierung der Φ-Funktion
02.6.2003
Simone Forster
14
Vorteile von SSA
• gute Möglichkeiten, Optimierungen
darauf auszuführen
• Programm-Äquivalenzen erkennen
[AWZ, YHR]
• Parallelismus in imperativen
Programmen erhöhen [CF2]
• einfache Datenfluß-Informationen
kompakter darstellen [RL]
02.6.2003
Simone Forster
15
Zusammenfassung
• Aufbau von SSA
• verschiedene Algorithmen zur
Konstruktion von Φ-Funktionen
• nach Cytron: O(E + N²)
• nach Cytron/Ferrante: O(E + N + Eα (E))
• Pruned SSA und Aufbau auf Anfrage:
linear zu der Anzahl der Anweisungen
02.6.2003
Simone Forster
16
Quellenangabe
• Übersetzerbau - Ein kleiner Überblick
– Rubino Geiß, Sebastian Hack
– IPD Lehrstuhl Goos, Universität Karlsruhe (TH)
• Efficiently Computing Static Single Assignment Form
and the Control Dependence Graph
– Ron Cytron et al.
– ACM Transactions on Programming Languages and
Systems, Vol.13, No.4, October 1991, Pages 451-490
• Efficiently Computing Φ-Nodes On-The-Fly
– Ron K. Cytron and Jeanne Ferrante
– ACM Transactions on Programming Languages and
Systems, Vol.17, No.3, May 1995, Pages 487-506
02.6.2003
Simone Forster
17
Zitat - Quellen
•
•
•
•
•
•
•
•
[CEtAl]: Ron Cytron et al., Efficiently Computing Static Single Assignment Form
and the Control Dependence Graph, ACM 1991
[CCF]: J.Choi, R.Cytron, J.Ferrante, Automatic construction of sparse data flow
evaluation graphs, ACM 1991
[AR]: M.Armbruster, C.von Roques, Entwurf und Implementierung eines Sather-K
Übersetzers, IPD 1996
[AWZ]: B.Alpern, M.N.Wegman, F.K.Zadeck, Detecting equality of values in
programs, ACM 1988
[YHR]: W.Yang, S.Horwitz, T.Reps, Detecting program components with
equivalent behaviors, Tech Report 840, Dept. of Computer Science, Univ. of
Wisconsin at Madison, 1989
[CF]: R.Cytron, J.Ferrante, Efficiently Computing Φ-Nodes On-The-Fly, ACM 1995
[CF2]: R.Cytron, J.Ferrante, What‘s in a name?, International Conference on
Parallel Processing, 1987
[RL]: J.H.Reif, H.R.Lewis, Efficient symbolic analysis of programs, J. Comput. Syst.
Sci. 32, 1986
02.6.2003
Simone Forster
18
SSA
Definition und
Aufbau aus dem AST
Simone Forster
[email protected]
Betreuer: Florian Liekweg

Documents pareils