RFR: 8347405: MergeStores with reverse bytes order value

kuaiwei duke at openjdk.org
Fri Jan 10 09:12:55 UTC 2025


This patch enhance MergeStores optimization to support merge value with reverse byte order.

Below is benchmark result before and after the patch:

On aliyun g8a (aarch64)

test                       , before             , after        , ratio
MergeStoreBench.setCharBS       ,5669.655000    ,5669.566000    ,0.00 %
MergeStoreBench.setCharBV       ,5516.911000    ,5516.273000    ,0.01 %
MergeStoreBench.setCharC        ,5578.644000    ,5552.809000    ,0.47 %
MergeStoreBench.setCharLS       ,5782.140000    ,5779.264000    ,0.05 %
MergeStoreBench.setCharLV       ,5496.403000    ,5499.195000    ,-0.05 %
MergeStoreBench.setIntB           ,6087.703000    ,2768.385000    ,119.90 %
MergeStoreBench.setIntBU        ,6733.813000    ,2950.240000    ,128.25 %
MergeStoreBench.setIntBV        ,1362.233000    ,1361.821000    ,0.03 %
MergeStoreBench.setIntL           ,2834.785000    ,2833.042000    ,0.06 %
MergeStoreBench.setIntLU         ,2947.145000    ,2946.874000    ,0.01 %
MergeStoreBench.setIntLV         ,5506.791000    ,5506.229000    ,0.01 %
MergeStoreBench.setIntRB         ,7634.279000    ,5611.058000    ,36.06 %
MergeStoreBench.setIntRBU       ,7766.737000    ,5551.281000    ,39.91 %
MergeStoreBench.setIntRL          ,5689.793000    ,5689.385000    ,0.01 %
MergeStoreBench.setIntRLU        ,5628.287000    ,5628.789000    ,-0.01 %
MergeStoreBench.setIntRU          ,5536.039000    ,5534.910000    ,0.02 %
MergeStoreBench.setIntU            ,5595.363000    ,5567.810000    ,0.49 %
MergeStoreBench.setLongB         ,13722.671000   ,6811.098000    ,101.48 %
MergeStoreBench.setLongBU       ,13728.844000   ,4280.240000    ,220.75 %
MergeStoreBench.setLongBV       ,2785.255000    ,2785.949000    ,-0.02 %
MergeStoreBench.setLongL        ,5714.615000    ,5710.402000    ,0.07 %
MergeStoreBench.setLongLU       ,4128.746000    ,4129.324000    ,-0.01 %
MergeStoreBench.setLongLV       ,2793.125000    ,2794.438000    ,-0.05 %
MergeStoreBench.setLongRB       ,14465.223000   ,7015.050000    ,106.20 %
MergeStoreBench.setLongRBU      ,14546.954000   ,6173.210000    ,135.65 %
MergeStoreBench.setLongRL       ,6816.145000    ,6813.348000    ,0.04 %
MergeStoreBench.setLongRLU      ,4289.445000    ,4284.239000    ,0.12 %
MergeStoreBench.setLongRU       ,3132.471000    ,3133.093000    ,-0.02 %
MergeStoreBench.setLongU        ,3086.779000    ,3087.298000    ,-0.02 %


AMD EPYC 9T24 96-Core Processor

test                       , before             , after        , ratio
MergeStoreBench.setCharBS       ,5317.887000    ,5327.174000    ,-0.17 %
MergeStoreBench.setCharBV       ,3088.976000    ,3091.006000    ,-0.07 %
MergeStoreBench.setCharC        ,3388.877000    ,3380.690000    ,0.24 %
MergeStoreBench.setCharLS       ,4584.065000    ,4588.369000    ,-0.09 %
MergeStoreBench.setCharLV       ,2250.598000    ,2252.032000    ,-0.06 %
MergeStoreBench.setIntB           ,6833.492000    ,2277.048000    ,200.10 %
MergeStoreBench.setIntBU        ,10100.114000   ,4599.712000    ,119.58 %
MergeStoreBench.setIntBV        ,571.860000     ,571.757000     ,0.02 %
MergeStoreBench.setIntL          ,2239.958000    ,2239.086000    ,0.04 %
MergeStoreBench.setIntLU        ,4565.547000    ,4596.785000    ,-0.68 %
MergeStoreBench.setIntLV        ,590.695000     ,589.769000     ,0.16 %
MergeStoreBench.setIntRB        ,8161.235000    ,3051.716000    ,167.43 %
MergeStoreBench.setIntRBU       ,10395.762000   ,6216.037000    ,67.24 %
MergeStoreBench.setIntRL        ,2555.976000    ,2554.368000    ,0.06 %
MergeStoreBench.setIntRLU       ,5244.833000    ,5258.066000    ,-0.25 %
MergeStoreBench.setIntRU        ,569.180000     ,569.181000     ,-0.00 %
MergeStoreBench.setIntU          ,592.201000     ,593.928000     ,-0.29 %
MergeStoreBench.setLongB        ,17983.730000   ,4889.856000    ,267.78 %
MergeStoreBench.setLongBU       ,19592.106000   ,4688.507000    ,317.88 %
MergeStoreBench.setLongBV       ,1142.753000    ,1143.237000    ,-0.04 %
MergeStoreBench.setLongL        ,4288.793000    ,4283.908000    ,0.11 %
MergeStoreBench.setLongLU       ,4459.737000    ,4452.856000    ,0.15 %
MergeStoreBench.setLongLV       ,1166.993000    ,1167.104000    ,-0.01 %
MergeStoreBench.setLongRB       ,17946.584000   ,4348.289000    ,312.73 %
MergeStoreBench.setLongRBU      ,20017.846000   ,5646.924000    ,254.49 %
MergeStoreBench.setLongRL       ,4895.993000    ,4899.112000    ,-0.06 %
MergeStoreBench.setLongRLU      ,4652.172000    ,4706.134000    ,-1.15 %
MergeStoreBench.setLongRU       ,1144.522000    ,1144.203000    ,0.03 %
MergeStoreBench.setLongU        ,1172.038000    ,1171.341000    ,0.06 %

-------------

Commit messages:
 - Remove unused test option
 - 8347405: MergeStores with reverse bytes order value

Changes: https://git.openjdk.org/jdk/pull/23030/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23030&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8347405
  Stats: 109 lines in 3 files changed: 86 ins; 0 del; 23 mod
  Patch: https://git.openjdk.org/jdk/pull/23030.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23030/head:pull/23030

PR: https://git.openjdk.org/jdk/pull/23030


More information about the hotspot-compiler-dev mailing list