A müncheni műszaki egyetem kutatói közzétették a TPDE eszközkészletet és annak alapján a LLVM hátoldali fordítót, a TPDE-LLVM-t, amely gépi kód generálását biztosít az x86-64 és AArch64 architektúrák számára a LLVM-IR köztes kód alapján. A TPDE-LLVM tesztelése során 10-20-szor gyorsabbnak bizonyult, mint a LLVM -O0 hátoldali fordító (optimalizálás nélküli kódgenerátor), ugyanakkor a generált gépi kód teljesítménye azonos szinten maradt, a méret növekedése pedig 10-30% volt. A projekt eredményeit Apache 2.0 licenc alatt tették közzé.
A TPDE-LLVM eredetileg arra irányul, hogy minimális késleltetések mellett biztosítsa a fordítást, a minőségnek pedig az optimalizálás nélküli fordítási mód („-O0”) szintjén kell lennie. A projekthez tartozik egy eszköz a tpde-llc elkülönített futtatásához, egy könyvtár alkalmazásokba való integrálásra (például JIT-fordító funkciók megvalósításához), és javítások Clang és Flang integrálására.

A projekt alapvető fordítókomponensként használható JIT-hez vagy ne optimalizált fordítások létrehozásához. A TPDE-LLVM csak a fordítás sebességére összpontosít, és nem próbál versengeni a LLVM optimalizáló hátoldalaival, amelyek TPDE-LLVM-mel összehasonlítva lényegesen lassabban működnek, de gyorsabb és kompaktabb gépi kódot generálnak (kb. 2-szer gyorsabb és 2-szer kisebb méretű).
A TPDE-LLVM három szakaszban végzi a kód generálását:
- A LLVM köztes kódjának tisztítása és előkészítése;
- Ciklus- és változóhasználati információk elemzése;
- Gépi kód képzése.

Megjegyzendő, hogy a TPDE szerzőinek részvételével a LLVM 19 és 20 ágakba már bekerültek olyan optimalizálások, amelyek 18%-kal gyorsították meg a LLVM alapértelmezett hátoldalát x86-64 platformon és 13%-kal ARM64 platformon. A TPDE szerzői szerint a jövőben az LLVM hátoldala 10-20%-kal is gyorsítható kisebb változtatásokkal, de a további teljesítménynövelés jelentős módosításokat igényel. Ezen kívül, még jelentős átdolgozás mellett is valószínűtlen, hogy a meglévő LLVM hátoldala 10-szer gyorsítható.
A projekt TPDE jelenlegi fejlesztési szakaszában célként tűzték ki az LLVM köztes kódjának támogatását, amelyet a Clang frontendje generál a "-O0" és "-O1" optimalizálási módokban. A "-O2" módban létrehozott köztes kód feldolgozása egyelőre nem garantált, mivel a TPDE nem támogatja a vektorműveleteket. Részlegesen támogatott a Flang és a Rust fordító köztes kódja.
Forrás: opennet.ru
