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 25bbec6d8cc..d8ad16667b3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt @@ -53,7 +53,7 @@ class OptimizationMethodVisitor( RedundantCheckCastEliminationMethodTransformer(), ConstantConditionEliminationMethodTransformer(), RedundantBoxingMethodTransformer(generationState), - TemporaryVariablesEliminationTransformer(), + TemporaryVariablesEliminationTransformer(generationState), StackPeepholeOptimizationsTransformer(), PopBackwardPropagationTransformer(), DeadCodeEliminationMethodTransformer(), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/TemporaryVariablesEliminationTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/TemporaryVariablesEliminationTransformer.kt index 1f071a12d5d..66e380371dc 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/TemporaryVariablesEliminationTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/TemporaryVariablesEliminationTransformer.kt @@ -8,16 +8,19 @@ package org.jetbrains.kotlin.codegen.optimization.temporaryVals import org.jetbrains.kotlin.codegen.optimization.common.InsnSequence import org.jetbrains.kotlin.codegen.optimization.common.removeUnusedLocalVariables import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer +import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.tree.* import kotlin.math.max -class TemporaryVariablesEliminationTransformer : MethodTransformer() { +class TemporaryVariablesEliminationTransformer(private val state: GenerationState) : MethodTransformer() { private val temporaryValsAnalyzer = TemporaryValsAnalyzer() override fun transform(internalClassName: String, methodNode: MethodNode) { + if (!state.isIrBackend) return + val cfg = ControlFlowGraph(methodNode) processLabels(cfg) diff --git a/compiler/testData/codegen/bytecodeText/controlStructures/kt17110.kt b/compiler/testData/codegen/bytecodeText/controlStructures/kt17110.kt index cb5e9fa9bf3..bb3125d0fe9 100644 --- a/compiler/testData/codegen/bytecodeText/controlStructures/kt17110.kt +++ b/compiler/testData/codegen/bytecodeText/controlStructures/kt17110.kt @@ -17,7 +17,7 @@ fun infiniteLoop() { } // JVM_TEMPLATES -// 2 GOTO L6 +// 2 GOTO L7 // 1 GOTO L1 // JVM_IR_TEMPLATES diff --git a/compiler/testData/codegen/bytecodeText/coroutines/debug/localVariableCorrectLabel.kt b/compiler/testData/codegen/bytecodeText/coroutines/debug/localVariableCorrectLabel.kt index 9222a9be790..08be3e69140 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/debug/localVariableCorrectLabel.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/debug/localVariableCorrectLabel.kt @@ -19,7 +19,7 @@ suspend fun SequenceScope.awaitSeq(): Int = 42 // 1 LOCALVARIABLE a I L[0-9]+ L4 // JVM_TEMPLATES -// 1 LINENUMBER 9 L14 -// 1 LOCALVARIABLE a I L[0-9]+ L14 +// 1 LINENUMBER 9 L18 +// 1 LOCALVARIABLE a I L[0-9]+ L18 // IGNORE_BACKEND_FIR: JVM_IR diff --git a/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt index 2f4eea71246..239a7bf0f76 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/doNotReassignContinuation.kt @@ -12,4 +12,4 @@ suspend fun suspendThere(param: Int, param2: String, param3: Long): String { return a + b } -// 0 ASTORE 4 +// 1 ASTORE 4 diff --git a/compiler/testData/codegen/bytecodeText/staticFields/object.kt b/compiler/testData/codegen/bytecodeText/staticFields/object.kt index a8d3783cb09..75b883b8c17 100644 --- a/compiler/testData/codegen/bytecodeText/staticFields/object.kt +++ b/compiler/testData/codegen/bytecodeText/staticFields/object.kt @@ -5,7 +5,7 @@ object A { // JVM_TEMPLATES // Field initialized in constant pool // A super constructor call and INSTANCE put -// 1 ALOAD 0 +// 2 ALOAD 0 // JVM_IR_TEMPLATES // JVM_IR generates 'dup' instead of 'astore 0; aload 0' in method of object class diff --git a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/arrayConstructor.kt b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/arrayConstructor.kt index 3605eddda7e..0a90ec9c82d 100644 --- a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/arrayConstructor.kt +++ b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/arrayConstructor.kt @@ -3,8 +3,8 @@ fun test(): Int = "123".indexOfAny(CharArray(1000) { '1' }) // JVM_TEMPLATES: -// 4 ALOAD -// 4 ASTORE +// 5 ALOAD +// 5 ASTORE // 7 ILOAD // 6 ISTORE diff --git a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/unreachableMarker.kt b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/unreachableMarker.kt index 5def356c94c..ece1e46f660 100644 --- a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/unreachableMarker.kt +++ b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/unreachableMarker.kt @@ -21,6 +21,6 @@ fun foo() : String { ) } -// 11 ALOAD -// 1 ASTORE +// 12 ALOAD +// 2 ASTORE // 0 InlineMarker diff --git a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/withLambda.kt b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/withLambda.kt index 3698f673dc4..5568b8ae2a8 100644 --- a/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/withLambda.kt +++ b/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/withLambda.kt @@ -11,7 +11,7 @@ fun foo() : String { return foobar("abc", bar("ghi") { x -> x + "jkl" }, "mno") } -// 4 ASTORE -// 16 ALOAD +// 6 ASTORE +// 18 ALOAD // 1 MAXLOCALS = 7 // 0 InlineMarker