RFR: 8329797: Shenandoah: Default case invoked for: "MaxL" (bad AD file) [v2]

Joshua Cao duke at openjdk.org
Fri Apr 19 16:38:13 UTC 2024


> The bug occurs when [Shenandoah optimizations resets post_loop_opts](https://github.com/openjdk/jdk/blob/040c93565c0dff6270911eb9e58d78aa01bbb925/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp#L52), and we may [create a MaxL after macro expansion](https://github.com/openjdk/jdk/blob/040c93565c0dff6270911eb9e58d78aa01bbb925/src/hotspot/share/opto/movenode.cpp#L198). `MaxL` does not have a matcher rule, and we run into an assertion failure.
> 
> This PR guards the `MaxL` creation with a new `began_macro_expansion()` flag. I think there are many other instances in code that should use the new flag instead of `post_loop_opts()`, which can be explored in [JDK-8330531](https://bugs.openjdk.org/browse/JDK-8330531).
> 
> The bug was originally found in [h2 Index::getCostRangeIndex()](https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/index/Index.java#L579) through Dacapo. Its easy to reproduce by creating a loop that includes a `ShenandoahLoadReferenceBarrier` (load any object) and a `MaxL`.
> 
> Caveat: I created test cases for both `MaxL` and `MinL` for completeness. The `MinL` test case does not actually fail before this PR. Somehow the `CMove` condition is converted to non-canonical `>`, which is [not accepted by the Idealization](https://github.com/openjdk/jdk/blob/040c93565c0dff6270911eb9e58d78aa01bbb925/src/hotspot/share/opto/movenode.cpp#L219). The `MinL` is never created and there is no crash.
> 
> Passing hotspot tier1 locally on Linux machine.

Joshua Cao has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:

 - Rename began_macro_expansion to allow_macro_nodes. Remove shenandoah
   flag from test.
 - Merge branch 'master' into shen
 - 8329797: Shenandoah: Default case invoked for: "MaxL" (bad AD file)

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/18824/files
  - new: https://git.openjdk.org/jdk/pull/18824/files/ebfaf34c..4cacffe9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=18824&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=18824&range=00-01

  Stats: 37860 lines in 257 files changed: 15275 ins; 21623 del; 962 mod
  Patch: https://git.openjdk.org/jdk/pull/18824.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18824/head:pull/18824

PR: https://git.openjdk.org/jdk/pull/18824


More information about the hotspot-compiler-dev mailing list