EMZETT.
Login

Zwischendarstellung und Compiler-Optimierung

Kurz: Moderne Compiler übersetzen den Syntaxbaum in eine Zwischendarstellung (IR), optimieren sie unabhängig von Sprache und Zielprozessor und erzeugen erst dann Maschinencode.

Genauer: Eine IR wie LLVM-IR ist maschinennah, aber prozessorunabhängig. So müssen für m Sprachen und n Prozessoren nur m Frontends und n Backends geschrieben werden statt m·n Compiler. In SSA-Form wird jede Variable genau einmal zugewiesen, was viele Optimierungen vereinfacht.

Im Detail

  • Optimierungen: Konstantenfaltung, Inlining, Entfernen toten Codes, Schleifenoptimierungen, Vektorisierung.
  • Inlining: Funktionsaufruf durch Funktionsrumpf ersetzen. Spart Aufrufkosten, öffnet weitere Optimierungen.
  • Registerzuteilung: Variablen auf wenige CPU-Register abbilden.
  • Backend: Befehlsauswahl und Anordnung für den Zielprozessor.
  • Profile-Guided Optimization: Optimiert anhand echter Messdaten.
  • JIT-Compiler: Übersetzt zur Laufzeit und nutzt Wissen über tatsächliches Verhalten (z. B. V8, HotSpot).
  • Ahead-of-Time: Alles vorher (C, Rust, Go).

Siehe auch: Lexer, Parser und Syntaxbaum, Linker und Lader