RFR: 8308103: Massive (up to ~30x) increase in C2 compilation time since JDK 17
Roland Westrelin
roland at openjdk.org
Fri Jun 30 13:32:13 UTC 2023
A long chain of nodes are sunk out of a loop. Every time a node is
moved out of the loop, a cast is created to pin the node out of the
loop. When its input is next sunk, the cast is removed (the cast is
replaced by its input) and a new cast is created. Some nodes on the
chain have 2 other nodes in the chain as uses. When such a node is
sunk, 2 cast nodes are created, one for each use. So as the compiler
moves forward in the chain, the number of cast to remove grows. From
some profiling, removing those casts is what takes a lot of time.
The fix I propose is, when a node is processed, to check whether a
cast at the out of loop control was already created for that node and
to reuse it.
The test case takes 6 minutes when I run it without the fix and 3
seconds with it.
-------------
Commit messages:
- fix & test
Changes: https://git.openjdk.org/jdk/pull/14732/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14732&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8308103
Stats: 69 lines in 2 files changed: 68 ins; 0 del; 1 mod
Patch: https://git.openjdk.org/jdk/pull/14732.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14732/head:pull/14732
PR: https://git.openjdk.org/jdk/pull/14732
More information about the hotspot-compiler-dev
mailing list