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