RFR: 8377225: RISC-V: Improve receiver type profiling reliability

Fei Yang fyang at openjdk.org
Thu Feb 5 11:32:10 UTC 2026


On Tue, 20 Jan 2026 08:03:47 GMT, Anjian Wen <wenanjian at openjdk.org> wrote:

> Same as JDK-8357258, this patch try to improve the receiver type profile reliability in riscv.
> 
> Functional Testing: tier1 Passed
> Performance Testing: no regression
> 
> 
> # Baseline
> Benchmark                        (randomized)  Mode  Cnt   Score   Error  Units
> InterfaceCalls.test1stInt2Types         false  avgt   12   9.371 ± 0.007  ns/op
> InterfaceCalls.test1stInt2Types          true  avgt   12  14.168 ± 0.025  ns/op
> InterfaceCalls.test1stInt3Types         false  avgt   12  38.390 ± 0.261  ns/op
> InterfaceCalls.test1stInt3Types          true  avgt   12  39.634 ± 0.122  ns/op
> InterfaceCalls.test1stInt5Types         false  avgt   12  40.960 ± 1.909  ns/op
> InterfaceCalls.test1stInt5Types          true  avgt   12  41.235 ± 0.126  ns/op
> InterfaceCalls.test2ndInt2Types         false  avgt   12  10.227 ± 0.333  ns/op
> InterfaceCalls.test2ndInt2Types          true  avgt   12  14.657 ± 0.049  ns/op
> InterfaceCalls.test2ndInt3Types         false  avgt   12  42.756 ± 0.563  ns/op
> InterfaceCalls.test2ndInt3Types          true  avgt   12  50.112 ± 0.302  ns/op
> InterfaceCalls.test2ndInt5Types         false  avgt   12  59.637 ± 1.900  ns/op
> InterfaceCalls.test2ndInt5Types          true  avgt   12  56.992 ± 0.162  ns/op
> InterfaceCalls.testIfaceCall            false  avgt   12  38.731 ± 0.749  ns/op
> InterfaceCalls.testIfaceCall             true  avgt   12  38.218 ± 0.283  ns/op
> InterfaceCalls.testIfaceExtCall         false  avgt   12  41.505 ± 3.659  ns/op
> InterfaceCalls.testIfaceExtCall          true  avgt   12  39.611 ± 0.483  ns/op
> InterfaceCalls.testMonomorphic          false  avgt   12   8.476 ± 0.011  ns/op
> InterfaceCalls.testMonomorphic           true  avgt   12   8.475 ± 0.007  ns/op
> 
> # With Patch
> Benchmark                        (randomized)  Mode  Cnt   Score   Error  Units
> InterfaceCalls.test1stInt2Types         false  avgt   12   9.804 ± 0.401  ns/op
> InterfaceCalls.test1stInt2Types          true  avgt   12  14.171 ± 0.029  ns/op
> InterfaceCalls.test1stInt3Types         false  avgt   12  38.793 ± 0.677  ns/op
> InterfaceCalls.test1stInt3Types          true  avgt   12  39.498 ± 0.351  ns/op
> InterfaceCalls.test1stInt5Types         false  avgt   12  40.916 ± 0.771  ns/op
> InterfaceCalls.test1stInt5Types          true  avgt   12  41.705 ± 1.356  ns/op
> InterfaceCalls.test2ndInt2Types         false  avgt   12  10.222 ± 0.340  ns/op
> InterfaceCalls.test2ndInt2Types          true  avgt   12  14.659 ± 0.033  ns/op
> InterfaceCalls.test2ndInt3Types         false  avgt   12  42.375 ± 0....

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp line 558:

> 556: //
> 557: void MacroAssembler::profile_receiver_type(Register recv, Register mdp, int mdp_offset) {
> 558:   assert_different_registers(recv, mdp, t1, t2);

Seems to me risky to use `t2` here which is an allocatable register. I think you can use `t0` and `t1` instead? These two are reserved registers like aarch64's `rscratch1` and `rscratch2`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/29310#discussion_r2766772757


More information about the hotspot-dev mailing list