RFR(S): 8210659: [lworld] ValueTypeNode::load_default_oop() should return constant for known value klass
Tobias Hartmann
tobias.hartmann at oracle.com
Fri Sep 14 15:10:30 UTC 2018
Thanks Roland.
On 14.09.2018 16:59, Roland Westrelin wrote:
> A related issue is: if a default value is loaded for a value type of
> unknown klass, that is that code from GraphKit::new_array() code when
> allocating through reflection:
>
> Node* adr_fixed_block_addr = basic_plus_adr(elem_klass, in_bytes(InstanceKlass::adr_valueklass_fixed_block_offset()));
> Node* adr_fixed_block = make_load(control(), adr_fixed_block_addr, TypeRawPtr::NOTNULL, T_ADDRESS, MemNode::unordered);
>
> Node* default_value_offset_addr = basic_plus_adr(adr_fixed_block, in_bytes(ValueKlass::default_value_offset_offset()));
> Node* default_value_offset = make_load(control(), default_value_offset_addr, TypeInt::INT, T_INT, MemNode::unordered);
>
> Node* elem_mirror = load_mirror_from_klass(elem_klass);
>
> Node* default_value_addr = basic_plus_adr(elem_mirror, ConvI2X(default_value_offset));
> const TypePtr* adr_type = _gvn.type(default_value_addr)->is_ptr();
> Node* val = access_load_at(elem_mirror, default_value_addr, adr_type, TypeInstPtr::BOTTOM, T_OBJECT, IN_HEAP);
>
> If during optimization, the klass's type becomes known, does this all
> folds to a constant?
It's probably not optimized. We should add a corresponding LoadNode::Value transformation similar to
what we have for a java mirror load:
http://hg.openjdk.java.net/valhalla/valhalla/file/3026ac6c13f3/src/hotspot/share/opto/memnode.cpp#l1837
I've filed:
https://bugs.openjdk.java.net/browse/JDK-8210756
Best regards,
Tobias
More information about the valhalla-dev
mailing list