RFR: 8365147: AArch64: Replace DMB + LD + DMB with LDAR for C1 volatile field loads [v2]
Samuel Chee
duke at openjdk.org
Tue Aug 19 13:42:19 UTC 2025
> Replaces the DMB ISH + LD + DMB ISHLD sequence with LDAR for volatile field loads - for example, AtomicLong::get.
>
> This is valid, as originally the DMBs were necessary due to the case described here - https://bugs.openjdk.org/browse/JDK-8179954. As in the rare case where the LD can be reordered with an LDAR or STLR from the C2 implementation for stores and loads, these DMBs are required.
> However, acquire/release operations use a sequentially consistent model which does not allow reordering between them. Hence, the LD can be replaced with an LDAR to disallow reordering with a STLR/LDAR and the first DMB can be removed.
>
> The LDAR has acquire semantics, so it's impossible for memory accesses after to be reordered before; the DMB ISHLD is not required. Therefore, a singular LDAR is sufficient.
>
> This excludes floats and doubles, as they do not have equivalent load-acquire instructions.
Samuel Chee has updated the pull request incrementally with two additional commits since the last revision:
- Address review comments
Change-Id: Ica13be8094ac0f057066042ef0a5ec5927b98dfd
- Refine code generation for mem2reg_volatile
The patch is contributed by @theRealAph.
Change-Id: I7ab1854dd238cdce72a4ab218b5b4ee84ad39586
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26748/files
- new: https://git.openjdk.org/jdk/pull/26748/files/287c566b..8fa2c1c1
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26748&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26748&range=00-01
Stats: 58 lines in 4 files changed: 15 ins; 31 del; 12 mod
Patch: https://git.openjdk.org/jdk/pull/26748.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26748/head:pull/26748
PR: https://git.openjdk.org/jdk/pull/26748
More information about the hotspot-dev
mailing list