From 67460962c342747fdee9da4381d7258f3e6aff0a Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 23 Aug 2023 16:43:46 +0200 Subject: [PATCH] [JVM] Use `HashSet` instead of `SmartSet` in `MaxStackFrameSizeAndLocalsCalculator` This change speeds up backend by approximately 0.25%. --- .../MaxStackFrameSizeAndLocalsCalculator.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java index dd84f3336ba..b05753d2779 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MaxStackFrameSizeAndLocalsCalculator.java @@ -337,7 +337,7 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { */ int max = 0; Stack stack = new Stack<>(); - Set pushed = SmartSet.create(); + Set pushed = new HashSet<>(); stack.push(firstLabel); pushed.add(firstLabel); @@ -418,16 +418,31 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { private LabelWrapper nextLabel = null; private final Collection successors = new LinkedList<>(); + private final int index; private int outputStackMax = 0; private int inputStackSize = 0; - public LabelWrapper(Label label) { + public LabelWrapper(Label label, int index) { this.label = label; + this.index = index; } private void addSuccessor(LabelWrapper successor, int outputStackSize, boolean isExceptional) { successors.add(new ControlFlowEdge(successor, outputStackSize, isExceptional)); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LabelWrapper wrapper = (LabelWrapper) o; + return index == wrapper.index; + } + + @Override + public int hashCode() { + return index; + } } // ------------------------------------------------------------------------ @@ -435,7 +450,7 @@ public class MaxStackFrameSizeAndLocalsCalculator extends MaxLocalsCalculator { // ------------------------------------------------------------------------ private LabelWrapper getLabelWrapper(Label label) { - return labelWrappersTable.getOrCreate(label, () -> new LabelWrapper(label)); + return labelWrappersTable.getOrCreate(label, () -> new LabelWrapper(label, labelWrappersTable.getSize())); } private void increaseStackSize(int variation) {