diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/StackPeepholeOptimizationsTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/StackPeepholeOptimizationsTransformer.kt index eeecf3f90b5..0dbb3cbfcbb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/StackPeepholeOptimizationsTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/StackPeepholeOptimizationsTransformer.kt @@ -65,6 +65,19 @@ class StackPeepholeOptimizationsTransformer : MethodTransformer() { } } + Opcodes.I2L -> { + when (prevNonNop.opcode) { + Opcodes.ICONST_0 -> actions.add { + it.remove(insn) + it.set(prevNonNop, InsnNode(Opcodes.LCONST_0)) + } + Opcodes.ICONST_1 -> actions.add { + it.remove(insn) + it.set(prevNonNop, InsnNode(Opcodes.LCONST_1)) + } + } + } + Opcodes.POP2 -> { if (prevNonNop.isEliminatedByPop2()) { actions.add { diff --git a/compiler/testData/codegen/bytecodeText/ranges/inArrayIndices.kt b/compiler/testData/codegen/bytecodeText/ranges/inArrayIndices.kt index 93098aa14c9..bc9f40442e7 100644 --- a/compiler/testData/codegen/bytecodeText/ranges/inArrayIndices.kt +++ b/compiler/testData/codegen/bytecodeText/ranges/inArrayIndices.kt @@ -10,5 +10,7 @@ fun testLongWithObjectArray(i: Long, xs: Array) = i in xs.indices // 0 getIndices // 0 contains -// 4 I2L +// 2 I2L // 4 ARRAYLENGTH +// 2 LCONST_0 +// 6 ICONST_0 \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt b/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt index fd90b4a95f2..cbc50b4efb1 100644 --- a/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt +++ b/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt @@ -7,5 +7,5 @@ fun testLongWithCharSequence(i: Long, cs: CharSequence) = i in cs.indices // 0 getIndices // 0 contains // 2 length -// 2 I2L +// 1 I2L diff --git a/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt b/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt index 0362a6c02f4..a426af13d85 100644 --- a/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt +++ b/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt @@ -7,4 +7,4 @@ fun testLongWithCollection(i: Long, xs: List) = i in xs.indices // 0 getIndices // 0 contains // 2 size -// 2 I2L +// 1 I2L diff --git a/compiler/testData/codegen/bytecodeText/ranges/inNonMatchingRangeIntrinsified.kt b/compiler/testData/codegen/bytecodeText/ranges/inNonMatchingRangeIntrinsified.kt index e5455058e13..7932876e8a1 100644 --- a/compiler/testData/codegen/bytecodeText/ranges/inNonMatchingRangeIntrinsified.kt +++ b/compiler/testData/codegen/bytecodeText/ranges/inNonMatchingRangeIntrinsified.kt @@ -16,7 +16,7 @@ fun inDouble(x: Float): Boolean { return x in 1.0..2.0 } -// 3 I2L +// 2 I2L // 3 F2D // 0 INVOKESPECIAL // 0 NEW