コンパイラ最適化
ループ内の変数がループ変数の簡単な式で計算されている場合(例えば、j:= i*4)、ループ変数の更新時に同時にその変数も更新できる(例で言えば、i:=i+1 なら j:=j+4)。これは一種の演算子強度低減であり、同時にループ変数を他に使っていないならデッドコード削除も伴う。この情報は境界検査除去(後述)や依存関係解析などにも利用される。
各変数の定義がプログラム中で1つのみになるように変換した形式。変数の定義・使用関係が明確化されるという利点がある。ループや条件文における定義値の合流を表現するため、Φ-関数 (phi-function) と呼ばれる特殊な関数を導入する。
主にループを操作する最適化技法として、以下のものがある。
最適化はソース言語(プログラミング言語)に近い表現の中間語に対して行う高水準最適化と、機械語に近い表現の中間語に対して適用される低水準最適化に分類される。
最適化技法はその「スコープ」で分類できる。スコープは文単位からプログラム全体まで様々である。一般にスコープの狭い技法の方が広いものより実装が容易だが、効果は小さい。スコープとしては以下のようなものがある: