RFR: JDK-8287061: Support for rematerializing scalar replaced objects participating in allocation merges
Cesar Soares Lucas
cslucas at openjdk.org
Tue Mar 7 01:51:13 UTC 2023
Can I please get reviews for this PR to add support for the rematerialization of scalar-replaced objects that participate in allocation merges?
The most common and frequent use of NonEscaping Phis merging object allocations is for debugging information. The two graphs below show numbers for Renaissance and DaCapo benchmarks - similar results are obtained for all other applications that I tested.
With what frequency does each IR node type occurs as an allocation merge user? I.e., if the same node type uses a Phi N times the counter is incremented by N:

What are the most common users of allocation merges? I.e., if the same node type uses a Phi N times the counter is incremented by 1:

This PR adds support scalar replacing allocations participating in merges that are used *only* as debug information in SafePointNode and its subclasses. Although there is a performance benefit in doing scalar replacement in this scenario only, the goal of this PR is mainly to add infrastructure to support the rematerialization of SR objects participating in merges. I plan to create subsequent PRs to enable scalar replacement of merges used by other node types (CmpP, Load+AddP, primarily) subsequently.
The approach I used is pretty straightforward. It consists basically in: 1) Extend SafePointScalarObjectNode to represent multiple SR objects; 2) Add a new Class to support rematerialization of SR objects part of merges; 3) Patch HotSpot to be able to serialize and deserialize debug information related to allocation merges; 4) Patch C2 to generate unique types for SR objects participating in allocation merges used only as debug information.
I tested this with JTREG tests tier 1-4 (Windows, Linux, and Mac) and didn't see regression that might be related. I also tested with several applications and didn't see any failure.
-------------
Commit messages:
- Add support for rematerializing scalar replaced objects participating in allocation merges
Changes: https://git.openjdk.org/jdk/pull/12897/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12897&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8287061
Stats: 1803 lines in 18 files changed: 1653 ins; 9 del; 141 mod
Patch: https://git.openjdk.org/jdk/pull/12897.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/12897/head:pull/12897
PR: https://git.openjdk.org/jdk/pull/12897
More information about the security-dev
mailing list