RFR 8218142 [lworld] C1 support for array covariance for aaload
Ioi Lam
ioi.lam at oracle.com
Tue Feb 5 11:54:29 UTC 2019
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