Изследователи от Техническия университет в Мюнхен публикуваха инструментарий TPDE и базирания на него бекенд компилатор за LLVM — TPDE-LLVM, който осигурява генериране на машинен код за архитектури x86-64 и AArch64, основавайки се на междинното представяне на кода LLVM-IR. При тестване TPDE-LLVM се оказа 10-20 пъти по-бърз от бекенда LLVM -O0 (генератор на код без оптимизации) при същото ниво на производителност на резултантния машинен код и увеличение на размера с 10-30%. Направленията на проекта са публикувани под лицензия Apache 2.0.
TPDE-LLVM първоначално е насочен към осигуряване на компилации с минимални забавяния и качество, съответстващо на режим на изграждане без оптимизации („-O0“). Проектът предлага инструмента за самостоятелно стартиране tpde-llc, библиотека за интеграция в приложения (например, за реализиране на функционалността на JIT-компилатора) и пачове за интеграция с Clang и Flang.

Проектът може да бъде използван като основен компилиращ компонент за JIT или за създаване на неоптимизирани сборки. TPDE-LLVM е фокусиран само върху скоростта на компилация и не се опитва да конкурира оптимизиращите бекенди на LLVM, които в сравнение с TPDE-LLVM работят значително по-бавно, но позволяват генерация на по-бърз и компактен машинен код (приблизително два пъти по-бърз и два пъти по-малък по размер).
TPDE-LLVM използва три етапа за генериране на код:
- Почистване и подготовка на междинното представяне на LLVM;
- Анализ на информацията за цикли и използване на променливи;
- Създаване на машинен код.

Отбелязва се, че с участието на авторите на TPDE в клоновете на LLVM 19 и 20 вече са добавени оптимизации, които ускориха работата на стандартния бекенд на LLVM с 18% на платформата x86-64 и с 13% на платформата ARM64. Според авторите на TPDE, в бъдеще с малки усилия може да се ускори бекендът на LLVM с още 10-20%, но по-нататъшното повишаване на производителността ще изисква значителни промени. Въпреки това, дори при значителна преработка, е малко вероятно, че съществуващият бекенд на LLVM ще може да бъде ускорен десетократно.
В текущия етап на развитие проектът TPDE си поставя за цел да осигури поддръжка на междинно представяне на кода LLVM, получено от фронтен Clang в режимите на оптимизация «-O0» и «-O1». Обработката на междинното представяне, създадено в режим «-O2», все още не е гарантирана заради липсата на поддръжка на векторни операции в TPDE. Частично се поддържа междинния код от Flang и компилатора Rust.
Източник: opennet.ru
