I ricercatori del Politecnico di Monaco hanno pubblicato l'insieme di strumenti TPDE e il backend del compilatore basato su di esso per LLVM — TPDE-LLVM, che garantisce la generazione di codice macchina per le architetture x86-64 e AArch64 basata sulla rappresentazione intermedia del codice LLVM-IR. Durante i test, TPDE-LLVM si è rivelato da 10 a 20 volte più veloce del backend LLVM -O0 (generatore di codice senza ottimizzazioni) mantenendo lo stesso livello di prestazioni del codice macchina risultante e aumentando le dimensioni del 10-30%. I risultati del progetto sono stati pubblicati con licenza Apache 2.0.
TPDE-LLVM è inizialmente mirato a garantire la compilazione con minime latenze e un livello di qualità equivalente alla modalità di compilazione senza ottimizzazioni (“-O0”). Il progetto fornisce un'utilità per l'esecuzione autonoma di tpde-llc, una biblioteca per l'integrazione nelle applicazioni (ad esempio, per implementare la funzionalità del compilatore JIT) e patch per l'integrazione con Clang e Flang.

Il progetto può essere utilizzato come componente di compilazione di base per JIT o per la creazione di build non ottimizzate. TPDE-LLVM si concentra esclusivamente sulla velocità di compilazione e non cerca di competere con i backend ottimizzatori di LLVM, che rispetto a TPDE-LLVM sono sostanzialmente più lenti, ma permettono di generare codice macchina più veloce e compatto (circa 2 volte più veloce e 2 volte più piccolo).
TPDE-LLVM utilizza tre fasi per la generazione del codice:
- Pulizia e preparazione della rappresentazione intermedia LLVM;
- Analisi delle informazioni sui cicli e sull'uso delle variabili;
- Formazione di codice macchina.

Si segnala che, con il coinvolgimento degli autori di TPDE, sono già state aggiunte ottimizzazioni alle versioni 19 e 20 di LLVM, che hanno consentito di accelerare il lavoro del backend standard di LLVM del 18% sulla piattaforma x86-64 e del 13% sulla piattaforma ARM64. Secondo gli autori di TPDE, in futuro sarà possibile migliorare ulteriormente il backend di LLVM di un altro 10-20% con relativamente poco sforzo, ma ulteriori aumenti delle prestazioni richiederanno cambiamenti significativi. Anche con una revisione sostanziale, è improbabile che il backend esistente di LLVM possa essere accelerato di 10 volte.
Nella fase attuale di sviluppo, gli obiettivi del progetto TPDE includono il supporto per la rappresentazione intermedia del codice LLVM generata dal frontend Clang nelle modalità di ottimizzazione “-O0” e “-O1”. L'elaborazione della rappresentazione intermedia creata in modalità “-O2” non è ancora garantita a causa della mancanza di supporto in TPDE per le operazioni vettoriali. È parzialmente supportato il codice intermedio di Flang e del compilatore Rust.
Fonte: opennet.ru
