RFR 8218142 [lworld] C1 support for array covariance for aaload
Srikanth
srikanth.adayapalam at oracle.com
Tue Feb 5 13:34:00 UTC 2019
Javac by default allows covariance now.
Srikanth
On 05/02/19 5:24 PM, Ioi Lam wrote:
> If I remember correctly, some of them failed to compile or run after
> changes in javac or hotspot-runtime that disallowed covariance. I'll
> re-enable them and see what happens.
>
> Thanks
>
> - Ioi
>
> On 2/5/19 3:06 AM, Tobias Hartmann wrote:
>> Hi Ioi,
>>
>> this looks good to me. Should we re-enable the tests marked with
>> "TODO Re-enable if value type
>> arrays become covariant with object arrays"? C2 already supports
>> array covariance.
>>
>> Thanks,
>> Tobias
>>
>> On 31.01.19 13:52, Ioi Lam wrote:
>>> http://cr.openjdk.java.net/~iklam/valhalla/8218142-aaload-covariance.v01/
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8218142
>>>
>>> When loading from an array declared as Object[], now the C1 code
>>> checks if the array is flattened.
>>> If so, the loading is done via a runtime call.
>>>
>>> Here's an example of the generated code
>>>
>>> mov 0x8(%rsi),%eax ; rsi = array
>>> mov $0x800000000,%r12
>>> add %r12,%rax ; rax = array klass
>>> xor %r12,%r12 ; why is this here??
>>> mov 0xc(%rax),%eax ; layout_helper
>>> sar $0x1d,%eax
>>> cmp $0xfffffffd,%eax ; check for
>>> Klass::_lh_array_tag_vt_value
>>> je L_3 ; slow case
>>>
>>> L_1 movslq %edx,%rdx ; non-flattened load
>>> mov 0x10(%rsi,%rdx,4),%eax
>>> shl $0x3,%rax
>>> L_2 ....
>>>
>>> L_3 mov %rsi,0x8(%rsp) ; LoadFlattenedArrayStub slow case
>>> mov %rdx,(%rsp)
>>> callq 0x00007fe6489c8840 ; runtime_call load_flattened_array
>>> jmpq L_2
>>>
>>>
>>> The code is pretty big and sub-optimal. My plan is to also get
>>> aastore working first, and then
>>> optimize.
>>>
>>> One possibility is to check if the array is actually an Object[]
>>> array. That should help with the
>>> erased generic types.
>>>
>>> mov 0x8(%rsi),%eax ; rsi = array
>>> + cmp $0x00001234, %eax ; compressed klass for
>>> [Ljava/lang/Object;
>>> + je L_1 ; go to non-flattened load
>>> mov $0x800000000,%r12
>>>
>>>
>>> Thanks
>>> - Ioi
More information about the valhalla-dev
mailing list