RFR: 8331418: ZGC: generalize barrier liveness logic

Roberto Castañeda Lozano rcastanedalo at openjdk.org
Tue Apr 30 18:55:04 UTC 2024


This changeset generalizes the logic to analyze, declare, and communicate which registers are live at a C2 barrier stub so that it can be used by other collectors than ZGC adopting the late barrier expansion model (including G1 in the near future, see [JEP 475](https://openjdk.org/jeps/475)).

The main changes are:

- Make it possible to compute register liveness information before (live-in) or after (live-out) each barrier, and let the collector choose by implementing `BarrierSetC2State::needs_livein_data()`.

- Generalize the interface with which collectors declare which registers must be additionally preserved across barrier runtime calls, adding the methods `BarrierStubC2::preserve(Register r)` and `BarrierStubC2::dont_preserve(Register r)`.

- Simplify the interface with which platform-specific logic computes which registers to preserve across barrier runtime calls, replacing the calls to `BarrierStubC2::result()` and `BarrierStubC2::live()` with a single call to `BarrierStubC2::preserve_set()`.

#### Testing

- tier1-5 (windows-x64, linux-x64, linux-aarch64, macosx-x64, macosx-aarch64; release and debug mode).
- tier1-7 (linux-x64, linux-aarch64; release and debug mode; ZGC tests only) with [an additional patch](https://github.com/openjdk/jdk/commit/4d4e743d8f4cddd5288cee1d69c70fe2b9bea066) that exercises the spilling and restoring logic by forcing ZGC read barriers to always take the slow path and clearing all general-purpose save-on-call registers upon the slow path's runtime call.
- Build with `make hotspot` (linux-riscv64-debug, linux-ppc64le-debug). @RealFYang, @TheRealMDoerr: could you please test and review the riscv and ppc changes? Thanks!

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

Commit messages:
 - Generalize barrier stubs

Changes: https://git.openjdk.org/jdk/pull/19026/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19026&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8331418
  Stats: 118 lines in 9 files changed: 66 ins; 37 del; 15 mod
  Patch: https://git.openjdk.org/jdk/pull/19026.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19026/head:pull/19026

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


More information about the hotspot-compiler-dev mailing list