On Wed, 28 Aug 2024 22:20:25 GMT, Shaojin Wen <s...@openjdk.org> wrote:
> A small optimization to reduce the code size of StackMapGenerator.Frame's > pushStack and setLocalsFromArg methods > > Below is the compiler log of C2 > > > # baseline > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (27 bytes) > failed to inline: callee uses too much stack > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (46 bytes) > failed to inline: callee is too large > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (183 bytes) > failed to inline: callee is too large > jdk.internal.classfile.impl.StackMapGenerator$Frame::setLocalsFromArg (367 > bytes) failed to inline: callee is too large > > # current > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (26 bytes) > inline > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (37 bytes) > failed to inline: callee is too large > jdk.internal.classfile.impl.StackMapGenerator$Frame::pushStack (82 bytes) > jdk.internal.classfile.impl.StackMapGenerator$Frame::setLocalsFromArg (255 > bytes) failed to inline: callee is too large src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java line 959: > 957: : pushStack( > 958: desc == CD_float ? Type.FLOAT_TYPE : > 959: desc instanceof PrimitiveClassDescImpl ? > Type.INTEGER_TYPE : Type.referenceType(desc)); I think you can first use a `desc.isPrimitive()` and then go through all primitive type checks; handling references first should be faster in general. src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java line 1058: > 1056: for (int i = 0; i < methodDesc.parameterCount(); i++) { > 1057: var desc = methodDesc.parameterType(i); > 1058: if (desc == CD_void) throw new AssertionError("Should > not reach here"); You can use Suggestion: assert desc != CD_void; So this fails in unit tests. But this takes code size. src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java line 1060: > 1058: if (desc == CD_void) throw new AssertionError("Should > not reach here"); > 1059: Type type; > 1060: if (desc instanceof PrimitiveClassDescImpl) { Can we use `desc.isPrimitive()`? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20756#discussion_r1735361672 PR Review Comment: https://git.openjdk.org/jdk/pull/20756#discussion_r1735362742 PR Review Comment: https://git.openjdk.org/jdk/pull/20756#discussion_r1735362061