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