После шести месяцев разработки представлен запуск новой версии проекта LLVM 9.0, который является совместимым с GCC набором инструментов (компиляторы, оптимизаторы и генераторы кода), который компилирует программы в промежуточный битовый код виртуальных инструкций, подобных RISC. (низкоуровневая виртуальная машина с многоуровневой системой оптимизации).
Он предназначен для оптимизации времени компиляции, время привязки, время выполнения на любом языке программирования, который пользователь хочет определить.. Первоначально реализовано для компиляции C и C ++, Независимый от языка дизайн LLVM и успех проекта породили множество языков, включая Objective-C, Fortran, Ada, Haskell, байт-код Java, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas и другие.
Сгенерированный псевдокод можно преобразовать с помощью JIT-компилятора в машинные инструкции непосредственно во время выполнения программы.
Основные новые возможности LLVM 9.0
Среди новых возможностей LLVM 9.0 найти поддержку для удаления тега экспериментальной разработки с платформы RISC-V, Поддержка C ++ для OpenCL.
Еще одна новинка, которая выделяется возможность разделить программу на динамически загружаемые части в LLD и реализация конструкции »asm goto», используемой в коде ядра Linux.
Кроме того, также подчеркивается, что Libc ++ поставляется с поддержкой WASI. (Системный интерфейс WebAssembly), а LLD представила начальную поддержку динамической привязки WebAssembly. Добавлена реализация специфичного для GCC выражения »asm goto», которое позволяет переключаться с встроенного блока сборки на тег в коде C.
Эта функция необходима для сборки ядра Linux в режиме »CONFIG_JUMP_LABEL = y« с использованием Clang в системах x86_64. С учетом изменений, внесенных в предыдущие версии, ядро Linux теперь может быть построено в Clang для архитектуры x86_64 (ранее оно поддерживалось только для архитектур arm, aarch64, ppc32, ppc64le и mips.
Добавлена поддержка инструкций BTI. (Индикатор цели перехода) и PAC (Код аутентификации указателя) для архитектуры AArch64. Значительно улучшена поддержка платформ MIPS, RISC-V и PowerPC.
Кроме того, Проекты Android и ChromeOS уже перешли на использование Clang для сборки ядра. а Google тестирует Clang в качестве ядра основной платформы сборки для своих операционных систем Linux.
В будущем, в процессе компиляции ядра можно будет использовать другие компоненты LLVM, включая LLD, llvm-objcopy, llvm-ar, llvm-nm и llvm-objdump.
В компоновщик LLD была добавлена экспериментальная функция секционирования, которая позволяет разделить программу на несколько частей, каждая из которых помещается в отдельный файл ELF. Эта функция позволяет запускать основную часть программы, которая по мере необходимости загружает остальные компоненты в процессе (например, вы можете выбрать встроенную программу просмотра PDF как отдельный файл, который будет загружен только тогда, когда пользователь открывает файл PDF).
С другой стороны, также выделяются многочисленные улучшения в серверных приложениях. для архитектур X86, AArch64, ARM, SystemZ, MIPS, AMDGPU и PowerPC.
Например, поддержка инструкций SVE2 и MTE (Memory Tagging Extensions) была добавлена для архитектуры AArch64, поддержка архитектуры Armv8.1-M и архитектуры MVE была добавлена в бэкэнд ARM.
В случае AMDGPU добавлена поддержка архитектуры GFX10. (Navi) по умолчанию разрешено вызывать функцию и передавать активированный комбинированный DPP (параллельные примитивы данных).
В отладчике LLDB добавлено цветовое выделение трасс в обратном направлении; добавлена поддержка блоков DWARF4 debug_types и DWARF5 debug_info;
Утилиты llvm-objcopy и llvm-strip добавили поддержку исполняемых файлов и объектов в формате COFF.
Бэкэнд для архитектуры RISC-V стабилизирован, который больше не позиционируется как экспериментальный и строится по умолчанию. Полная поддержка генерации кода для вариантов набора команд RV32I и RV64I с расширениями MAFDC.
источник: http://releases.llvm.org/