From ac074207c79c412fb4424ef746455da968fc12db Mon Sep 17 00:00:00 2001 From: Elena Lepilkina Date: Tue, 8 Jun 2021 15:39:12 +0300 Subject: [PATCH] [K/N] ForLoopsLowering: Use get without bounds check in ArrayIterationHandler --- .../src/org/jetbrains/kotlin/backend/common/ir/Ir.kt | 4 ++++ .../lower/loops/handlers/IndexedGetIterationHandlers.kt | 6 +++++- .../src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index 3a84025eb40..d2d5b42a30b 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -332,6 +332,10 @@ abstract class Symbols(val context: T, irBuiltIns: open val unsafeCoerceIntrinsic: IrSimpleFunctionSymbol? = null + open val getWithoutBCName: Name? = null + + open val setWithoutBCName: Name? = null + companion object { fun isLateinitIsInitializedPropertyGetter(symbol: IrFunctionSymbol): Boolean = symbol is IrSimpleFunctionSymbol && symbol.owner.let { function -> diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/IndexedGetIterationHandlers.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/IndexedGetIterationHandlers.kt index 69c50a682cf..fc6082cf631 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/IndexedGetIterationHandlers.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/handlers/IndexedGetIterationHandlers.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.util.getPropertyGetter import org.jetbrains.kotlin.ir.util.getSimpleFunction import org.jetbrains.kotlin.ir.util.isPrimitiveArray import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.OperatorNameConventions /** Builds a [HeaderInfo] for iteration over iterables using the `get / []` operator and an index. */ @@ -79,9 +80,12 @@ internal class ArrayIterationHandler(context: CommonBackendContext) : IndexedGet override val IrType.sizePropertyGetter get() = getClass()!!.getPropertyGetter("size")!!.owner + private val getFunctionName: Name + get() = context.ir.symbols.getWithoutBCName ?: OperatorNameConventions.GET + override val IrType.getFunction get() = getClass()!!.functions.single { - it.name == OperatorNameConventions.GET && + it.name == getFunctionName && it.valueParameters.size == 1 && it.valueParameters[0].type.isInt() } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt index b4147a5ea97..2da05476d42 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt @@ -575,6 +575,10 @@ internal class KonanSymbols( val topLevelSuite = getKonanTestClass("TopLevelSuite") val testFunctionKind = getKonanTestClass("TestFunctionKind") + override val getWithoutBCName: Name? = KonanNameConventions.getWithoutBC + + override val setWithoutBCName: Name? = KonanNameConventions.setWithoutBC + private val testFunctionKindCache = TestProcessor.FunctionKind.values().associate { val symbol = if (it.runtimeKindString.isEmpty()) null