2010年03月17日
GCC Plugin で LLVM target を実現する DragonEgg
GCC のミドルエンド(最適化パス)とバックエンド(コード生成)に手を加えることにより、LLVM target をサポートしているのが、llvm-gcc です。
DragonEgg は、GCC 本体には手を加えずに、GCC 4.5 から入る plugin アーキテクチャによって、同様のことを実現し、llvm-gcc の置き換えを目指しているプロジェクトです。
既にブートストラップが可能なほどの完成度に到達しているとのことです。
DragonEgg - Using LLVM as a GCC backend
ただし、現状では GCC 4.5 本体への patch が必要で、Linux と Darwin 上でしか動かないようです。
(そもそも現状の GCC plugin って、Windows 上で動作するのでしょうか ? 追々確認してみます。)
今後に期待して、見守って行きたいと思います。
DragonEgg は、GCC 本体には手を加えずに、GCC 4.5 から入る plugin アーキテクチャによって、同様のことを実現し、llvm-gcc の置き換えを目指しているプロジェクトです。
既にブートストラップが可能なほどの完成度に到達しているとのことです。
DragonEgg - Using LLVM as a GCC backend
ただし、現状では GCC 4.5 本体への patch が必要で、Linux と Darwin 上でしか動かないようです。
(そもそも現状の GCC plugin って、Windows 上で動作するのでしょうか ? 追々確認してみます。)
今後に期待して、見守って行きたいと思います。
以下、余談です。
GCC のコードベースの肥大化は大きな問題だと思うのですが、DragonEgg のように plugin を使い、なるべく最適化パスやバックエンドをコア部分の外に出すようにしていけば、GCC のメンテナンス性が向上していくのではないかと期待しています。
数年前までの GCC は、フリーライドを防ぐためにあえてモジュール化を避けていたわけですが、今後は少しずつ風向きが変わっていくのかもしれません。これには LLVM などの競合が台頭してきたことも、無関係では無いと思われます。
http://journal.mycom.co.jp/articles/2004/12/22/gcc/003.html
GCC のコードベースの肥大化は大きな問題だと思うのですが、DragonEgg のように plugin を使い、なるべく最適化パスやバックエンドをコア部分の外に出すようにしていけば、GCC のメンテナンス性が向上していくのではないかと期待しています。
数年前までの GCC は、フリーライドを防ぐためにあえてモジュール化を避けていたわけですが、今後は少しずつ風向きが変わっていくのかもしれません。これには LLVM などの競合が台頭してきたことも、無関係では無いと思われます。
http://journal.mycom.co.jp/articles/2004/12/22/gcc/003.html
また「完全な内部形式のTree Dumpを取りたい」という意見については、小島氏は「実はこれはRMSの方針で「完全なダンプは出さないようにすること」ということになっている」との事実を明らかにした。これは「完全なダンプを出力可能にすると、ProprietaryなBackend Pathを作られてしまう可能性がある」という理由からだと言うのだが、一方で開発者にとって完全なダンプが取れることが非常に魅力的であるという事情もあることから、事前に何らかの文書等を交わしたユーザに限り完全なダンプの出力機能を利用可能にするといったことができないか現在検討が行われている、と同氏は語った。