LLVM 11.0 поставляется с обновлением до Python 3, улучшениями для RISC-V и многим другим.

LLVM

После шести месяцев разработки представлен запуск новой редакции проекта LLVM 11.0 в котором представлены несколько улучшений, таких как обновление до Python 3, патчи для поддержки экспериментальных инструкций в RISC-V и многие другие изменения.

Тем, кто не знаком с LLVM, следует знать, что это такое. набор инструментов, совместимый с GCC (компиляторы, оптимизаторы и генераторы кода), которые компилируют программы в RISC-подобные промежуточные виртуальные инструкции с битовым кодом (низкоуровневая виртуальная машина с многоуровневой системой оптимизации).

Он предназначен для оптимизации времени компиляции, время привязки, время выполнения на любом языке программирования, который пользователь хочет определить.. Первоначально реализовано для компиляции C и C ++, Независимый от языка дизайн LLVM и успех проекта они породили множество языков.

Сгенерированный псевдокод можно преобразовать с помощью JIT-компилятора в машинные инструкции непосредственно во время выполнения программы.

Основные новые возможности LLVM 11.0

В этой новой версии LLVM 11.0 система сборки переведена на использование Python 3Таким образом, использование Python 3 не является принудительным, поскольку в случае его отсутствия реализована возможность отката для использования Python 2.

Атрибут добавлен вариант-вектор-функция-abi к промежуточному представлению (IR) для описания отображения между скалярными и векторными функциями для вызовов векторизации. Два отдельных векторных типа, llvm :: FixedVectorType и llvm :: ScalableVectorType, извлекаются из llvm :: VectorType.

Неопределенное поведение - это ветвление на основе undef и переход от неопределенных значений к стандартным библиотечным функциям.

В memset / memcpy / memmove разрешено передавать неопределенные указатели, но если параметр с размером равен нулю.

LLJIT добавляет поддержку статической инициализации с помощью методов LLJIT :: initialize и LLJIT :: deinitialize.

Добавил возможность добавлять статические библиотеки в JITDylib используя класс StaticLibraryDefinitionGenerator. Добавлен C API для ORCv2 (API для создания JIT-компиляторов).

По части улучшения поддержки различных архитектур процессоров:

  • Добавлено поддержка процессоров Cortex-A34, Cortex-A77, Cortex-A78 и Cortex-X1 на бэкэнде архитектуры AArch64. Были реализованы расширения ARMv8.2-BF16 (BFloat16) и ARMv8.6-A, включая RMv8.6-ECV (расширенная виртуализация счетчиков), ARMv8.6-FGT (мелкозернистые ловушки), ARMv8.6-AMU (Activity Мониторинг виртуализации) и ARMv8.0-DGH (подсказка по сбору данных).
  • Добавлена ​​поддержка процессоров Cortex-M55, Cortex-A77, Cortex-A78 и Cortex-X1 на бэкэнде ARM. Реализованы расширения Armv8.6-A Matrix Multiply и RMv8.2-AA32BF16 BFloat16.
  • Добавлена ​​поддержка генерации кода для процессоров POWER10 в серверной части PowerPC. Улучшенная оптимизация цикла и улучшенная поддержка операций с плавающей запятой.
  • Бэкэнд архитектуры RISC-V может получать патчи с поддержкой для экспериментальных расширенных наборов инструкций, которые еще не были официально утверждены.

В дополнение к этому, предусмотрена возможность генерации кода для привязки функций интегрированы в векторные инструкции SVE.

Бэкэнд для архитектуры AVR переведен из категории экспериментальных в категорию стабильных, включенных в базовый дистрибутив.

Бэкэнд x86 поддерживает инструкции Intel AMX и TSXLDTRK. Добавлена ​​защита от LVI атак. (Внедрение значения нагрузки) и общий механизм подавления побочных эффектов спекулятивного выполнения также были реализованы для блокировки атак, вызванных спекулятивным выполнением операций на ЦП.

Из других изменений, которые выделяются:

  • Бэкэнд для архитектуры SystemZ добавляет поддержку MemorySanitizer и LeakSanitizer.
  • Libc ++ добавляет поддержку файла заголовка математической константы .
  • Расширенные возможности компоновщика LLD.
  • Улучшенная поддержка ELF, включая добавленные параметры «–lto-emit-asm», «–lto-all-program-visible», «–print-archive-stats», «–shuffle-section», «–thinlto-single -module. "," –Unique "," –rosegment "," –threads = N ".
  • Добавлена ​​опция «–time-trace» для сохранения трассировки в файл, который затем можно проанализировать через интерфейс chrome: // trace в Chrome.
  • Интерфейс с компилятором Go (llgo) был удален из выпуска и может быть реструктурирован в будущем.

В конце концов если вы хотите узнать об этом больше об этой новой версии вы можете проверить подробности по следующей ссылке.