Forscher der Technischen Universität München haben das TPDE-Toolkit und darauf basierend den LLVM-Compiler-Backend TPDE-LLVM veröffentlicht, der die Generierung von Maschinencode für die Architekturen x86-64 und AArch64 auf der Grundlage der LLVM-IR-Zwischenrepräsentation ermöglicht. Bei Tests erwies sich TPDE-LLVM als 10-20 Mal schneller als der LLVM -O0-Backend (Codegenerator ohne Optimierungen) bei demselben Leistungsniveau des resultierenden Maschinencodes und einer Größensteigerung von 10-30 %. Die Ergebnisse des Projekts wurden unter der Apache 2.0-Lizenz veröffentlicht.
TPDE-LLVM zielt ursprünglich darauf ab, eine Kompilation mit minimalen Latenzen und einem Qualitätsniveau zu gewährleisten, das dem Modus ohne Optimierungen („-O0“) entspricht. Das Projekt stellt ein Tool für den eigenständigen Betrieb tpde-llc, eine Bibliothek zur Integration in Anwendungen (z. B. zur Implementierung von JIT-Compiler-Funktionalität) und Patches zur Integration mit Clang und Flang bereit.

Das Projekt kann als Basis-Compiler-Komponente für JIT oder zur Erstellung nicht optimierter Builds verwendet werden. TPDE-LLVM konzentriert sich ausschließlich auf die Geschwindigkeit der Kompilierung und versucht nicht, mit den optimierenden LLVM-Backends zu konkurrieren, die im Vergleich zu TPDE-LLVM deutlich langsamer arbeiten, aber schnelleren und kompakteren Maschinencode generieren können (ungefähr doppelt so schnell und halb so groß).
Für die Codegenerierung verwendet TPDE-LLVM drei Phasen:
- Aufbereitung und Bereinigung der LLVM-Zwischenrepräsentation;
- Analyse von Schleifeninformationen und Variablenverwendung;
- Erstellung des Maschinencodes.

Es wird darauf hingewiesen, dass in den LLVM-Versionen 19 und 20 bereits Optimierungen hinzugefügt wurden, die die Leistung des Standard-LLVM-Backends auf der x86-64-Plattform um 18 % und auf der ARM64-Plattform um 13 % verbessern konnten. Den Autoren von TPDE zufolge könnte in Zukunft mit geringem Aufwand eine weitere Beschleunigung des LLVM-Backends um 10-20 % möglich sein, aber eine weitere Leistungssteigerung würde erhebliche Veränderungen erfordern. Selbst bei einer umfassenden Überarbeitung ist es jedoch unwahrscheinlich, dass das bestehende LLVM-Backend um das 10-Fache beschleunigt werden kann.
In der aktuellen Entwicklungsphase zielt das TPDE-Projekt darauf ab, die Unterstützung für die von der Clang-Frontend generierte LLVM Intermediate Representation in den Optimierungsmodi «-O0» und «-O1» zu gewährleisten. Die Verarbeitung der im Modus «-O2» erstellten Zwischenrepräsentation wird bisher aufgrund fehlender Unterstützung vektorieller Operationen im TPDE nicht garantiert. Teilweise wird Zwischenkode von Flang und dem Rust-Compiler unterstützt.
Quelle: opennet.ru
