LLVM 11.0 надходить із оновленням до Python 3, удосконаленнями для RISC-V та іншими

LLVM

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

Для тих, хто не знайомий з LLVM, вони повинні знати, що це таке набір інструментів, що відповідає GCC (компілятори, оптимізатори та генератори коду), який компілює програми у проміжні віртуальні інструкції, подібні до біт-коду (низькорівнева віртуальна машина з багаторівневою системою оптимізації).

Він призначений для оптимізації часу компіляції, час прив'язки, час виконання будь-якою мовою програмування, яку хоче визначити користувач. Спочатку реалізовано для компіляції C та C ++, Мовний агностичний дизайн LLVM та успіх проекту вони породили найрізноманітніші мови.

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

Основні нові можливості LLVM 11.0

У цій новій версії LLVM 11.0 система складання перенесена на використання Python 3Таким чином, використання Python 3 не є вимушеним, оскільки у випадку, якщо він недоступний, реалізована опція відкату для використання Python 2.

Атрибут додано вектор-функцію-абі-варіант до проміжного представництва (ІР) для опису відображення між скалярною та векторною функціями для векторизації дзвінків. Два окремі векторні типи, 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 (Діяльність Монітори віртуалізації) та 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 в Chrome.
  • Інтерфейс із компілятором Go (llgo) видалено з випуску і може бути реструктуризований у майбутньому.

В кінці кінців якщо ви хочете дізнатися більше про це про цю нову версію, ви можете перевірити деталі у наступному посиланні.


Залиште свій коментар

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

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.