43966行

Sentinel PRE の手法を基本ブロック内のスケジューリングにも適用してみた。というか、実装は大学時代に始めていたのだが今回とりあえず動くところまで持っていった。Javaでは最適化により実行時に発生する例外が変化してはならないのだが、私の手法により(例外が起きない限りは)ヌルチェックと範囲チェックの順番を自由に入れ替えることができる。

この手法(名前はまだ無い)の実装自体は既に Sentinel PRE のインフラがあるので簡単だった。むしろあまり関係の無い、条件コード(condition code)についての依存グラフを構築する部分の改造が一番ヘヴィだったかも。やっぱ MIPS みたいに条件コードが無いほうがハードウェアもコンパイラも楽だよねぇ……。

まだチューニング中なので性能はまた今度。レジスタの生存区間が伸びるので場合によっては性能が落ちそう。こんなエキセントリックな最適化ばっかやってないで、もっと当たり前のインライン展開やループアンローリングや定数伝搬をやれよ、という感じだが。