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) был удален из выпуска и может быть реструктурирован в будущем.

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


Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.