On Tue, 11 Jun 2024 16:08:18 GMT, Emanuel Peter <epe...@openjdk.org> wrote:
>> @eme64 TraceMergeStores are here, but I can't understand these assembly >> codes >> >> # JavaCode >> >> class AbstractStringBuilder { >> private AbstractStringBuilder appendNull() { >> int count = this.count; >> ensureCapacityInternal(count + 4); >> byte[] val = this.value; >> if (isLatin1()) { >> val[count ] = 'n'; >> val[count + 1] = 'u'; >> val[count + 2] = 'l'; >> val[count + 3] = 'l'; >> } else { >> StringUTF16.putCharsAt(val, count, 'n', 'u', 'l', 'l'); >> } >> this.count = count + 4; >> return this; >> } >> } >> >> class StringUTF16 { >> public static void putCharsAt(byte[] value, int i, char c1, char c2, >> char c3, char c4) { >> putChar(value, i , c1); >> putChar(value, i + 1, c2); >> putChar(value, i + 2, c3); >> putChar(value, i + 3, c4); >> } >> } >> >> >> # TraceMergeStores >> >> [TraceMergeStores]: Replace >> 78 StoreB === 61 7 76 12 [[ 103 89 ]] @byte[int:>=0] >> (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=5; Memory: >> @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any >> *, idx=5; !jvms: StringUTF16::putChar @ bci:43 (line 71) >> 103 StoreB === 88 78 101 80 [[ 18 ]] @byte[int:>=0] >> (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=5; Memory: >> @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any >> *, idx=5; !jvms: StringUTF16::putChar @ bci:52 (line 72) >> [TraceMergeStores]: with >> 12 Parm === 3 [[ 78 66 38 80 107 113 ]] Parm2: int !jvms: >> StringUTF16::putChar @ bci:-1 (line 69) >> 113 StoreC === 88 7 76 12 [[ ]] @byte[int:>=0] >> (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; >> mismatched Memory: @byte[int:>=0] >> (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; > > @wenshao The output you have here is not at all the `TraceMergeStores`, but > the assembly dump, probably from `PrintOptoAssembly`. In you entire log I > never see a single occurance of `TraceMergeStores`, so presumably no such > optimisation was done. > > I suggest you play around with the examples from my PR > https://github.com/openjdk/jdk/pull/16245, and the `TraceMergeStores` flag. > That will give you some insight about how it works, and maybe give you a way > into understanding why your examples are not optimized. @eme64 Thank you for your patient reply. The multiple versions of TraceMergeStores are as follows # 1 Current Version (Webrevs 3) 03: [Full](https://webrevs.openjdk.org/?repo=jdk&pr=19626&range=03) - [Incremental](https://webrevs.openjdk.org/?repo=jdk&pr=19626&range=02-03) ([27a3050a](https://git.openjdk.org/jdk/pull/19626/files/27a3050a73ec4a65edbdb23383237a08037e0462)) ## 1.1 JavaCode class AbstractStringBuilder { private AbstractStringBuilder appendNull() { int count = this.count; ensureCapacityInternal(count + 4); byte[] val = this.value; if (isLatin1()) { val[count ] = 'n'; val[count + 1] = 'u'; val[count + 2] = 'l'; val[count + 3] = 'l'; } else { StringUTF16.putCharsAt(val, count, 'n', 'u', 'l', 'l'); } this.count = count + 4; return this; } } class StringUTF16 { public static void putCharsAt(byte[] value, int i, char c1, char c2, char c3, char c4) { putChar(value, i , c1); putChar(value, i + 1, c2); putChar(value, i + 2, c3); putChar(value, i + 3, c4); } } ## 1.2 TraceMergeStores [TraceMergeStores]: Replace 78 StoreB === 61 7 76 12 [[ 103 89 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=5; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; !jvms: StringUTF16::putChar @ bci:43 (line 71) 103 StoreB === 88 78 101 80 [[ 18 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=5; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; !jvms: StringUTF16::putChar @ bci:52 (line 72) [TraceMergeStores]: with 12 Parm === 3 [[ 78 66 38 80 107 113 ]] Parm2: int !jvms: StringUTF16::putChar @ bci:-1 (line 69) 113 StoreC === 88 7 76 12 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=5; # 2 Repleace StringUTF16.putChar (Webrevs 2) 02: [Full](https://webrevs.openjdk.org/?repo=jdk&pr=19626&range=02) - [Incremental](https://webrevs.openjdk.org/?repo=jdk&pr=19626&range=01-02) ([f96cde4e](https://git.openjdk.org/jdk/pull/19626/files/f96cde4e79e12e2ea46e6061f918a69f11d59985)) ## 2.1 JavaCode class AbstractStringBuilder { private AbstractStringBuilder appendNull() { int count = this.count; ensureCapacityInternal(count + 4); byte[] val = this.value; if (isLatin1()) { val[count ] = 'n'; val[count + 1] = 'u'; val[count + 2] = 'l'; val[count + 3] = 'l'; } else { StringUTF16.putCharsAt(val, count, 'n', 'u', 'l', 'l'); } this.count = count + 4; return this; } } class StringUTF16 { public static void putCharsAt(byte[] value, int i, char c1, char c2, char c3, char c4) { // Don't use the putChar method, Its instrinsic will cause C2 unable to combining values into larger stores. i <<= 1; putChar0(value, i , c1); putChar0(value, i + 2, c2); putChar0(value, i + 4, c3); putChar0(value, i + 6, c4); } private static void putChar0(byte[] value, int i, int c) { value[i ] = (byte)(c >> HI_BYTE_SHIFT); value[i + 1] = (byte)(c >> LO_BYTE_SHIFT); } } ## 2.2 TraceMergeStores [TraceMergeStores]: Replace 645 StoreB === 629 509 643 583 [[ 671 657 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:7 (line 1569) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 671 StoreB === 656 645 669 45 [[ 710 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:7 (line 1569) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 710 StoreB === 656 671 708 584 [[ 735 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:15 (line 1570) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 735 StoreB === 656 710 733 45 [[ 774 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:15 (line 1570) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 774 StoreB === 656 735 772 585 [[ 800 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:24 (line 1571) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 800 StoreB === 656 774 798 45 [[ 839 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:24 (line 1571) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 839 StoreB === 656 800 837 585 [[ 865 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:34 (line 1572) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 865 StoreB === 656 839 863 45 [[ 885 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:34 (line 1572) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) [TraceMergeStores]: with 1801 ConL === 0 [[ 1802 ]] #long:30399761348886638 1802 StoreL === 656 509 643 1801 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; [TraceMergeStores]: Replace 635 StoreB === 619 499 633 573 [[ 661 647 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:7 (line 1569) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 661 StoreB === 646 635 659 35 [[ 700 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:7 (line 1569) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 700 StoreB === 646 661 698 574 [[ 725 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:15 (line 1570) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 725 StoreB === 646 700 723 35 [[ 764 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:15 (line 1570) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 764 StoreB === 646 725 762 575 [[ 790 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:24 (line 1571) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 790 StoreB === 646 764 788 35 [[ 829 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:24 (line 1571) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 829 StoreB === 646 790 827 575 [[ 855 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:8 (line 1586) StringUTF16::putCharsAt @ bci:34 (line 1572) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 855 StoreB === 646 829 853 35 [[ 875 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: StringUTF16::putChar0 @ bci:19 (line 1587) StringUTF16::putCharsAt @ bci:34 (line 1572) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) [TraceMergeStores]: with 1785 ConL === 0 [[ 1786 ]] #long:30399761348886638 1786 StoreL === 646 499 633 1785 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; # 3 Use SetLong ## 3.1 Java Code class AbstractStringBuilder { static final long NULL_UTF16; static { byte[] bytes8 = new byte[8]; StringUTF16.putCharsAt(bytes8, 0, 'n', 'u', 'l', 'l'); NULL_UTF16 = getLong(bytes8, 0); } private static void setLong(byte[] array, int offset, long value) { array[offset] = (byte) (value ); array[offset + 1] = (byte) (value >> 8); array[offset + 2] = (byte) (value >> 16); array[offset + 3] = (byte) (value >> 24); array[offset + 4] = (byte) (value >> 32); array[offset + 5] = (byte) (value >> 40); array[offset + 6] = (byte) (value >> 48); array[offset + 7] = (byte) (value >> 56); } private static long getLong(byte[] array, int offset) { return ((long) array[offset ] & 0xff) | (((long) array[offset + 1] & 0xff) << 8) | (((long) array[offset + 2] & 0xff) << 16) | (((long) array[offset + 3] & 0xff) << 24) | (((long) array[offset + 4] & 0xff) << 32) | (((long) array[offset + 5] & 0xff) << 40) | (((long) array[offset + 6] & 0xff) << 48) | (((long) array[offset + 7] & 0xff) << 56); } private AbstractStringBuilder appendNull() { int count = this.count; ensureCapacityInternal(count + 4); byte[] val = this.value; if (isLatin1()) { val[count ] = 'n'; val[count + 1] = 'u'; val[count + 2] = 'l'; val[count + 3] = 'l'; } else { setLong(val, count << 1, NULL_UTF16); } this.count = count + 4; return this; } } ## 3.2 TraceMergeStores [TraceMergeStores]: Replace 636 StoreB === 620 509 634 601 [[ 665 651 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:5 (line 72) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 665 StoreB === 650 636 663 45 [[ 695 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:16 (line 73) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 695 StoreB === 650 665 693 674 [[ 723 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:27 (line 74) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 723 StoreB === 650 695 721 45 [[ 754 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:38 (line 75) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 754 StoreB === 650 723 752 733 [[ 784 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:49 (line 76) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 784 StoreB === 650 754 782 45 [[ 813 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:60 (line 77) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 813 StoreB === 650 784 811 733 [[ 841 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:72 (line 78) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) 841 StoreB === 650 813 839 45 [[ 858 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:84 (line 79) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) StringBuilder::append @ bci:2 (line 179) [TraceMergeStores]: with 585 ConL === 0 [[ 654 625 1774 ]] #long:30399761348886638 1774 StoreL === 650 509 634 585 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; [TraceMergeStores]: Replace 626 StoreB === 610 499 624 591 [[ 655 641 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:5 (line 72) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 655 StoreB === 640 626 653 35 [[ 685 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:16 (line 73) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 685 StoreB === 640 655 683 664 [[ 713 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:27 (line 74) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 713 StoreB === 640 685 711 35 [[ 744 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:38 (line 75) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 744 StoreB === 640 713 742 723 [[ 774 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:49 (line 76) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 774 StoreB === 640 744 772 35 [[ 803 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:60 (line 77) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 803 StoreB === 640 774 801 723 [[ 831 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:72 (line 78) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) 831 StoreB === 640 803 829 35 [[ 848 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=10; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; !jvms: AbstractStringBuilder::setLong @ bci:84 (line 79) AbstractStringBuilder::appendNull @ bci:60 (line 676) AbstractStringBuilder::append @ bci:5 (line 616) [TraceMergeStores]: with 575 ConL === 0 [[ 644 615 1758 ]] #long:30399761348886638 1758 StoreL === 640 499 624 575 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=10; ------------- PR Comment: https://git.openjdk.org/jdk/pull/19626#issuecomment-2161770382