JVM IR: minor, optimize forceSingleValueParameterBoxing

In JVM IR, both `valueParameters` and `isFromJavaOrBuiltins` take
noticeable time (1% of all compilation) because the logic for these in
IrBasedDescriptors is not trivial.
This commit is contained in:
Alexander Udalov
2020-08-12 20:18:47 +02:00
parent 35cace2540
commit 7468518f35
2 changed files with 4 additions and 2 deletions
@@ -228,7 +228,9 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
else -> JvmMethodParameterKind.VALUE
}
val type =
if (forceSingleValueParameterBoxing(function.toIrBasedDescriptor())) parameter.type.makeNullable() else parameter.type
if (function.name.asString() == "remove" && forceSingleValueParameterBoxing(function.toIrBasedDescriptor()))
parameter.type.makeNullable()
else parameter.type
writeParameter(sw, kind, type, function)
}
@@ -50,7 +50,7 @@ fun FunctionDescriptor.computeJvmDescriptor(withReturnType: Boolean = true, with
fun forceSingleValueParameterBoxing(f: CallableDescriptor): Boolean {
if (f !is FunctionDescriptor) return false
if (f.valueParameters.size != 1 || f.isFromJavaOrBuiltins() || f.name.asString() != "remove") return false
if (f.name.asString() != "remove" || f.valueParameters.size != 1 || f.isFromJavaOrBuiltins()) return false
if ((f.original.valueParameters.single().type.mapToJvmType() as? JvmType.Primitive)?.jvmPrimitiveType != JvmPrimitiveType.INT) return false
val overridden =