Während LLVM als ein wirkungsvolles Compiler-Framework im Bereich der Ahead-Of-Time Kompilierung bekannt ist, mangelt es derzeit an Unterstützung für JIT-Kompilierung aufgrund eines langsamen O0-Backends. TPDE, ein neuartiges Codegenerierungs-Backend, welches LLVM-IR als Eingabe verwendet, wurde entwickelt, um die Nutzung von LLVM-IR in JIT-Kompilierungsumgebungen, wie z.B. Datenbanksystemen, besser geeignet zu machen.
Allerdings wird der Entwicklungsprozess von TPDE durch die Verwendung von handgeschriebenen Maschinencodegeneratoren erschwert, die für jede mögliche LLVM-IR Instruktion existieren. Abgesehen davon, dass diese schwer zu erstellen und zu überprüfen sind, müssen solche Generatorfunktionen für jede neue Zielarchitektur neu geschrieben werden, was den Entwicklungs- und Wartungsaufwand bei einer Unterstützung von AArch64 oder RISC-V deutlich erhöht.
Um dieses Problem zu lösen, präsentieren wir tpde-asmgen. Ein Tool, das während des Build-Prozesses von TPDE ausgeführt wird und automatisch registerunabhängige Maschinencodegeneratoren erzeugt. Die Spezifikationen hierfür werden in LLVM-IR oder einer höheren Sprache, die darauf reduziert werden kann, ausgedrückt. tpde-asmgen verwendet dann das LLVM-Backend, stoppt jedoch vor der Registerallokation. Aus diesem Machine-IR-Zustand extrahiert tpde-asmgen die notwendigen Instruktionen und Parameterinformationen, um Maschinencodegeneratoren abzuleiten, welche als C++ Code ausgegeben werden.
Eine begrenzte Integration der Maschinencodegeneratoren von tpde-asmgen in TPDE beeinflusste die Kompilierungs- und Laufzeit der intspeed SPEC Benchmarks. Es wurde eine durchschnittliche Verbesserung der Codegenerierungszeit um 0.6% und eine durchschnittliche Laufzeiterhöhung um 0.18% gemessen. Die Ergebnisse der verwendeten SPEC-Benchmarks wurden überprüft, um die Korrektheit des von tpde-asmgen generierten Codes zu verifizieren.
«
Während LLVM als ein wirkungsvolles Compiler-Framework im Bereich der Ahead-Of-Time Kompilierung bekannt ist, mangelt es derzeit an Unterstützung für JIT-Kompilierung aufgrund eines langsamen O0-Backends. TPDE, ein neuartiges Codegenerierungs-Backend, welches LLVM-IR als Eingabe verwendet, wurde entwickelt, um die Nutzung von LLVM-IR in JIT-Kompilierungsumgebungen, wie z.B. Datenbanksystemen, besser geeignet zu machen.
Allerdings wird der Entwicklungsprozess von TPDE durch die Verwendung von ha...
»