Initial runtime support for the ValueTypes attribute
Frederic Parain
frederic.parain at oracle.com
Wed May 23 19:41:16 UTC 2018
Karen,
Thank you for the review.
> On May 23, 2018, at 15:12, Karen Kinnear <KAREN.KINNEAR at ORACLE.COM> wrote:
>
> Frederic,
>
> Totally agree with your discussion with Tobias - thanks for that.
>
> Code looks good. Minor questions. I don’t need to see an updated webrev.
>
> instanceKlass.cpp: line 617 “if this class” -> “of this class”
> lines 626-6267 “where potential” -> “to detect potential”
Both are fixed now.
>
> classFileParser.cpp lines 4104/4105
> not clear where you are using name and signature in the exception throwing case?
>
A remain from the logging I used to verify the behavior of the code.
I removed it.
I’ll push the code with these modifications.
Thank you,
Fred
>
>> On May 22, 2018, at 3:00 PM, Frederic Parain <frederic.parain at oracle.com> wrote:
>>
>> Karen,
>>
>> Good catch on classFileParser lines 4078/4092, the test was wrong,
>> but another bug in the way class names were retrieved from the signature
>> was hiding the problem. Both are fixed now,
>>
>> After a discussion with Tobias, from the JIT compiler team, there’s no need
>> to pre-load argument types and return value types for all referenced methods.
>> It is sufficient to pre-load those types for the methods the class declares.
>> The current implementation is an approximation, as it preloads types for all
>> methods of the current class, but it achieves the same semantic.
>>
>> New webrev:
>> http://cr.openjdk.java.net/~fparain/VTAttribute/webrev.02/index.html
>>
>> Thank you,
>>
>> Fred
>>
>>
>>> On May 18, 2018, at 15:43, Karen Kinnear <KAREN.KINNEAR at ORACLE.COM> wrote:
>>>
>>>
>>> Frederic,
>>>
>>> Thank you for the improvements.
>>> I agree with not need at this point to do pre-loading for arrays since the element type
>>> is already loaded before array creation.
>>> I had wondered about pre-loading fields mentioned in field descriptors and agree there
>>> is no need.
>>>
>>> instanceKlass.cpp line 618 - partial sentence
>>>
>>> classFileParser.cpp lines 4078/4092 - did I read these backwards?
>>> Isn’t it a ClassFormatError if ACC_FLATTENABLE and NOT is_declared_value_type?
>>>
>>> Rest looks good.
>>>
>>> thanks,
>>> Karen
>>>
>>>> On May 18, 2018, at 1:50 PM, Frederic Parain <frederic.parain at oracle.com> wrote:
>>>>
>>>> Karen,
>>>>
>>>> Your comment made me think that I wanted too much
>>>> to rush this code out for the JIT team. It needed some
>>>> clean up first and more consistency.
>>>>
>>>> Regarding arrays, so far, we haven’t identify any array optimization that
>>>> would require pre-loading. The element type is loading just before creating
>>>> the array, and it is sufficient to implement our current optimization (array flattening)
>>>>
>>>> Here’s a new webrev:
>>>> http://cr.openjdk.java.net/~fparain/VTAttribute/webrev.01/index.html
>>>>
>>>> Changes:
>>>> - pre-loading code for flattenable fields in the link phase has been removed:
>>>> this pre-loading is already performed at load time when fields layout is computed.
>>>> - error detection and handling has been improved and made consistent between
>>>> pre-loading for flattenable fields and pre-loading for method arguments
>>>> - comments have been update
>>>>
>>>> To summarize:
>>>> - at load time: pre-loading of flattenable fields types
>>>> - at link time: pre-loading of method arguments and return types
>>>> - at execution time: regular loading of element types for array
>>>>
>>>> Error Handling:
>>>> - If a field has the ACC_FLATTENABLE flag set but its type is not listed in
>>>> the ValueTypes attribute, an ClassFormatError is thrown
>>>> - If a class is pre-loaded but it is not a value class, an ICCE is thrown
>>>>
>>>> Thanks,
>>>>
>>>> Fred
>>>>
>>>>
>>>>> On May 18, 2018, at 10:16, Karen Kinnear <KAREN.KINNEAR at ORACLE.COM> wrote:
>>>>>
>>>>> Frederic,
>>>>>
>>>>> Code looks really good. Many thanks for doing this so quickly and carefully.
>>>>> Thank you for the symbol refcount handling.
>>>>>
>>>>> Summary:
>>>>> declared fields (static and instance): preload, i.e. classfileparser loads before completing container loading
>>>>> linkage to fields and methods, we load at link time prior to creation of vtables/itables
>>>>>
>>>>> - this all sounds correct to me.
>>>>>
>>>>> instanceKlass.cpp: 621
>>>>> - comment is that arrays of value types are not handled
>>>>> - do we actually need to preload arrays of value types at link time for any optimizations?
>>>>>
>>>>> Empty.java: line 40: Excepted -> Expected
>>>>>
>>>>> thanks,
>>>>> Karen
>>>>>
>>>>>> On May 17, 2018, at 4:04 PM, Frederic Parain <frederic.parain at oracle.com> wrote:
>>>>>>
>>>>>> Please review this first patch related to the ValueTypes attribute:
>>>>>>
>>>>>> http://cr.openjdk.java.net/~fparain/VTAttribute/webrev.00/
>>>>>>
>>>>>> The patch includes:
>>>>>> - the parsing of the ValueTypes attribute
>>>>>> - the creation of meta-data from this attribute
>>>>>> - a consistency check between the ACC_FLATTENABLE flag
>>>>>> and the ValueTypes attribute
>>>>>> - the pre-loading of method arguments types and return values types
>>>>>>
>>>>>> Fred
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the valhalla-dev
mailing list