25.10.2012 Aufrufe

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!