RFR: 8325821: [REDO] use "dmb.ishst+dmb.ishld" for release barrier [v6]

kuaiwei duke at openjdk.org
Fri Apr 12 05:45:12 UTC 2024


> The origin patch for https://bugs.openjdk.org/browse/JDK-8324186 has 2 issues:
> 1 It show regression in some platform, like Apple silicon in mac os
> 2 Can not handle instruction sequence like "dmb.ishld; dmb.ishst; dmb.ishld; dmb.ishld"
> 
> It can be fixed by:
> 1 Enable AlwaysMergeDMB by default, only disable it in architecture we can see performance improvement (N1 or N2)
> 2 Check the special pattern and merge the subsequent dmb.
> 
> It also fix a bug when code buffer is expanding, st/ld/dmb can not be merged. I added unit tests for these.
> 
> This patch still has a unhandled case. Insts like "dmb.ishld; dmb.ishst; dmb.ish", it will merge the last 2 instructions and can not merge all three. Because when emitting dmb.ish, if merge all previous dmbs, the code buffer will shrink the size. I think it may break some resumption and think it's not a common pattern.
> 
> - Update:
> After discussion, I made a new implementation based on finite state machine for merging instruction. The mergeable instruction will be pending in fsm until next unmergeable instruction.

kuaiwei has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains six commits:

 - Cleanup unused _last_label_code
 - Simplify code
 - Fix cross build error
 - Move fsm to CodeBuffer
 - Add fsm for merging
 - 8328876: Rework [AArch64] Use "dmb.ishst + dmb.ishld" for release barrier

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

Changes: https://git.openjdk.org/jdk/pull/18467/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18467&range=05
  Stats: 625 lines in 21 files changed: 590 ins; 6 del; 29 mod
  Patch: https://git.openjdk.org/jdk/pull/18467.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18467/head:pull/18467

PR: https://git.openjdk.org/jdk/pull/18467


More information about the hotspot-dev mailing list