Dominanz Dominanz Sommersemester 2008 1 / 23 Wiederholung: Ablaufgraph Jeder Grundblock besitzt einen entsprechenden Knoten im Ablaufgraph. Die Kanten zwischen den Knoten repräsentieren mögliche Sprünge zwischen den Grundblöcken. Es existieren 2 zusätzliche Knoten Start und End (auch Startblock und Endblock genannt). Es gibt eine Kante von Start zu jedem Grundblock mit dem das Programm betreten werden kann. Es gibt eine Kante von jedem Grundblock mit dem das Programm verlassen werden kann zu End. Dominanz Sommersemester 2008 2 / 23 Beispiel Ablaufgraph Start int gcd(int a, int b) { while(b != a) { if (a > b) a = a − b; else b = b − a; } return a; } while (b != a) if (a > b) true a = a − b; false b = b − a; return a; End Dominanz Sommersemester 2008 3 / 23 Ablaufgraph Definitionen Sei X ein Knoten im Ablaufgraph G (V , E ): Die Menge aller Vorgänger von X : pred(X ) := {y |(y , x) ∈ E } Die Menge aller Nachfolger von X : succ(X ) := {y |(x, y ) ∈ E } Dominanz Sommersemester 2008 4 / 23 Dominanz Definition Dominanz X dominiert Y , wenn jeder Pfad im Ablaufgraph von Start zu Y auch X enthält. Wir schreiben X Y Definition Postdominanz X postdominiert Y , wenn jeder Pfad im Ablaufgraph von X zu End auch Y enthält. Dominanz Sommersemester 2008 5 / 23 Dominanz Beispiel Start A C Start B, A B ¬(A C ), ¬(A End) End postdom B, End postdom C B End Dominanz Sommersemester 2008 6 / 23 Dominanz Eigenschaften Dominanz ist reflexiv: X X Dominanz ist transitiv: X Y ∧ Y Z ⇒ X Z . strikte Dominanz: X ≺ Y := X Y ∧ X 6= Y . direkte Dominanz (englisch immediate dominator): X = idom(Y ) := X ≺ Y ∧ ¬∃Z : X Z Y Jeder Block außer dem Startblock hat genau einen direkten Dominator ⇒ direkte Dominatoren bilden einen Baum, den Dominatorbaum. Postdominanz ist ebenfalls reflexiv und transitiv. Definition von strikter Postdominanz, direkter Postdominanz und dem Postdominanzbaum analog. Dominanz Sommersemester 2008 7 / 23 GOTO-Elimination Satz(Böhm, Jacopini 1964): Jedes Programm kann nur durch While / If-Then-Else / Begin-End dargestellt werden. 1 ⇒ Ersatz von GOTO durch strukturierte Schleifen. Die so entstehenden Programme sind jedoch softwaretechnisch pervers 1 Beweisidee: Durchnummerieren der Grundblöcke im CFG, “Program Counter” Dominanz Sommersemester 2008 8 / 23 Beispiel Start Start A B C D A End E B F G H End D C E F H G Abbildung: Dominanzbaum Abbildung: Ablaufgraph Dominanz Sommersemester 2008 9 / 23 GOTO-Elimination - Identifikation geschachtelter Schleifen 1 Dominatoren, zu denen Rückwärtskanten führen bilden Schleifeneintrittspunkte. 2 Postdominatoren der Eintrittspunkte bilden Schleifenaustrittspunkte. 3 Schleifen werden von innen nach aussen identifiziert (bottom-up Durchlauf im Dominatorbaum). 4 Falls 1./2. nicht möglich so entspricht die Schleife einer starken Zusammenhangskomponente. 5 Kombination von Dominatoren und Zusammenhangskomponenten: finde zuerst strukturierte Schleifen. 6 Evtl. aufbrechen des Graphen und Kopieren von Knoten / Einfügen zusätzlicher Kontrollflags. Dominanz Sommersemester 2008 10 / 23 GOTO-Eliminiation - Beispiel Start Start A B C D A End E B C F D E F H G G H End Abbildung: Dominanzbaum mit Ablaufkanten Abbildung: Ablaufgraph Dominanz Sommersemester 2008 11 / 23 GOTO-Eliminiation - Beispiel if ( A ) { B; } else { while( C1 && !G ) { if ( C2 ) { D; } else { E; } F; } H; } Dominanz Start A B D End C E F H G Sommersemester 2008 12 / 23 GOTO-Eliminiation - Beispiel weiteres Beispiel: Einfügen der Kante (B, D) Start Start A B C D A End C F E G E F B D H G H End Abbildung: Dominanzbaum mit Ablaufkanten Abbildung: Ablaufgraph Dominanz Sommersemester 2008 13 / 23 GOTO-Eliminiation - Beispiel if ( A ) { flag1 = true; if ( B ) { flag2 = true; } else { flag2 = false ; } } else { flag 1 = false ; } if (! flag1 || flag2 ) { while( 3a && !7 || flag2 ) { if ( 3b || flag2 ) { 4; flag2 = false ; } else { 5; } 6; } 8; } Dominanz Start B D A End C F E G Sommersemester 2008 14 / 23 H Berechnung mit Fixpunktiteration Die Dominanzmengen lassen sich darstellen als dom(X ) = X ∪ \ dom(Y ) Y ∈pred(X ) ⇒ Berechnung mit Fixpunktiteration möglich. Worst-Case Laufzeit allerdings quadratisch. Dominanz Sommersemester 2008 15 / 23 Der Lengauer-Tarjan-Algorithmus Lengauer, T. und Tarjan, R. E. A Fast Algorithm for Finding Dominators in a Flowgraph Tiefensuchbaum Nimmt man die bei einer Tiefensuche besuchten Kanten und Knoten, so entsteht ein Tiefensuchwald. Auf Ablaufgraphen ein Tiefensuchbaum. Tiefensuchnummern Nummerieren der Knoten in Besuchsreihenfolge (pre-order Numbering) legt die Tiefensuchnummern der Knoten fest. Schreibweise: dfnum(x) Dominanz Sommersemester 2008 16 / 23 Beispiel - Ablaufgraph Start B C D E G H F J I K L End Dominanz Sommersemester 2008 17 / 23 Beispiel - Tiefensuchbaum Start B C D E G H F J I K L End Dominanz Sommersemester 2008 18 / 23 Tiefensuchbäume - Eigenschaften Betrachte Knoten n 6= Start und seinen Pfad im Spannbaum: Für alle Knoten k auf dem Pfad gilt: dfnum(k) ≤ dfnum(n). Alle Dominatoren von n liegen auf dem Pfad (folgt aus Definition des Dominators). Damit gilt: d n ⇒ dfnum(d) ≤ dfnum(n) ⇒ Berechnung des direkten Dominators von n durch testen der Vorgänger auf dem Pfad. Ein Knoten x des Pfades ist genau dann kein Dominator von n, wenn es alternative Pfade zu n um x herum gibt. Ist dfnum(a) ≤ dfnum(b) dann muss jeder Pfad von a nach b mindestens einen gemeinsamen Vorgänger von a und b im Tiefensuchbaum enthalten. Beachte: Im folgenden identifizieren wir Knoten mit ihren Tiefensuchnummern! Dominanz Sommersemester 2008 19 / 23 Semidominatoren r Ein Semidominator ist definiert als. sdom(n) = min{m|alle Pfade P = m, v1 , . . . , vk , n mit vi > m für 1 ≤ i ≤ k} ddom(n) d sdom(n) s x Der Semidominator s eines Knotens n ist dessen kleinster a Vorgänger auf dem Tiefensuchpfad, von dem ein Pfad von s nach n über Knoten außerhalb des Tiefensuchpfades existiert. y Der Semidominator muss nicht der direkter Dominator sein. (Beispiel siehe Bild). a v Bedenke identifziereung mit Tiefensuchnummern n Dominanz u Sommersemester 2008 20 / 23 Berechnung der Semidominatoren Betrachte Knoten n und jeden seiner Vorgänger v im Ablaufgraph. Liegt v auf dem Tiefensuchpfad nach n (also dfnum(v ) < dfnum(n)) so ist v ein Kandidat. Liegt v nicht auf dem Tiefensuchpfad nach n (also dfnum(v ) > dfnum(n)) so sind die Semidominatoren von v und allen Knoten u auf dem Tiefensuchpfad nach v mit dfnum(u) < dfnum(v ) Kandidaten. Semidominator ist der Kandidat mit der kleinsten Tiefensuchnummer. Dominanz Sommersemester 2008 21 / 23 Dominator Theorem r Auf dem Tiefensuchpfad zwischen sdom(n) und n einschließlich, sei y derjenige Knoten dessen Semidominator die kleinste Tiefensuchnummer besitzt. Dann ist ddom(n) = sdom(n) ddom(y ) ddom(n) d sdom(n) s x if sdom(y ) = sdom(n) if sdom(y ) 6= sdom(n) y u v n Dominanz Sommersemester 2008 22 / 23 Berechnung der direkten Dominatoren Konstruktion des Dominanzbaums bottom-up als aufspannender Baum. dabei Berechnung der Semidominatoren gemäß Formel Pfadkompression (ähnlich wie bei Union-Find) zur Berechnung der Pfade sdom(n) → n anwenden. Dominanz Sommersemester 2008 23 / 23