開発のXNUMXか月後 LLVM 11.0 プロジェクトの新版のリリースが発表されました ここでは、Python 3 へのアップデート、RISC-V での実験命令をサポートするパッチ、その他多くの変更など、さまざまな改善が紹介されています。
LLVM について知らない人は、LLVM が次のようなものであることを知っておく必要があります。 GCC 準拠のツールキット プログラムを RISC (マルチレベル最適化システムを備えた低レベル仮想マシン) に似たビットコード中間仮想命令にコンパイルする (コンパイラー、オプティマイザー、およびコード ジェネレーター)。
コンパイル時間を最適化するように設計されています、バインディング時間、ユーザーが定義したいプログラミング言語での実行時間。 もともとCとC ++をコンパイルするために実装されました、LLVMの言語にとらわれない設計、およびプロジェクトの成功 彼らは多種多様な言語を生み出しました。
生成された擬似コードは、JITコンパイラを使用して、プログラムの実行時に直接マシン命令に変換できます。
LLVM11.0の主な新機能
この新しいバージョンの LLVM 11.0 では ビルド システムは Python 3 を使用するように移行されました。Python 3 が使用できない場合に備えて、Python 2 を使用するようにロールバック オプションが実装されているため、Python XNUMX の使用は強制されません。
属性 ベクトル関数-abi-variantが追加されました 中間表現 (IR) へ スカラー関数とベクトル関数の間のマッピングを説明するには ベクタリング呼び出し用。 llvm::FixedVectorType と llvm::ScalableVectorType という XNUMX つの別個のベクトル タイプが llvm::VectorType から抽出されます。
未定義の動作とは、undefに基づいて分岐し、標準ライブラリ関数に未定義の値を渡すことです。
memset/memcpy/memmove では、サイズ パラメーターがゼロに等しい場合に限り、未定義のポインターを渡すことが許可されます。
LLJIT では、LLJIT::initialize メソッドおよび LLJIT::deinitialize メソッドを介して静的初期化を実行するためのサポートが追加されています。
追加しました 静的ライブラリを JITDylib に追加する機能 StaticLibraryDefinitionGenerator クラスを使用します。 ORCv2 用の C API (JIT コンパイラを作成するための API) を追加しました。
さまざまなプロセッサ アーキテクチャのサポートの向上に関しては、次のようになります。
- 追加 Cortex-A34、Cortex-A77、Cortex-A78、および Cortex-X1 プロセッサのサポート AArch64 アーキテクチャのバックエンド。 RMv8.2-ECV (拡張カウンター仮想化)、ARMv16-FGT (ファイングレイントラップ)、ARMv16-AMU (アクティビティモニター仮想化) を含む、ARMv8.6-BF8.6 (BFloat8.6) および ARMv8.6-A 拡張機能を実装しました。および ARMv8.0-DGH (データ収集ヒント)。
- ARM バックエンドに Cortex-M55、Cortex-A77、Cortex-A78、および Cortex-X1 プロセッサのサポートが追加されました。 Armv8.6-A Matrix Multiply および RMv8.2-AA32BF16 BFloat16 拡張機能を実装しました。
- PowerPC バックエンドでの POWER10 プロセッサーのコード生成のサポートが追加されました。 ループの最適化が改善され、浮動小数点演算のサポートが改善されました。
- アーキテクチャのバックエンド RISC-V はサポート付きのパッチを受け取ることができます まだ正式に承認されていない実験的な拡張命令セット用。
それに加えて、 フック関数のコードを生成する機能が提供されています SVE ベクトル命令に組み込まれています。
AVR アーキテクチャのバックエンドは、実験的なカテゴリから、基本ディストリビューションに含まれる安定したカテゴリに移動されました。
x86 バックエンド Intel AMX および TSXLDTRK 命令をサポートします。 LVI 攻撃に対する保護を追加 (ロード値インジェクション) および一般的な投機的実行副作用抑制メカニズムも実装され、CPU での操作の投機的実行によって引き起こされる攻撃をブロックしました。
目立つ他の変更のうち:
- SystemZ アーキテクチャのバックエンドには、MemorySanitizer と LeakSanitizer のサポートが追加されています。
- Libc++ は数学定数ヘッダー ファイルのサポートを追加します。
- LLD リンカーの拡張機能。
- オプション「-lto-emit-asm」、「-lto-whole-program-visible」、「-print-archive-stats」、「-shuffle-section」、「-thinlto-single -module」の追加など、ELF サポートの改善”、”-unique”、”-rosegment”、”-threads = N”。
- トレースをファイルに保存するためのオプション「-time-trace」を追加しました。ファイルは、Chrome の chrome://trace インターフェイスを介して解析できます。
- Go コンパイラー (llgo) へのインターフェースはリリースから削除されており、将来的に再構築される可能性があります。
最後に あなたがそれについてもっと知りたいなら この新しいバージョンについては、お問い合わせください。 詳細は次のリンクにあります。