diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/nullCheck/RedundantNullCheckMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/nullCheck/RedundantNullCheckMethodTransformer.kt index 50852bb8e56..9460548a0ad 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/nullCheck/RedundantNullCheckMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/nullCheck/RedundantNullCheckMethodTransformer.kt @@ -46,6 +46,8 @@ class RedundantNullCheckMethodTransformer : MethodTransformer() { private var changes = false fun run(): Boolean { + if (methodNode.instructions.toArray().none { it.isOptimizable() }) return false + val checkedReferenceTypes = analyzeTypesAndRemoveDeadCode() eliminateRedundantChecks(checkedReferenceTypes) @@ -120,6 +122,12 @@ class RedundantNullCheckMethodTransformer : MethodTransformer() { return nullabilityMap } + private fun AbstractInsnNode.isOptimizable() = + opcode == Opcodes.IFNULL || + opcode == Opcodes.IFNONNULL || + opcode == Opcodes.INSTANCEOF || + isCheckExpressionValueIsNotNull() + private fun transformTrivialChecks(nullabilityMap: Map) { for ((insn, value) in nullabilityMap) { val nullability = value.getNullability()