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