On Tue, 2 Dec 2025 02:29:28 GMT, Vladimir Ivanov <[email protected]> wrote:
>> So an `AccessDescriptor` is created for each sigpoly VH site in the source >> code. Usually it is `VH.operation()`, but it is legal to use a non-constant >> VarHandle variable and call an operation on that. If `constant == >> MethodHandleImpl.CONSTANT_NO`, we are sure that we have the non-constant >> case, so we cannot trust that cached method handle, and there is no point >> further caching. We can only read that previous MH conversion cache if >> `constant == MethodHandleImpl.CONSTANT_YES` because this means our cache is >> always correct. > > So, it seems like what you are trying to achieve is a 1-1 mapping from > `AccessDescriptor` to `vh` through `adaptedMh`. So, once `cache != null` you > can trust that it corresponds to the `vh` instance passed as a constant. But > cache pollution can easily break the invariant, so you try to eliminate the > pollution by avoiding cache updates when vh is not constant. Do I get it > right? No. The avoidance of cache update simply trims down the generated code by throwing away the meaningless cache update. The access to cache is already safeguarded by `constant == MethodHandleImpl.CONSTANT_YES`. I should have moved `var cache = adaptedMh;` into the if block of `constant == CONSTANT_YES`. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2579405388
