RFR: 8309502: RISC-V: String.indexOf intrinsic may produce misaligned memory loads [v4]

Vladimir Kempik vkempik at openjdk.org
Thu Jun 8 06:20:50 UTC 2023


On Thu, 8 Jun 2023 05:49:05 GMT, Vladimir Kempik <vkempik at openjdk.org> wrote:

>> Please review this attempt to remove misaligned loads in String.indexOf intrinsic on RISC-V
>> 
>> Initialy found these misaligned loads when profiling finagle-http test from renaissance suite.
>> The majority of trp_lam events (about 66k per finagle-http round) came at line 706 (https://github.com/openjdk/jdk/pull/14320/files#diff-35eb1d2f1e2f0514dd46bd7fbad49ff2c87703d5a3041a6433956df00a3fe6e6L706)
>> The other two produced about 100 events combined.
>> Later I've found this can partially be reproduced with StringIndexOf.advancedWithMediumSub.
>> Numbers on hifive before and after applying the patch:
>> 
>> 
>> Benchmark                                                  Mode  Cnt       Score      Error  Units
>> StringIndexOf.advancedWithMediumSub                        avgt   25   47031.406 ±  144.005  ns/op
>> 
>> 
>> After:
>> 
>> Benchmark                                                 Mode  Cnt       Score     Error  Units
>> StringIndexOf.advancedWithMediumSub                       avgt   25    4256.830 ±  23.075  ns/op
>> 
>> 
>> Testing: tier1/tier2 is clean on hifive.
>
> Vladimir Kempik has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix nits

I have asked our HW team, addi sometimes can be cheaper than slli:  addi Xd, Xs, 0 can be resolved by register renaming ( not on every uarch tho), without using ALU. and slli always uses ALU
So it may be worth it to add umbrella for slli in macroassembler, if shift amount is zero - use addi instead.

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

PR Comment: https://git.openjdk.org/jdk/pull/14320#issuecomment-1581953365


More information about the hotspot-compiler-dev mailing list