Lösung zu Aufgabe 7.3 --------------------- Phase 1: Berechnung der Kostenvektoren C(i) siehe Tabelle Hierbei: i = Anzahl Register (0 - 3) Blätter sind einfach: i = 0 => Kosten 0, keine Instruktion nötig i > 0 => Kosten 5 für ein Load/Store Andere Knoten: i = 0 am Ende via min (C(i), i > 0) + 5 berechnen Damit: Wahl der Instruktion und Knotenmenge für jeden Knoten - wähle an der Wurzel den Eintrag mit minimalen Kosten hier: Kosten 49 für R = R' mit 2 Registern - dies bestimmt top-down die zu wählenden Anweisungen und Registermengen für die übrigen Knoten Phase 2: Code generieren für Knoten mit Resultat im Speicher (i = 0) Im Beispiel sind dies die Knoten: 3, 6, 10, 13 Diese erzeugen aber keinen Code. Phase 3: Code generieren für Knoten mit Resultat im Register Reihenfolge: RHS vor LHS, jeweils gemäß Postorder-Nummerierung 2 : R1 = a 4 : R1 = R1 + b 5 : R2 = c 7 : R2 = R2 - d 8 : R1 = R1 * R2 9 : R2 = b 11 : R2 = R2 / c 12 : R1 = R1 - R2 14 : R1 = R1 + d 15 : R2 = R1 1 : a = R2 Optimierung: Zuweisung an a direkt mit a = R1 behandeln (wurde hier der Einheitlichkeit halber nicht gemacht: Ergebnis im Register)