Суть предложения: сборка, а не использование
Разработчики LLVM инициировали дискуссию в LLVM Discourse и опубликовали RFC-запрос на включение ClangIR в конфигурацию сборки по умолчанию. Важно понимать: речь идет только о компиляции компонента ClangIR из исходных кодов LLVM, а не о его активном использовании в генерации кода. Для применения ClangIR разработчикам по-прежнему потребуется флаг -fclangir.
ClangIR — это новая промежуточная репрезентация (IR), построенная на базе MLIR. В отличие от традиционного LLVM IR, она находится на более высоком уровне абстракции, ближе к AST, что позволяет сохранять семантику C/C++ исходного кода.
Цена вопроса: время сборки и зависимости
Включение ClangIR в стандартную сборку влечет за собой существенные технические издержки. Главная проблема — MLIR становится обязательной зависимостью. Это приводит к значительному увеличению времени компиляции самого компилятора Clang. По оценкам участников сообщества, время сборки может увеличиться более чем в два раза.
| Параметр | Текущее состояние | При включении ClangIR по умолчанию |
|---|---|---|
| Время сборки Clang | Базовое | Увеличение более чем в 2 раза |
| Зависимости | Стандартный стек | Обязательное наличие MLIR |
| CI/Тестирование | Стандартное | Удлинение циклов проверки |
| Поддержка Windows | Полная | Отсутствует целевая платформа (target) |
Зачем это нужно: оптимизации и GPU
Несмотря на издержки, сторонники инициативы указывают на стратегические преимущества. ClangIR позволяет:
- Генерировать более точные диагностические сообщения и ошибки.
- Проводить более глубокий статический анализ кода.
- Реализовывать оптимизации, недоступные при прямом снижении AST в LLVM IR.
- Улучшить поддержку GPU и device offload: MLIR-базовая архитектура упрощает трансляцию кода в SPIR-V/Vulkan и другие многопроцессорные среды.
Статус обсуждения
На данный момент предложение находится на стадии обсуждения. Разработчики взвешивают компромисс между удобством поддержки кодовой базы (не нужно собирать ClangIR отдельно для тестов) и ресурсозатратностью сборки. Решение о финальном включении в mainline пока не принято.
Источник: Phoronix ↗
