[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