[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
Thu Mar 26 10:00:41 UTC 2015
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