[lworld] RFR: 8372113: [lworld] Fix various issues with TypeAryPtr and TypeAryKlassPtr [v6]

Quan Anh Mai qamai at openjdk.org
Mon Dec 8 13:50:30 UTC 2025


On Mon, 8 Dec 2025 11:27:09 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:

>> Quan Anh Mai has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Should not clone MergeMem
>
> src/hotspot/share/ci/ciObjArrayKlass.cpp line 201:
> 
>> 199:     ciInstanceKlass* ik = base->as_instance_klass();
>> 200:     // Even though MyValue is final, [LMyValue is only exact if the array
>> 201:     // is null-free due to null-free [LMyValue <: null-able [LMyValue.
> 
> There are some more occurrences of `// Even though MyValue is final, [LMyValue is only exact if the array` in the code, should those be updated as well?

I did not touch those places yet, so I have not updated those comments, I will clean those up in follow-up PRs.

> src/hotspot/share/opto/compile.cpp line 1485:
> 
>> 1483:               cast_to_ptr_type(TypePtr::BotPTR)->
>> 1484:               cast_to_exactness(false)->
>> 1485:               with_offset(offset);
> 
> These changes are difficult to review because it's not immediately clear what changed semantically. For example, where did this line go?

Yeah, it is pretty messy, this particular part canonicalizes the `TypeAryPtr` to `TypePtr::BotPTR`, `klass_is_exact == false`, `speculative == nullptr` if:

- `ptr()` is `NotNull`
- `klass_is_exact == true`, this includes `ptr() == Constant`, which means that it also erases `Constant` to `BotPTR`
- `speculative != nullptr`

As a result, it effectively erases `NotNull` and `Constant` to `BotPTR`, removes `speculative`, and tries casting the array to `klass_is_exact == false`. It is trivial that the refactored version does the first 2 actions, for casting the array to `klass_is_exact == false`, the new version does it for arrays of oops, primitive arrays are always `klass_is_exact`, and flat arrays is also `klass_is_exact`.

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/1755#discussion_r2598709229
PR Review Comment: https://git.openjdk.org/valhalla/pull/1755#discussion_r2598702135


More information about the valhalla-dev mailing list