ループ不変量コード移動

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Semi-Brace (会話 | 投稿記録) による 2020年4月4日 (土) 00:01個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

ループ不変量コード移動 とは、ループの内部の文脈に依存しない命令をループの外に移す最適化手法である。

以下のKotlinで書かれたソースコードを考える。

val offset = 15
var sum = 0
for (i in 0..10) {
  val r = offset + 3
  sum += r
}
println("sum is $sum")

以上のコードはsum is 180と出力する。 変数rに注目すると、ループ変数iに関わらず常にoffset + 3である。 そのため、ループの外に初期化を移動させても意味論は変わらない。

最適化が施された後のコードを提示する。

val offset = 15
var sum = 0
val r = offset + 3
for (i in 0..10) {
  sum += r
}
println("sum is $sum")