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パラメーターを持つLLVMBuildFenceSyncScopeLLVMBuildAtomicRMWSyncScope、およびLLVMBuildAtomicCmpXchgSyncScopeの各バージョン。

    • 任意の原子命令の同期スコープを取得および設定するためのLLVMGetAtomicSyncScopeIDおよびLLVMSetAtomicSyncScopeID

    • 上記関数で使用する命令が原子であるかどうかを確認するためのLLVMIsAtomic。後方互換性のために、LLVMIsAtomicSingleThreadおよびLLVMSetAtomicSingleThreadは引き続きあらゆる命令タイプで機能します。

  • LLVMSetPersonalityFnおよびLLVMSetInitializer APIは、ヌルポインターを渡すことで、それぞれパーソナリティ関数と初期化子をクリアできるようになりました。

CodeGenインフラストラクチャの変更点

メタデータ情報の変更点

デバッグ情報の変更点

LLVMツールへの変更

LLDBへの変更

BOLTへの変更

サニタイザーへの変更

その他の変更

LLVM 19を使用している外部オープンソースプロジェクト

  • プロジェクト...

追加情報

LLVMに関する様々な追加情報は、LLVMのウェブページ、特にドキュメントセクションで入手できます。ウェブページには、ソースコードのGitバージョンで最新のAPIドキュメントのバージョンも含まれています。このリリースに固有のこれらのドキュメントのバージョンには、LLVMツリーのllvm/docs/ディレクトリに入ることでアクセスできます。

LLVMについて質問やコメントがある場合は、Discourseフォーラムを通じてお気軽にご連絡ください。