SEA & FSIJ 合同フォーラム 2006年12月
6人だったという。なんて贅沢な。
とりあえず、単語だけメモったので、それをもとに。
- メンテナが増えた
- Wikiの内容が大変充実
- テスト環境が充実してます
- メモリ使用量も自動でテストし続けてるらしい。たまーに、メモリ使い過ぎるパッチがあるけど、それの早期発見に役立ってるとか。(今見つけた→http://gcc.gnu.org/benchmarks/ 色々ベンチマークしてんだなー)
- section anchor(http://gcc.gnu.org/wiki/Section%20Anchor%20Optimisations) 複数の変数をまとめて、一個のシンボル + 複数のオフセットにする。GOTのエントリが減る。MIPSとかだとエントリが減ると大変助かる…らしい。
- CILを生成するバックエンド(http://gcc-cil.blogspot.com/ これかな?)。そういえば、GCCはJVMのバイトコードみたいなスタックマシンのコード生成するのは大変だとかいうのを見たような気がするんだけど。
- Link Time Optimization(LTO) はちゃんと進行してるらしい。
- LTOの実装案のひとつの簡単な説明。IRとかいうのと、DWARF3の情報とかをオブジェクトに入れる。リンク前に全部のオブジェクトをltoコンパイラ(仮)に通してas→ldという流れ。リンク時最適化って全部コンパイルしなおすのと同じぐらい大変なんじゃないかと思ってたんだけど、やっぱりそうらしい。全部コンパイル。
- オブジェクトに入れるIRは、プログラムなので、Hello Worldやってほしい…との希望が挙がってた。LTOが実装された暁にはHello Worldオタのみなさまにおかれましては、ぜひ挑戦していただきたいところであります。
- Javaのフロントエンド(バイトコードに変換するまで)をEclipseのコンパイラ(ecj…ていうか、Eclipseって自分でコンパイラ持ってたんか!)に置き換える案。一年かけて作ってたgcjxの半分をあっさり捨ててecjに乗り換えるという漢感。
- C99のextern inlineとgccのextern inlineが違う…というのでもめた。というのが4.2のリリースが遅れた原因のひとつ。(いきなりパッチを投げてくるApple、そして、コンパイルが通らないglibc)
- C言語では、整数オーバーフローした時の動作は未定義の場合があります!でもそれはLIA-1違反ですよ!というので昨日もめてた。(宿題:LIA-1って何?)
- print optimizers 最適化一覧を出力するオプション。CPUごとに一番最適なオプションを自動で探すのに使うらしい。
- record gcc switches。どのオプションでコンパイルしたかをオブジェクトに記録しておく。
- 最近のマシン事情を考慮して、メモリ大量に使ってて、セルフコンパイルのテストするのが大変。
あと、宿題。「forward propagation pass on RTL」について調べる。というか、「RTLなんちゃらってなんちゃら?」っていう質問するのはどうかと思った > 自分。
貴重な話が聞けてよかったです。どうもありがとうございました。(…ってここに書いて伝わるのだろうか?)