[9] RFR(S): 8075798: Allow ADLC register class to depend on runtime conditions also for cisc-spillable classes
Zoltán Majó
zoltan.majo at oracle.com
Fri Mar 27 08:37:25 UTC 2015
On 03/26/2015 05:37 PM, Vladimir Kozlov wrote:
> This looks reasonable. Nicely done, Zoltan.
Thank you, Vladimir!
Best regards,
Zoltan
>
> Thanks,
> Vladimir
>
> On 3/26/15 3:00 AM, Zoltán Majó wrote:
>> Hi,
>>
>>
>> please review the following patch.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8075798
>>
>>
>> Problem: In .ad files, it is difficult to have register classes that
>> depend on runtime conditions. JDK-7090968 partially
>> solves the problem, but it does not work in cases when not only a
>> register mask, but also a
>> "stack mask" is generated for a register class (i.e., the register
>> class is "cisc-spillable"). (If a stack mask is
>> needed for classes dependant on runtime conditions, the assert on
>> line 155 in src/share/vm/adlc/output_c.cpp fails.)
>>
>> The goal of this enhancement is to extend ADLC parsing to allow
>> cisc-spillable register classes to depend on runtime
>> conditions.
>>
>>
>> Solution: Introduce a new register class, reg_class_dynamic. The new
>> register class is used with the following syntax:
>>
>> reg_class_dynamic actual_dflt_reg(dflt_reg, low_reg, %{
>> VM_Version::has_vfp3_32() }% );
>>
>> where dflt_reg and low_reg are two existing "static" register classes
>> and actual_dflt_reg is the newly defined register
>> class.
>>
>> The functionality of the actual_dflt_reg defined with
>> reg_class_dynamic is equivalent to the existing syntax
>>
>> reg_class actual_dflt_reg %{
>> if (VM_Version::has_vfp3_32()) {
>> return DFLT_REG_mask();
>> } else {
>> return DFLT_LOW_REG_mask();
>> }
>> }
>>
>> The difference between the two register class declarations is that
>> the declaration with reg_class_dynamic allows the
>> declared register class to be "cisc-spillable", whereas a declaration
>> with reg_class does not. The code attached to a
>> reg_class can be, however, more elaborate than a simple if-then-else
>> allowed with reg_class_dynamic.
>>
>>
>> Webrev: http://cr.openjdk.java.net/~zmajo/8075798/webrev.00/
>>
>>
>> Testing:
>> - JPRT testing on all supported platforms
>> - manual testing on x86_64 with a .ad file that includes a reg_class
>> definition with a code snippet as well as a
>> reg_class_dynamic definition.
>>
>>
>> Thank you and best regards,
>>
>>
>> Zoltan
>>
More information about the hotspot-compiler-dev
mailing list