From d31efaa7ac21e22cc79437528024a90de7a934ef Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 4 Oct 2017 11:59:48 +0300 Subject: [PATCH] Don't analyze method in RNCE if there're no optimizable instructions --- .../nullCheck/RedundantNullCheckMethodTransformer.kt | 8 ++++++++ 1 file changed, 8 insertions(+) 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()