LLVM 22.1: зміни IR, Distributed ThinLTO та оновлення toolchain

Огляд LLVM 22.1: ptrtoaddr, зміни intrinsics, Distributed ThinLTO, перейменування wasm32-wasip1 і практична матриця перевірки Clang toolchain.

Розробник аналізує код і результати збірки LLVM 22.1
Фото: Jakub Zerdzicki / Pexels. Pexels License — free to use. Джерело: https://www.pexels.com/photo/close-up-of-programmer-typing-code-on-laptop-36496927/

LLVM 22.1.0 вийшов 24 лютого 2026 року й об’єднав зміни LLVM, Clang, LLD, MLIR та інших підпроєктів. Реліз додає нові можливості LLVM IR, розвиває Distributed ThinLTO і змінює окремі цільові платформи. Для команд важливішою за список функцій є перевірка сумісності всього toolchain.

LLVM IR отримав інструкцію ptrtoaddr

ptrtoaddr повертає адресну складову вказівника, але, на відміну від ptrtoint, не захоплює provenance. Це уточнює семантику оптимізацій для коду, який працює з адресами. Генератори IR та нестандартні front-end-и мають перевірити, чи коректно вони читають і створюють нові конструкції.

Змінилися деякі intrinsics та метадані

Аргумент вирівнювання вилучено з родини masked load, store, gather і scatter: атрибут align тепер розміщують на аргументі-вказівнику. Також метадані можна приєднувати до IFunc. Інструменти аналізу IR, власні passes та генератори bitcode потребують тестів на новій версії.

Distributed ThinLTO став практичнішим

Інтегрований Distributed ThinLTO розширює підтримку вхідних форматів і кешу для інкрементальних збірок. Bitcode у звичайних архівах може тимчасово видобуватися для розподіленої обробки, а thin archives не потребують цього кроку. Користь залежить від мережі, кешу й повторюваності збірок, тому її треба вимірювати.

WebAssembly змінює назву цілі WASI

Ціль wasm32-wasi перейменовано на wasm32-wasip1. Старий варіант ще розпізнається, але типовою реакцією є попередження про застарілість. Скрипти збірки, матриці CI та конфігурації пакетів краще оновити зараз, не очікуючи повного вилучення псевдоніма.

Clang має власний список несумісностей

LLVM і Clang версіонуються разом, але зміни front-end-а описано окремо. Серед них — нова діагностика, розвиток C++2c, зміни прив’язок і поведінки аналізаторів. Команда повинна читати release notes кожного компонента, який фактично використовує, включно з libc++, LLD і sanitizer-ами.

Оновлення перевіряють матрицею збірок

Корисно зібрати проєкт старим і новим LLVM, порівняти тести, попередження, розмір та продуктивність. Для WebAssembly дивіться огляд WASI 0.3, а для альтернативного компілятора — матеріал про міграцію на Rust 2024.

Що перевірити перед переходом

  • зафіксуйте версії LLVM, Clang, LLD і libc++;
  • перебудуйте сторонні бібліотеки;
  • проганяйте sanitizer-и та статичний аналіз;
  • оновіть назву цілі WASI;
  • перевірте власні LLVM passes;
  • порівняйте ThinLTO на реальному CI;
  • розгортайте новий toolchain поетапно.

Першоджерело: офіційні примітки до LLVM 22.1.0.

Коментарі