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