コード最適化
中間コードを以下のようなことを目的に変換する
実行効率の良いコード
所要記憶量の小さいコード
これ以前の可読性重視だったが、ここからは実行効率重視
特定のハードウェアの特性を引き
出すように変換したり
高級言語では表現できない最適化をする
例えば高級言語ではメモリ上の番地表現やレジスタの割り当てに関しては記述できない
ここで共通化できるものなどを最適化する
最適化の実践例
Goのeoncoding/binary
最適化のサーベイ記事
キーワード
最適化時に元のプログラムと挙動を変えてはならない
なので、最適化時に変換できる条件を満たしているかを解析によって確認する
ここのオペランドに関数呼び出しが含まれていると、関数の実行と演算の順序が変わる
code:example
1 + hoge()
hoge() + 1
この関数に副作用があると、結果が異なることがある
code:example
global = 10
global + hoge() // ←このhogeの中でglobal++をしたりしたら
hoge() + global // ←こう変換すると結果が異なる
参考