RFR: 8305895: Implement JEP 450: Compact Object Headers (Experimental) [v13]

Roberto Castañeda Lozano rcastanedalo at openjdk.org
Fri Sep 13 07:49:15 UTC 2024


On Thu, 12 Sep 2024 15:38:18 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:

>> src/hotspot/share/opto/lcm.cpp line 272:
>> 
>>> 270:         const TypePtr* tptr;
>>> 271:         if ((UseCompressedOops || UseCompressedClassPointers) &&
>>> 272:             (CompressedOops::shift() == 0 || CompressedKlassPointers::shift() == 0)) {
>> 
>> Could you explain this change? It seems like it may affect C2's implicit null check analysis even for `-XX:-UseCompactObjectHeaders`. In particular, for the following configurations, the changed condition evaluates to true before the change and false after it, regardless of whether `UseCompactObjectHeaders` is enabled:
>> 
>> (!UseCompressedOops,  UseCompressedClassPointers, CompressedKlassPointers::shift() != 0)
>> ( UseCompressedOops, !UseCompressedClassPointers, CompressedOops::shift() != 0)
>
> Hi @robcasloz 
> 
> The `CompressedKlassPointers` utility class is not usable anymore with `-UseCompressedClassPointers`. One change is that if `UseCompressedClassPointers` is off, `CompressedKlassPointers` stays uninitialized. And that makes more sense then to rely on the static initialization values of `CompressedOops::_shift`.

Thanks for the explanation. I wonder if the test is necessary at all, or one could simply use `base->get_ptr_type()` unconditionally, which defaults to `base->bottom_type()->isa_ptr()` anyway for non-compressed pointers. But this simplification would be in any case out of the scope of this changeset.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20677#discussion_r1758356268


More information about the serviceability-dev mailing list