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.

Атрибут добавена е вектор-функция-аби-вариант до междинно представителство (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 (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), 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 атаки (Load Value Injection) и общия механизъм за потискане на страничните ефекти за спекулативно изпълнение също е реализиран за блокиране на атаки, причинени от спекулативно изпълнение на операции на процесора.

От останалите промени, които се открояват:

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

Накрая ако искате да научите повече за това за тази нова версия, можете да проверите подробностите в следната връзка.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.