LLVM 20.0.0git リリースノート¶
警告
これらは、今後のLLVM 20リリースのための進行中のメモです。以前のリリースのリリースノートは、ダウンロードページにあります。
はじめに¶
このドキュメントには、LLVMコンパイラインフラストラクチャのリリース20.0.0gitのリリースノートが含まれています。ここでは、LLVMのステータス、以前のリリースからの大きな改善点、LLVMのさまざまなサブプロジェクトの改善点、およびコードの現在のユーザーについて説明します。すべてのLLVMリリースは、LLVMリリースWebサイトからダウンロードできます。
最新リリースに関する情報など、LLVMの詳細については、メインのLLVM Webサイトを確認してください。ご質問やコメントがある場合は、Discourseフォーラムが質問するのに最適な場所です。
GitチェックアウトまたはメインのLLVM Webページからこのファイルを読んでいる場合、このドキュメントは次のリリースに適用され、現在のリリースには適用されないことに注意してください。特定のリリースのリリースノートについては、リリースページを参照してください。
このリリースの変更点の非包括的なリスト¶
…
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は、必要なアラインメントスペースをNOPではなく0x0バイト(要求された埋め込み値)のシーケンスで埋めるようになります。
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は、必要なアラインメントスペースをNOPではなく0x0バイト(要求された埋め込み値)のシーケンスで埋めるようになります。
AVRバックエンドの変更点¶
DirectXバックエンドの変更点¶
Hexagonバックエンドの変更点¶
LoongArchバックエンドの変更点¶
MIPSバックエンドの変更点¶
PowerPCバックエンドの変更点¶
RISC-Vバックエンドの変更点¶
コードセクションの.balign N, 0、.p2align N, 0、.align N, 0は、必要なアラインメントスペースをNOPではなく0x0バイト(要求された埋め込み値)のシーケンスで埋めるようになります。
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は、最適化されたNOP埋め込みを使用するのではなく、必要なアラインメントスペースを繰り返しの0x90バイトで埋めるようになりました。最適化されたNOP埋め込みは、0x90バイトエンコーディングを使用するだけでなく、さまざまな幅のNOP命令でスペースを埋めます。コードセクションで最適化された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
LLVMContextRef
に関連付けられたアクセスを提供するために、次の関数が追加されましたLLVMValueRef
およびLLVMBuilderRef
オブジェクト
LLVMGetValueContext
LLVMGetBuilderContext
新しいパスマネージャーは、
LLVMPassBuilderOptionsSetAAPipeline
関数を使用して、カスタムエイリアス解析パイプラインで呼び出すことができるようになりました。LLVMRunPasses
の代わりにLLVMRunPassesOnFunction
を呼び出すことで、単一の関数で新しいパスマネージャーを実行することも可能になりました。カスタム同期スコープを持つ命令の作成のサポートが追加されました
LLVMGetSyncScopeID
は、同期スコープ名をIDにマッピングします。既存のビルダー関数である、追加の同期スコープIDパラメーターを持つ
LLVMBuildFenceSyncScope
、LLVMBuildAtomicRMWSyncScope
、およびLLVMBuildAtomicCmpXchgSyncScope
の各バージョン。任意の原子命令の同期スコープを取得および設定するための
LLVMGetAtomicSyncScopeID
およびLLVMSetAtomicSyncScopeID
。上記関数で使用する命令が原子であるかどうかを確認するための
LLVMIsAtomic
。後方互換性のために、LLVMIsAtomicSingleThread
およびLLVMSetAtomicSingleThread
は引き続きあらゆる命令タイプで機能します。
LLVMSetPersonalityFnおよびLLVMSetInitializer APIは、ヌルポインターを渡すことで、それぞれパーソナリティ関数と初期化子をクリアできるようになりました。
CodeGenインフラストラクチャの変更点¶
メタデータ情報の変更点¶
デバッグ情報の変更点¶
LLVMツールへの変更¶
LLDBへの変更¶
BOLTへの変更¶
サニタイザーへの変更¶
その他の変更¶
LLVM 19を使用している外部オープンソースプロジェクト¶
プロジェクト...
追加情報¶
LLVMに関する様々な追加情報は、LLVMのウェブページ、特にドキュメントセクションで入手できます。ウェブページには、ソースコードのGitバージョンで最新のAPIドキュメントのバージョンも含まれています。このリリースに固有のこれらのドキュメントのバージョンには、LLVMツリーのllvm/docs/
ディレクトリに入ることでアクセスできます。
LLVMについて質問やコメントがある場合は、Discourseフォーラムを通じてお気軽にご連絡ください。