Initial runtime support for the ValueTypes attribute

Karen Kinnear karen.kinnear at oracle.com
Wed May 23 19:12:14 UTC 2018


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”

classFileParser.cpp lines 4104/4105 
not clear where you are using name and signature in the exception throwing case?

thanks,
Karen

> 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