サポートの改善、バックエンドなどを備えた LLVM 18.1.0 が登場

LLVM ロゴ

LLVM は、コンパイラを開発するためのフレームワークであり、新しいプログラミング言語の構築と既存の言語の改善を支援します。

プロジェクトの立ち上げ LLVM 18.1.0 は XNUMX か月の開発を経てリリースされ、GCC q による改良が加えられています。コンパイラ、オプティマイザ、コード ジェネレータについて説明します。 注目すべき変化 このバージョンではそれは 18.x ブランチから始まる LLVM プロジェクトでバージョン番号を生成する新しいスキーム。 GCC や GDB などのプロジェクトの慣例に従って、開発中にバージョン 0 (「N.1」) の使用が採用され、最初の安定バージョンには「N.XNUMX」という番号が付けられます。この変更により、master ブランチに基づくビルドと最終リリース ブランチのビルドが分離されるという利点が得られます。

たとえば、現在のリリース (18.1.0) に備えて、LLVM 18.0 の不安定なブランチを使用して開発が行われました。その後、最初の安定バージョンが 18.1.0 としてリリースされ、広範な開発とテスト サイクルの集大成となりました。さらに、この新しいスキームでは、必要に応じて、番号 18.1.1、18.1.2 などで XNUMX 週間ごとに修正通信を生成できます。

ABI (アプリケーション バイナリ インターフェイス) に影響を与える変更が現在のブランチに加えられた場合、その更新はバージョンの 18.2.0 桁目の変更 (たとえば、XNUMX) に反映されることに注意することが重要です。これにより、一貫性のある透過的なバージョン管理が確保され、ユーザーは各リリースで行われた安定性と変更について必要な情報を明確に得ることができます。

LLVM18.1.0の主な新機能

LLVM 18.1.0 で提供されるこの新しいバージョンでは、 X86 アーキテクチャ、ISA 拡張機能のサポート改善が実装されました。特に、USER_MSR、AVX10.1-256、および AVX10.1-512 拡張機能のサポートが追加されました。その上、 i128型はGCCやclangの__int128型と統一されており、 これにより、Rust などの外部プロジェクトとのバイナリ互換性が向上します。

LLVM 18.1.0 のもう XNUMX つのハイライトは、 RISC-V、いくつかの改良が加えられています 安定化による大幅な追加とl 拡張機能のサポートに加え、拡張機能用の組み込み関数が追加されました RV32E、RV64E、ilp32e、および lp64e アーキテクチャでのコード生成の実験的サポートが実装されました。

アーキテクチャのバックエンドで LoongArch、LSX 拡張機能用の組み込み関数が追加されました (128 ビット SIMD) および LASX (256 ビット SIMD) では、LoongArch リファレンス マニュアル仕様 1.10 で導入された新しい命令のサポートが追加され、自動ベクトル化の初期サポートが実装されました。

AArch64では、 Cortex-A520、Cortex-A720、Cortex-X4などのプロセッサのサポートを拡張。 また、スタック オーバーフローを検出し、スタックとヒープの交差部分に基づいて攻撃手法をブロックするスタック クラッシュ保護メカニズムのサポートが実装されました。

さまざまなアーキテクチャのバックエンドに対するこれらの特定の改善に加えて、WebAssembly、MIPS、PowerPC、AMDGPU などのアーキテクチャのバックエンドに対して一般的な改善が行われました。 LLD リンカーの機能も拡張され、RISC-V および AArch64 アーキテクチャのサポートが改善され、C++20、C++23、および C の機能に従うように Libc++ ライブラリに更新が実装されました。規格。++26。

最後に、 LLDB デバッガーに、外部サーバーからシンボルとバイナリ データを自動的に抽出するためのサポートが追加されました。 DEBUGINFOD プロトコルをサポートするため、さまざまなアーキテクチャでのデバッグ機能が拡張され、SME や SME2 (Scalable Matrix Extension) などの拡張機能のサポートが追加されます。一部の領域では Python 言語のバインディングが削除されていることに注意することが重要です。これらのリンクに依存する開発プロセスを調整する必要があります。

の部分については、 Clang 18 で実装された改善点には、C 言語に関連する変更が含まれます。

  • GCC と同様に、「const」属性を持つ構造体、共用体、配列を定数式として使用できるようになりました。
  • 列挙型は、「char」型として扱われるのではなく、元の整数型として TBAA (Type-Based Alias Analysis) メタデータに反映されるようになりました。
  • 「counted_by」属性のサポートが追加されました。これにより、フレキシブル配列を含む構造体のフィールドを指定して、フレキシブル配列内の要素の数を決定できるようになり、clang でのバッファ オーバーフロー チェックの効率が向上しました。
  • モジュールをリンクし、C23 標準をサポートするための「requires c23」式のサポートを実装しました。
  • テンプレートで追加の型なし引数を使用する実験的な機能が実装され、浮動小数点値、ポインター、およびサブオブジェクト参照の指定が可能になりました。
  • 「Deducing this」メカニズムの実験的サポートが追加されました。これにより、テンプレート内で「this」属性を持つパラメーターを使用し、この関数が呼び出された式のカテゴリを検出できるようになります。

最後に、それについてもっと知りたい場合は、詳細を調べることができます 次のリンクで。


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:AB Internet Networks 2008 SL
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。