diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/backwardAnalysis.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/backwardAnalysis.kt index e3ba541c3de..bf5ccbc5a15 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/backwardAnalysis.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/backwardAnalysis.kt @@ -38,13 +38,12 @@ fun > analyze(node: MethodNode, interpreter: BackwardAnalysisInt val frames = (1..insnList.size()).map { interpreter.newFrame(node.maxLocals) }.toMutableList() val insnArray = insnList.toArray() - // see Figure 9.16 from Dragon book var wereChanges: Boolean do { wereChanges = false - for (insn in insnArray) { - val index = insnList.indexOf(insn) + for (index in insnArray.indices.reversed()) { + val insn = insnArray[index] val newFrame = interpreter.newFrame(node.maxLocals) for (successorIndex in graph.getSuccessorsIndices(insn)) { newFrame.mergeFrom(frames[successorIndex])