RFR: 8263227: C2: inconsistent spilling due to dead nodes in exception block
Roberto Castañeda Lozano
rcastanedalo at openjdk.java.net
Tue Apr 6 07:57:42 UTC 2021
This change eliminates dead multi-nodes created by call-catch cleanup after GCM. Eliminating all dead code created by call-catch cleanup avoids potential issues when splitting the live range of call result values, see the analysis in the [bug report](https://bugs.openjdk.java.net/browse/JDK-8263227) for details. This solution is the least invasive of the three alternatives proposed in the bug report (the other two are constraining global code motion and extending live-range splitting).
The change also extends the control-flow graph verification pass to catch similar live-range splitting issues earlier (with `+VerifyRegisterAllocator`).
Tested on:
- original bug reproducer
- hs-tier1-5 (windows-x64, linux-x64, linux-aarch64, and macosx-x64) with `+VerifyRegisterAllocator`
- hs-tier1-3 (windows-x64, linux-x64, linux-aarch64, and macosx-x64) with `+VerifyRegisterAllocator` and `+StressGCM` (5 repetitions)
-------------
Commit messages:
- Update comments in test case
- Exclude MachMerge nodes from dominance assertion
- Remove cloned multi-nodes in call-catch cleanup
- Document assumptions in live-range splitting
- Add basic definition dominance assertion
- Add test case
Changes: https://git.openjdk.java.net/jdk/pull/3303/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3303&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8263227
Stats: 102 lines in 4 files changed: 95 ins; 0 del; 7 mod
Patch: https://git.openjdk.java.net/jdk/pull/3303.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3303/head:pull/3303
PR: https://git.openjdk.java.net/jdk/pull/3303
More information about the hotspot-compiler-dev
mailing list