--- old/src/hotspot/share/opto/parse3.cpp 2019-03-14 14:00:05.583858204 +0100 +++ new/src/hotspot/share/opto/parse3.cpp 2019-03-14 14:00:05.431857621 +0100 @@ -134,7 +134,7 @@ if (is_get) { (void) pop(); // pop receiver before getting - do_get_xxx(obj, field, is_field); + do_get_xxx(obj, field); } else { do_put_xxx(obj, field, is_field); if (stopped()) { @@ -146,14 +146,14 @@ const TypeInstPtr* tip = TypeInstPtr::make(field_holder->java_mirror()); obj = _gvn.makecon(tip); if (is_get) { - do_get_xxx(obj, field, is_field); + do_get_xxx(obj, field); } else { do_put_xxx(obj, field, is_field); } } } -void Parse::do_get_xxx(Node* obj, ciField* field, bool is_field) { +void Parse::do_get_xxx(Node* obj, ciField* field) { BasicType bt = field->layout_type(); // Does this field have a constant value? If so, just push the value. @@ -211,6 +211,7 @@ ciObject* val = mirror->field_value(field).as_object(); if (!val->is_null_object()) { type = type->join_speculative(TypePtr::NOTNULL); + flattenable = true; // Null-free, treat as flattenable } } }