RFR(S) 8231586: enlarge encoding space for OopMapValue offsets
Tom Rodriguez
tom.rodriguez at oracle.com
Sat Oct 5 17:41:21 UTC 2019
dean.long at oracle.com wrote on 10/4/19 4:27 PM:
> It's not obvious that we only set 1 bit. The set methods don't enforce
> that. And this code looks like it is setting both "derived" and "oop":
Each of those calls produce independent OopMapValues.
http://hg.openjdk.java.net/jdk/jdk/file/ff45c1bf8129/src/hotspot/share/compiler/oopMap.cpp#l137
Also all tests against the type are equality tests, not bitmasks, so
if more than one bit was set it would fail to match anything. The
bitmask-ness of the values is only used for filtering the iteration.
tom
>
> http://hg.openjdk.java.net/jdk/jdk/file/ff45c1bf8129/src/hotspot/share/opto/buildOopMap.cpp#l315
>
>
> dl
>
> On 10/4/19 10:26 AM, Tom Rodriguez wrote:
>> http://cr.openjdk.java.net/~never/8231586/webrev
>> https://bugs.openjdk.java.net/browse/JDK-8231586
>>
>> The current OopMapValue encoding uses a bit mask for each value even
>> though only one bit is ever set. Since only 16 bits are available for
>> encoding this limits the offsets it can express. Compilation with a
>> large number of stack slots can bailout because of this limit. This
>> changes the encoding to use 2 bits which gives 2 bits back to the offset.
>>
>> I also deleted some StressDerivedPointers machinery that's been
>> completely unimplemented for years (decades?). The flag itself is now
>> dead but I wasn't sure if there are test references to it somewhere.
>> Should I delete the flag as well?
>>
>> mach5 testing is in progress.
>>
>> tom
>
More information about the hotspot-compiler-dev
mailing list