Релиз набора компиляторов LLVM 3.9
3 сентября 2016 года
После шести месяцев разработки подготовлен релиз проекта LLVM 3.9 (Low Level Virtual Machine) - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
В новом выпуске добавлен оптимизатор ThinLTO, обеспечена совместимость с ABI libstdc++ (GCC), реализована поддержка всех возможностей OpenCL 2.0 и возможностей OpenMP 4.5, не связанных с привлечением дополнительных аппаратных вычислительных устройств, добавлен инструмент clang-include-fixer, в компоновщике lld существенно улучшена поддержка ELF и добавлена начальная поддержка LTO-оптимизаций.
Улучшения в Clang 3.9:
- Расширены средства диагностики Clang, позволяющие выявлять больше проблем и более точно формулировать их суть. Добавлено новое предупреждение "-Wcomma", диагностирующее применение встроенного оператора ",", а также предупреждения "-Wfloat-overflow-conversion" и
"-Wfloat-zero-conversion" для выявления переполнения при преобразовании числа с плавающей запятой в целое и преобразования ненулевого числа с плавающей запятой в нулевое целое значение;
- Реализована полная поддержка всех возможностей стандарта OpenCL 2.0, в том числе в новой версии появилась встроенная функция Pipe, поддержка динамического параллелизма, добавлены функции преобразования адресного пространства to_{global/local/private}, поддержка атрибута nosvm и pragma opencl_unroll_hint. Также улучшены средства диагностики и генерации блоков Clang, используемых в коде ядра OpenCL;
- Реализованы все возможности стандарта OpenMP 4.5 (Open Multi-Processing), предоставляющего средства для применения методов параллельного программирования в программах на языках Си и Си++, за исключение средств для привлечения дополнительных аппаратных обработчиков (offloading). Значительно улучшено качество генерации конструкций OpenMP, что позволило получать на выходе заметно более быстрый и стабильный код;
- Добавлена поддержка фреймворка RenderScript (включается опцией "-x renderscript" или при обработке файлов с расширением ".rs");
- Расширена экспериментальная поддержка будущего стандарта C++1z, (-std=c++1z), например, добавлены атрибуты fallthrough, nodiscard и maybe_unused, реализована возможность объединённой инициализации классов с базовыми классами;
- В статический анализатор добавлена проверка некорректного использования MPI API в C и C++, добавлены проверки утечек памяти и обращений к уже освобождённым блокам на платформе Windows. В состав включена экспериментальная реализация утилиты scan-build, переписанная на языке Python.
- Добавлен новый интструмент clang-include-fixer, позволяющий автоматически вставить недостающие директивы "#include";
- В linter clang-tidy добавлена большая порция новых проверок;
Основные новшества LLVM 3.9:
- Компоновщик LLD доведён до рабочего состояния и теперь может связывать реальные приложения в формате ELF, включая сам LLVM и Clang, а также большинство приложений пространства пользователя FreeBSD. В LLD также добавлена поддержка оптимизации на этапе связывания (LTO) и объединение идентичных блоков кода. В дополнение к ранее поддерживаемым архитектурам x86, x86-64, MIPS, PowerPC и PPC64, добавлена поддержка ARM/Thumb, x32 ABI и MIPS N64 ABI;
- Обеспечена совместимость с GCC ABI. Многие дистрибутивы Linux (Fedora, Debian, Ubuntu) перешли на использование нового GCC ABI для обхода несовместимостей с C++11 в libstdc++, что, в свою очередь, обернулось появлением несовместимостей с другими компиляторами, в том числе с Clang. В LLVM 3.9 добавлены патчи для решения возникших проблем;
- Добавлена поддержка ThinLTO для выполнения оптимизации на этапе связывания, который может быть активирован при компиляции и связывании с опцией "-flto=thin". При использовании ThinLTO LTO-оптимизация разделена на три части: генерация промежуточного кода на этапе компиляции, запуск плагина Thin в компоновщике для комбинирования суммарных данных и выполнения общего анализа, и запуск бэкенда ThinLTO для применения оптимизаций в параллельном режиме;
- Внесены многочисленные улучшения в бэкенды для архитектур ARM, AArch64, MIPS и PowerPC. В том числе добавлена поддержка процессоров Qualcomm Kryo, Broadcom Vulcan и Cortex-R8;
- Для архитектуры x86 добавлена поддержка CPU Intel под кодовыми именами Skylake Server и Knights Landing, примечательных наличием инструкций AVX-512;
- В бэкенд AMDGPU добавлена поддержка образов шейдеров OpenGL, хранилища буферов, атомарных счётчиков и вычислительных расширений шейдеров. Прекращена поддержка Mesa 11.0.x (требуется Mesa 12);
- Прекращена поддержка сборочной системы autoconf в пользу CMake. Для сборки LLVM теперь требуется CMake 3.4.3 или более новая версия.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.