RFR: 8350563: C2 compilation fails because PhaseCCP does not reach a fixpoint [v8]

Liam Miller-Cushon cushon at openjdk.org
Sat Apr 5 18:51:35 UTC 2025


> Hello, please consider this fix for [JDK-8350563](https://bugs.openjdk.org/browse/JDK-8350563) contributed by my colleague Matthias Ernst.
> 
> https://github.com/openjdk/jdk/pull/22856 introduced a new `Value()` optimization for the pattern `AndIL(Con, Mask)`.
> This optimization can look through CastNodes, and therefore requires additional logic in CCP to push these
> transitive uses to the worklist.
> 
> The optimization is closely related to analogous optimizations for SHIFT nodes, and we also extend the existing logic for
> CCP worklist handling: the current logic is "if the shift input to a SHIFT node changes, push indirect AND node uses to the CCP worklist".
> We extend it by adding "if the (new) type of a node is an IntegerType that `is_con, ...` to the predicate.

Liam Miller-Cushon 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 15 additional commits since the last revision:

 - Add -XX:+UnlockDiagnosticVMOptions
 - Check type before uncasting
   
   A child phi node may transition from con to non-con, making the AND node transition back from "0" to its current type. If that current type is still TOP we're in violation of monotonicity. Therefore, don't apply optimization if AND is not integer yet.
 - Merge commit '9bb804b14e1' into JDK-8350563
 - Explicitly check for OP_Con instead of TypeInteger::is_con.
   
    322  Phi  === 303 119 255  [[ 399 388 351 751 366 377 ]]  #int:-256..127 !jvms: Integer::parseInt @ bci:151 (line 625)
   
    While this Phi dumps as "#int:-256..127", `phase->type(expr)` returns a type that is_con -256.
 - Update test/hotspot/jtreg/compiler/ccp/TestAndConZeroCCP.java
   
   Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
 - Merge remote-tracking branch 'origin/master' into JDK-8350563
 - Reformat test and update package to ccp
 - Review comments
 - Update test/hotspot/jtreg/compiler/c2/TestAndConZeroCCP.java
   
   Co-authored-by: Emanuel Peter <emanuel.peter at oracle.com>
 - copyright
 - ... and 5 more: https://git.openjdk.org/jdk/compare/e3f535dd...23119e18

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/23871/files
  - new: https://git.openjdk.org/jdk/pull/23871/files/b064c47b..23119e18

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=23871&range=07
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23871&range=06-07

  Stats: 100210 lines in 2709 files changed: 41543 ins; 47635 del; 11032 mod
  Patch: https://git.openjdk.org/jdk/pull/23871.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23871/head:pull/23871

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


More information about the hotspot-compiler-dev mailing list