From f3ca0afd3401c1155264e484e58f2c518ab06404 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 26 Nov 2021 14:37:56 +0300 Subject: [PATCH] JVM run temporary variable elimination before inlining --- .../src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt | 2 ++ .../jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt index be046fe6d9e..7ae84730aae 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.codegen.optimization.FixStackWithLabelNormalizationM import org.jetbrains.kotlin.codegen.optimization.common.* import org.jetbrains.kotlin.codegen.optimization.fixStack.* import org.jetbrains.kotlin.codegen.optimization.nullCheck.isCheckParameterIsNotNull +import org.jetbrains.kotlin.codegen.optimization.temporaryVals.TemporaryVariablesEliminationTransformer import org.jetbrains.kotlin.codegen.pseudoInsns.PseudoInsn import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.load.java.JvmAbi @@ -739,6 +740,7 @@ class MethodInliner( try { InplaceArgumentsMethodTransformer().transform("fake", node) FixStackWithLabelNormalizationMethodTransformer().transform("fake", node) + TemporaryVariablesEliminationTransformer(inliningContext.state).transform("fake", node) } catch (e: Throwable) { throw wrapException(e, node, "couldn't inline method call") } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 5fe1adc1776..6861e8414cf 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -139,6 +139,8 @@ class ExpressionCodegen( val reifiedTypeParametersUsages: ReifiedTypeParametersUsages, ) : IrElementVisitor, BaseExpressionCodegen { + override fun toString(): String = signature.toString() + var finallyDepth = 0 val context = classCodegen.context