Compiler II

Werbung
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
Herunterladen