generated at
コード最適化
Compilerでの話
中間コードを以下のようなことを目的に変換する
実行効率の良いコード
所要記憶量の小さいコード
これ以前の可読性重視だったが、ここからは実行効率重視
特定のハードウェアの特性を引き
出すように変換したり
高級言語では表現できない最適化をする
例えば高級言語ではメモリ上の番地表現やレジスタの割り当てに関しては記述できない
ここで共通化できるものなどを最適化する



最適化の実践例
Goのeoncoding/binary
Rui Ueyama氏の昔のPR



最適化のサーベイ記事




キーワード



最適化時に元のプログラムと挙動を変えてはならない
なので、最適化時に変換できる条件を満たしているかを解析によって確認する
加算や乗算では、Operandの順序が変わる最適化がある(?)
ここのオペランドに関数呼び出しが含まれていると、関数の実行と演算の順序が変わる
example
1 + hoge() hoge() + 1
この関数に副作用があると、結果が異なることがある
example
global = 10 global + hoge() // ←このhogeの中でglobal++をしたりしたら hoge() + global // ←こう変換すると結果が異なる





参考