ループ不変量コード移動

ループ不変量コード移動 とは、ループの内部の文脈に依存しない命令をループの外に移す最適化手法である。
例.
以下のKotlinで書かれたソースコードを考える。
val offset = 15
var sum = 0
for (i in 0..10) {
 val r = offset + 3
 sum += r
println("sum is $sum")
以上のコードはcodice_1と出力する。変数codice_2に注目すると、ループ変数codice_3に関わらず常にcodice_4である。そのため、ループの外に初期化を移動させても意味論は変わらない。
最適化が施された後のコードを提示する。
val offset = 15
var sum = 0
val r = offset + 3
for (i in 0..10) {
 sum += r
println("sum is $sum")