[K/N] Supported ..< operator for BCE optimization

This commit is contained in:
Igor Chevdar
2023-01-25 17:18:12 +02:00
committed by Space Team
parent f87c5cf166
commit 29b7a8e435
2 changed files with 58 additions and 10 deletions
@@ -26,6 +26,18 @@ fun forUntilSize() {
}
// CHECK-LABEL: {{^}}epilogue:
// CHECK-LABEL: define void @"kfun:#forRangeUntilSize(){}"()
@ExperimentalStdlibApi
fun forRangeUntilSize() {
val array = Array(10) { 0L }
// CHECK: {{^}}do_while_loop{{.*}}:
for (i in 0..<array.size) {
// CHECK: {{call|invoke}} void @Kotlin_Array_set_without_BoundCheck
array[i] = 6
}
}
// CHECK-LABEL: {{^}}epilogue:
// CHECK-LABEL: define void @"kfun:#forDownToSize(){}"()
fun forDownToSize() {
val array = Array(10) { 0L }
@@ -87,6 +99,18 @@ fun forUntilWithStep() {
}
// CHECK-LABEL: {{^}}epilogue:
// CHECK-LABEL: define void @"kfun:#forRangeUntilWithStep(){}"()
@ExperimentalStdlibApi
fun forRangeUntilWithStep() {
val array = CharArray(10) { '0' }
// CHECK: {{^}}do_while_loop{{.*}}:
for (i in 0..<array.size step 2) {
// CHECK: {{call|invoke}} void @Kotlin_CharArray_set_without_BoundCheck
array[i] = '6'
}
}
// CHECK-LABEL: {{^}}epilogue:
// CHECK-LABEL: define void @"kfun:#forDownToWithStep(){}"()
fun forDownToWithStep() {
val array = UIntArray(10) { 0U }
@@ -132,6 +156,18 @@ fun forReversed() {
}
// CHECK-LABEL: {{^}}epilogue:
// CHECK-LABEL: define void @"kfun:#forRangeUntilReversed(){}"()
@ExperimentalStdlibApi
fun forRangeUntilReversed() {
val array = Array(10) { 100 }
// CHECK: {{^}}do_while_loop{{.*}}:
for (i in (0..<array.size).reversed()) {
// CHECK: {{call|invoke}} void @Kotlin_Array_set_without_BoundCheck
array[i] = 6
}
}
// CHECK-LABEL: {{^}}epilogue:
fun foo(a: Int, b : Int): Int = a + b * 2
// CHECK-LABEL: define void @"kfun:#forEachCall(){}"()
@@ -274,17 +310,21 @@ fun chainedReceivers() {
}
// CHECK-LABEL: {{^}}epilogue:
@ExperimentalStdlibApi
fun main() {
forEachIndicies()
forUntilSize()
forRangeUntilSize()
forDownToSize()
forRangeToSize()
forRangeToWithStep()
forUntilWithStep()
forRangeUntilWithStep()
forDownToWithStep()
forIndiciesWithStep()
forWithIndex()
forReversed()
forRangeUntilReversed()
forEachCall()
forLoop()
innerLoop()