Cercetătorii de la Universitatea Tehnică din München au publicat instrumentul TPDE și backend-ul compilatorului bazat pe acesta pentru LLVM — TPDE-LLVM, care oferă generarea de cod mașină pentru arhitecturile x86-64 și AArch64 pe baza reprezentării intermediare a codului LLVM-IR. În testele efectuate, TPDE-LLVM s-a dovedit a fi de 10-20 de ori mai rapid decât backend-ul LLVM -O0 (generatorul de cod fără optimizări) la același nivel de performanță a codului mașină rezultat, cu o creștere a dimensiunii de 10-30%. Contribuțiile proiectului au fost publicate sub licența Apache 2.0.
TPDE-LLVM este inițial destinat asigurării compilării cu întârzieri minime și cu un nivel de calitate corespunzător modului de construire fără optimizări («-O0»). Proiectul oferă o utilitară pentru rularea separată a tpde-llc, o bibliotecă pentru integrarea în aplicații (de exemplu, pentru implementarea funcționalității JIT-com, și patch-uri pentru integrarea cu Clang și Flang.

Proiectul poate fi utilizat ca un component de bază pentru JIT sau pentru crearea de compilări neoptimizate. TPDE-LLVM se concentrează doar pe viteza de compilare și nu încearcă să concureze cu backend-urile optimizatoare LLVM, care, comparativ cu TPDE-LLVM, funcționează semnificativ mai lent, dar permit generarea de cod mașină mai rapid și mai compact (aproximativ de 2 ori mai repede și de 2 ori mai mic ca dimensiune).
TPDE-LLVM folosește trei etape pentru generarea codului:
- Curățarea și pregătirea reprezentării intermediare LLVM;
- Analiza informațiilor despre bucle și utilizarea variabilelor;
- Formarea codului mașină.

Se observă că, cu participarea autorilor TPDE, în ramurile LLVM 19 și 20 au fost deja adăugate optimizări care au permis accelerarea funcționării backend-ului standard LLVM cu 18% pe platforma x86-64 și cu 13% pe platforma ARM64. Potrivit autorilor TPDE, în viitor, cu eforturi minime, backend-ul LLVM ar putea fi accelerat cu încă 10-20%, dar o creștere ulterioară a performanței va necesita modificări semnificative. Chiar și cu o reproiectare semnificativă, este puțin probabil ca backend-ul existent LLVM să poată fi accelerat de 10 ori.
În etapa actuală de dezvoltare, printre obiectivele proiectului TPDE se numără asigurarea suportului pentru reprezentarea intermediară a codului LLVM, obținută de front-end-ul Clang în modurile de optimizare „-O0” și „-O1”. Procesarea reprezentării intermediare create în modul „-O2” nu este încă garantată din cauza lipsei suportului în TPDE pentru operațiile vectoriale. Parțial este acceptat codul intermediar de la Flang și compilatorul Rust.
Sursa: opennet.ro
