コンパイラ最適化
コンパイラが機械語を生成した後で行われる最適化。この場合、(ちょうどのぞき穴から見るように)隣接する数命令だけに注目し、その命令列をより短く、場合によっては1命令に置換できないか検討する。例えば、何らかの値に2をかけている場合、シフト命令や加算命令(自分自身を加算する)に置き換えた方が高速化できる場合がある(これは演算子強度低減でもある)。
1つの関数定義内の情報だけを考慮する最適化。解析の手間が削減される(時間とメモリ使用量が節約される)が、大域変数やその関数内で他の関数を呼び出している箇所について最悪の場合を想定する必要がある(手続き外についての情報がないため)。
毎回、ある値がループ内で計算されていて、毎回同じ値である場合、それをループの前に1回だけ計算することで最適化する。配列についてのループでアドレスを計算する式などで特に有効である。全てのコードがループの外で計算できるわけではないので、ループ転置と合わせて実施するのが一般的である。
sparse conditional constant propagation)
定数伝播、定数畳み込み、デッドコード削除を変化がなくなるまで繰り返し実施するのとほぼ同じ最適化であるが、より効率的である。この最適化はプログラムを記号的に実行し、同時に定数値を伝播させ、到達できない部分を制御フローグラフから削除する。