Müncheni Tehnikaülikooli teadlased on avaldanud TPDE tööriistade komplekti ja sellele põhineva kompilatori tahte TPDE-LLVM, mis tagab masinkoodi genereerimise x86-64 ja AArch64 arhitektuuride jaoks, põhinedes LLVM-IR vahevormil. Testimisel osutus TPDE-LLVM 10-20 korda kiiremaks kui LLVM -O0 tagant (koodigeneraator ilma optimeerimiseta) sama tulemuseks masinkoodi jõudluse taseme juures, mille suurus suurenes 10-30%. Projekti tulemused on avaldatud Apache 2.0 litsentsi alusel.
TPDE-LLVM on algselt suunatud kompileerimise tagamisele minimaalsete viivitustega ja kvaliteeditasemega, mis vastab optimeerimata kogumise režiimile («-O0»). Projekt pakub utiliiti iseseisvaks tpde-llc käivitamiseks, raamatukogu rakenduste integreerimiseks (näiteks JIT-kompilaatori funktsionaalsuse rakendamiseks) ja patšid integreerimiseks Clang ja Flang-iga.

Projekt võib olla aluskompilaatoriks JIT-ile või optimeerimata kogude loomisele. TPDE-LLVM keskendub ainult kompileerimise kiirusel ja ei püüa konkureerida LLVM-i optimeerivate tahkete backendidega, mis töötavad TPDE-LLVMiga võrreldes oluliselt aeglasemalt, kuid võimaldavad genereerida kiiremat ja kompaktsemat masinkoodi (umbes kaks korda kiiremini ja kaks korda väiksema suurusega).
TPDE-LLVM kasutab koodi genereerimiseks kolme etappi:
- LLVM vahevormi puhastamine ja ettevalmistamine;
- Tsüklite ja muutujate kasutusinformatsiooni analüüs;
- Masinkoodi genereerimine.

On märgitud, et TPDE autorite osalusel on LLVM harudesse 19 ja 20 juba lisatud optimeerimised, mis on võimaldanud kiirendada LLVM põhivarakoodiga töötamist 18% x86-64 platvormil ja 13% ARM64 platvormil. TPDE autorite arvates on tulevikus võimalik LLVM backendi kiirusel suurendada veel 10-20%, kuid edasine jõudluse tõstmine nõuab märkimisväärseid muudatusi. Samuti on isegi korraliku ümberehituse korral ebatõenäoline, et olemasolevat LLVM backendi saab kiirendada 10 korda.
Praegu keskendub projekti TPDE eesmärkidega LLVM-i vaheesituse toe tagamisele, mis on saadud Clangi frontendist optimeerimise režiimides „-O0“ ja „-O1“. Vaheesituse töötlemine, mis on loodud režiimis „-O2“, ei ole veel tagatud, kuna TPDE ei toeta vektorioperatsioone. Osaliselt toetatakse Flangi ja Rusti kompilaatori vahekoode.
Allikas: opennet.ru
