On Tue, 11 Jun 2024 11:35:28 GMT, Shaojin Wen <d...@openjdk.org> wrote:
>> After PR https://github.com/openjdk/jdk/pull/16245, C2 optimizes stores into >> primitive arrays by combining values into larger stores. >> >> This PR rewrites the code of appendNull and append(boolean) methods so that >> these two methods can be optimized by C2. > > Shaojin Wen has updated the pull request incrementally with one additional > commit since the last revision: > > revert -XX:+TraceMergeStores -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_putCharStringU [TraceMergeStores]: Replace 644 StoreB === 628 499 642 573 [[ 669 655 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 669 StoreB === 654 644 667 35 [[ 720 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 720 StoreB === 654 669 718 574 [[ 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: StringUTF16::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 744 StoreB === 654 720 742 35 [[ 796 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 796 StoreB === 654 744 794 575 [[ 820 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 820 StoreB === 654 796 818 35 [[ 872 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 872 StoreB === 654 820 870 575 [[ 896 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) 896 StoreB === 654 872 894 35 [[ 916 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) [TraceMergeStores]: with 1826 ConL === 0 [[ 1827 ]] #long:30399761348886638 1827 StoreL === 654 499 642 1826 [[ ]] @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 654 StoreB === 638 509 652 583 [[ 679 665 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 679 StoreB === 664 654 677 45 [[ 730 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 730 StoreB === 664 679 728 584 [[ 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: StringUTF16::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 754 StoreB === 664 730 752 45 [[ 806 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 806 StoreB === 664 754 804 585 [[ 830 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 830 StoreB === 664 806 828 45 [[ 882 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 882 StoreB === 664 830 880 585 [[ 906 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) 906 StoreB === 664 882 904 45 [[ 926 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) AbstractStringBuilder::append @ bci:5 (line 587) StringBuilder::append @ bci:2 (line 179) [TraceMergeStores]: with 1842 ConL === 0 [[ 1843 ]] #long:30399761348886638 1843 StoreL === 664 509 652 1842 [[ ]] @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 843 StoreB === 828 699 841 11 [[ 868 854 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) 868 StoreB === 853 843 866 845 [[ 882 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) [TraceMergeStores]: with 11 Parm === 3 [[ 832 845 787 679 614 92 578 168 178 228 549 278 292 843 890 977 ]] Parm1: int !jvms: AbstractStringBuilder::append @ bci:-1 (line 814) 977 StoreC === 853 699 841 11 [[ ]] @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 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; [TraceMergeStores]: Replace 617 StoreB === 601 472 615 546 [[ 642 628 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) 642 StoreB === 627 617 640 23 [[ 693 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:3 (line 1552) AbstractStringBuilder::appendNull @ bci:63 (line 647) 693 StoreB === 627 642 691 547 [[ 717 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) 717 StoreB === 627 693 715 23 [[ 769 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:11 (line 1553) AbstractStringBuilder::appendNull @ bci:63 (line 647) 769 StoreB === 627 717 767 548 [[ 793 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) 793 StoreB === 627 769 791 23 [[ 845 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:20 (line 1554) AbstractStringBuilder::appendNull @ bci:63 (line 647) 845 StoreB === 627 793 843 548 [[ 869 ]] @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::putChar @ bci:43 (line 71) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) 869 StoreB === 627 845 867 23 [[ 16 ]] @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::putChar @ bci:52 (line 72) StringUTF16::putCharsAt @ bci:29 (line 1555) AbstractStringBuilder::appendNull @ bci:63 (line 647) [TraceMergeStores]: with 1006 ConL === 0 [[ 1007 ]] #long:30399761348886638 1007 StoreL === 627 472 615 1006 [[ ]] @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 1089 StoreB === 1074 938 1087 1068 [[ 1116 1102 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=11; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; !jvms: StringUTF16::putChar @ bci:43 (line 71) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) StringBuilder::append @ bci:2 (line 246) SBTraceStoreTest::append @ bci:24 (line 14) 1116 StoreB === 1101 1089 1114 1092 [[ 1206 1159 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=11; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; !orig=[1197] !jvms: StringUTF16::putChar @ bci:52 (line 72) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) StringBuilder::append @ bci:2 (line 246) SBTraceStoreTest::append @ bci:24 (line 14) [TraceMergeStores]: with 298 ConI === 0 [[ 1078 1028 918 570 556 507 458 448 375 1464 ]] #int:20013 1464 StoreC === 1101 938 1087 298 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; SBTraceStoreTest-appendNullUTF16 millis : 22 SBTraceStoreTest-appendNullUTF16 millis : 7 [TraceMergeStores]: Replace 1210 StoreB === 1195 1059 1208 1189 [[ 1237 1223 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=11; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; !jvms: StringUTF16::putChar @ bci:43 (line 71) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) StringBuilder::append @ bci:2 (line 246) SBTraceStoreTest::append @ bci:24 (line 14) SBTraceStoreTest::appendTest @ bci:23 (line 31) 1237 StoreB === 1222 1210 1235 1213 [[ 1324 ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=11; Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; !orig=[1315] !jvms: StringUTF16::putChar @ bci:52 (line 72) StringUTF16::putCharSB @ bci:8 (line 1490) AbstractStringBuilder::append @ bci:72 (line 821) StringBuilder::append @ bci:2 (line 246) SBTraceStoreTest::append @ bci:24 (line 14) SBTraceStoreTest::appendTest @ bci:23 (line 31) [TraceMergeStores]: with 423 ConI === 0 [[ 1199 1149 1039 693 679 630 582 572 500 2597 ]] #int:20013 2597 StoreC === 1222 1059 1208 423 [[ ]] @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; mismatched Memory: @byte[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=11; ------------- PR Comment: https://git.openjdk.org/jdk/pull/19626#issuecomment-2162905112