1 / 69

Code-Erzeugung

Code-Erzeugung. Arne Kostulski ( arne@kostulski.net ). 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation 4. Code-Erzeugung 5. Fazit und weiterführende Themen.

aquila
Download Presentation

Code-Erzeugung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

  2. 1. Abgrenzung, Motivation, Einordnung2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung5. Fazit und weiterführende Themen

  3. 1. Abgrenzung, Motivation, Einordnung2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung5. Fazit und weiterführende Themen

  4. Abgrenzung und Motivation  Effizienz durch Automatisierung

  5. Einordnung innerhalb des Kompilierungsprozesses

  6. Einordnung innerhalb des Kompilierungsprozesses

  7. Einordnung innerhalb des Kompilierungsprozesses 1.

  8. Einordnung innerhalb des Kompilierungsprozesses 3. 1. 2.

  9. 1. Abgrenzung, Motivation, Einordnung2. Grundlagen* Zielgrößen * Entwurfsfaktoren * Kernaufgaben * Referenzmaschine3. Code-Repräsentation4. Code-Erzeugung 5. Fazit und weiterführende Themen

  10. Zielgrößen • Semantische Korrektheit • Laufzeiteffizienz • Virtuelle Speichernutzung • Physische Speichernutzung • Kompilierzeit  Heuristiken für komplexe Optimierungsprobleme konträr

  11. Speicherhierarchie

  12. Speicherhierarchie

  13. Registerverwendung • Aufgaben • Registerzuteilung • Registerauswahl • Ziel • Totale Lade- und Speicherzeiten minimieren

  14. Instruktionsselektion • Aufgabe • Auswahl von Instruktionskombination • Ziel • Minimiere totale Instruktionskosten! • Beispiel • Zwischencode:a := a + 1 • Zielcode: 1 2 1 1 1 1 LD R, a INC a ST a, R ∑ 4 ∑ 3

  15. Instruktionsanordnung • Aufgabe • Befehlsfolgen reorganisieren • Ziele • Code-Vereinfachung • Bessere Registerausnutzung • Parallelisierung unabhängiger Befehle

  16. Kernaufgaben und ISA InstructionSet Architecture (ISA) • ComplexInstruction Set Computer (CISC) • ReducedSet Computer (RISC) • VeryLong Instruction Word (VLIW)

  17. Abstrakte Zielmaschine - Zielsprache • Notation für Operationen: Bsp.: MUL R3, R1, R2 OP <destination>, <source>, <source>, mit <destination> = Ri | { Kleinbuchstabe } <source> = Ri | { Kleinbuchstabe } | „#“ { Ziffer } OP = ADD | SUB | MUL | DIV • Ausnahmen: LD R, x ST x, R

  18. Abstrakte Zielmaschine Definition • Zielsprache • Universalregister: R1, …,Rn • Administrative Register separat • Adressierungen

  19. 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen3. Code-Repräsentation * Basisblöcke * Flussgraphen * DAG4. Code-Erzeugung 5. Fazit und weiterführende Themen

  20. Code-Repräsentation: Basisblöcke • Strukturierung des Zwischencodes • Kontrollfluss • Variablenverwendung • Basisblock • Minimale Sequenz von Instruktionen • Blockanfänge definiert durch: • Die erste Instruktion des Zwischencodes. • Jede direkte Nachfolge-Instruktion eines Sprunges. • Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

  21. Code-Repräsentation: Basisblöcke Beispiel a) Die erste Instruktion des Zwischencodes.

  22. Code-Repräsentation: Basisblöcke Beispiel a) Die erste Instruktion des Zwischencodes.

  23. Code-Repräsentation: Basisblöcke Beispiel b) Jede direkte Nachfolge-Instruktion eines Sprunges.

  24. Code-Repräsentation: Basisblöcke Beispiel b) Jede direkte Nachfolge-Instruktion eines Sprunges.

  25. Code-Repräsentation: Basisblöcke Beispiel c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

  26. Code-Repräsentation: Basisblöcke Beispiel c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

  27. Code-Repräsentation: Basisblöcke Ergebnis

  28. Code-Repräsentation: Flussgraphen Flussgraph • gerichteter, zyklischer Graph G=(V,E) mit • Knotenmenge V: Menge aller Basisblöcke (Block als Blackbox) • Kantenmenge E: e(Bi, Bj) Є E genau dann, wenn: • Bj folgt direkt auf Bi in der Programmfolge und Biohne unbedingten Sprung. • Bj ist Ziel eines Sprungbefehls.

  29. Code-Repräsentation: Flussgraphen • Beispiel: a) Bj folgt direkt auf Bi in der Programmfolge und Bi enthält keinen unbedingten Sprung.

  30. Code-Repräsentation: Flussgraphen • Beispiel: b) Bj ist Ziel eines Sprungbefehls.

  31. Code-Repräsentation: Blockoptimierung mit DAG • Innendarstellung eines Blocks • gerichteter, azyklischer Graph (DAG) • Ziele • Registerausnutzung verbessern • Code-Vereinfachung • Toten Code eliminieren • Elemente Operation Label Initiale Variable

  32. Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion • a := b * c • c := a + d • b := a * b • Erzeuge • - Blatt / Blätter • Operationssymbol • Kanten • Label

  33. Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion • a := b * c • c := a + d • b := a * b • Erzeuge • - Blatt / Blätter • Operationssymbol • Kanten • Label

  34. Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion • a := b * c • c := a + d • b := a * b • Erzeuge • - Blatt / Blätter • Operationssymbol • Kanten • Label

  35. Code-Repräsentation: Blockoptimierung mit DAG Code-Vereinfachung a := b * c c := a + d b := a * b d := a + d a := b * c c := a + d b := a * b d := c , d   • Erzeuge • - Blätter • Operationssymbol • Kanten • Label

  36. Code-Repräsentation: Blockoptimierung mit DAG Lebendigkeit von Variablen • Eine Variable x ist lebendigin Anweisung Ai(1 ≤ i < n),wenn: • x in Anweisung A1 ein Wert zugewiesen wird, • x in Anweisung An als Operand benutzt bzw. gelesen wird, • x zwischen A1 und An kein Wert zugewiesen wird. • x hat bei Ai die nächste Verwendung in An, wenn An der erste Lesezugriff auf x nach A1ist. • Eine am Basisblockende lebendige Variable heißt live on exit.

  37. Code-Repräsentation: Blockoptimierung mit DAG • Toter Code • Instruktionen mit nicht benötigten Ergebnissen • Beispiel • c, d nicht live on exit 

  38. 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung * Elementare Code-Erzeugung * Globale Registerzuteilung * Optimale Code-Erzeugung * Peephole-Optimierung5. Fazit und weiterführende Themen

  39. Elementare Code-Erzeugung • Register-Deskriptor • Zuordnungen: Register  Variablennamen • Adressen-Deskriptor • Zuordnungen: Variablen  Speicheradresse • Annahmen für Zielmaschine • LD und ST explizit • keine globalen Register • Variablen mit nächster Verwendung am Blockanfang zu laden • live on exit-Variablen zu speichern

  40. Elementare Code-Erzeugung • Hilfsfunktion getReg • getReg(B) mit Drei-Adress-Befehl B • Für a := b OP c • Lade nötige Variablen • Führe den Befehl OP Ra, Rb, Rcaus. • Fallunterscheidungen für Code-Erzeugung • LD R, a • ST a, R • a := b OP c • a := b

  41. Elementare Code-Erzeugung Beispiel: a := b * c

  42. Elementare Code-Erzeugung • a := b OP c • (mit den Registern Ra, Rb, Rc) • 4.1 Falls b bzw. c nicht im Register, führe LD Rb, b bzw. LD Rc, c aus. • […] • LD R, a • 1.1 Der Inhalt von R im Register-Deskriptor ist durch a zu ersetzen • 1.2 Füge im Adress-Deskriptor R zu a hinzu.

  43. Elementare Code-Erzeugung • 4. a := b OP c (mit den Registern Ra, Rb, Rc) • 4.1 Falls b bzw. c nicht im Register, führe LD Rb, b bzw. LD Rc, c aus. • 4.2 Der Inhalt von Ra im Register-Deskriptor ist durch a zu ersetzen. • 4.3 Der Inhalt von a im Adress-Deskriptor ist durch Ra zu ersetzen. • 4.4 Entferne Ra von allen anderen Variablen im Adress-Deskriptor.

  44. Elementare Code-Erzeugung • ST a, R • Der Inhalt von a im Adress-Deskriptor ist durch R zu ersetzen.

  45. Globale Register • Problem • VieleHauptspeicherzugriffe • ST a, R1 • LD R1, a • Lösung • ST a, R1 • LD R1, a • Problem • ST a, R1 • if … then goto … • LD R1, a

  46. Globale Register • Beispiel • Betrachte Variable b • Lesezugriff • LD R, a

  47. Globale Register • Beispiel • Betrachte Variable b • Lesezugriff • LD R, a • Schreibzugriff • live on exit • Lösung • RegisterinhalteüberdauernBasisblöcke • Registerzuteilung? • Bewertung:

  48. Graphfärbung • Problem • Register voll • Registerauswahl? • Lebensspanne für ideelle Register • Hier: Graph 2-fach färbbar • Kollisionen unvermeidbar  Zwischenspeicherung

  49. Instruktionsselektion • Idee: Alternative Instruktionskombinationen

  50. Optimale Code-Erzeugung • Ziel • Code mit minimaler Registeranzahl • Berücksichtigt • Registerzuteilung • Registerauswahl • Instruktionsanordnung • Basis • DirectedAcyclic Graph (DAG) • Procedere: • Annotiere Ershov-Nummern an Graph-Knoten • Führe Generierungsalgorithmus aus

More Related