Исследователи из Мюнхенского технического университета представили инновационный инструмент TPDE и его бэкенд TPDE-LLVM, разработанный для архитектур x86-64 и AArch64. Этот бэкенд использует LLVM-IR, обеспечивая компиляцию кода с рекордной скоростью. В сравнительных испытаниях, TPDE-LLVM демонстрирует скорость, превышающую стандартные бэкенды LLVM в режиме "-O0" в 10-20 раз, одновременно предлагая сравнимое качество результирующего кода. Существенным преимуществом является относительное увеличение размеров собранного кода всего на 10-30%, что делает эту разработку особенно привлекательной для тех, кто ценит скорость компиляции. Проект представлен под лицензией Apache 2.0.
TPDE-LLVM ориентирован на минимизацию задержек во время компиляции при сохранении уровня качества, соответствующего режиму сборки без оптимизаций. Он предлагает утилиту tpde-llc, библиотеку для интеграции в приложения (включая поддержку JIT-компиляции) и готовые патчи для компиляторов Clang и Flang.
Этот проект может выступать в качестве основного инструмента для реализации JIT-компиляторов или для сборки кода без оптимизаций. TPDE-LLVM фокусируется на скорости, не стремясь соперничать с оптимизирующими бэкендами LLVM, которые способны создавать более быстрый и компактный машинный код. Такие бэкенды выигрывают в производительности в среднем в 2 раза, за счет чего и размер кода сокращается примерно в два раза.
TPDE-LLVM задействует три этапа для генерации кода: очистка и подготовка LLVM-IR, анализ циклов и переменных, а также создание машинного кода. Это позволяет провести более эффективный анализ, что приводит к быстрому выполнению поставленных задач. Как следствие, в версиях LLVM 19 и 20 благодаря содействию разработчиков TPDE-LLVM возникли оптимизации, ускоряющие работу стандартных бэкендов на 18% для x86-64 и на 13% для ARM64. Впрочем, чтобы ещё больше ускорить LLVM, вероятно потребуется внести значительные изменения в существующую архитектуру. По мнению авторов проекта, увеличение производительности стандартного бэкенда в 10 раз остается маловероятным даже при значительной переработке.
В проекты TPDE входит поддержка кода LLVM, сформированного фронтендами Clang при оптимизациях "-O0" и "-O1", с частичной поддержкой кода из Flang и компилятора Rust. Обработка кодов с оптимизацией "-O2" пока находится на стадии разработки из-за недоработанности поддержки векторных операций.