From a9c8fd903b65167b00a31c6dd2285d28cc220153 Mon Sep 17 00:00:00 2001 From: Jeffrey van Gogh Date: Mon, 24 Jun 2019 08:36:13 -0700 Subject: [PATCH] reduce calls to Object.hashCode originating from LabelNormailizationMethodTransformer Building on the work in #2403, shaves 1% of compilation time on kotlinx.serialization by using SmartIdentityTable instead of hashMap in LabelNormailizationMethodTransformer. Metrics on the prior hashMap use in this code: | What | Count | | --------- | ----- | | instances | 21530 | | min | 0 | | max | 174 | | mean | 4 | | stddev | 8.24 | | median | 4 | | 90p | 8 | | 95p | 15 | --- .../optimization/LabelNormalizationMethodTransformer.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/LabelNormalizationMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/LabelNormalizationMethodTransformer.kt index 02da4ce1cf7..fcab0e02d0a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/LabelNormalizationMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/LabelNormalizationMethodTransformer.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen.optimization import org.jetbrains.kotlin.codegen.optimization.common.removeEmptyCatchBlocks import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer +import org.jetbrains.kotlin.utils.SmartIdentityTable import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.tree.* import java.lang.IllegalStateException @@ -29,7 +30,7 @@ class LabelNormalizationMethodTransformer : MethodTransformer() { private class TransformerForMethod(val methodNode: MethodNode) { val instructions = methodNode.instructions - val newLabelNodes = hashMapOf() + val newLabelNodes = SmartIdentityTable() fun transform() { if (rewriteLabelInstructions()) {