RFR: 8268858: Determine register pressure automatically by the number of available registers for allocation [v2]

Vladimir Kozlov kvn at openjdk.java.net
Mon Jun 21 16:53:33 UTC 2021


On Mon, 21 Jun 2021 07:58:13 GMT, Joshua Zhu <jzhu at openjdk.org> wrote:

>> Hi,
>> 
>> This patch includes the following changes:
>> 
>> 1) Determine register pressure automatically by the number of available
>>    registers for allocation.
>>    Currently, INTPRESSURE is hard-coded no matter whether heapbase
>>    or framepointer register is available for RA.
>> 
>> 2) x86: Machines with AVX3 have 2x more XMM registers.
>>         The pressure threshold should be improved for both RA and LCM.
>>         Currently, only scheduling takes more XMM registers into
>>         consideration.
>> 
>> 3) aarch64: add a new jtreg case
>>         In bug 8183543, this case caused many compilation failures with
>>         "failed spill-split-recycle sanity check". This test case is
>>         imported to ensure no regression failure.
>> 
>> Inconsistent pressure threshold value with the number of available
>> registers will bring unnecessary spilling in some scenarios.
>> I wrote a simple example as one case:
>>   https://cr.openjdk.java.net/~jzhu/8268858/Test.java
>> 
>> With this patch, 4 extra spill copies are eliminated on AArch64.
>>   old OptoAssembly: https://cr.openjdk.java.net/~jzhu/8268858/old_opto_assembly
>>   new OptoAssembly: https://cr.openjdk.java.net/~jzhu/8268858/new_opto_assembly
>> 
>> Could you please help review this patch?
>> 
>> Best Regards,
>> Joshua
>
> Joshua Zhu has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Update comments and place test into proper location

Need more information.

src/hotspot/cpu/x86/x86_64.ad line 1776:

> 1774:   // The following default threshold works best for LCM's register pressure
> 1775:   // scheduling on x64.
> 1776:   uint default_float_pressure_threshold = _FLOAT_REG_mask.Size() - 2;

Why it works best? Did you tested different values or it is required for correctness? If for correctness - why?

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

PR: https://git.openjdk.java.net/jdk/pull/4505


More information about the hotspot-compiler-dev mailing list