On Mon, 20 Oct 2025 09:00:02 GMT, Quan Anh Mai <[email protected]> wrote:
>> Hi, >> >> Flat accesses prevent scalar replacement because they are mismatched >> accesses. It is also generally not possible to look through them, because >> the payload may contain an oop in the form of raw bits. As a result, this PR >> adds `LoadFlatNode` and `StoreFlatNode`, which act as high-level >> abstractions for atomic accesses on flat fields. When it is determined that >> there is no racing access on the flat field (e.g. because the holder object >> does not escape), these flat access nodes can be expanded into multiple >> accesses to each flattened fields, otherwise, they will be expanded into a >> sequence of inferring a payload and accessing memory with that payload. >> >> I also fix an issue with deoptimization reallocation where we miss assigning >> the null marker of elements in a nullable flat array. >> >> Please take a look and leave your reviews, thanks a lot. > > Quan Anh Mai has updated the pull request incrementally with one additional > commit since the last revision: > > Remove flat accesses from sfn_worklist Great work, Quan-Anh! This looks good to me. Testing is still running but looks good so far (we had some breakage in our CI). I'll get back to you once it passed. src/hotspot/share/opto/escape.cpp line 3392: > 3390: } > 3391: > 3392: // Atomic flat accesses on non-escape objects can be optimized to > non-atomic accesses Suggestion: // Atomic flat accesses on non-escaping objects can be optimized to non-atomic accesses src/hotspot/share/opto/inlinetypenode.hpp line 176: > 174: // marker if existing will be the last Proj output. This node acts as if > the load happens > 175: // atomically and will be expanded to loading the whole payload and > extracting the flattened fields > 176: // from the loaded payload. In special cases, such as when the object > from which this load read Suggestion: // from the loaded payload. In special cases, such as when the object from which this load reads src/hotspot/share/opto/inlinetypenode.hpp line 179: > 177: // does not escape, this node can be expanded to multiple loads from > each flattened field. > 178: // This node allows us to replace its results with the value from a > matching store because the > 179: // payload value cannot be directly propagated if it contains oops. This > effect, in turns, allows Suggestion: // payload value cannot be directly propagated if it contains oops. This effect, in turn, allows src/hotspot/share/opto/inlinetypenode.hpp line 216: > 214: > 215: // Store an InlineTypeNode to a flat element, the store acts as if it is > atomic. Similar to > 216: // LoadFlatNode, this node is expanded to storing a payload creating > from the field values of the Suggestion: // LoadFlatNode, this node is expanded to storing a payload created from the field values of the ------------- Marked as reviewed by thartmann (Committer). PR Review: https://git.openjdk.org/valhalla/pull/1518#pullrequestreview-3360961039 PR Review Comment: https://git.openjdk.org/valhalla/pull/1518#discussion_r2448463925 PR Review Comment: https://git.openjdk.org/valhalla/pull/1518#discussion_r2448453931 PR Review Comment: https://git.openjdk.org/valhalla/pull/1518#discussion_r2448455420 PR Review Comment: https://git.openjdk.org/valhalla/pull/1518#discussion_r2448457425
