LLVM 15现在已准备好作为这个开源编译器堆栈的半年大更新推出。LLVM 15.0、Clang 15.0 和其他子项目在 2022 年夏季取得的成就有很多值得展示的地方。
LLVM 15.0 带来了许多与 x86 相关的新安全功能、对 Armv9 的支持、Microsoft 的实验性 HLSL 和 DirectX 工作、在其着色器编译器后端中支持新的 AMD RDNA3 和 GFX940、现在支持更多 RISC-V 指令,以及各种这个庞大的编译器堆栈中的其他增强功能。
LLVM 15 中有许多新的 x86 安全功能/缓解措施,从直线推测到 Retbleed 位。
LLVM 15.0 今天早上被标记,可以从GitHub下载。
在 Clang C/C++ 前端,Clang 15.0 的亮点包括:
– 支持 x86/x86_64 上的“-fzero-call-used-regs”选项,该选项类似于已添加到 GCC 的选项。-fzero-call-used-regs 选项可用于限制 ROP / COP / JOP 攻击,方法是在函数返回之前清零选定的寄存器类别。
– 支持x86/x86_64 上的 “-mharden-sls=” 选项以进行直线推测强化。
– 支持“-mfunction-return=thunk-extern”选项,Linux 内核将使用该选项作为 Retbleed 缓解措施的一部分。
– 对于支持 SSE2 的所有目标,支持 x86 上的 _Float16 类型。_Float16 类型是 AVX-512 FP16 的原生类型或使用浮点数进行模拟。
– 支持随机化 C 中的结构布局。这是一种编译时强化技术,可以使用“randomize_layout”属性激活。
– 对 Microsoft 的 HLSL 着色器语言的实验性支持。Clang 15.0 中的 HLSL 仍然是“高度实验性的”和“不完整的”。这是 Microsoft将 DirectX 和 HLSL 添加到上游 LLVM/Clang 代码库的努力的一部分。
– 添加了 -fexperimental-max-bitint-width= 选项以控制 _BitInt 类型的最大允许位宽,超出默认的 128 位。还添加了许多其他新的编译器标志,
– 支持更多的 MSVC 编译指示以及在 clang-cl 中支持更多与 MSVC 兼容的标志,以支持 Windows。
– 围绕仍然成熟的 C2X 语言支持添加了许多功能。此版本实现的 C2X 功能包括“noreturn”属性、N 位整数的基本类型、u8 字符前缀、删除对隐式函数声明的支持等。
– 围绕模块的附加 C++20 功能支持、成员函数的 ABI 隔离等。
– 支持一些 C++2b 特性,如多维下标运算符、定界转义序列、命名通用字符转义等。
– OpenMP 5.1 支持原子比较和原子比较捕获。
– 更新 RISC-V 的向量内在函数,支持 RISC-V 标量加密“K”扩展、CLZ / CTX 指令等。
– 许多错误修复和诊断/编译器警告改进。
除了 Clang C/C++ 编译器前端,LLVM 15.0 的其他更改包括:
– 支持 Armv9-A、Armv9.1-A 和 Armv9.2-A 架构。还添加了 Arm Cortex-M85 CPU 支持。
–实验性 DirectX 后端以及 Clang 中提到的 HLSL 更改。DirectX 后端针对用于 DirectX GPU 着色器程序的 DXIL 架构。
– 支持 AMD Zen 2 和更新的 CPU 上的 RDPRU 指令。
– Debuginfod 的 HTTP 服务器。
–初始 SPIR-V 后端工作.
– 在支持 SSE2 的 x86 CPU 上支持半类型,作为添加到 Clang 的 _Float16 类型的一部分。
– LLVM 现在对 LLVM IR 使用不透明的指针。
– AMD 适用于 RDNA3/GFX11 显卡和 GFX940 适用于下一代 CDNA。
– 使用 AMDGPU 后端支持 8 位和 16 位原子加载和存储。
LLVM 15.0 还包括对 libc++ 15.0 子项目的许多更新和添加。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun187372.html