RFR: 8295842: Generational ZGC: Elide barriers on variable array accesses after array allocations [v2]

Roberto Castañeda Lozano rcastanedalo at openjdk.org
Wed Nov 16 12:11:31 UTC 2022

> This changeset extends C2's barrier elision so that variable array accesses (array accesses with unknown offset at compile-time) are elided when they are dominated by the array's allocation and no safepoint is present in between, like in this example:
> Element[] a = new Element[10]; // allocation
> a[i] = e; // variable array access: the barrier is elided
> This is achieved by relaxing the dominator-dominated pair test in [zBarrierSetC2.cpp](https://github.com/openjdk/zgc/blob/a460756f08df30af232fc631e94cf37c10c38352/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp#L714) so that unknown memory access offsets are accepted for array allocation dominators.
> This refinement does not yield significant overall throughput changes in standard benchmark suites (DaCapo, SPECjvm2008), but has been observed to at least elide a few additional  barriers in individual benchmarks, e.g. DaCapo's H2:
> Value[] keyValues = new Value[groupIndex.length]; // array allocation
> // update group
> for (int i = 0; i < groupIndex.length; i++) {
>     int idx = groupIndex[i];
>     Expression expr = expressions.get(idx);
>     keyValues[i] = expr.getValue(session); // store barrier is elided by this changeset
> }
> #### Testing
> - tier1-5 (windows-x64, linux-x64, linux-aarch64, macosx-x64, and macosx-aarch64; release and debug mode)

Roberto Castañeda Lozano has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains four commits:

 - Refine assertions
 - Avoid eliding barriers if offsets are negative or undefined
 - Merge zgc_generational
 - Elide barriers on variable array accesses after array allocations


Changes: https://git.openjdk.org/zgc/pull/8/files
 Webrev: https://webrevs.openjdk.org/?repo=zgc&pr=8&range=01
  Stats: 74 lines in 1 file changed: 71 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/zgc/pull/8.diff
  Fetch: git fetch https://git.openjdk.org/zgc pull/8/head:pull/8

PR: https://git.openjdk.org/zgc/pull/8

More information about the zgc-dev mailing list