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

Fei Yang fyang at openjdk.org
Wed Jun 7 06:26:54 UTC 2023


On Mon, 5 Jun 2023 20:52:01 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 is clean on hifive, more tbd.

Hi, I searched and found that we have four direct callers of `C2_MacroAssembler::string_indexof_linearscan`: three in file riscv.ad (by string_indexof_conUU, string_indexof_conLL and string_indexof_conUL) and one by `C2_MacroAssembler::string_indexof`. Did you check which one is triggering these unaligned accesses? I am not sure but it looks to me that the three direct callers in file riscv.ad are less likely to have such an issue. If that is true, we might need some distinugish among those callers for better performance. Also, it would be better to have some numbers on other venders like T-head.

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

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


More information about the hotspot-compiler-dev mailing list