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

kuaiwei duke at openjdk.org
Mon Apr 22 08:43:52 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 incrementally with one additional commit since the last revision:

  Rollback change in Assembler::offset() and resolve conflict

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/18467/files
  - new: https://git.openjdk.org/jdk/pull/18467/files/4bd183fb..1e9fb025

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=18467&range=07
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=18467&range=06-07

  Stats: 4 lines in 2 files changed: 0 ins; 0 del; 4 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