TPDE-LLVM: Faster LLVM -O0 Back-End
TPDE-LLVM: 10-20× быстрее -O0
Новый open-source бэкенд TPDE-LLVM ускоряет компиляцию в режиме -O0 в 10–20 раз при сопоставимой скорости выполнения и увеличении кода на 10–30 %. Поддерживаются x86-64 и AArch64, типичное IR Clang O0/O1.
| SPEC 2017 (x86-64) | Ускорение | Размер |
|---|---|---|
| perl | 11.4× | 1.27× |
| gcc | 12.5× | 1.32× |
| mcf | 9.7× | 1.27× |
| omnetpp | 21.5× | 1.24× |
| xalanc | 19.0× | 1.24× |
| x264 | 10.5× | 1.26× |
| deepsjeng | 9.6× | 1.25× |
| leela | 21.4× | 1.24× |
| xz | 11.0× | 1.30× |
| geomean | 13.3× | 1.27× |
Как работает
Три прохода: очистка IR, анализ (циклы + живость), кодогенерация (lowering, регистры, код) за один проход. Подробности — в статье.
Планы
- DWARF, улучшенный регистровый аллокатор.
- Поддержка Flang/Rust неполная (векторы, FP-операции).
- Нет non-ELF, других целей.
Использование
Библиотека, llc-подобный инструмент, патч для Clang.
Почему не ускорить LLVM?
LLVM 18→20 стал быстрее на 18 %, но 10× требует радикальных изменений.
Что мешает ещё быстрее
ConstantExprвнутри функций.- Структуры/массивы произвольного размера.
- Прямой доступ к TLS-глобалам.
- Арифметика произвольной битности (
i260).
Факты
- 4 байта padding в
Instructionдля служебных номеров. PHINode::getIncomingValForBlockквадратичен при >1 k предков.- 90 % времени
tpde-llc— парсинг биткода.