RFR: 8377225: RISC-V: Improve receiver type profiling reliability
Anjian Wen
wenanjian at openjdk.org
Thu Feb 5 11:32:11 UTC 2026
On Thu, 5 Feb 2026 02:27:18 GMT, Fei Yang <fyang 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 n...
>
> 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`.
fixed!
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/29310#discussion_r2767945461
More information about the hotspot-dev
mailing list