LLVM 20.0.0git 发行说明¶
警告
这些是即将发布的 LLVM 20 的正在进行的说明。以前版本的发布说明可以在下载页面上找到。
简介¶
本文档包含 LLVM 编译器基础架构版本 20.0.0git 的发行说明。在这里,我们描述了 LLVM 的状态,包括自上一个版本以来的主要改进、LLVM 各种子项目的改进以及当前代码的一些用户。所有 LLVM 版本都可以从LLVM 版本网站下载。
有关 LLVM 的更多信息,包括有关最新版本的信息,请查看LLVM 主网站。如果您有任何疑问或意见,Discourse 论坛是一个很好的提问场所。
请注意,如果您是从 Git 检出或 LLVM 主网站读取此文件,则本文档适用于下一个版本,而不是当前版本。要查看特定版本的发布说明,请参阅版本页面。
此版本中更改的非全面列表¶
…
构建 LLVM 所需工具链的更新¶
LLVM IR 的更改¶
x86_mmx
IR 类型已被移除。它将在比特码升级中转换为标准向量类型<1 x i64>
。将
llvm.experimental.stepvector
内联函数重命名为llvm.stepvector
。
LLVM 基础设施的更改¶
构建 LLVM 的更改¶
TableGen 的更改¶
过程间优化的更改¶
AArch64 后端的更改¶
代码段中的.balign N, 0、.p2align N, 0、.align N, 0现在将用一系列0x0字节(请求的填充值)填充所需的对齐空间,而不是 NOP。
AMDGPU 后端的更改¶
已移除
llvm.amdgcn.flat.atomic.fadd
和llvm.amdgcn.global.atomic.fadd
内联函数。用户应改用带有fadd 和 addrspace(0) 或 addrspace(1) 的atomicrmw 指令。
ARM 后端的更改¶
代码段中的.balign N, 0、.p2align N, 0、.align N, 0现在将用一系列0x0字节(请求的填充值)填充所需的对齐空间,而不是 NOP。
AVR 后端的更改¶
DirectX 后端的更改¶
Hexagon 后端的更改¶
LoongArch 后端的更改¶
MIPS 后端的更改¶
PowerPC 后端的更改¶
RISC-V 后端的更改¶
代码段中的.balign N, 0、.p2align N, 0、.align N, 0现在将用一系列0x0字节(请求的填充值)填充所需的对齐空间,而不是 NOP。
添加了 Syntacore SCR4 和 SCR5 CPU:
-mcpu=syntacore-scr4/5-rv32/64
-mcpu=sifive-p470
已添加。添加了 RP2350 的 Hazard3 CPU:
-mcpu=rp2350-hazard3
(仅限 32 位)。现在,使用 RVV 指令的固定长度向量支持需要 VLEN>=64。这意味着 Zve32x 和 Zve32f 也将需要 Zvl64b。之前的支持基本上没有经过测试。
Zvbc32e
和Zvkgs
扩展现在已实验性地支持。添加了
Smctr
和Ssctr
扩展。
WebAssembly 后端的更改¶
Windows 目标的更改¶
X86 后端的更改¶
代码段中的.balign N, 0x90、.p2align N, 0x90 和.align N, 0x90现在将用重复的0x90字节填充所需的对齐空间,而不是使用优化的 NOP 填充。优化的 NOP 填充使用各种宽度的 NOP 指令填充空间,而不仅仅是使用0x90字节编码的那些。要在代码段中使用优化的 NOP 填充,请省略“fillval”参数,即分别为.balign N、.p2align N 或.align N。
由于
x86_mmx
IR 类型已移除,因此具有x86_mmx
参数或返回值的函数将使用不同的、不兼容的调用约定 ABI。此类函数在实际应用中通常不会出现(Clang 永远不会生成它们!),因此预计不会导致实际的兼容性问题。支持
AVX10.2-256
和AVX10.2-512
的 ISA。
OCaml 绑定的更改¶
Python 绑定的更改¶
C API 的更改¶
由于
x86_mmx
IR 类型已移除,以下符号已被删除LLVMX86_MMXTypeKind
LLVMX86MMXTypeInContext
LLVMX86MMXType
以下函数已添加,以进一步支持非空终止字符串
LLVMGetNamedFunctionWithLength
LLVMGetNamedGlobalWithLength
- 以下函数已添加,用于访问与
LLVMValueRef
和LLVMBuilderRef
对象关联的LLVMContextRef
with
LLVMValueRef
andLLVMBuilderRef
objects
LLVMGetValueContext
LLVMGetBuilderContext
- 以下函数已添加,用于访问与
新的 Pass Manager 现在可以使用自定义别名分析管道调用,使用
LLVMPassBuilderOptionsSetAAPipeline
函数。现在还可以通过调用
LLVMRunPassesOnFunction
而不是LLVMRunPasses
在单个函数上运行新的 Pass Manager。已添加对使用自定义同步范围创建指令的支持
LLVMGetSyncScopeID
用于将同步范围名称映射到 ID。LLVMBuildFenceSyncScope
、LLVMBuildAtomicRMWSyncScope
和LLVMBuildAtomicCmpXchgSyncScope
版本的现有构建器函数,带有一个额外的同步范围 ID 参数。LLVMGetAtomicSyncScopeID
和LLVMSetAtomicSyncScopeID
用于获取和设置任何原子指令的同步范围。LLVMIsAtomic
用于检查指令是否为原子指令,以与上述函数一起使用。由于向后兼容性,LLVMIsAtomicSingleThread
和LLVMSetAtomicSingleThread
将继续与任何指令类型一起使用。
LLVMSetPersonalityFn 和LLVMSetInitializer API 现在分别支持通过传递空指针来清除个性函数和初始化程序。
代码生成基础设施的更改¶
元数据信息的更改¶
调试信息的更改¶
LLVM 工具的更改¶
LLDB 的更改¶
BOLT 的更改¶
Sanitizers 的更改¶
其他更改¶
使用 LLVM 19 的外部开源项目¶
一个项目……
其他信息¶
可以在 LLVM 网页 上找到各种其他信息,特别是在 文档 部分。网页还包含与源代码的 Git 版本保持一致的 API 文档版本。您可以通过进入 LLVM 代码树中的 llvm/docs/
目录来访问特定于此版本的这些文档。
如果您有任何关于 LLVM 的问题或意见,请随时通过 Discourse 论坛 与我们联系。