From 8ab7e5c4061c923b401781603e21cf0411540f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Peltier?= Date: Fri, 9 Feb 2018 16:26:25 +0100 Subject: [PATCH] KT-10057 Use lcmp instead of Intrinsics.compare Fix of https://youtrack.jetbrains.com/issue/KT-10057 --- .../src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt | 2 +- .../codegen/bytecodeText/intrinsicsCompare/longSmartCast.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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