RFR: JDK-8316991: Reduce nullable allocation merges [v8]
Cesar Soares Lucas
cslucas at openjdk.org
Tue Mar 19 23:18:55 UTC 2024
> ### Description
>
> Many, if not most, allocation merges (Phis) are nullable because they join object allocations with "NULL", or objects returned from method calls, etc. Please review this Pull Request that improves Reduce Allocation Merge implementation so that it can reduce at least some of these allocation merges.
>
> Overall, the improvements are related to 1) making rematerialization of merges able to represent "NULL" objects, and 2) being able to reduce merges used by CmpP/N and CastPP.
>
> The approach to reducing CmpP/N and CastPP is pretty similar to that used in the `MemNode::split_through_phi` method: a clone of the node being split is added on each input of the Phi. I make use of `optimize_ptr_compare` and some type information to remove redundant CmpP and CastPP nodes. I added a bunch of ASCII diagrams illustrating what some of the more important methods are doing.
>
> ### Benchmarking
>
> **Note:** In some of these tests no reduction happens. I left them in to validate that no perf. regression happens in that case.
> **Note 2:** Marging of error was negligible.
>
> | Benchmark | No RAM (ms/op) | Yes RAM (ms/op) |
> |--------------------------------------|------------------|-------------------|
> | TestTrapAfterMerge | 19.515 | 13.386 |
> | TestArgEscape | 33.165 | 33.254 |
> | TestCallTwoSide | 70.547 | 69.427 |
> | TestCmpAfterMerge | 16.400 | 2.984 |
> | TestCmpMergeWithNull_Second | 27.204 | 27.293 |
> | TestCmpMergeWithNull | 8.248 | 4.920 |
> | TestCondAfterMergeWithAllocate | 12.890 | 5.252 |
> | TestCondAfterMergeWithNull | 6.265 | 5.078 |
> | TestCondLoadAfterMerge | 12.713 | 5.163 |
> | TestConsecutiveSimpleMerge | 30.863 | 4.068 |
> | TestDoubleIfElseMerge | 16.069 | 2.444 |
> | TestEscapeInCallAfterMerge | 23.111 | 22.924 |
> | TestGlobalEscape | 14.459 | 14.425 |
> | TestIfElseInLoop | 246.061 | 42.786 |
> | TestLoadAfterLoopAlias | 45.808 | 45.812 |
> | TestLoadAfterTrap | 28.370 | ...
Cesar Soares Lucas has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 12 commits:
- Catching up with master
- Fix broken build.
- Merge with origin/master
- Update test/micro/org/openjdk/bench/vm/compiler/AllocationMerges.java
Co-authored-by: Andrey Turbanov <turbanoff at gmail.com>
- Ammend previous fix & add repro tests.
- Fix to prevent reducing already reduced Phi
- Fix to prevent creating NULL ConNKlass constants.
- Refrain from RAM of arrays and Phis controlled by Loop nodes.
- Fix typo in test.
- Fix build after merge.
- ... and 2 more: https://git.openjdk.org/jdk/compare/7231fd78...620f9da8
-------------
Changes: https://git.openjdk.org/jdk/pull/15825/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15825&range=07
Stats: 2407 lines in 13 files changed: 2152 ins; 92 del; 163 mod
Patch: https://git.openjdk.org/jdk/pull/15825.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15825/head:pull/15825
PR: https://git.openjdk.org/jdk/pull/15825
More information about the hotspot-dev
mailing list