diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt index 1d3cf1dfa09..0401cd8b4f2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt @@ -26,7 +26,7 @@ class CompareTo : IntrinsicMethod() { private fun genInvoke(type: Type?, v: InstructionAdapter) { when (type) { Type.INT_TYPE, Type.CHAR_TYPE -> v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "compare", "(II)I", false) - Type.LONG_TYPE -> v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "compare", "(JJ)I", false) + Type.LONG_TYPE -> v.lcmp() Type.FLOAT_TYPE -> v.invokestatic("java/lang/Float", "compare", "(FF)I", false) Type.DOUBLE_TYPE -> v.invokestatic("java/lang/Double", "compare", "(DD)I", false) else -> throw UnsupportedOperationException() diff --git a/compiler/testData/codegen/bytecodeText/intrinsicsCompare/longSmartCast.kt b/compiler/testData/codegen/bytecodeText/intrinsicsCompare/longSmartCast.kt index 98020eb0871..02fd0b3ea8f 100644 --- a/compiler/testData/codegen/bytecodeText/intrinsicsCompare/longSmartCast.kt +++ b/compiler/testData/codegen/bytecodeText/intrinsicsCompare/longSmartCast.kt @@ -11,7 +11,8 @@ fun less4(a: Long?, b: Long?) = if (a is Long && b is Long) a < b else true fun less5(a: Any?, b: Any?) = if (a is Long && b is Long) a < b else true // 3 Intrinsics\.areEqual -// 3 Intrinsics\.compare +// 0 Intrinsics\.compare +// 3 LCMP // for compare: // 3 IFGE // 0 IF_ICMPGE