From b98322c1b4b6eec37045a06aea148a11e574b213 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 15 Jul 2021 16:14:20 +0300 Subject: [PATCH] JVM don't optimize methods with too many TCBs --- .../codegen/optimization/OptimizationMethodVisitor.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt index cb83708349d..da3e9db27c7 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt @@ -72,14 +72,21 @@ class OptimizationMethodVisitor( } companion object { - private val MEMORY_LIMIT_BY_METHOD_MB = 50 + private const val MEMORY_LIMIT_BY_METHOD_MB = 50 + private const val TRY_CATCH_BLOCKS_LIMIT = 512 fun canBeOptimized(node: MethodNode): Boolean { + if (node.tryCatchBlocks.size > TRY_CATCH_BLOCKS_LIMIT) + return false + val totalFramesSizeMb = node.instructions.size() * (node.maxLocals + node.maxStack) / (1024 * 1024) return totalFramesSizeMb < MEMORY_LIMIT_BY_METHOD_MB } fun canBeOptimizedUsingSourceInterpreter(node: MethodNode): Boolean { + if (node.tryCatchBlocks.size > TRY_CATCH_BLOCKS_LIMIT) + return false + val frameSize = node.maxLocals + node.maxStack val methodSize = node.instructions.size().toLong() val totalFramesSizeMb = methodSize * methodSize * frameSize / (1024 * 1024)