Müncheni tehnikaülikooli teadlased avaldasid TPDE tööriista ja sellele põhineva LLVM kompilaatori tagaplaani — TPDE-LLVM, mis genereerib masina koodi x86-64 ja AArch64 arhitektuuride jaoks, tuginedes LLVM-IR vahepealsele koodile. TPDE-LLVM osutus testimisel 10-20 korda kiiremaks kui LLVM -O0 tagaplaan (koodigeneraator ilma optimeerimisteta) samal tulemuskoodi efektiivsuse tasemel, suurendades samas suurust 10-30%. Projekti tulemused on avaldatud Apache 2.0 litsentsi alusel.
TPDE-LLVM on algselt suunatud kompileerimisele minimaalsete viivitustega ja kvaliteedi tasemele, mis vastab optimeerimiseta ehitusrille («-O0»). Projekti raames pakutakse eraldiseisva tpde-llc jooksutamise utiliiti, teeki rakendustesse inteerimiseks (nt JIT-kompilaatori funktsionaalsuse rakendamiseks) ning plaane Clangiga ja Flangiga integreerimiseks.

Projekt võib kasutada JIT-i baaskompilaatorina või optimeerimata kogude loomiseks. TPDE-LLVM keskendub ainult kompileerimiskiirusest ning ei püüdle võistlemiseks LLVM-i optimeerivate tagajõududega, mis töötavad TPDE-LLVM-iga 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 vahe-esitluse puhastamine ja ettevalmistamine;
- Tsüklite ja muutujate kasutamise teabe analüüs;
- Masinkoodi genereerimine.

Tuleb märkida, et TPDE autorite osalusel on LLVM-i harudesse 19 ja 20 juba lisatud optimeerimised, mis on võimaldanud kiirusetõusu standardse LLVM-i tagajõu puhul 18% x86-64 platvormil ja 13% ARM64 platvormil. TPDE autorite arvates on tulevikus võimalik LLVM-i tagajõudu veel 10-20% võrra kiirendada, kuid täiendav jõudluse tõus nõuab olulisi muudatusi. Samuti on tõenäoline, et isegi suurema uuenduse korral on väikeste muudatustega olemasolevat LLVM-i tagajõudu kümme korda kiirusest raskesti saavutada.
Praegusel arengustaadiumil on projekti TPDE eesmärkide seas märgitud LLVM-i vaheesituse toe tagamine, mis saadakse Clangi esiotsa optimeerimise režiimides „-O0” ja „-O1”. Vaheesituse töötlemine, mis on loodud režiimis „-O2”, ei ole seni garanteeritud TPDE-s vektorioperatsioonide toe puudumise tõttu. Osaliselt toetatakse Flangi ja Rusti kompilaatori vahepealset koodi.
Allikas: opennet.ru
