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

Feilong Jiang fjiang at openjdk.org
Thu Jun 8 01:04:49 UTC 2023


On Wed, 7 Jun 2023 18:20:26 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 misaligned access in DO4

Changes requested by fjiang (Author).

src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp line 689:

> 687:       if (isLL)
> 688:       {
> 689:         //need to erase 1 most significant byte in 32-bit value of ch2

Suggestion:

        // need to erase 1 most significant byte in 32-bit value of ch2

src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp line 693:

> 691:         srli(ch2, ch2, 32);
> 692:       } else {
> 693:         slli(ch2, ch2, 16); //2 most significant bytes will be erased by this operation

Suggestion:

        slli(ch2, ch2, 16); // 2 most significant bytes will be erased by this operation

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

PR Review: https://git.openjdk.org/jdk/pull/14320#pullrequestreview-1468817339
PR Review Comment: https://git.openjdk.org/jdk/pull/14320#discussion_r1222332775
PR Review Comment: https://git.openjdk.org/jdk/pull/14320#discussion_r1222332867


More information about the hotspot-compiler-dev mailing list