From 23d8b4cefe21c64019edb9e2c0c6bd13a6c58818 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 22 Sep 2017 17:46:15 +0300 Subject: [PATCH] Do not run CCE if there were no apiVersionIsAtLeast calls --- .../ApiVersionCallsPreprocessingMethodTransformer.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/ApiVersionCallsPreprocessingMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/ApiVersionCallsPreprocessingMethodTransformer.kt index 35fda40a4ce..3d3bed400ed 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/ApiVersionCallsPreprocessingMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/ApiVersionCallsPreprocessingMethodTransformer.kt @@ -27,6 +27,8 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion private val constantConditionElimination = ConstantConditionEliminationMethodTransformer() override fun transform(internalClassName: String, methodNode: MethodNode) { + var hasFoldedCalls = false + for (insn in methodNode.instructions.toArray()) { if (!insn.isApiVersionIsAtLeastCall()) continue @@ -39,6 +41,8 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion val prev1 = prev2.previous ?: continue val epic = prev1.getIntConstValue() ?: continue + hasFoldedCalls = true + val atLeastVersion = MavenComparableVersion("$epic.$major.$minor") val replacementInsn = @@ -55,7 +59,9 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion } } - constantConditionElimination.transform(internalClassName, methodNode) + if (hasFoldedCalls) { + constantConditionElimination.transform(internalClassName, methodNode) + } } private fun AbstractInsnNode.isApiVersionIsAtLeastCall(): Boolean =