Výzkumníci z Technické univerzity Mnichov zveřejnili nástroj TPDE a na něm založený backend kompilátoru pro LLVM - TPDE-LLVM, který zajišťuje generaci strojového kódu pro architektury x86-64 a AArch64 na základě meziproduktu kódu LLVM-IR. Při testování se TPDE-LLVM ukázal být 10-20krát rychlejší než backend LLVM -O0 (generátor kódu bez optimalizací) při stejné úrovni výkonu výsledného strojového kódu a se zvýšením velikosti o 10-30%. Výstupy projektu byly zveřejněny pod licencí Apache 2.0.
TPDE-LLVM je původně zaměřen na zajištění kompilace s minimálními zpožděními a úrovní kvality odpovídající režimu sestavení bez optimalizací („-O0“). Projekt poskytuje nástroj pro samostatné spuštění tpde-llc, knihovnu pro integraci do aplikací (například pro realizaci funkcionality JIT-kompilátoru) a patche pro integraci s Clang a Flang.

Projekt může být použit jako základní kompilující komponenta pro JIT nebo pro vytváření neoptimalizovaných sestavení. TPDE-LLVM se zaměřuje pouze na rychlost kompilace a nesnaží se konkurovat optimalizačním backendům LLVM, které ve srovnání s TPDE-LLVM pracují podstatně pomaleji, ale umožňují generovat rychlejší a kompaktnější strojový kód (přibližně 2krát rychleji a 2krát menší velikosti).
TPDE-LLVM používá k generaci kódu tři fáze:
- Úklid a příprava meziproduktového zastoupení LLVM;
- Analýza informací o cyklech a použití proměnných;
- Tvorba strojového kódu.

Je třeba poznamenat, že s účastí autorů TPDE byly do větví LLVM 19 a 20 již přidány optimalizace, které umožnily urychlit práci standardního backendu LLVM o 18% na platformě x86-64 a o 13% na platformě ARM64. Podle autorů TPDE bude v budoucnu možné urychlit backend LLVM ještě o 10-20% s malými náklady, ale další zvýšení výkonu si bude vyžadovat významné změny. Přitom, i při významném přepracování je nepravděpodobné, že by stávající backend LLVM bylo možné urychlit 10krát.
V současné fázi vývoje projektu TPDE je cílem poskytnout podporu pro mezipředstavování kódu LLVM, které bylo získáno frontendem Clang v optimalizačních režimech „-O0“ a „-O1“. Zpracování mezipředstavování vytvořeného v režimu „-O2“ zatím není zaručeno kvůli nedostatku podpory v TPDE pro vektorové operace. Částečně je podporován mezipředstavovaný kód z Flangu a kompilátoru Rust.
Zdroj: opennet.ru
