След шест месеца развитие беше представено стартирането на новото издание на проекта 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) е премахнат от изданието и може да бъде преструктуриран в бъдеще.
Накрая ако искате да научите повече за това за тази нова версия, можете да проверите подробностите в следната връзка.