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
內建函式。使用者應該改用 atomicrmw 指令和 fadd 以及 addrspace(0) 或 addrspace(1)。
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
。新增 Hazard3 CPU,其已完成 RP2350 的佈局:
-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
LLVMGetValueContext
LLVMGetBuilderContext
- 新增了以下函式,以存取與
現在可以使用自訂別名分析管道來呼叫新的 Pass Manager,方法是使用
LLVMPassBuilderOptionsSetAAPipeline
函式。現在也可以在單一函式上執行新的 Pass Manager,方法是呼叫
LLVMRunPassesOnFunction
而不是LLVMRunPasses
。新增了對建立具有自訂同步範圍的指令的支援
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 論壇 與我們聯繫。