On Wed, 25 Feb 2026 12:46:15 GMT, Christian Hagedorn <[email protected]> wrote:
>> `compute_flat_in_array_if_unknown()` computes the flat in array property if >> we don't know it. We additionally added some assertions that when we have >> `FlatInArray::NotFlat` or `FlatInArray::Flat`, we are either dealing with a >> non-value class or a value class, respectively. This worked in most cases. >> >> We now found cases with type speculation where this breaks: We could >> speculatively assume that something is `FlatInArray::NotFlat/Flat`, >> propagate that further and then later find that this contradicts the flat in >> array property of some non-speculative type. >> >> I've first tried to avoid introducing these inconsistencies when starting to >> use a speculative type. This sometimes work but not always: We could find an >> inconsistency way further down in the graph later which is then hard to fix. >> >> I therefore propose to accept the fact that the flat in array property can >> be inconsistent (i.e. being not flat in array, when actually dealing with an >> always flat in array value class etc.): >> - We set not flat in array even though the type could theoretically be flat >> in array. >> - We set flat in array even though the type could theoretically be non flat >> in array. >> >> We only use the flat in array property for `SubTypeCheck` and `CmpP` nodes >> in `Value()`. When facing such an inconsistency, we could end up "wrongly" >> folding a compare node. But in that case, we would trap earlier because the >> speculated type turns out to be wrong (see `testSuperNotFlatSubFlat()` as an >> example). >> >> To make this work properly, we also need to adjust `SubTypeCheck::sub()` to >> not only check the case when the super class is flat in array and the sub >> class is not but also the other way round (this missing piece was now also >> found as a missed optimization opportunity in the CI independently of these >> changes). >> >> Thanks, >> Christian > > Christian Hagedorn has updated the pull request with a new target base due to > a merge or a rebase. The pull request now contains three commits: > > - Fix problemlist > - Merge branch 'lworld' into JDK-8373878 > > # Conflicts: > # test/jdk/ProblemList-enable-preview.txt > - 8373878: [lworld] C2: Assertions about flat in array properties are too > strong in TypePtr::compute_flat_in_array_if_unknown() Thanks for your review Tobias! ------------- PR Comment: https://git.openjdk.org/valhalla/pull/2162#issuecomment-3960010735
