RFR: 8331341: secondary_super_cache does not scale well: C1 and interpreter [v5]

Vladimir Ivanov vlivanov at openjdk.org
Tue Jul 23 19:03:33 UTC 2024


On Mon, 22 Jul 2024 14:56:31 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> src/hotspot/share/oops/klass.inline.hpp line 117:
>> 
>>> 115: }
>>> 116: 
>>> 117: inline bool Klass::search_secondary_supers(Klass *k) const {
>> 
>> I see you moved `Klass::search_secondary_supers` in `klass.inline.hpp`, but I'm not sure how it interacts with `Klass::is_subtype_of` (the sole caller) being declared in `klass.hpp`. 
>> 
>> Will the inlining still happen if `Klass::is_subtype_of()` callers include `klass.hpp`?
>
> Presumably this question applies to every function in `klass.inline.hpp`?
> Practically everything does `#include "oops/klass.inline.hpp"`. It's inlined in about 120 files, as far as I can see everywhere such queries are made.

My confusion arises from the following:
* `Klass::is_subtype_of()` is declared in `klass.hpp`
* `Klass::is_subtype_of()` calls `Klass::search_secondary_supers()`
* `Klass::search_secondary_supers()` is declared in `klass.inline.hpp`
* `klass.inline.hpp` includes `klass.hpp`

What happens when users include `klass.hpp`, but not `klass.inline.hpp`? How does it affect generated code? 

I suspect that `Klass::search_secondary_supers()` won't be inlinined in such case.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19989#discussion_r1688559463


More information about the core-libs-dev mailing list