The LLVM project, an open-source compiler infrastructure used to build programming language compilers and related development tools, has released LLVM 22.1, the first stable version in the 22.x series, following nearly six months of development.
The update introduces several core changes to LLVM IR. The new ptrtoaddr instruction, which separates address extraction from provenance capture and alignment handling for masked memory intrinsics, has been revised. Additional updates improve handling of switch instructions and metadata attachment.
Infrastructure and build system updates include enhancements for AIX targets, expanded support for CMake 4.0, and changes to shared library defaults. TableGen now uses updated operators, replacing legacy ones. Vectorization advances with initial support for copyable elements in the SLP vectorizer and early detection of FMA and FMAD patterns.
Moreover, AArch64 now supports Armv9.7-A extensions and new CPU targets. RISC-V introduces default tail folding in the loop vectorizer and broader support for extensions. LoongArch adds large code model support and improved relocation handling.
PowerPC receives multiple updates to prototype instructions and ABI refinements. On x86, new -mcpu targets, including wildcatlake and novalake, are now available. WebAssembly support is improved with soft-float handling for half and a target rename from wasm32-wasi to wasm32-wasip1.
In tooling updates, llvm-config adds a --quote-paths option. llc and opt can now save statistics to files. llvm-objdump expands CPU and attribute help support. Support for Python 2.7 has been further removed from llvm-lit.
LLDB expands WebAssembly debugging support, including breakpoint handling and variable inspection for supported runtimes. A new Wasm platform plugin allows running WebAssembly binaries directly under compatible runtimes. On Windows, the default PDB reader now uses LLVM’s native implementation instead of DIA. It’s important to note also that LLDB 22 is the final release to support FreeBSD 13 and earlier.
The release advances Distributed ThinLTO by adding cache support for incremental builds and improving handling of bitcode objects in static archives. Temporary file cleanup is now more robust in abnormal termination scenarios. ELF and COFF continue as the supported object formats for DTLTO.
Finally, sanitizers now allow TypeSanitizer to run alongside UndefinedBehaviorSanitizer and offer new controls over instrumentation outlining. BOLT introduces lite mode support on AArch64, reducing binary size by reusing cold code instead of duplicating it.
For more information, see the announcement or refer to the release notes.
