RFR(S): 8182995: [MVT] Assert failure "value type should be loaded"

Tobias Hartmann tobias.hartmann at oracle.com
Tue Jun 27 11:00:49 UTC 2017


please review the following patch:

Problem 1:
We crash with an assert while emitting code for loading a value type because ValueTypeNode::is_loaded() does not work with __Value. I changed the implementation together with ciValueKlass.cpp and type.cpp to support the empty __Value value type.

Problem 2:
We crash with "modified node was not processed by IGVN.transform_old()" because ValueTypeNode::Ideal() may modify the ValueTypeNode but still return NULL.

Problem 3:
The !is_allocated assert in ValueTypeNode::make() for loading a flattened value type is too strong. If we load a flattened value type from a value type array and the array load goes away during gvn.transform() leaving a load from a non-flattened representation (that was used to initialize that array element), the ValueTypeNode::Ideal() optimization may re-use that oop and the returned value type is indeed allocated.


More information about the valhalla-dev mailing list