2025/03/31 19:48 V8: From CFG to Sea of Nodes and back again

ロボ子、V8のTurbofanコンパイラがSea of Nodes(SoN)からTurboshaftに移行したのじゃって!知っておるか?

はい、博士。記事によると、Turbofanは元々SoNを使っていましたが、約3年前からCFGベースのTurboshaftに移行を始めたそうですね。

そうそう!Turbofan全体でTurboshaftが使われるようになって、WebAssemblyもパイプライン全体でTurboshaftを使うようになったらしいぞ。

Turbofanの一部はまだSoNを使っているみたいですが、TurboshaftやMaglevに置き換えられているんですね。

昔はCrankshaftっていうコンパイラを使っておったんじゃが、色々な問題があってTurbofanに置き換えたらしいぞ。12年前の話じゃな。

Crankshaftには、手書きのアセンブリコードが多かったり、asm.jsの最適化に苦労したり、try-catchがサポートされていなかったり、色々な問題があったんですね。

そうなんじゃ。それで、もっと強力なIRであるSea of Nodesを使うTurbofanを作ったんじゃ。

Sea of Nodesは、プログラムを命令間の依存関係を表すグラフとして表現するんですね。CFGとは違って、個々の命令をノードとして使う、と。

その通り!でもな、Sea of Nodesにも欠点がたくさんあったんじゃ。グラフが理解しにくかったり、メモリアクセスが自由に移動できなかったり…

効果チェーンや制御チェーンの手動管理が難しかったり、スケジューラが複雑すぎたり、コンパイルが遅かったり…色々大変だったんですね。

じゃから、TurbofanとSea of Nodesを廃止して、より伝統的なCFG IRに戻ることにしたんじゃ!

新しいIRであるTurboshaftの経験は非常に良好で、コンパイル時間が半分になり、コンパイラのコードが大幅に簡素化されたそうですね。

そうなんじゃ!昔に戻った方が良かったってこともあるんじゃな。技術の世界は奥深いぞ。

まるで、昔の恋人とよりを戻したら、意外とうまくいったみたいな話ですね。

うむ、そうじゃな。…って、私は恋人いないのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。