LLVM 11.0

Опубликовано August@Karro - вт, 10/13/2020 - 15:15

Основные новшества LLVM 11.0:

  • Система сборки переведена на использование Python 3. Если Python 3 недоступен, то реализована возможность отката на использование Python 2.
  • Из выпуска исключён фронтэнд с компилятором для языка Go (llgo), который возможно будет реструктуризирован в будущем.
  • В промежуточное представление (IR) добавлен атрибут vector-function-abi-variant для описания маппинга между скалярными и векторными функциями для векторизации вызовов. Из llvm::VectorType выделено два отдельных векторных типа llvm::FixedVectorType и llvm::ScalableVectorType.
  • Признано неопределённым поведением ветвление на основе undef-значений и передача undef-значений в функции стандартной библиотеки. В memset/memcpy/memmove разрешена передача undef-указателей, но, если параметр с размером равен нулю.
  • В LLJIT добавлена поддержка выполнения статических инициализаций через методы LLJIT::initialize и LLJIT::deinitialize. Реализована возможность добавления статических библиотек к JITDylib при помощи класса StaticLibraryDefinitionGenerator. Добавлен Си API для ORCv2 (API для сборки JIT-компиляторов).
  • В бэкенд для архитектуры AArch64 добавлена поддержка процессоров Cortex-A34, Cortex-A77, Cortex-A78 и Cortex-X1. Реализованы расширения ARMv8.2-BF16 (BFloat16) и ARMv8.6-A, включая RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU ( Activity Monitors virtualization) и ARMv8.0-DGH (Data gathering hint). Обеспечена возможность генерации кода для встроенных функций-обвязок к векторным инструкциям SVE.
  • В бэкенд для архитектуры ARM добавлена поддержка процессоров Cortex-M55, Cortex-A77, Cortex-A78 и Cortex-X1. Реализованы расширения Armv8.6-A Matrix Multiply и RMv8.2-AA32BF16 BFloat16.
  • В бэкенд для архитектуры PowerPC добавлена поддержка генерации кода для процессоров POWER10. Расширены оптимизации циклов и улучшена поддержка операций с плавающей запятой.
  • В бэкенде для архитектуры RISC-V разрешён приём патчей с поддержкой экспериментальных расширенных наборов инструкций, ещё официально не одобренных.
  • Бэкенд для архитектуры AVR переведён из категории экспериментальных в стабильные, включённые в базовую поставку.
  • В бэкенде для архитектуры x86 реализована поддержка инструкций Intel AMX и TSXLDTRK. Добавлена защита от атак LVI (Load Value Injection), а также реализован общий механизм Speculative Execution Side Effect Suppression для блокирования атак, вызванных спекулятивным выполнением операций в CPU.
  • В бэкенде для архитектуры SystemZ добавлена поддержка MemorySanitizer и LeakSanitizer.
  • В Libc++ добавлена поддержка заголовочного файла с математическими константами <numbers>.
  • Расширены возможности компоновщика LLD. Улучшена поддержка формата ELF, в том числе добавлены опции "--lto-emit-asm", "--lto-whole-program-visibility", "--print-archive-stats", "--shuffle-sections", "--thinlto-single-module", "--unique", "--rosegment", "--threads=N". Добавлена опция "--time-trace" для сохранения трассировки в файл, который затем можно проанализировать через интерфейс chrome://tracing в Chrome.

 

Последние материалы