RFR: 8263227: C2: inconsistent spilling due to dead nodes in exception block [v2]

Roberto Castañeda Lozano rcastanedalo at openjdk.java.net
Mon Apr 12 08:37:18 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)

Roberto Castañeda Lozano has updated the pull request incrementally with four additional commits since the last revision:

 - Complete projection assertions with basic checks
 - Enforce code style in surrounding 'for' statements
 - Simplify loop that removes dead projections, rename and comment for clarity
 - Assert that projections are stuck to their parents


  - all: https://git.openjdk.java.net/jdk/pull/3303/files
  - new: https://git.openjdk.java.net/jdk/pull/3303/files/a4973ba0..808451de

 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3303&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3303&range=00-01

  Stats: 26 lines in 2 files changed: 13 ins; 1 del; 12 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