EmscriptenはユニークLLVMバックエンドであり、それはLLVMバイトコードのJavaScript(asm.js)にコンパイルすることができ、実際には、(asm.js)JavaScriptにコンパイルされたクランCおよびC ++コードでアップトレースされ、大幅に簡素化することができウェブ時代の既存のコードを再利用します。asm.jsに加えて、Emscripten WebAssemblyも、より高度なWeb技術をサポートしており、同様のメカニズムによってasm.jsは、Emscripten WASMは、バイナリバイトコードを生成することができます。
WebAssembly元Emscriptenの後端にそれは FASTCOMPが、以前に増加している LLVM WebAssembly バックエンド・オプションを、二つの並行開発のままです。JS V8エンジンすぐにされます最近発表された公式ブログのバックエンドWebAssembly EmscriptenとしてデフォルトLLVM WebAssemblyで使用される今、バックエンドLLVM WebAssemblyは、ほとんどの指標にFASTCOMPのバックエンドを超えてしまったので。V8チームは、特定の理由、および特定のベンチマーク結果を紹介します。
より高速なリンク
LLVM WebAssemblyバックエンドプラスwasm-ld
インクリメンタル・コンパイル・WebAssembly対象のファイルを完全にサポート。リンク時に、すべてはLLVM IRになることを意味FASTCOMP使用のバイトコードファイルLLVM IRは、そうFASTCOMP低速リンクをコンパイルしています。一方、WebAssemblyオブジェクトファイル .o
にコンパイルWebAssemblyが含まれている、彼らはそのため、リンクステップはFASTCOMPを使用するよりも速くすることができ、リンクをリンクとしてネイティブことができます。
ベンチマーク結果は、LLVM WebAssemblyリンク速度はの7倍FASTCOMPです。
より速く、より小さなコードがあります
LLVM WebAssemblyバックエンド技術スタックのベンチマーク速度とコードサイズはFASTCOMPを破っています。
マクロベンチマークの結果は、3.2%の平均増加率です。
実際のプロジェクト、キューブウェブポータブルバージョン2ゲームエンジンでながらマクロ経済参照コードサイズは、3.7%の平均減少し、全体的な、 バナナブレッド、6%を超えて減少し、ドゥーム3は 15%低減されます。
このような改善のおかげで:
- LLVMバックエンドのコードの比較スマート、あなたのようなこの単純なバックエンドが行うことはできませんFASTCOMPのようなもの、行うことができますGVN(番号、株式会社無料会員登録値、グローバル値コーディング)。
- 新しいLLVM IRは、より良い最適化されています。
- チームはWebAssemblyバックエンドの出力調整Binaryenオプティマイザの面で多くの作業を行います。
すべてLLVM IRをサポート
FASTCOMPは、によって処理することができる clang
が、しばしば、特にIRタイプの他のソースのアーキテクチャLLVMのIR出力は、扱うことができるFASTCOMPとして正当な理由で失敗します。一方、一般的なバックエンドwebassembly LLVM LLVMバックエンドインフラストラクチャ、およびので、すべてのコンテンツを扱うことができます。
新機能WebAssembly
稼働FASTCOMP asm2wasm
な末尾呼び出し、およびSIMDおよびその他の異常などの新機能に対処するWebAssembly困難を意味し、asm.js前にコンパイル。
より速く、上流からの定期的な更新
WebAssemblyバックエンドはあなたが常にあなたができるだけ早く得ることができることを意味、上流の最新LLVMを使用することができることを意味し、上流使用し clang
、新しいC ++言語機能、新しいLLVM IRの最適化に。
切换到默认 LLVM WebAssembly 后,fastcomp 仍然是一个可选项,V8 团队表示最终会完全删除 fastcomp,这样做可以消除重大的维护负担,能够更多地关注于 WebAssembly 后端的新功能,并且加速 Emscripten 的一般改进。
详情查看原文: