Onderzoekers van de Technische Universiteit München hebben de TPDE-toolkit en de daarop gebaseerde compiler backend voor LLVM - TPDE-LLVM - gepubliceerd, die de generatie van machinecode voor de architecturen x86-64 en AArch64 mogelijk maakt op basis van de LLVM-IR tussentaal. Tijdens testen bleek TPDE-LLVM 10-20 keer sneller te zijn dan de LLVM -O0 backend (codegenerator zonder optimalisaties), met hetzelfde prestatieniveau van de resulterende machinecode en een toename van de grootte van 10-30%. De resultaten van het project zijn gepubliceerd onder de Apache 2.0-licentie.
TPDE-LLVM is oorspronkelijk gericht op het bieden van compilatie met minimale vertragingen en een kwaliteitsniveau dat overeenkomt met de buildmodus zonder optimalisaties (ā-O0ā). Het project biedt een hulpprogramma voor het afzonderlijk uitvoeren van tpde-llc, een bibliotheek voor integratie in toepassingen (bijvoorbeeld voor het implementeren van JIT-compilerfunctionaliteit) en patches voor integratie met Clang en Flang.

Het project kan worden gebruikt als een basiscompilatiecomponent voor JIT of voor het creƫren van niet-geoptimaliseerde builds. TPDE-LLVM richt zich uitsluitend op de compilatiesnelheid en probeert niet te concurreren met de optimaliserende backends van LLVM, die in vergelijking met TPDE-LLVM aanzienlijk langzamer werken, maar in staat zijn om snellere en compactere machinecode te genereren (ongeveer 2 keer sneller en 2 keer kleiner).
TPDE-LLVM gebruikt drie fasen voor codegeneratie:
- Reiniging en voorbereiding van de LLVM tussentaal;
- Analyse van informatie over lussen en variabelen;
- Generatie van machinecode.

Het is vermeldenswaard dat er door de betrokkenheid van de TPDE-auteurs al optimalisaties zijn toegevoegd aan de LLVM-versies 19 en 20, waardoor de werking van de standaard LLVM backend met 18% sneller is gemaakt op het x86-64 platform en met 13% op het ARM64 platform. Volgens de TPDE-auteurs kan de LLVM backend in de toekomst met relatief weinig inspanning nog eens 10-20% worden versneld, maar verdere prestatieverbeteringen zullen aanzienlijke wijzigingen vereisen. Zelfs met aanzienlijke herstructurering is het onwaarschijnlijk dat de bestaande LLVM backend 10 keer kan worden versneld.
In de huidige fase van de ontwikkeling van het TPDE-project is het doel gesteld om ondersteuning te bieden voor de tussenliggende representatie van LLVM, verkregen door de Clang-frontend in de optimalisatiemodi '-O0' en '-O1'. De verwerking van de tussenliggende representatie die is gemaakt in de modus '-O2' wordt momenteel niet gegarandeerd vanwege het ontbreken van ondersteuning voor vectorbewerkingen in TPDE. De tussenliggende code van Flang en de Rust-compiler wordt gedeeltelijk ondersteund.
Bron: opennet.ru
