On Fri, 3 Oct 2025 14:12:34 GMT, Tobias Hartmann <[email protected]> wrote:
> The new memory model rules for strict instance fields (see > [JDK-8366372](https://bugs.openjdk.org/browse/JDK-8366372)) require a memory > barrier at the beginning of `java.lang.Object::<init>`. The JITs will try to > omit it if the receiver type is statically known (potentially via CHA + a > dependency) and the class does not contain any strict fields. > > Potentially, there's some more tricks that we can play. Most importantly, I > think we can omit barriers for final fields at the end of the constructors if > the field is also strict. I filed > [JDK-8369166](https://bugs.openjdk.org/browse/JDK-8369166) for this. > > I added a test that already caught > [JDK-8369044](https://bugs.openjdk.org/browse/JDK-8369044) and will fail > immediately without the JIT changes (on AArch64). > > Thanks, > Tobias src/hotspot/share/c1/c1_GraphBuilder.cpp line 4304: > 4302: // Check if we need a membar at the beginning of the java.lang.Object > 4303: // constructor to satisfy the memory model for strict fields. > 4304: if (EnableValhalla && method()->intrinsic_id() == > vmIntrinsics::_Object_init) { Suggestion: if (EnableValhalla && callee->intrinsic_id() == vmIntrinsics::_Object_init) { Fits better in the context of this function. src/hotspot/share/c1/c1_LIRGenerator.cpp line 3019: > 3017: // Check if we need a membar at the beginning of the java.lang.Object > 3018: // constructor to satisfy the memory model for strict fields. > 3019: if (EnableValhalla && method()->intrinsic_id() == > vmIntrinsics::_Object_init) { Should we perform checks to try skip this fence here? ------------- PR Review Comment: https://git.openjdk.org/valhalla/pull/1656#discussion_r2403746159 PR Review Comment: https://git.openjdk.org/valhalla/pull/1656#discussion_r2403748696
