RFR: 8357105: C2: compilation fails with "assert(false) failed: empty program detected during loop optimization"

Daniel Skantz dskantz at openjdk.org
Thu May 22 15:24:31 UTC 2025


This pull request contains a fix for JDK-8357105.

The problem is performing stacked string concatenation optimization between a pair of StringBuilder.append().toString()-links SB1 and SB2, where the parameter of an append call in SB2 has a complex dependency on the result of SB1, which in turn is replaced by top() during stringopts -- similar to JDK-8271341, which had a diamond if-structure using the result of SB1, while in this case the use is an unstable If. In the attached regression test, a live part of the graph gets optimized away during later phases and ultimately the whole graph vanishes.

The proposed solution is to simply exclude this specific case. This bug has existed for a long time and stacked concats is a niche optimization.

Testing:
Tier1-4.

Extra testing:
Ran Tier1-4 with an instrumented build and observed that we do not disable stacked concatenation in any previously known case after the fix.

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

Commit messages:
 - fix

Changes: https://git.openjdk.org/jdk/pull/25395/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25395&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8357105
  Stats: 58 lines in 2 files changed: 56 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/25395.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25395/head:pull/25395

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


More information about the hotspot-compiler-dev mailing list