RFR 8220269 [lworld] C1 should return default value for uninitialized non-static Q fields

Ioi Lam ioi.lam at oracle.com
Thu Mar 7 05:32:51 UTC 2019


For the following bytecode

     getfield Holder.f:"QJumboValue"

If the field is too big to be flattened (e.g., ciField::is_flattened()
returns false), we should load the field as an oop, test for null, and
replace with JumboValue.default.


I also refactored the handling of unloaded classes by getfield/getstatic
into a new function LIRGenerator::non_nullable_load_field_prolog(). I 
needed to
add a new method:

   bool ciField::is_never_null() const {
     // Cannot use (type()->basic_type() == T_VALUETYPE) -- if the class is
     // not loaded, type() is an unloaded ciInstanceKlass!
     return signature()->char_at(0) == 'Q';

I think putfield also need to be fixed, because it currently rely on
ciField::type(), which essentially changes "Q" to "L" for unloaded value 

But I will do that in a separate JBS issue.

- Ioi

More information about the valhalla-dev mailing list