LLVMの新機能

LLVM 6は、Spectreの危険を軽減し、IntelのWindowsとCPUのサポートを改善し、サポートされるターゲットプラットフォームにWebAssemblyを含めます。







LLVMコンパイラインフラストラクチャは、技術的に好奇心が強いものから、現代​​のソフトウェアランドスケープの生きた部分に移行しました。 これは、Clangコンパイラの背後にあるコアであり、RustおよびSwiftコンパイラの背後にあり、新しい言語のコンパイラを開発する十分な機会を提供します。



また、かなりペースの速いプロジェクトであり、そのメジャーリリースは6か月ごとまたはそれに近い時期にリリースされます。 最近リリースされたバージョン6.0は、さまざまなターゲットプラットフォームのサポートを深め、拡張するというLLVMの使命を継続しています。 このアップデートでは、最近発見されたプロセッサレベルの脆弱性に対するいくつかのパッチも追加されます。



LLVMが部分的なSpectre保護を追加



脆弱性CPU SpectreおよびMeltdownは、最新のプロセッサの投機的実行機能を悪用します。 CPUのマイクロコードと既存のソフトウェアの両方を変更する必要があるため、修正が困難です。



LLVMを使用して構築されたアプリケーションがこれらの脆弱性との戦いにも貢献することを保証するために、LLVMはいわゆる「retpolines」のサポートを提供します。 この機能を使用するには、-mretpolineスイッチを使用してLLVM 6.0でプログラムを再コンパイルする必要があります。



デバッグLLVM CodeView for Windowsの改善



Microsoft Windowsは、Linuxシステムで使用されるDWARF形式に類似したCodeView形式で保存されたデバッグ情報を使用します。



LLVMは、Windows用のLLVMを開発し、CodeViewを使用してWindows用のデバッグツールの状態を改善するための一般的な取り組みの一環として、以前CodeViewのサポートを追加していました。



LLVM 6は、Microsoftの支援とLLVMチームの慎重なリバースエンジニアリングの両方により、このサポートをさらに改善します。 長期計画は、LLVMでコンパイルされたC / C ++以外の言語がツールでCodeViewを確実に使用できるようになるまで、CodeViewサポートを改善することです。



LLVMはリンクターゲットとしてWebAssemblyをサポートします



Webブラウザーアプリケーションのバイナリ形式であるWebAssemblyは、実験段階から生産技術で使用される段階へと進化し始めました。 EmscriptenやPNaCLと同じ、WebAssemblyツールチェーンの重要な部分はLLVMです。



LLVMでWebAssemblyリンクをサポートする最後のステップはwasm-ldツールでした。 このツールは、LLVMで作成されたアセンブラー(ターゲットwasm32-unknown-unknown-wasm)を入力で受け取り、すぐに使用できるバイナリファイルWebAssemblyを生成します。



WebAssemblyのサポートはまだ不完全であり、WebAssemblyの作業はまだ進行中ですが、LLVMはWebAssemblyスタックの重要な要素のままです。



LLVMはIntel CPUサポートを改善しました



LLVMプログラムは、サンディブリッジ、アイビーブリッジ、ハスウェル、ブロードウェル、スカイレイクなど、多くのIntelプロセッサフ​​ァミリからの命令を使用できるようになりました。 Intel Icelakeもサポートされるようになりました。



LLVMは現在、VAES、GFNI、VPCLMULQDQ、AVX512VBMI2、AVX512BITALG、およびAVX512VNNIのベクター拡張を使用してIntelプロセッサー向けのコードを生成しています。



メモリの比較、ベクトルの切り捨て、32ビット整数値によるベクトル乗算など、Intelプロセッサのさまざまな操作のコード生成が改善されました。



All Articles