43108行

これまでは定数をレジスタに設定する const 命令は全て、諸々の都合でメソッドの入口まで引き上げていた。つまり、メソッドの入口でレジスタに定数がセットされた後はその定数の使用箇所まで延々とレジスタを占拠し続けるわけだ。これは当然レジスタ割り当てに悪影響を及ぼす。

なんとかしないといけないとは思っていたが、とりあえずは一番簡単な解決策を200行くらいで実装してみた。const 命令は全て、その値の使用箇所の直前まで引き下げる。いわゆる冗長性除去とは真逆のことをするわけで、レジスタの生存区間は最短となるが最内ループの中に const 命令が追加されたりすると嬉しくないかもしれない。

200行でサクッと性能が上がれば儲けモンなので、試しに実装してみるのも悪くはないかと。データフローしか扱わないこのような最適化を簡単に実装できるのが Static Single Assignment (SSA) 形式(静的単一代入形式)のいいところだ。しかし、コントロールフローも扱わねばならなくなると途端に不便になるのだが。