LLVM 项目是一个开源编译器基础设施,用于构建编程语言编译器和相关开发工具。经过近六个月的开发,LLVM 发布了 22.1 版本,这是 22.x 系列的第一个稳定版本。
此次更新对 LLVM IR 进行了多项核心更改。其中一项改进是修订了将地址提取与掩码内存内联函数的溯源捕获和对齐处理分离的新ptrtoaddr指令。此外,还改进了对 switch 指令和元数据附加的处理。

基础架构和构建系统更新包括对 AIX 目标的增强、对 CMake 4.0 的扩展支持以及共享库默认值的更改。TableGen 现在使用更新后的运算符,取代了旧版运算符。向量化方面也取得了进展,SLP 向量化器中已初步支持可复制元素,并能更早地检测 FMA 和 FMAD 模式。
此外,AArch64 现在支持 Armv9.7-A 扩展和新的 CPU 目标。RISC-V 在循环向量化器中引入了默认的尾折叠,并扩大了对扩展的支持范围。LoongArch 增加了对大型代码模型的支持,并改进了重定位处理。
PowerPC 架构获得了多项原型指令和 ABI 改进。x86 架构方面,-mcpu新增了 Wildcat Lake 和 Novalake 等目标平台。WebAssembly 支持得到改进,增加了对软浮点数的处理half,并将目标平台名称从 wasm32-wasi 更改为 wasm32-wasip1。
工具更新中llvm-config新增了一个--quote-paths选项,llc现在opt可以将统计信息保存到文件中。llvm-objdump扩展了对 CPU 和属性帮助的支持。llvm-lit 进一步移除了对 Python 2.7 的支持。
LLDB 扩展了对 WebAssembly 的调试支持,包括对受支持运行时的断点处理和变量检查。新增的 Wasm 平台插件允许在兼容的运行时下直接运行 WebAssembly 二进制文件。在 Windows 系统上,默认的 PDB 读取器现在使用 LLVM 的原生实现,而不是 DIA。此外,需要注意的是,LLDB 22 是最后一个支持 FreeBSD 13 及更早版本的版本。
此版本通过为增量构建添加缓存支持并改进静态归档中位码对象的处理,进一步提升了分布式 ThinLTO 的性能。在异常终止情况下,临时文件清理机制也更加稳健。ELF 和 COFF 仍然是 DTLTO 支持的对象格式。
最后,消毒器现在允许 TypeSanitizer 与 UndefinedBehaviorSanitizer 并行运行,并提供对插桩轮廓的新控制。BOLT 在 AArch64 上引入了精简模式支持,通过重用冷代码而不是重复代码来减小二进制文件的大小。

