ループ展開
from
ループ最適化
loop unrolling
ループの繰り返し部分を展開する
パッと見、静的なコードの量は増えるが、実行ステップは減る
ループ回数の計算と、終了判定の条件分岐を除去できる
for(;ここ;ここ)
場合によっては、ループ繰り返し回数を半分にする
帰納変数
i
のループ脱出の検査の回数が半分になるのが利点
基本ブロック
内の文が増加する
基本ブロック内の文が最適化および並列実行の可能性が高まる
code:c
for(i=1;i<1000;i++){
a
i
=a
i-1
+1;
b
i
=a
i
+b
i=1
;
}
↓
for(i=1;i<1000;i=i+2){
a
i
=a
i-1
+1;
b
i
=a
i
+b
i-1
;a
i+1
=a
i
+1; // この行の2つの式は並行実行が可能
b
i+1
=a
i+1
+b
i
;
}
参考
『コンパイラの理論と作成技法』
『コンパイラとバーチャルマシン』
p.102