ループ不変量コード移動
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/24 13:51 UTC 版)
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2024年1月) |
ループ不変量コード移動 とは、ループの内部の文脈に依存しない命令をループの外に移す最適化手法である。
例
以下の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")
- ループ不変量コード移動のページへのリンク