[15] RFR(S): 8244724: CTW: C2 compilation fails with "Live Node limit exceeded limit"
Christian Hagedorn
christian.hagedorn at oracle.com
Fri Jun 26 14:38:23 UTC 2020
Hi
Please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8244724
http://cr.openjdk.java.net/~chagedorn/8244724/webrev.01/
The testcase contains many string concatinations. These are compiled by
javac with -XDstringConcat=inline which creates a lot of StringBuilder
objects and calls. As a result, we get a huge graph and eventually hit
the live node limit assert during code generation when trying to create
new nodes - either during PhaseCFG::build_cfg() or later in
PhaseCFG::global_code_motion().
We could try to introduce estimates for them to bailout but that appears
to be difficult to get right without being too pessimistic about it. But
we need to be in order to avoid hitting the assert again by just
modifying the testcase.
Therefore, my suggestion is to completely skip the assert once the
optimization phase is finished as we should not strictly care about the
node limit anymore at this point in time and it does not really provide
much help for finding bugs.
A question remains, though, if we should also get rid of the remaining
live node limit bailout checks in Compile::Code_Gen() like [1] as it
appears to be a waste to go through all the optimization in the
optimization phase to then bailout while generating code based only on
the live node limit itself. What do you think about that?
I also updated "<" into "<=" in the live node limit assert because we
should be allowed to reach the limit but not go beyond.
Thank you!
Best regards,
Christian
[1]
http://hg.openjdk.java.net/jdk/jdk/file/8fd3e34e8379/src/hotspot/share/opto/coalesce.cpp#l236
More information about the hotspot-compiler-dev
mailing list