Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4 Implementierung<br />
Die Anzahl solcher Muster kann reduziert werden. Hierzu wird eine Normalform eingeführt,<br />
die eine Anordnung der Operanden für kommutative Operationen festlegt. Es<br />
werden nur noch solche Muster betrachtet, die dieser Normalform genügen. Das Tauschen<br />
von Operanden bei kommutativen Operationen hat keinen Einfluss, sowohl auf die<br />
Semantik der einzelnen Operationen als auch auf die Semantik des gesamten Musters.<br />
Durch die Normalform bzw. die Normalisierung werden also keine semantisch unterschiedlichen<br />
Muster ausgeschlossen.<br />
Praktisch wird mit dieser Normalisierung vor allem erreicht, dass sich Konstanten bei<br />
kommutativen Operationen immer auf der rechten Seite befinden, oder, falls es sich bei<br />
beiden Operanden um eine Konstante handelt, die Konstanten mit dem größeren Wert<br />
immer rechts steht. Variablen stehen, sofern es sich bei dem zweiten Operanden nicht<br />
um eine Konstante handelt ebenfalls immer rechts.<br />
Die Definition der Normalform erfordert zunächst die Festlegung einer Totalordnung<br />
der in Definition 6 beschriebenen Menge T der verfügbaren Typen. Zu diesem Zweck<br />
sei eine Abbildung id : T → N0 gegeben, die jedem Typ t ∈ T eine eindeutige Identifikationsnummer<br />
(ID) zuordnet. Für den Typ der Variablen soll gelten, dass dessen<br />
Identifikationsnummer größer als die größte Identifikationsnummer aller Operationen,<br />
aber kleiner als die kleinste Identifikationsnummer aller Konstanten ist. Für Konstanten<br />
soll ferner gelten, dass deren Identifikationsnummer größer als die Identifikationsnummer<br />
von Variablen ist und dass die Identifikationsnummer mit abnehmendem Konstantenwert<br />
zunimmt. Ein Beispiel einer Ordnung auf der Menge der Typen, die den genannten<br />
Anforderungen genügt, zeigt Abbildung 4.9.<br />
neg < add < sub < mul < var < 127 < . . . < −128<br />
Abbildung 4.9: Abbildung einer gewählten Ordnung von Knotentypen.<br />
Jetzt kann die Normalform wie folgt definiert werden:<br />
Definition 13 (Normalform). Sei id : T → N0 die oben genannte Abbildung. Ein Muster<br />
m mit der Knotenmenge V befindet sich dann in Normalform, wenn für jede kommutative<br />
Operation o ∈ V und deren Operanden oleft, oright ∈ V gilt:<br />
id(type(oleft)) < id(type(oright))<br />
Hier zeigt sich, warum die Reihenfolge von Variablen und Konstanten bezüglich der<br />
definierten Totalordnung wichtig ist. Da Konstanten immer die größere Identifikationsnummer<br />
gegenüber allen anderen Typen besitzen, befindet sich ein Muster nur dann in<br />
Normalform, wenn die Konstante dem rechten Operanden entspricht. Analog gilt dies<br />
auch für Variablen.<br />
32